Added New Themes and Removing Componenets

This commit is contained in:
OusmBlueNinja 2025-01-01 00:56:47 -06:00
parent ca427b043f
commit 513414608d
15 changed files with 529 additions and 208 deletions

View File

@ -146,7 +146,7 @@ function OnUpdate(deltaTime)
-- Apply the new position to the Transform component
transform:SetPosition(new_position)
-- === Optional: Log Current Rotation and Position ===
-- Log Current Rotation and Position ===
-- Uncomment the following lines if you wish to log the gun's current rotation and position
-- local current_rotation = transform:GetRotation()
-- Engine.Log(string.format("Gun Rotation: (X: %.2f, Y: %.2f, Z: %.2f)", current_rotation.x, current_rotation.y, current_rotation.z), {1, 1, 1, 1})

35
assets/scripts/camera.lua Normal file
View File

@ -0,0 +1,35 @@
local Engine = require("./assets/scripts/engine")
local transform = nil
local new_rotation = 0
local new_rotationSpeed = 15
function OnInit()
local gameObject = Engine.GetGameObjectByTag("Camera")
transform = gameObject:GetComponent("Transform")
Engine.Log("Init Done")
end
function OnUpdate(deltaTime)
local gameObject = Engine.GetGameObjectByTag("Camera")
transform = gameObject:GetComponent("Transform")
local old_rotation = transform:GetRotation()
local rotation = {
x = old_rotation.x, -- Preserving existing new_rotation on X-axis
y = new_rotation, -- Updated new_rotation on Y-axis for spinning
z = old_rotation.z -- Preserving existing new_rotation on Z-axis
}
-- Apply the new new_rotation to the Transform component
transform:SetRotation(rotation)
new_rotation = new_rotation + (deltaTime * new_rotationSpeed)
if new_rotation >= 360 then
new_rotation = 0
end
end

104
imgui.ini
View File

