Updated Prefabs

This commit is contained in:
OusmBlueNinja 2025-05-09 21:57:03 -05:00
parent 89f9b43b1b
commit 41c6b70af1
5 changed files with 1309 additions and 1289 deletions

View File

@ -10,24 +10,24 @@ Collapsed=1
[Window][WindowOverViewport_11111111]
Pos=0,19
Size=1280,701
Size=1920,1158
Collapsed=0
[Window][Inspector]
Pos=913,19
Size=367,163
Pos=1553,19
Size=367,537
Collapsed=0
DockId=0x0000001B,0
[Window][Scene Tree]
Pos=0,19
Size=341,350
Size=341,579
Collapsed=0
DockId=0x0000000F,0
[Window][Viewport]
Pos=343,19
Size=568,202
Size=1208,659
Collapsed=0
DockId=0x00000017,0
@ -36,14 +36,14 @@ Size=1280,19
Collapsed=0
[Window][Performance Info]
Pos=1107,223
Size=173,268
Pos=1628,680
Size=292,268
Collapsed=0
DockId=0x00000019,0
[Window][Console]
Pos=343,223
Size=731,497
Pos=343,680
Size=1232,497
Collapsed=0
DockId=0x00000013,0
@ -78,8 +78,8 @@ Collapsed=0
DockId=0x00000015,1
[Window][Color Correction]
Pos=1107,493
Size=173,227
Pos=1628,950
Size=292,227
Collapsed=0
DockId=0x0000001A,0
@ -113,8 +113,8 @@ Collapsed=0
DockId=0x0000000E,0
[Window][Audio Output]
Pos=1076,223
Size=29,497
Pos=1577,680
Size=49,497
Collapsed=0
DockId=0x00000012,0
@ -125,8 +125,8 @@ Collapsed=0
DockId=0x0000000D,0
[Window][Resources]
Pos=0,371
Size=341,349
Pos=0,600
Size=341,577
Collapsed=0
DockId=0x00000010,0
@ -136,8 +136,8 @@ Size=550,695
Collapsed=0
[Window][Lua Globals]
Pos=913,184
Size=367,37
Pos=1553,558
Size=367,120
Collapsed=0
DockId=0x0000001C,0
@ -181,7 +181,7 @@ Column 1 Width=90
Column 2 Weight=1.0000
[Docking][Data]
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1280,701 Split=X
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X
DockNode ID=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=341,701 Split=Y Selected=0x12EF0F59
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 Split=Y Selected=0x12EF0F59

View File

