Updated Prefabs
This commit is contained in:
parent
89f9b43b1b
commit
41c6b70af1
36
imgui.ini
36
imgui.ini
@ -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
|
||||
|
@ -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
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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[] = {
|
||||
|
Loading…
Reference in New Issue
Block a user