@ -1,6 +1,6 @@
[Window][DockSpace]
Pos=0,0
Size=1920,1177
Size=1280,720
Collapsed=0
[Window][Debug##Default]
@ -80,8 +80,8 @@ Collapsed=0
DockId=0x0000001F,0
[Window][Performance##performance]
Pos=8,746
Size=322,423
Pos=8,435
Size=322,277
Collapsed=0
DockId=0x0000001C,0
@ -104,8 +104,8 @@ Collapsed=0
DockId=0x0000000F,0
[Window][Scene Window##SceneWindow]
Pos=8,30
Size=322,714
Pos=8,28
Size=322,405
Collapsed=0
DockId=0x0000001B,0
@ -134,28 +134,28 @@ Collapsed=0
DockId=0x0000001E,0
[Window][ Logger##logger]
Pos=332,828
Size=1187,341
Pos=607,354
Size=277,358
Collapsed=0
DockId=0x00000020,1
DockId=0x00000024,0
[Window][ Editor##EditorWindow]
Pos=332,30
Size=1187,796
Pos=332,28
Size=552,324
Collapsed=0
DockId=0x0000001F,0
[Window][ Inspector##InspectorWindow]
Pos=1521,30
Size=391,1139
Pos=886,28
Size=386,684
Collapsed=0
DockId=0x00000022,0
[Window][ Profiler]
Pos=332,828
Size=1187,341
Pos=332,354
Size=273,358
Collapsed=0
DockId=0x00000020,0
DockId=0x00000023,0
[Table][0xE9E836E4,4]
Column 0 Weight=1.2999
@ -170,40 +170,42 @@ Column 2 Weight=1.0000
Column 3 Weight=1.0000
[Docking][Data]
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,53 Size=1904,1139 Split=X Selected=0xF7365A5A
DockNode ID=0x00000021 Parent=0x14621557 SizeRef=871,1139 Split=X
DockNode ID=0x00000013 Parent=0x00000021 SizeRef=322,1142 Split=Y Selected=0x818D04BB
DockNode ID=0x0000001B Parent=0x00000013 SizeRef=264,714 HiddenTabBar=1 Selected=0x1D5D92B6
DockNode ID=0x0000001C Parent=0x00000013 SizeRef=264,423 HiddenTabBar=1 Selected=0x818D04BB
DockNode ID=0x00000014 Parent=0x00000021 SizeRef=547,1142 Split=X
DockNode ID=0x00000015 Parent=0x00000014 SizeRef=1158,1142 Split=X
DockNode ID=0x00000011 Parent=0x00000015 SizeRef=265,1142 Selected=0x1D5D92B6
DockNode ID=0x00000012 Parent=0x00000015 SizeRef=1259,1142 Split=X
DockNode ID=0x00000009 Parent=0x00000012 SizeRef=364,1142 Split=Y Selected=0x3DC5AC3F
DockNode ID=0x00000005 Parent=0x00000009 SizeRef=364,745 Split=Y Selected=0x3DC5AC3F
DockNode ID=0x0000000B Parent=0x00000005 SizeRef=364,452 HiddenTabBar=1 Selected=0x3DC5AC3F
DockNode ID=0x0000000C Parent=0x00000005 SizeRef=364,291 Selected=0xAE3C694A
DockNode ID=0x00000006 Parent=0x00000009 SizeRef=364,395 HiddenTabBar=1 Selected=0x726D8899
DockNode ID=0x0000000A Parent=0x00000012 SizeRef=1538,1142 Split=X
DockNode ID=0x00000007 Parent=0x0000000A SizeRef=357,1142 Selected=0x7737E8B2
DockNode ID=0x00000008 Parent=0x0000000A SizeRef=1545,1142 Split=X
DockNode ID=0x00000001 Parent=0x00000008 SizeRef=1202,1142 Split=Y Selected=0xDF0EC458
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=1202,849 Split=Y Selected=0xDF0EC458
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=1202,571 Split=Y Selected=0xDFF75B3F
DockNode ID=0x00000017 Parent=0x0000000D SizeRef=1202,776 Split=Y Selected=0xDFF75B3F
DockNode ID=0x0000001D Parent=0x00000017 SizeRef=518,720 Split=Y Selected=0xDFF75B3F
DockNode ID=0x0000001F Parent=0x0000001D SizeRef=518,796 CentralNode=1 Selected=0x9A7B23B9
DockNode ID=0x00000020 Parent=0x0000001D SizeRef=518,341 Selected=0x7A66B86B
DockNode ID=0x0000001E Parent=0x00000017 SizeRef=518,417 Selected=0xC74E1AEE
DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1202,364 Split=X Selected=0x1C0788A1
DockNode ID=0x00000019 Parent=0x00000018 SizeRef=601,364 Selected=0x1C0788A1
DockNode ID=0x0000001A Parent=0x00000018 SizeRef=599,364 Selected=0x9B5D3198
DockNode ID=0x0000000E Parent=0x00000003 SizeRef=1202,569 Selected=0xE98146C5
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196
DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB
DockNode ID=0x00000016 Parent=0x00000014 SizeRef=420,1142 Selected=0x8D0E8380
DockNode ID=0x00000022 Parent=0x14621557 SizeRef=391,1139 Selected=0xD1D25642
DockSpace ID=0xC6145A92 Pos=8,27 Size=1904,1142 Split=X
DockNode ID=0x0000000F Parent=0xC6145A92 SizeRef=301,1142 Selected=0xA8433A03
DockNode ID=0x00000010 Parent=0xC6145A92 SizeRef=1601,1142 CentralNode=1
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=172,215 Size=1264,684 Split=X Selected=0xF7365A5A
DockNode ID=0x00000021 Parent=0x14621557 SizeRef=876,1139 Split=X
DockNode ID=0x00000013 Parent=0x00000021 SizeRef=322,1142 Split=Y Selected=0x818D04BB
DockNode ID=0x0000001B Parent=0x00000013 SizeRef=264,675 HiddenTabBar=1 Selected=0x1D5D92B6
DockNode ID=0x0000001C Parent=0x00000013 SizeRef=264,463 HiddenTabBar=1 Selected=0x818D04BB
DockNode ID=0x00000014 Parent=0x00000021 SizeRef=552,1142 Split=X
DockNode ID=0x00000015 Parent=0x00000014 SizeRef=1158,1142 Split=X
DockNode ID=0x00000011 Parent=0x00000015 SizeRef=265,1142 Selected=0x1D5D92B6
DockNode ID=0x00000012 Parent=0x00000015 SizeRef=1259,1142 Split=X
DockNode ID=0x00000009 Parent=0x00000012 SizeRef=364,1142 Split=Y Selected=0x3DC5AC3F
DockNode ID=0x00000005 Parent=0x00000009 SizeRef=364,745 Split=Y Selected=0x3DC5AC3F
DockNode ID=0x0000000B Parent=0x00000005 SizeRef=364,452 HiddenTabBar=1 Selected=0x3DC5AC3F
DockNode ID=0x0000000C Parent=0x00000005 SizeRef=364,291 Selected=0xAE3C694A
DockNode ID=0x00000006 Parent=0x00000009 SizeRef=364,395 HiddenTabBar=1 Selected=0x726D8899
DockNode ID=0x0000000A Parent=0x00000012 SizeRef=1538,1142 Split=X
DockNode ID=0x00000007 Parent=0x0000000A SizeRef=357,1142 Selected=0x7737E8B2
DockNode ID=0x00000008 Parent=0x0000000A SizeRef=1545,1142 Split=X
DockNode ID=0x00000001 Parent=0x00000008 SizeRef=1202,1142 Split=Y Selected=0xDF0EC458
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=1202,849 Split=Y Selected=0xDF0EC458
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=1202,571 Split=Y Selected=0xDFF75B3F
DockNode ID=0x00000017 Parent=0x0000000D SizeRef=1202,776 Split=Y Selected=0xDFF75B3F
DockNode ID=0x0000001D Parent=0x00000017 SizeRef=518,720 Split=Y Selected=0xDFF75B3F
DockNode ID=0x0000001F Parent=0x0000001D SizeRef=518,779 CentralNode=1 Selected=0x9A7B23B9
DockNode ID=0x00000020 Parent=0x0000001D SizeRef=518,358 Split=X Selected=0x7A66B86B
DockNode ID=0x00000023 Parent=0x00000020 SizeRef=273,358 HiddenTabBar=1 Selected=0x7A66B86B
DockNode ID=0x00000024 Parent=0x00000020 SizeRef=277,358 HiddenTabBar=1 Selected=0x1F29F1F5
DockNode ID=0x0000001E Parent=0x00000017 SizeRef=518,417 Selected=0xC74E1AEE
DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1202,364 Split=X Selected=0x1C0788A1
DockNode ID=0x00000019 Parent=0x00000018 SizeRef=601,364 Selected=0x1C0788A1
DockNode ID=0x0000001A Parent=0x00000018 SizeRef=599,364 Selected=0x9B5D3198
DockNode ID=0x0000000E Parent=0x00000003 SizeRef=1202,569 Selected=0xE98146C5
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196
DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB
DockNode ID=0x00000016 Parent=0x00000014 SizeRef=420,1142 Selected=0x8D0E8380
DockNode ID=0x00000022 Parent=0x14621557 SizeRef=386,1139 Selected=0xD1D25642
DockSpace ID=0xC6145A92 Pos=8,27 Size=1904,1142 Split=X
DockNode ID=0x0000000F Parent=0xC6145A92 SizeRef=301,1142 Selected=0xA8433A03
DockNode ID=0x00000010 Parent=0xC6145A92 SizeRef=1601,1142 CentralNode=1

View File

@ -3,8 +3,8 @@ Entities:
Name: Bacround
Components:
Transform:
Position: [0, 400, 0]
Rotation: [0, -90, 0]
Position: [0, 300, 0]
Rotation: [0, 0, 0]
Scale: [1, 1, 1]
Mesh:
MeshPath: assets/models/sponza.obj
@ -160,5 +160,19 @@ Entities:
- id: 26
type: texture_diffuse
path: textures/vase_hanging.tga
- ID: 1
Name: Camera
Components:
Transform:
Position: [0, 200, 0]
Rotation: [0, 1.02622044, 0]
Scale: [1, 1, 1]
ScriptComponent:
ScriptPath: assets/scripts/BouncingItem.lua
ScriptPath: assets/scripts/camera.lua
CameraComponent:
IsPerspective: true
DefaultRuntimeCamera: true
FOV: 45
AspectRatio: 1.75
NearPlane: 0.100000001
FarPlane: 7000

View File

@ -8,6 +8,8 @@
#include "gcml.h"
extern std::shared_ptr<CameraComponent> g_RuntimeCameraObject;
// Constructor implementation
CameraComponent::CameraComponent() : IsPerspective(true),
FOV(45.0f), AspectRatio(16.0f / 9.0f),
@ -70,6 +72,10 @@ void CameraComponent::Deserialize(const YAML::Node &node)
if (node["DefaultRuntimeCamera"])
{
DefaultRuntimeCamera = node["DefaultRuntimeCamera"].as<bool>();
if (DefaultRuntimeCamera)
{
g_RuntimeCameraObject = shared_from_this();
}
}
if (IsPerspective)
@ -143,7 +149,7 @@ void CameraComponent::Update(float _deltaTime)
void CameraComponent::UpdateViewMatrix()
{
if (m_Owner)
{
@ -169,14 +175,6 @@ void CameraComponent::UpdateViewMatrix()
m_ViewMatrix = glm::lookAt(position, position + forward, up);
}
else
{
DEBUG_PRINT("Transform component missing on GameObject: %s", m_Owner->name.c_str());
}
}
else
{
DEBUG_PRINT("Game Object has no parent");
}
}

View File

@ -7,8 +7,10 @@
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <yaml-cpp/yaml.h>
#include <memory> // Include for std::enable_shared_from_this
class CameraComponent : public Component
class CameraComponent : public Component, public std::enable_shared_from_this<CameraComponent>
{
public:
// Updated constructor to accept GameObject*

View File

@ -5,14 +5,18 @@
#include "gcml.h"
#include "../Windows/LoggerWindow.h"
#include "CameraComponent.h"
extern LoggerWindow *g_LoggerWindow;
extern CameraComponent *g_RuntimeCameraObject;
GameObject::GameObject(int id, const std::string &name)
: id(id), name(name)
{
}
int GameObject::GetComponentCount() const
{
return static_cast<int>(components.size());
@ -23,8 +27,6 @@ std::string GameObject::GetName() const
return name;
}
void GameObject::AddComponent(const std::shared_ptr<Component> &component)
{
component->SetOwner(this);
@ -32,19 +34,78 @@ void GameObject::AddComponent(const std::shared_ptr<Component> &component)
// std::cout << "Added " << component->GetName() << std::endl;
}
void GameObject::Update(float deltaTime) {
bool GameObject::RemoveComponent(const std::shared_ptr<Component> &component)
{
if (!component)
{
std::cerr << "Attempted to remove a null component.\n";
return false;
}
// Retrieve the component's name
const std::string& componentName = component->GetName();
// Log the removal attempt
DEBUG_PRINT("Removing %s", componentName.c_str());
// Find the component in the map
auto it = components.find(componentName);
if (it != components.end())
{
// Verify that the component to remove matches the one in the map
if (it->second == component)
{
// Check if the component is a CameraComponent
if (componentName == CameraComponent::GetStaticName())
{
// Attempt to cast to CameraComponent
std::shared_ptr<CameraComponent> camera = std::dynamic_pointer_cast<CameraComponent>(it->second);
if (camera)
{
// Lock the mutex to ensure thread safety when accessing the global camera
// Compare shared_ptrs directly
if (g_RuntimeCameraObject == camera.get())
{
// Unset the active camera
g_RuntimeCameraObject = nullptr;
if (g_LoggerWindow)
{
g_LoggerWindow->AddLog("Active Camera has been removed.");
}
else
{
std::cerr << "Logger window is not initialized.\n";
}
DEBUG_PRINT("Active Camera has been unset.");
}
}
}
// Erase the component from the map
components.erase(it);
DEBUG_PRINT("Removed %s", componentName.c_str());
return true;
}
}
}
void GameObject::Update(float deltaTime)
{
// Iterate using range-based for loop
for (const auto& [componentName, componentPtr] : components) {
if (componentPtr) { // Check if the pointer is valid
for (const auto &[componentName, componentPtr] : components)
{
if (componentPtr)
{ // Check if the pointer is valid
componentPtr->Update(deltaTime); // Call the Update method
} else {
}
else
{
DEBUG_PRINT("Warning: '%s' is not a valid pointer:", componentName.c_str());
}
}
}
std::shared_ptr<Component> GameObject::GetComponentByName(const std::string &name) const
{
auto it = components.find(name);

View File

@ -29,6 +29,10 @@ public:
std::string GetName() const;
void AddComponent(const std::shared_ptr<Component> &component);
bool RemoveComponent(const std::shared_ptr<Component> &component);
std::shared_ptr<Component> GetComponentByName(const std::string &name) const;
void Update(float deltaTime);

View File

@ -190,7 +190,7 @@ void MyEngine::Run()
// Possibly create more GameObjects with different positions or textures
ThemeManager_ChangeTheme(2);
ThemeManager_ChangeTheme(3);
DEBUG_PRINT("Changed Theme to default");
while (!glfwWindowShouldClose(m_Window) && m_Running)

View File

@ -194,23 +194,23 @@ public:
std::string key = generateKey(type, path);
// 2) Check if its already loaded
// auto it = m_AssetMap.find(key);
// if (it != m_AssetMap.end())
//{
// // Debug: Log the variant type
// if (std::holds_alternative<std::shared_ptr<T>>(it->second))
// {
// #ifdef DEBUG
// DebugAssetMap();
// #endif
// std::cout << "[AssetManager] Retrieved asset from cache: " << key << std::endl;
// return std::get<std::shared_ptr<T>>(it->second);
// }
// else
// {
// throw std::runtime_error("Asset type mismatch for key: " + key);
// }
//}
auto it = m_AssetMap.find(key);
if (it != m_AssetMap.end())
{
// Debug: Log the variant type
if (std::holds_alternative<std::shared_ptr<T>>(it->second))
{
#ifdef DEBUG
DebugAssetMap();
#endif
std::cout << "[AssetManager] Retrieved asset from cache: " << key << std::endl;
return std::get<std::shared_ptr<T>>(it->second);
}
else
{
throw std::runtime_error("Asset type mismatch for key: " + key);
}
}
// 3) Not loaded yet
@ -223,7 +223,8 @@ public:
DEBUG_PRINT("[AssetManager] Failed to load asset: %s", path.c_str());
return nullptr; // For smart pointers, return nullptr on failure
}
m_AssetMap[key] = assetData;
m_AssetMap.emplace(key, assetData);
return std::get<std::shared_ptr<T>>(assetData);
}
catch (const std::exception &e)

View File

@ -27,7 +27,6 @@ extern std::vector<std::unique_ptr<GameObject>> g_GameObjects;
std::string LuaManager::m_ScriptName = "LUA_UNDEFINED";
std::unordered_map<std::string, LuaManager::LuaExposedVariant> LuaManager::m_ExposedVariables;
// Constructor
LuaManager::LuaManager()
: ScriptPath(""), m_LuaState(nullptr), m_LastErrorMessage("")
@ -107,6 +106,15 @@ bool LuaManager::Initialize(const std::string &scriptPath)
lua_pop(m_LuaState, 1); // Pop the Engine table from the stack
lua_getglobal(m_LuaState, "package");
lua_getfield(m_LuaState, -1, "path"); // get package.path
std::string currentPath = lua_tostring(m_LuaState, -1);
std::string newPath = currentPath + ";./assets/scripts/?.lua";
lua_pop(m_LuaState, 1); // remove original package.path
lua_pushstring(m_LuaState, newPath.c_str());
lua_setfield(m_LuaState, -2, "path"); // set package.path
lua_pop(m_LuaState, 1); // remove package table
// Execute the Lua script
if (luaL_dofile(m_LuaState, ScriptPath.c_str()) != LUA_OK)
{
@ -155,13 +163,13 @@ bool LuaManager::Initialize(const std::string &scriptPath)
return true;
}
std::unordered_map<std::string, LuaManager::LuaExposedVariant> LuaManager::GetExposedVariables() {
std::unordered_map<std::string, LuaManager::LuaExposedVariant> LuaManager::GetExposedVariables()
{
return m_ExposedVariables;
}
void LuaManager::UpdateVariable(const std::string &name, const LuaManager::LuaExposedVariant &value) {
void LuaManager::UpdateVariable(const std::string &name, const LuaManager::LuaExposedVariant &value)
{
if (!m_LuaState)
return;
@ -175,15 +183,24 @@ void LuaManager::UpdateVariable(const std::string &name, const LuaManager::LuaEx
lua_pushstring(m_LuaState, name.c_str());
// Push the new value based on its type
if (std::holds_alternative<int>(value)) {
if (std::holds_alternative<int>(value))
{
lua_pushinteger(m_LuaState, std::get<int>(value));
} else if (std::holds_alternative<float>(value)) {
}
else if (std::holds_alternative<float>(value))
{
lua_pushnumber(m_LuaState, std::get<float>(value));
} else if (std::holds_alternative<std::string>(value)) {
}
else if (std::holds_alternative<std::string>(value))
{
lua_pushstring(m_LuaState, std::get<std::string>(value).c_str());
} else if (std::holds_alternative<bool>(value)) {
}
else if (std::holds_alternative<bool>(value))
{
lua_pushboolean(m_LuaState, std::get<bool>(value));
} else {
}
else
{
lua_pop(m_LuaState, 1); // Clean up stack
return;
}
@ -195,48 +212,51 @@ void LuaManager::UpdateVariable(const std::string &name, const LuaManager::LuaEx
lua_pop(m_LuaState, 1);
}
int LuaManager::Lua_Engine_Expose(lua_State* L) {
int LuaManager::Lua_Engine_Expose(lua_State *L)
{
// Check that at least two arguments are passed: name and value
if (lua_gettop(L) < 2) {
if (lua_gettop(L) < 2)
{
luaL_error(L, "Expose function requires at least two arguments: name and value");
return 0;
}
// First argument: variable name (string)
if (!lua_isstring(L, 1)) {
if (!lua_isstring(L, 1))
{
luaL_error(L, "First argument to Expose must be a string (variable name)");
return 0;
}
const char* varName = lua_tostring(L, 1);
const char *varName = lua_tostring(L, 1);
// Second argument: variable value (supports int, float, string, bool)
LuaExposedVariant varValue;
int type = lua_type(L, 2);
switch (type) {
case LUA_TNUMBER:
switch (type)
{
case LUA_TNUMBER:
#if LUA_VERSION_NUM >= 503
if (lua_isinteger(L, 2)) {
varValue = static_cast<int>(lua_tointeger(L, 2));
} else
if (lua_isinteger(L, 2))
{
varValue = static_cast<int>(lua_tointeger(L, 2));
}
else
#endif
{
varValue = static_cast<float>(lua_tonumber(L, 2));
}
break;
case LUA_TSTRING:
varValue = std::string(lua_tostring(L, 2));
break;
case LUA_TBOOLEAN:
varValue = static_cast<bool>(lua_toboolean(L, 2));
break;
default:
luaL_error(L, "Unsupported variable type for Expose");
return 0;
{
varValue = static_cast<float>(lua_tonumber(L, 2));
}
break;
case LUA_TSTRING:
varValue = std::string(lua_tostring(L, 2));
break;
case LUA_TBOOLEAN:
varValue = static_cast<bool>(lua_toboolean(L, 2));
break;
default:
luaL_error(L, "Unsupported variable type for Expose");
return 0;
}
// Store the variable in the static m_ExposedVariables map
@ -248,15 +268,24 @@ int LuaManager::Lua_Engine_Expose(lua_State* L) {
lua_pushstring(L, varName); // Push the variable name
// Push the value to Lua based on its type
if (std::holds_alternative<int>(varValue)) {
if (std::holds_alternative<int>(varValue))
{
lua_pushinteger(L, std::get<int>(varValue));
} else if (std::holds_alternative<float>(varValue)) {
}
else if (std::holds_alternative<float>(varValue))
{
lua_pushnumber(L, std::get<float>(varValue));
} else if (std::holds_alternative<std::string>(varValue)) {
}
else if (std::holds_alternative<std::string>(varValue))
{
lua_pushstring(L, std::get<std::string>(varValue).c_str());
} else if (std::holds_alternative<bool>(varValue)) {
}
else if (std::holds_alternative<bool>(varValue))
{
lua_pushboolean(L, std::get<bool>(varValue));
} else {
}
else
{
lua_pop(L, 1); // Clean up stack
return 0;
}
@ -270,40 +299,18 @@ int LuaManager::Lua_Engine_Expose(lua_State* L) {
return 0;
}
// Update function called every frame
void LuaManager::Update(float deltaTime)
{
if (!m_LuaState)
{
if (g_LoggerWindow)
{
g_LoggerWindow->AddLog("LuaManager: Lua state is not initialized.", std::optional<ImVec4>(ImVec4(1.0f, 0.0f, 0.0f, 1.0f)));
}
else
{
DEBUG_PRINT("LuaManager: Lua state is not initialized.");
}
LogError("Lua state is not initialized.");
return;
}
// Push the 'OnUpdate' function onto the stack
lua_getglobal(m_LuaState, "OnUpdate");
if (!lua_isfunction(m_LuaState, -1))
{
if (g_LoggerWindow)
{
g_LoggerWindow->AddLog("LuaManager: 'OnUpdate' is not a function.", std::optional<ImVec4>(ImVec4(1.0f, 0.0f, 0.0f, 1.0f)));
}
else
{
DEBUG_PRINT("LuaManager: 'OnUpdate' is not a function.");
}
lua_pop(m_LuaState, 1); // Remove non-function value from stack
return;
}
// Push the deltaTime argument
lua_pushnumber(m_LuaState, deltaTime);
@ -311,48 +318,49 @@ void LuaManager::Update(float deltaTime)
// Call the 'OnUpdate' function with 1 argument and 0 return values
if (lua_pcall(m_LuaState, 1, 0, 0) != LUA_OK)
{
const char *luaError = lua_tostring(m_LuaState, -1);
if (luaError)
{
std::string errorMsg(luaError);
// Prevent duplicate error logs
if (errorMsg != m_LastErrorMessage)
{
if (g_LoggerWindow)
{
std::string formattedError = "LuaManager Error in OnUpdate: " + errorMsg;
ImVec4 redColor = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
g_LoggerWindow->AddLog(formattedError.c_str(), std::optional<ImVec4>(redColor));
}
else
{
DEBUG_PRINT("LuaManager Error in OnUpdate: %s", errorMsg.c_str());
}
m_LastErrorMessage = errorMsg;
}
}
else
{
if (g_LoggerWindow)
{
g_LoggerWindow->AddLog("LuaManager: Unknown error in OnUpdate.", std::optional<ImVec4>(ImVec4(1.0f, 0.0f, 0.0f, 1.0f)));
}
else
{
DEBUG_PRINT("LuaManager: Unknown error in OnUpdate.");
}
}
lua_pop(m_LuaState, 1); // Remove error message from stack
HandleLuaError("OnUpdate");
return;
}
else
{
// Reset last error message on successful call
m_LastErrorMessage.clear();
}
}
void LuaManager::LogError(const char *message)
{
if (g_LoggerWindow)
{
g_LoggerWindow->AddLog(message, ImVec4(1.0f, 0.0f, 0.0f, 1.0f));
}
else
{
DEBUG_PRINT("%s", message);
}
}
void LuaManager::HandleLuaError(const std::string &functionName)
{
const char *luaError = lua_tostring(m_LuaState, -1);
if (luaError)
{
std::string errorMsg(luaError);
if (errorMsg != m_LastErrorMessage)
{
std::string formattedError = "LuaManager Error in " + functionName + ": " + errorMsg;
LogError(formattedError.c_str());
m_LastErrorMessage = errorMsg;
}
}
else
{
std::string errorMsg = "LuaManager: Unknown error in " + functionName + ".";
LogError(errorMsg.c_str());
}
lua_pop(m_LuaState, 1); // Remove error message from stack
}
// Update function called every frame
void LuaManager::CallLuaFunction(std::string functionName)
{
@ -374,7 +382,7 @@ void LuaManager::CallLuaFunction(std::string functionName)
lua_getglobal(m_LuaState, functionName.c_str());
if (!lua_isfunction(m_LuaState, -1))
{
DEBUG_PRINT("LuaManager: 'OnUpdate' is not a function.");
DEBUG_PRINT("LuaManager: '%s' is not a function.", functionName.c_str());
return;
}

View File

@ -82,6 +82,11 @@ private:
// Last error message to prevent duplicate logging
std::string m_LastErrorMessage;
void LogError(const char* message);
void HandleLuaError(const std::string& functionName);
void RegisterAllMetatables();
void RegisterComponentMetaTable();

View File

@ -6,6 +6,188 @@
#include "imgui.h"
extern LoggerWindow *g_LoggerWindow;
void SetupImGuiStyle_Tesseract_Black()
{
// Hazy Dark style by kaitabuchi314 from ImThemes
ImGuiStyle& style = ImGui::GetStyle();
style.Alpha = 1.0f;
style.DisabledAlpha = 0.6000000238418579f;
style.WindowPadding = ImVec2(5.5f, 8.300000190734863f);
style.WindowRounding = 4.5f;
style.WindowBorderSize = 1.0f;
style.WindowMinSize = ImVec2(32.0f, 32.0f);
style.WindowTitleAlign = ImVec2(0.0f, 0.5f);
style.WindowMenuButtonPosition = ImGuiDir_Left;
style.ChildRounding = 3.200000047683716f;
style.ChildBorderSize = 1.0f;
style.PopupRounding = 2.700000047683716f;
style.PopupBorderSize = 1.0f;
style.FramePadding = ImVec2(4.0f, 3.0f);
style.FrameRounding = 2.400000095367432f;
style.FrameBorderSize = 0.0f;
style.ItemSpacing = ImVec2(8.0f, 4.0f);
style.ItemInnerSpacing = ImVec2(4.0f, 4.0f);
style.CellPadding = ImVec2(4.0f, 2.0f);
style.IndentSpacing = 21.0f;
style.ColumnsMinSpacing = 6.0f;
style.ScrollbarSize = 14.0f;
style.ScrollbarRounding = 9.0f;
style.GrabMinSize = 10.0f;
style.GrabRounding = 3.200000047683716f;
style.TabRounding = 3.5f;
style.TabBorderSize = 1.0f;
style.TabMinWidthForCloseButton = 0.0f;
style.ColorButtonPosition = ImGuiDir_Right;
style.ButtonTextAlign = ImVec2(0.5f, 0.5f);
style.SelectableTextAlign = ImVec2(0.0f, 0.0f);
style.Colors[ImGuiCol_Text] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.4980392158031464f, 0.4980392158031464f, 0.4980392158031464f, 1.0f);
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.05882352963089943f, 0.05882352963089943f, 0.05882352963089943f, 0.9399999976158142f);
style.Colors[ImGuiCol_ChildBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_PopupBg] = ImVec4(0.0784313753247261f, 0.0784313753247261f, 0.0784313753247261f, 0.9399999976158142f);
style.Colors[ImGuiCol_Border] = ImVec4(0.4274509847164154f, 0.4274509847164154f, 0.4980392158031464f, 0.5f);
style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.1372549086809158f, 0.1725490242242813f, 0.2274509817361832f, 0.5400000214576721f);
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.2117647081613541f, 0.2549019753932953f, 0.3019607961177826f, 0.4000000059604645f);
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.04313725605607033f, 0.0470588244497776f, 0.0470588244497776f, 0.6700000166893005f);
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.03921568766236305f, 0.03921568766236305f, 0.03921568766236305f, 1.0f);
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.0784313753247261f, 0.08235294371843338f, 0.09019608050584793f, 1.0f);
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.0f, 0.0f, 0.0f, 0.5099999904632568f);
style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.1372549086809158f, 0.1372549086809158f, 0.1372549086809158f, 1.0f);
style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.01960784383118153f, 0.01960784383118153f, 0.01960784383118153f, 0.5299999713897705f);
style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.3098039329051971f, 0.3098039329051971f, 0.3098039329051971f, 1.0f);
style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.407843142747879f, 0.407843142747879f, 0.407843142747879f, 1.0f);
style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.5098039507865906f, 0.5098039507865906f, 0.5098039507865906f, 1.0f);
style.Colors[ImGuiCol_CheckMark] = ImVec4(0.7176470756530762f, 0.7843137383460999f, 0.843137264251709f, 1.0f);
style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.47843137383461f, 0.5254902243614197f, 0.572549045085907f, 1.0f);
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.2901960909366608f, 0.3176470696926117f, 0.3529411852359772f, 1.0f);
style.Colors[ImGuiCol_Button] = ImVec4(0.1490196138620377f, 0.1607843190431595f, 0.1764705926179886f, 0.4000000059604645f);
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.1372549086809158f, 0.1450980454683304f, 0.1568627506494522f, 1.0f);
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.0784313753247261f, 0.08627451211214066f, 0.09019608050584793f, 1.0f);
style.Colors[ImGuiCol_Header] = ImVec4(0.196078434586525f, 0.2156862765550613f, 0.239215686917305f, 0.3100000023841858f);
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.1647058874368668f, 0.1764705926179886f, 0.1921568661928177f, 0.800000011920929f);
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.07450980693101883f, 0.08235294371843338f, 0.09019608050584793f, 1.0f);
style.Colors[ImGuiCol_Separator] = ImVec4(0.4274509847164154f, 0.4274509847164154f, 0.4980392158031464f, 0.5f);
style.Colors[ImGuiCol_SeparatorHovered] = ImVec4(0.239215686917305f, 0.3254902064800262f, 0.4235294163227081f, 0.7799999713897705f);
style.Colors[ImGuiCol_SeparatorActive] = ImVec4(0.2745098173618317f, 0.3803921639919281f, 0.4980392158031464f, 1.0f);
style.Colors[ImGuiCol_ResizeGrip] = ImVec4(0.2901960909366608f, 0.3294117748737335f, 0.3764705955982208f, 0.2000000029802322f);
style.Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.239215686917305f, 0.2980392277240753f, 0.3686274588108063f, 0.6700000166893005f);
style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.1647058874368668f, 0.1764705926179886f, 0.1882352977991104f, 0.949999988079071f);
style.Colors[ImGuiCol_Tab] = ImVec4(0.1176470592617989f, 0.125490203499794f, 0.1333333402872086f, 0.8619999885559082f);
style.Colors[ImGuiCol_TabHovered] = ImVec4(0.3294117748737335f, 0.407843142747879f, 0.501960813999176f, 0.800000011920929f);
style.Colors[ImGuiCol_TabActive] = ImVec4(0.2431372553110123f, 0.2470588237047195f, 0.2549019753932953f, 1.0f);
style.Colors[ImGuiCol_TabUnfocused] = ImVec4(0.06666667014360428f, 0.1019607856869698f, 0.1450980454683304f, 0.9724000096321106f);
style.Colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.1333333402872086f, 0.2588235437870026f, 0.4235294163227081f, 1.0f);
style.Colors[ImGuiCol_PlotLines] = ImVec4(0.6078431606292725f, 0.6078431606292725f, 0.6078431606292725f, 1.0f);
style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.0f, 0.4274509847164154f, 0.3490196168422699f, 1.0f);
style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.8980392217636108f, 0.6980392336845398f, 0.0f, 1.0f);
style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.0f, 0.6000000238418579f, 0.0f, 1.0f);
style.Colors[ImGuiCol_TableHeaderBg] = ImVec4(0.1882352977991104f, 0.1882352977991104f, 0.2000000029802322f, 1.0f);
style.Colors[ImGuiCol_TableBorderStrong] = ImVec4(0.3098039329051971f, 0.3098039329051971f, 0.3490196168422699f, 1.0f);
style.Colors[ImGuiCol_TableBorderLight] = ImVec4(0.2274509817361832f, 0.2274509817361832f, 0.2470588237047195f, 1.0f);
style.Colors[ImGuiCol_TableRowBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.0f, 1.0f, 1.0f, 0.05999999865889549f);
style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.2588235437870026f, 0.5882353186607361f, 0.9764705896377563f, 0.3499999940395355f);
style.Colors[ImGuiCol_DragDropTarget] = ImVec4(1.0f, 1.0f, 0.0f, 0.8999999761581421f);
style.Colors[ImGuiCol_NavHighlight] = ImVec4(0.2588235437870026f, 0.5882353186607361f, 0.9764705896377563f, 1.0f);
style.Colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.0f, 1.0f, 1.0f, 0.699999988079071f);
style.Colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.800000011920929f, 0.800000011920929f, 0.800000011920929f, 0.2000000029802322f);
style.Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.800000011920929f, 0.800000011920929f, 0.800000011920929f, 0.3499999940395355f);
}
void SetupImGuiStyle_Deep_Dark()
{
// Deep Dark style by janekb04 from ImThemes
ImGuiStyle& style = ImGui::GetStyle();
style.Alpha = 1.0f;
style.DisabledAlpha = 0.6000000238418579f;
style.WindowPadding = ImVec2(8.0f, 8.0f);
style.WindowRounding = 7.0f;
style.WindowBorderSize = 1.0f;
style.WindowMinSize = ImVec2(32.0f, 32.0f);
style.WindowTitleAlign = ImVec2(0.0f, 0.5f);
style.WindowMenuButtonPosition = ImGuiDir_Left;
style.ChildRounding = 4.0f;
style.ChildBorderSize = 1.0f;
style.PopupRounding = 4.0f;
style.PopupBorderSize = 1.0f;
style.FramePadding = ImVec2(5.0f, 2.0f);
style.FrameRounding = 3.0f;
style.FrameBorderSize = 1.0f;
style.ItemSpacing = ImVec2(6.0f, 6.0f);
style.ItemInnerSpacing = ImVec2(6.0f, 6.0f);
style.CellPadding = ImVec2(6.0f, 6.0f);
style.IndentSpacing = 25.0f;
style.ColumnsMinSpacing = 6.0f;
style.ScrollbarSize = 15.0f;
style.ScrollbarRounding = 9.0f;
style.GrabMinSize = 10.0f;
style.GrabRounding = 3.0f;
style.TabRounding = 4.0f;
style.TabBorderSize = 1.0f;
style.TabMinWidthForCloseButton = 0.0f;
style.ColorButtonPosition = ImGuiDir_Right;
style.ButtonTextAlign = ImVec2(0.5f, 0.5f);
style.SelectableTextAlign = ImVec2(0.0f, 0.0f);
style.Colors[ImGuiCol_Text] = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.4980392158031464f, 0.4980392158031464f, 0.4980392158031464f, 1.0f);
style.Colors[ImGuiCol_WindowBg] = ImVec4(0.09803921729326248f, 0.09803921729326248f, 0.09803921729326248f, 1.0f);
style.Colors[ImGuiCol_ChildBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_PopupBg] = ImVec4(0.1882352977991104f, 0.1882352977991104f, 0.1882352977991104f, 0.9200000166893005f);
style.Colors[ImGuiCol_Border] = ImVec4(0.1882352977991104f, 0.1882352977991104f, 0.1882352977991104f, 0.2899999916553497f);
style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.0f, 0.0f, 0.0f, 0.239999994635582f);
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.0470588244497776f, 0.0470588244497776f, 0.0470588244497776f, 0.5400000214576721f);
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.1882352977991104f, 0.1882352977991104f, 0.1882352977991104f, 0.5400000214576721f);
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.2000000029802322f, 0.2196078449487686f, 0.2274509817361832f, 1.0f);
style.Colors[ImGuiCol_TitleBg] = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.05882352963089943f, 0.05882352963089943f, 0.05882352963089943f, 1.0f);
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.1372549086809158f, 0.1372549086809158f, 0.1372549086809158f, 1.0f);
style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.0470588244497776f, 0.0470588244497776f, 0.0470588244497776f, 0.5400000214576721f);
style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.3372549116611481f, 0.3372549116611481f, 0.3372549116611481f, 0.5400000214576721f);
style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.4000000059604645f, 0.4000000059604645f, 0.4000000059604645f, 0.5400000214576721f);
style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.5568627715110779f, 0.5568627715110779f, 0.5568627715110779f, 0.5400000214576721f);
style.Colors[ImGuiCol_CheckMark] = ImVec4(0.3294117748737335f, 0.6666666865348816f, 0.8588235378265381f, 1.0f);
style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.3372549116611481f, 0.3372549116611481f, 0.3372549116611481f, 0.5400000214576721f);
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.5568627715110779f, 0.5568627715110779f, 0.5568627715110779f, 0.5400000214576721f);
style.Colors[ImGuiCol_Button] = ImVec4(0.0470588244497776f, 0.0470588244497776f, 0.0470588244497776f, 0.5400000214576721f);
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.1882352977991104f, 0.1882352977991104f, 0.1882352977991104f, 0.5400000214576721f);
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.2000000029802322f, 0.2196078449487686f, 0.2274509817361832f, 1.0f);
style.Colors[ImGuiCol_Header] = ImVec4(0.0f, 0.0f, 0.0f, 0.5199999809265137f);
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.0f, 0.0f, 0.0f, 0.3600000143051147f);
style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.2000000029802322f, 0.2196078449487686f, 0.2274509817361832f, 0.3300000131130219f);
style.Colors[ImGuiCol_Separator] = ImVec4(0.2784313857555389f, 0.2784313857555389f, 0.2784313857555389f, 0.2899999916553497f);
style.Colors[ImGuiCol_SeparatorHovered] = ImVec4(0.4392156898975372f, 0.4392156898975372f, 0.4392156898975372f, 0.2899999916553497f);
style.Colors[ImGuiCol_SeparatorActive] = ImVec4(0.4000000059604645f, 0.4392156898975372f, 0.4666666686534882f, 1.0f);
style.Colors[ImGuiCol_ResizeGrip] = ImVec4(0.2784313857555389f, 0.2784313857555389f, 0.2784313857555389f, 0.2899999916553497f);
style.Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.4392156898975372f, 0.4392156898975372f, 0.4392156898975372f, 0.2899999916553497f);
style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.4000000059604645f, 0.4392156898975372f, 0.4666666686534882f, 1.0f);
style.Colors[ImGuiCol_Tab] = ImVec4(0.0f, 0.0f, 0.0f, 0.5199999809265137f);
style.Colors[ImGuiCol_TabHovered] = ImVec4(0.1372549086809158f, 0.1372549086809158f, 0.1372549086809158f, 1.0f);
style.Colors[ImGuiCol_TabActive] = ImVec4(0.2000000029802322f, 0.2000000029802322f, 0.2000000029802322f, 0.3600000143051147f);
style.Colors[ImGuiCol_TabUnfocused] = ImVec4(0.0f, 0.0f, 0.0f, 0.5199999809265137f);
style.Colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.1372549086809158f, 0.1372549086809158f, 0.1372549086809158f, 1.0f);
style.Colors[ImGuiCol_PlotLines] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_PlotHistogram] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_TableHeaderBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.5199999809265137f);
style.Colors[ImGuiCol_TableBorderStrong] = ImVec4(0.0f, 0.0f, 0.0f, 0.5199999809265137f);
style.Colors[ImGuiCol_TableBorderLight] = ImVec4(0.2784313857555389f, 0.2784313857555389f, 0.2784313857555389f, 0.2899999916553497f);
style.Colors[ImGuiCol_TableRowBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.0f);
style.Colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.0f, 1.0f, 1.0f, 0.05999999865889549f);
style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.2000000029802322f, 0.2196078449487686f, 0.2274509817361832f, 1.0f);
style.Colors[ImGuiCol_DragDropTarget] = ImVec4(0.3294117748737335f, 0.6666666865348816f, 0.8588235378265381f, 1.0f);
style.Colors[ImGuiCol_NavHighlight] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
style.Colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.0f, 0.0f, 0.0f, 0.699999988079071f);
style.Colors[ImGuiCol_NavWindowingDimBg] = ImVec4(1.0f, 0.0f, 0.0f, 0.2000000029802322f);
style.Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(1.0f, 0.0f, 0.0f, 0.3499999940395355f);
}
void SetupImGuiStyle_Bootsrap()
{
@ -299,6 +481,12 @@ void ThemeManager_ChangeTheme(int ThemeID)
SetupImGuiStyle_Windark();
// Add your logic for Option 3 here
break;
case 3:
SetupImGuiStyle_Deep_Dark();
break;
case 4:
SetupImGuiStyle_Tesseract_Black();
break;
default:
SetupImGuiStyle_Windark();

View File

@ -181,6 +181,9 @@ void InspectorWindow::Show()
// printf("%p\n", &transform);
if (transformOpen)
{
//if (ImGui::Button("Remove##Transform")) {
// g_SelectedObject->RemoveComponent(transform);
//}
if (ImGui::IsItemHovered())
{
ImGui::BeginTooltip();
@ -253,12 +256,14 @@ void InspectorWindow::Show()
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
// Create a collapsing header for the Camera component
bool cameraOpen = ImGui::CollapsingHeader(ICON_FA_CAMERA "Camera##CamerInspector", ImGuiTreeNodeFlags_DefaultOpen);
bool cameraOpen = ImGui::CollapsingHeader(ICON_FA_CAMERA " Camera##CamerInspector", ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PopStyleColor(); // Revert text color
if (cameraOpen)
{
if (ImGui::Button("Remove##Camera")) {
g_SelectedObject->RemoveComponent(camera);
}
// Edit Field of View (FOV)
if (ImGui::InputFloat("Field of View°", &camera->FOV, 1.0f, 10.0f, "%.1f"))
{
@ -297,7 +302,6 @@ void InspectorWindow::Show()
camera->AspectRatio = 1.77f; // Default to 16:9
}
// *** Begin Changed Code ***
// Replace the "Orthographic" Checkbox with a "Perspective" Switch
@ -337,7 +341,6 @@ void InspectorWindow::Show()
projectionMode.c_str(),
g_SelectedObject->name.c_str());
}
ImGui::PopStyleVar();
// Optional: Add a tooltip for the Perspective switch
if (ImGui::IsItemHovered())
@ -347,14 +350,6 @@ void InspectorWindow::Show()
ImGui::EndTooltip();
}
// *** End Changed Code ***
// Add more camera properties here as needed
ImGui::Spacing();
// Replace the "Set as Primary" Button with a Checkbox
// Determine if the current camera is the primary camera
bool isPrimary = (g_RuntimeCameraObject == camera);
@ -392,6 +387,8 @@ void InspectorWindow::Show()
g_LoggerWindow->AddLog("Unset Primary Camera: %s", ImVec4(1.0f, 0.0f, 0.0f, 1.0f), g_SelectedObject->name.c_str());
}
}
ImGui::PopStyleVar();
//// Optional: Indicate if this camera is currently the primary camera
// if (g_RuntimeCameraObject == camera)
@ -415,7 +412,9 @@ void InspectorWindow::Show()
if (meshOpen)
{
// --- Mesh Path (Editable) ---
if (ImGui::Button("Remove##Mesh")) {
g_SelectedObject->RemoveComponent(mesh);
}
const size_t BUFFER_SIZE = 256;
char buffer[BUFFER_SIZE];
strncpy(buffer, mesh->MeshPath.c_str(), BUFFER_SIZE - 1);
@ -424,9 +423,10 @@ void InspectorWindow::Show()
if (ImGui::InputText("Mesh Path", buffer, BUFFER_SIZE))
{
mesh->MeshPath = buffer;
// Optionally, trigger reloading the mesh if the path changes
// Example:
}
if (ImGui::Button("Reload Mesh")) {
std::shared_ptr<Model> model = g_AssetManager->loadAsset<Model>(AssetType::MODEL, mesh->MeshPath.c_str());
}
// --- Submeshes Information ---
@ -518,6 +518,9 @@ void InspectorWindow::Show()
if (scriptOpen)
{
if (ImGui::Button("Remove##Script")) {
g_SelectedObject->RemoveComponent(script);
}
// Define a maximum buffer size for script path
const size_t BUFFER_SIZE = 256;

View File

@ -166,7 +166,7 @@ void PerformanceWindow::Show(float fps, float ms)
const char *options[] = {"Bootsrap", "Duck Red", "Windark"};
const char *options[] = {"Bootsrap", "Duck Red", "Windark", "Deep Dark", "Tesseract Black"};
static int current_option = -1; // No selection initially
const char *preview_value = (current_option >= 0 && current_option < 3) ? options[current_option] : "Select an option";