@ -1,2 +1,4 @@
[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -Isrc\vendor\imgui -IC:\msys64\mingw64\lib\libyaml-cpp.a -MMD -MP -c src\src\core\utils\AssetManager.cpp -o src\build\core\utils\AssetManager.o
[COMPILE] g++ -std=c++20 -Wall -g -DGLM_ENABLE_EXPERIMENTAL -O2 -static -static-libstdc++ -static-libgcc -Isrc/include -Isrc/include/lua -Isrc/vendor -Isrc/vendor/imgui -Isrc/vendor/box2d -Isrc/vendor/xxhash -Isrc/vendor/miniaudio -Isrc/vendor/imguizmo -IC:/msys64/mingw64/include -IC:\msys64\mingw64\lib\libyaml-cpp.a -Isrc\vendor\imgui -MMD -MP -c src\src\editor\windows\Inspector.cpp -o src\build\editor\windows\Inspector.o
[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\AudioPlayerComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PathFollowerComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\audio\AudioEngine.o src\build\core\functions\Prefab.o src\build\core\functions\ScenePacker.o src\build\core\scripts\LuaGlobalBridge.o src\build\core\scripts\ScriptCore.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Popup.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\utils\Themes.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\AudioInfo.o src\build\editor\windows\Inspector.o src\build\editor\windows\LuaGlobals.o src\build\editor\windows\SceneTree.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o src\build\miniaudio.o src\build\ImGuizmo.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto -ldbghelp -lz -lfreetype
[ERROR] Runtime crash
Command 'src\build\app.exe' returned non-zero exit status 3221225477.

File diff suppressed because it is too large Load Diff

View File

@ -12,18 +12,14 @@
#include "../Components/PathFollowerComponent.h"
#include "../Components/TextComponent.h"
#include "../core/utils/Logging.h"
#include "../utils/UID.h"
#include <algorithm>
std::unordered_set<int> Object::usedIDs;
Object::Object(const std::string& name)
Object::Object(const std::string &name)
: name(name), localPosition(0.0f, 0.0f), localRotationDeg(0.0f), uid(), visable(true)
{
if (usedIDs.count(uid.id))
@ -35,7 +31,7 @@ Object::Object(const std::string& name)
parent = nullptr;
}
Object::Object(const Object& other)
Object::Object(const Object &other)
: name(other.name + " (Copy)"),
localPosition(other.localPosition),
localRotationDeg(other.localRotationDeg),
@ -48,35 +44,29 @@ Object::Object(const Object& other)
this->children.clear();
for (const auto& comp : other.components)
for (const auto &comp : other.components)
{
if (comp)
{
auto clone = comp;
clone->SetOwner(this);
clone->SetOwner(this);
this->components.push_back(std::shared_ptr<Component>(clone));
}
}
for (const auto& child : other.children)
for (const auto &child : other.children)
{
auto childCopy = std::make_shared<Object>(*child);
childCopy->SetParent(this);
this->children.push_back(childCopy);
}
}
Object::~Object()
{
usedIDs.erase(uid.id);
}
void Object::SetParent(Object *newParent)
{
if (parent)
@ -121,26 +111,26 @@ glm::vec2 Object::GetWorldPosition() const
return localPosition;
}
void Object::SetWorldPosition(const core::types::Vec2& worldPos) {
if (Object* parent = GetParent()) {
void Object::SetWorldPosition(const core::types::Vec2 &worldPos)
{
if (Object *parent = GetParent())
{
core::types::Vec2 parentPos = parent->GetWorldPosition();
core::types::Vec2 offset = worldPos - parentPos;
core::types::Vec2 offset = worldPos - parentPos;
float parentDeg = parent->GetWorldRotation();
float rad = -parentDeg * (PI / 180.0f);
float c = std::cos(rad);
float s = std::sin(rad);
float rad = -parentDeg * (PI / 180.0f);
float c = std::cos(rad);
float s = std::sin(rad);
core::types::Vec2 local{
offset.x * c - offset.y * s,
offset.x * s + offset.y * c
};
offset.x * s + offset.y * c};
SetLocalPosition(local);
}
else {
else
{
SetLocalPosition(worldPos);
}
}
@ -160,8 +150,6 @@ float Object::GetWorldScale() const
return 1.0f;
}
float Object::GetWorldRotation() const
{
if (parent)
@ -182,7 +170,7 @@ void Object::SetVisable(bool state)
const std::string &Object::GetName() const { return name; }
void Object::SetName(const std::string &n) { name = n; }
std::vector<std::shared_ptr<Object>> &Object::GetChildren() { return children; }
Object* Object::GetParent() const
Object *Object::GetParent() const
{
if (!this)
{
@ -192,7 +180,6 @@ Object* Object::GetParent() const
return parent;
}
void Object::Save(YAML::Emitter &out) const
{
Logger::LogVerbose("[LoadScene] Saving Object: [%s, %d]", name.c_str(), uid.id);
@ -209,7 +196,6 @@ void Object::Save(YAML::Emitter &out) const
out << YAML::Key << "isPrefab" << YAML::Value << isPrefab;
out << YAML::Key << "prefabUAID" << YAML::Value << prefabUAID;
out << YAML::Key << "components" << YAML::Value << YAML::BeginSeq;
for (const auto &comp : components)
{
@ -229,7 +215,6 @@ void Object::Save(YAML::Emitter &out) const
void Object::Load(const YAML::Node &node)
{
name = node["name"].as<std::string>();
uid.uuid = node["uid"] ? node["uid"].as<std::string>() : GenerateUUID();
int loadedID = node["id"] ? node["id"].as<int>() : 0;
@ -241,10 +226,41 @@ void Object::Load(const YAML::Node &node)
localRotationDeg = node["rotation"] ? node["rotation"].as<float>() : 0.0f;
layer = node["layer"] ? node["layer"].as<int>() : 0;
visable = node["visable"] ? node["visable"].as<bool>() : true;
isPrefab = node["isPrefab"] ? node["isPrefab"].as<bool>() : false;
prefabUAID = node["prefabUAID"] ? node["prefabUAID"].as<UAssetID>() : -1;
if (isPrefab && prefabUAID != -1)
{
auto asset = AssetManager::GetAssetByID(prefabUAID);
if (asset && asset->type == AssetType::Prefab)
{
auto prefabInfo = dynamic_cast<const PrefabAssetInfo *>(asset);
if (prefabInfo)
{
auto prefabInstance = prefabInfo->Instantiate();
if (prefabInstance)
{
*this = *prefabInstance;
parent = nullptr;
SetPrefab(true);
SetPrefabUAID(prefabUAID);
}
else
{
Logger::LogError("[Object::Load] Failed to instantiate prefab UAID %llu", prefabUAID);
}
}
else
{
Logger::LogError("[Object::Load] Asset was not a valid PrefabAssetInfo");
}
}
else
{
Logger::LogError("[Object::Load] Could not find prefab asset for UAID %llu", prefabUAID);
}
}
Logger::LogVerbose("[LoadScene] Loading Object: ['%s', %d]", name.c_str(), uid.id);
@ -302,5 +318,3 @@ void Object::Load(const YAML::Node &node)
}
}
}

View File

@ -43,6 +43,32 @@ void DrawInspectorUI(std::shared_ptr<Object> selected)
// --- General ---
ImGui::TextUnformatted("General");
if (selected->IsPrefab())
{
ImGui::SameLine();
ImVec2 iconPos = ImGui::GetCursorScreenPos();
float iconSize = ImGui::GetTextLineHeight();
ImVec2 iconEnd = ImVec2(iconPos.x + iconSize, iconPos.y + iconSize);
ImU32 bgColor = IM_COL32(40, 120, 255, 255);
ImU32 textColor = IM_COL32(255, 255, 255, 255);
auto *drawList = ImGui::GetWindowDrawList();
drawList->AddRectFilled(iconPos, iconEnd, bgColor, 3.0f);
ImVec2 textSize = ImGui::CalcTextSize("P");
ImVec2 textPos = {
iconPos.x + (iconSize - textSize.x) * 0.5f,
iconPos.y + (iconSize - textSize.y) * 0.5f};
drawList->AddText(textPos, textColor, "P");
ImGui::Dummy(ImVec2(iconSize + 4.0f, iconSize));
ImGui::SameLine();
ImGui::Text("%llu", selected->GetPrefabUAID());
}
ImGui::Separator();
// Name edit
@ -73,29 +99,6 @@ void DrawInspectorUI(std::shared_ptr<Object> selected)
// ID Text
ImGui::Text("ID: %d", selected->uid.id);
if (selected->IsPrefab())
{
ImGui::SameLine();
ImVec2 iconPos = ImGui::GetCursorScreenPos();
float iconSize = ImGui::GetTextLineHeight();
ImVec2 iconEnd = ImVec2(iconPos.x + iconSize, iconPos.y + iconSize);
ImU32 bgColor = IM_COL32(40, 120, 255, 255);
ImU32 textColor = IM_COL32(255, 255, 255, 255);
auto *drawList = ImGui::GetWindowDrawList();
drawList->AddRectFilled(iconPos, iconEnd, bgColor, 3.0f);
ImVec2 textSize = ImGui::CalcTextSize("P");
ImVec2 textPos = {
iconPos.x + (iconSize - textSize.x) * 0.5f,
iconPos.y + (iconSize - textSize.y) * 0.5f};
drawList->AddText(textPos, textColor, "P");
ImGui::Dummy(ImVec2(iconSize + 4.0f, iconSize));
}
ImGui::Text("UID: %s", selected->uid.uuid.c_str());
static const char *componentTypes[] = {