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] [Window][WindowOverViewport_11111111]
Pos=0,19 Pos=0,19
Size=1280,701 Size=1920,1158
Collapsed=0 Collapsed=0
[Window][Inspector] [Window][Inspector]
Pos=913,19 Pos=1553,19
Size=367,163 Size=367,537
Collapsed=0 Collapsed=0
DockId=0x0000001B,0 DockId=0x0000001B,0
[Window][Scene Tree] [Window][Scene Tree]
Pos=0,19 Pos=0,19
Size=341,350 Size=341,579
Collapsed=0 Collapsed=0
DockId=0x0000000F,0 DockId=0x0000000F,0
[Window][Viewport] [Window][Viewport]
Pos=343,19 Pos=343,19
Size=568,202 Size=1208,659
Collapsed=0 Collapsed=0
DockId=0x00000017,0 DockId=0x00000017,0
@ -36,14 +36,14 @@ Size=1280,19
Collapsed=0 Collapsed=0
[Window][Performance Info] [Window][Performance Info]
Pos=1107,223 Pos=1628,680
Size=173,268 Size=292,268
Collapsed=0 Collapsed=0
DockId=0x00000019,0 DockId=0x00000019,0
[Window][Console] [Window][Console]
Pos=343,223 Pos=343,680
Size=731,497 Size=1232,497
Collapsed=0 Collapsed=0
DockId=0x00000013,0 DockId=0x00000013,0
@ -78,8 +78,8 @@ Collapsed=0
DockId=0x00000015,1 DockId=0x00000015,1
[Window][Color Correction] [Window][Color Correction]
Pos=1107,493 Pos=1628,950
Size=173,227 Size=292,227
Collapsed=0 Collapsed=0
DockId=0x0000001A,0 DockId=0x0000001A,0
@ -113,8 +113,8 @@ Collapsed=0
DockId=0x0000000E,0 DockId=0x0000000E,0
[Window][Audio Output] [Window][Audio Output]
Pos=1076,223 Pos=1577,680
Size=29,497 Size=49,497
Collapsed=0 Collapsed=0
DockId=0x00000012,0 DockId=0x00000012,0
@ -125,8 +125,8 @@ Collapsed=0
DockId=0x0000000D,0 DockId=0x0000000D,0
[Window][Resources] [Window][Resources]
Pos=0,371 Pos=0,600
Size=341,349 Size=341,577
Collapsed=0 Collapsed=0
DockId=0x00000010,0 DockId=0x00000010,0
@ -136,8 +136,8 @@ Size=550,695
Collapsed=0 Collapsed=0
[Window][Lua Globals] [Window][Lua Globals]
Pos=913,184 Pos=1553,558
Size=367,37 Size=367,120
Collapsed=0 Collapsed=0
DockId=0x0000001C,0 DockId=0x0000001C,0
@ -181,7 +181,7 @@ Column 1 Width=90
Column 2 Weight=1.0000 Column 2 Weight=1.0000
[Docking][Data] [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=0x00000005 Parent=0x11111111 SizeRef=989,1158 Split=X
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=341,701 Split=Y Selected=0x12EF0F59 DockNode ID=0x00000001 Parent=0x00000005 SizeRef=341,701 Split=Y Selected=0x12EF0F59
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,637 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 [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,15 +12,11 @@
#include "../Components/PathFollowerComponent.h" #include "../Components/PathFollowerComponent.h"
#include "../Components/TextComponent.h" #include "../Components/TextComponent.h"
#include "../core/utils/Logging.h" #include "../core/utils/Logging.h"
#include "../utils/UID.h" #include "../utils/UID.h"
#include <algorithm> #include <algorithm>
std::unordered_set<int> Object::usedIDs; std::unordered_set<int> Object::usedIDs;
Object::Object(const std::string &name) Object::Object(const std::string &name)
@ -64,19 +60,13 @@ Object::Object(const Object& other)
childCopy->SetParent(this); childCopy->SetParent(this);
this->children.push_back(childCopy); this->children.push_back(childCopy);
} }
} }
Object::~Object() Object::~Object()
{ {
usedIDs.erase(uid.id); usedIDs.erase(uid.id);
} }
void Object::SetParent(Object *newParent) void Object::SetParent(Object *newParent)
{ {
if (parent) if (parent)
@ -121,10 +111,10 @@ glm::vec2 Object::GetWorldPosition() const
return localPosition; return localPosition;
} }
void Object::SetWorldPosition(const core::types::Vec2 &worldPos)
{
void Object::SetWorldPosition(const core::types::Vec2& worldPos) { if (Object *parent = GetParent())
if (Object* parent = GetParent()) { {
core::types::Vec2 parentPos = parent->GetWorldPosition(); core::types::Vec2 parentPos = parent->GetWorldPosition();
core::types::Vec2 offset = worldPos - parentPos; core::types::Vec2 offset = worldPos - parentPos;
@ -135,12 +125,12 @@ void Object::SetWorldPosition(const core::types::Vec2& worldPos) {
core::types::Vec2 local{ core::types::Vec2 local{
offset.x * c - offset.y * s, offset.x * c - offset.y * s,
offset.x * s + offset.y * c offset.x * s + offset.y * c};
};
SetLocalPosition(local); SetLocalPosition(local);
} }
else { else
{
SetLocalPosition(worldPos); SetLocalPosition(worldPos);
} }
} }
@ -160,8 +150,6 @@ float Object::GetWorldScale() const
return 1.0f; return 1.0f;
} }
float Object::GetWorldRotation() const float Object::GetWorldRotation() const
{ {
if (parent) if (parent)
@ -192,7 +180,6 @@ Object* Object::GetParent() const
return parent; return parent;
} }
void Object::Save(YAML::Emitter &out) const void Object::Save(YAML::Emitter &out) const
{ {
Logger::LogVerbose("[LoadScene] Saving Object: [%s, %d]", name.c_str(), uid.id); 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 << "isPrefab" << YAML::Value << isPrefab;
out << YAML::Key << "prefabUAID" << YAML::Value << prefabUAID; out << YAML::Key << "prefabUAID" << YAML::Value << prefabUAID;
out << YAML::Key << "components" << YAML::Value << YAML::BeginSeq; out << YAML::Key << "components" << YAML::Value << YAML::BeginSeq;
for (const auto &comp : components) for (const auto &comp : components)
{ {
@ -229,7 +215,6 @@ void Object::Save(YAML::Emitter &out) const
void Object::Load(const YAML::Node &node) void Object::Load(const YAML::Node &node)
{ {
name = node["name"].as<std::string>(); name = node["name"].as<std::string>();
uid.uuid = node["uid"] ? node["uid"].as<std::string>() : GenerateUUID(); uid.uuid = node["uid"] ? node["uid"].as<std::string>() : GenerateUUID();
int loadedID = node["id"] ? node["id"].as<int>() : 0; 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; localRotationDeg = node["rotation"] ? node["rotation"].as<float>() : 0.0f;
layer = node["layer"] ? node["layer"].as<int>() : 0; layer = node["layer"] ? node["layer"].as<int>() : 0;
visable = node["visable"] ? node["visable"].as<bool>() : true; visable = node["visable"] ? node["visable"].as<bool>() : true;
isPrefab = node["isPrefab"] ? node["isPrefab"].as<bool>() : false; isPrefab = node["isPrefab"] ? node["isPrefab"].as<bool>() : false;
prefabUAID = node["prefabUAID"] ? node["prefabUAID"].as<UAssetID>() : -1; 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); 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 --- // --- General ---
ImGui::TextUnformatted("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(); ImGui::Separator();
// Name edit // Name edit
@ -73,29 +99,6 @@ void DrawInspectorUI(std::shared_ptr<Object> selected)
// ID Text // ID Text
ImGui::Text("ID: %d", selected->uid.id); 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()); ImGui::Text("UID: %s", selected->uid.uuid.c_str());
static const char *componentTypes[] = { static const char *componentTypes[] = {