Added Lua User Input System.
This commit is contained in:
parent
513414608d
commit
f7f5ffa4e4
2
Makefile
2
Makefile
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Compiler and Flags
|
# Compiler and Flags
|
||||||
CXX := g++
|
CXX := g++
|
||||||
CXXFLAGS := -Wall -Wextra -std=c++17 -g -DDEBUG
|
CXXFLAGS := -Wall -Wextra -std=c++17 -g -DDEBUG -DTIMERS
|
||||||
|
|
||||||
# Directories
|
# Directories
|
||||||
SRC_DIR := src
|
SRC_DIR := src
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
local Engine = require("./assets/scripts/engine")
|
local Engine = require("./assets/scripts/engine")
|
||||||
|
local KeyCode = require("./assets/scripts/keycode")
|
||||||
|
|
||||||
|
|
||||||
local transform = nil
|
local transform = nil
|
||||||
@ -6,30 +7,49 @@ local transform = nil
|
|||||||
local new_rotation = 0
|
local new_rotation = 0
|
||||||
|
|
||||||
local new_rotationSpeed = 15
|
local new_rotationSpeed = 15
|
||||||
|
local Move_Speec = 300
|
||||||
|
|
||||||
function OnInit()
|
function OnInit()
|
||||||
local gameObject = Engine.GetGameObjectByTag("Camera")
|
local gameObject = Engine.GetGameObjectByTag("Camera")
|
||||||
transform = gameObject:GetComponent("Transform")
|
transform = gameObject:GetComponent("Transform")
|
||||||
Engine.Log("Init Done")
|
Engine.Log("Init Done")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function OnUpdate(deltaTime)
|
function OnUpdate(deltaTime)
|
||||||
local gameObject = Engine.GetGameObjectByTag("Camera")
|
local gameObject = Engine.GetGameObjectByTag("Camera")
|
||||||
transform = gameObject:GetComponent("Transform")
|
transform = gameObject:GetComponent("Transform")
|
||||||
|
|
||||||
local old_rotation = transform:GetRotation()
|
local old_rotation = transform:GetRotation()
|
||||||
|
|
||||||
|
|
||||||
local rotation = {
|
local Position = transform:GetPosition()
|
||||||
x = old_rotation.x, -- Preserving existing new_rotation on X-axis
|
|
||||||
y = new_rotation, -- Updated new_rotation on Y-axis for spinning
|
if Engine.KeyDown(KeyCode.W) then
|
||||||
z = old_rotation.z -- Preserving existing new_rotation on Z-axis
|
Position.x = Position.x + (deltaTime * Move_Speec)
|
||||||
}
|
end
|
||||||
-- Apply the new new_rotation to the Transform component
|
if Engine.KeyDown(KeyCode.S) then
|
||||||
transform:SetRotation(rotation)
|
Position.x = Position.x - (deltaTime * Move_Speec)
|
||||||
new_rotation = new_rotation + (deltaTime * new_rotationSpeed)
|
end
|
||||||
if new_rotation >= 360 then
|
if Engine.KeyDown(KeyCode.D) then
|
||||||
new_rotation = 0
|
Position.z = Position.z + (deltaTime * Move_Speec)
|
||||||
end
|
end
|
||||||
end
|
if Engine.KeyDown(KeyCode.A) then
|
||||||
|
Position.z = Position.z - (deltaTime * Move_Speec)
|
||||||
|
end
|
||||||
|
|
||||||
|
transform:SetPosition(Position)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
1
assets/scripts/keycode.lua
Normal file
1
assets/scripts/keycode.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
return _T_KeyCode_Table
|
40
imgui.ini
40
imgui.ini
@ -1,6 +1,6 @@
|
|||||||
[Window][DockSpace]
|
[Window][DockSpace]
|
||||||
Pos=0,0
|
Pos=0,0
|
||||||
Size=1280,720
|
Size=1920,1177
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Debug##Default]
|
[Window][Debug##Default]
|
||||||
@ -80,8 +80,8 @@ Collapsed=0
|
|||||||
DockId=0x0000001F,0
|
DockId=0x0000001F,0
|
||||||
|
|
||||||
[Window][Performance##performance]
|
[Window][Performance##performance]
|
||||||
Pos=8,435
|
Pos=8,706
|
||||||
Size=322,277
|
Size=322,463
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x0000001C,0
|
DockId=0x0000001C,0
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ DockId=0x0000000F,0
|
|||||||
|
|
||||||
[Window][Scene Window##SceneWindow]
|
[Window][Scene Window##SceneWindow]
|
||||||
Pos=8,28
|
Pos=8,28
|
||||||
Size=322,405
|
Size=322,676
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x0000001B,0
|
DockId=0x0000001B,0
|
||||||
|
|
||||||
@ -134,26 +134,26 @@ Collapsed=0
|
|||||||
DockId=0x0000001E,0
|
DockId=0x0000001E,0
|
||||||
|
|
||||||
[Window][ Logger##logger]
|
[Window][ Logger##logger]
|
||||||
Pos=607,354
|
Pos=1070,811
|
||||||
Size=277,358
|
Size=454,358
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000024,0
|
DockId=0x00000024,0
|
||||||
|
|
||||||
[Window][ Editor##EditorWindow]
|
[Window][ Editor##EditorWindow]
|
||||||
Pos=332,28
|
Pos=332,28
|
||||||
Size=552,324
|
Size=1192,781
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x0000001F,0
|
DockId=0x0000001F,0
|
||||||
|
|
||||||
[Window][ Inspector##InspectorWindow]
|
[Window][ Inspector##InspectorWindow]
|
||||||
Pos=886,28
|
Pos=1526,28
|
||||||
Size=386,684
|
Size=386,1141
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000022,0
|
DockId=0x00000022,0
|
||||||
|
|
||||||
[Window][ Profiler]
|
[Window][ Profiler]
|
||||||
Pos=332,354
|
Pos=332,811
|
||||||
Size=273,358
|
Size=736,358
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000023,0
|
DockId=0x00000023,0
|
||||||
|
|
||||||
@ -164,14 +164,14 @@ Column 2 Weight=0.6474
|
|||||||
Column 3 Weight=1.0088
|
Column 3 Weight=1.0088
|
||||||
|
|
||||||
[Table][0x08173DEA,4]
|
[Table][0x08173DEA,4]
|
||||||
Column 0 Weight=1.0000
|
Column 0 Weight=1.2209
|
||||||
Column 1 Weight=1.0000
|
Column 1 Weight=1.1411
|
||||||
Column 2 Weight=1.0000
|
Column 2 Weight=1.2270
|
||||||
Column 3 Weight=1.0000
|
Column 3 Weight=0.4110
|
||||||
|
|
||||||
[Docking][Data]
|
[Docking][Data]
|
||||||
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=172,215 Size=1264,684 Split=X Selected=0xF7365A5A
|
DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=8,51 Size=1904,1141 Split=X Selected=0xF7365A5A
|
||||||
DockNode ID=0x00000021 Parent=0x14621557 SizeRef=876,1139 Split=X
|
DockNode ID=0x00000021 Parent=0x14621557 SizeRef=1516,1141 Split=X
|
||||||
DockNode ID=0x00000013 Parent=0x00000021 SizeRef=322,1142 Split=Y Selected=0x818D04BB
|
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=0x0000001B Parent=0x00000013 SizeRef=264,675 HiddenTabBar=1 Selected=0x1D5D92B6
|
||||||
DockNode ID=0x0000001C Parent=0x00000013 SizeRef=264,463 HiddenTabBar=1 Selected=0x818D04BB
|
DockNode ID=0x0000001C Parent=0x00000013 SizeRef=264,463 HiddenTabBar=1 Selected=0x818D04BB
|
||||||
@ -194,8 +194,8 @@ DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=172,215
|
|||||||
DockNode ID=0x0000001D Parent=0x00000017 SizeRef=518,720 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=0x0000001F Parent=0x0000001D SizeRef=518,779 CentralNode=1 Selected=0x9A7B23B9
|
||||||
DockNode ID=0x00000020 Parent=0x0000001D SizeRef=518,358 Split=X Selected=0x7A66B86B
|
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=0x00000023 Parent=0x00000020 SizeRef=736,358 HiddenTabBar=1 Selected=0x7A66B86B
|
||||||
DockNode ID=0x00000024 Parent=0x00000020 SizeRef=277,358 HiddenTabBar=1 Selected=0x1F29F1F5
|
DockNode ID=0x00000024 Parent=0x00000020 SizeRef=454,358 HiddenTabBar=1 Selected=0x1F29F1F5
|
||||||
DockNode ID=0x0000001E Parent=0x00000017 SizeRef=518,417 Selected=0xC74E1AEE
|
DockNode ID=0x0000001E Parent=0x00000017 SizeRef=518,417 Selected=0xC74E1AEE
|
||||||
DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1202,364 Split=X Selected=0x1C0788A1
|
DockNode ID=0x00000018 Parent=0x0000000D SizeRef=1202,364 Split=X Selected=0x1C0788A1
|
||||||
DockNode ID=0x00000019 Parent=0x00000018 SizeRef=601,364 Selected=0x1C0788A1
|
DockNode ID=0x00000019 Parent=0x00000018 SizeRef=601,364 Selected=0x1C0788A1
|
||||||
@ -204,7 +204,7 @@ DockSpace ID=0x14621557 Window=0x3DA2F1DE Pos=172,215
|
|||||||
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196
|
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=1202,291 Selected=0x9DD4E196
|
||||||
DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB
|
DockNode ID=0x00000002 Parent=0x00000008 SizeRef=334,1142 HiddenTabBar=1 Selected=0x36DC96AB
|
||||||
DockNode ID=0x00000016 Parent=0x00000014 SizeRef=420,1142 Selected=0x8D0E8380
|
DockNode ID=0x00000016 Parent=0x00000014 SizeRef=420,1142 Selected=0x8D0E8380
|
||||||
DockNode ID=0x00000022 Parent=0x14621557 SizeRef=386,1139 Selected=0xD1D25642
|
DockNode ID=0x00000022 Parent=0x14621557 SizeRef=386,1141 Selected=0xD1D25642
|
||||||
DockSpace ID=0xC6145A92 Pos=8,27 Size=1904,1142 Split=X
|
DockSpace ID=0xC6145A92 Pos=8,27 Size=1904,1142 Split=X
|
||||||
DockNode ID=0x0000000F Parent=0xC6145A92 SizeRef=301,1142 Selected=0xA8433A03
|
DockNode ID=0x0000000F Parent=0xC6145A92 SizeRef=301,1142 Selected=0xA8433A03
|
||||||
DockNode ID=0x00000010 Parent=0xC6145A92 SizeRef=1601,1142 CentralNode=1
|
DockNode ID=0x00000010 Parent=0xC6145A92 SizeRef=1601,1142 CentralNode=1
|
||||||
|
@ -88,6 +88,7 @@ bool GameObject::RemoveComponent(const std::shared_ptr<Component> &component)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameObject::Update(float deltaTime)
|
void GameObject::Update(float deltaTime)
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include "Engine/SceneManager.h"
|
#include "Engine/SceneManager.h"
|
||||||
#include "Engine/LuaAPI.h"
|
#include "Engine/LuaAPI.h"
|
||||||
#include "Engine/Utilitys.h"
|
#include "Engine/Utilitys.h"
|
||||||
|
#include "Engine/InputManager.h"
|
||||||
#include "Engine/ScopedTimer.h"
|
#include "Engine/ScopedTimer.h"
|
||||||
#include "Engine/Profiler.h"
|
#include "Engine/Profiler.h"
|
||||||
|
|
||||||
@ -48,6 +48,9 @@ LoggerWindow *g_LoggerWindow;
|
|||||||
|
|
||||||
SceneManager g_SceneManager;
|
SceneManager g_SceneManager;
|
||||||
|
|
||||||
|
InputManager g_InputManager;
|
||||||
|
|
||||||
|
|
||||||
std::vector<std::shared_ptr<GameObject>> g_GameObjects;
|
std::vector<std::shared_ptr<GameObject>> g_GameObjects;
|
||||||
|
|
||||||
std::shared_ptr<CameraComponent> g_RuntimeCameraObject;
|
std::shared_ptr<CameraComponent> g_RuntimeCameraObject;
|
||||||
@ -202,6 +205,13 @@ void MyEngine::Run()
|
|||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
SCOPE_TIMER("InputManagerUpdate");
|
||||||
|
g_InputManager.Update(m_Window);
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate current time
|
// Calculate current time
|
||||||
double current_time = glfwGetTime();
|
double current_time = glfwGetTime();
|
||||||
|
|
||||||
|
29
src/Engine/InputManager.cpp
Normal file
29
src/Engine/InputManager.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// InputManager.cpp
|
||||||
|
#include "InputManager.h"
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void InputManager::Update(GLFWwindow* window)
|
||||||
|
{
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the state of each key
|
||||||
|
for (int key = 0; key <= GLFW_KEY_LAST; ++key)
|
||||||
|
{
|
||||||
|
m_KeyStates[key] = glfwGetKey(window, key) == GLFW_PRESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InputManager::IsKeyPressed(KeyCode key) const
|
||||||
|
{
|
||||||
|
int keyInt = static_cast<int>(key);
|
||||||
|
if (keyInt >= 0 && keyInt <= GLFW_KEY_LAST)
|
||||||
|
{
|
||||||
|
return m_KeyStates[keyInt];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
20
src/Engine/InputManager.h
Normal file
20
src/Engine/InputManager.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// InputManager.h
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "KeyCode.h"
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
|
||||||
|
class InputManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Update key states (to be called every frame)
|
||||||
|
void Update(GLFWwindow* window);
|
||||||
|
|
||||||
|
// Check if a key is pressed
|
||||||
|
bool IsKeyPressed(KeyCode key) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Array or map storing key states
|
||||||
|
bool m_KeyStates[GLFW_KEY_LAST + 1] = { false };
|
||||||
|
};
|
128
src/Engine/KeyCode.h
Normal file
128
src/Engine/KeyCode.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
// KeyCode.h
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
enum class KeyCode
|
||||||
|
{
|
||||||
|
Space = GLFW_KEY_SPACE,
|
||||||
|
Apostrophe = GLFW_KEY_APOSTROPHE,
|
||||||
|
Comma = GLFW_KEY_COMMA,
|
||||||
|
Minus = GLFW_KEY_MINUS,
|
||||||
|
Period = GLFW_KEY_PERIOD,
|
||||||
|
Slash = GLFW_KEY_SLASH,
|
||||||
|
D0 = GLFW_KEY_0,
|
||||||
|
D1 = GLFW_KEY_1,
|
||||||
|
D2 = GLFW_KEY_2,
|
||||||
|
D3 = GLFW_KEY_3,
|
||||||
|
D4 = GLFW_KEY_4,
|
||||||
|
D5 = GLFW_KEY_5,
|
||||||
|
D6 = GLFW_KEY_6,
|
||||||
|
D7 = GLFW_KEY_7,
|
||||||
|
D8 = GLFW_KEY_8,
|
||||||
|
D9 = GLFW_KEY_9,
|
||||||
|
Semicolon = GLFW_KEY_SEMICOLON,
|
||||||
|
Equal = GLFW_KEY_EQUAL,
|
||||||
|
A = GLFW_KEY_A,
|
||||||
|
B = GLFW_KEY_B,
|
||||||
|
C = GLFW_KEY_C,
|
||||||
|
D = GLFW_KEY_D,
|
||||||
|
E = GLFW_KEY_E,
|
||||||
|
F = GLFW_KEY_F,
|
||||||
|
G = GLFW_KEY_G,
|
||||||
|
H = GLFW_KEY_H,
|
||||||
|
I = GLFW_KEY_I,
|
||||||
|
J = GLFW_KEY_J,
|
||||||
|
K = GLFW_KEY_K,
|
||||||
|
L = GLFW_KEY_L,
|
||||||
|
M = GLFW_KEY_M,
|
||||||
|
N = GLFW_KEY_N,
|
||||||
|
O = GLFW_KEY_O,
|
||||||
|
P = GLFW_KEY_P,
|
||||||
|
Q = GLFW_KEY_Q,
|
||||||
|
R = GLFW_KEY_R,
|
||||||
|
S = GLFW_KEY_S,
|
||||||
|
T = GLFW_KEY_T,
|
||||||
|
U = GLFW_KEY_U,
|
||||||
|
V = GLFW_KEY_V,
|
||||||
|
W = GLFW_KEY_W,
|
||||||
|
X = GLFW_KEY_X,
|
||||||
|
Y = GLFW_KEY_Y,
|
||||||
|
Z = GLFW_KEY_Z,
|
||||||
|
LeftBracket = GLFW_KEY_LEFT_BRACKET,
|
||||||
|
Backslash = GLFW_KEY_BACKSLASH,
|
||||||
|
RightBracket = GLFW_KEY_RIGHT_BRACKET,
|
||||||
|
GraveAccent = GLFW_KEY_GRAVE_ACCENT,
|
||||||
|
World1 = GLFW_KEY_WORLD_1,
|
||||||
|
World2 = GLFW_KEY_WORLD_2,
|
||||||
|
Escape = GLFW_KEY_ESCAPE,
|
||||||
|
Enter = GLFW_KEY_ENTER,
|
||||||
|
Tab = GLFW_KEY_TAB,
|
||||||
|
Backspace = GLFW_KEY_BACKSPACE,
|
||||||
|
Insert = GLFW_KEY_INSERT,
|
||||||
|
Delete = GLFW_KEY_DELETE,
|
||||||
|
Right = GLFW_KEY_RIGHT,
|
||||||
|
Left = GLFW_KEY_LEFT,
|
||||||
|
Down = GLFW_KEY_DOWN,
|
||||||
|
Up = GLFW_KEY_UP,
|
||||||
|
PageUp = GLFW_KEY_PAGE_UP,
|
||||||
|
PageDown = GLFW_KEY_PAGE_DOWN,
|
||||||
|
Home = GLFW_KEY_HOME,
|
||||||
|
End = GLFW_KEY_END,
|
||||||
|
CapsLock = GLFW_KEY_CAPS_LOCK,
|
||||||
|
ScrollLock = GLFW_KEY_SCROLL_LOCK,
|
||||||
|
NumLock = GLFW_KEY_NUM_LOCK,
|
||||||
|
PrintScreen = GLFW_KEY_PRINT_SCREEN,
|
||||||
|
Pause = GLFW_KEY_PAUSE,
|
||||||
|
F1 = GLFW_KEY_F1,
|
||||||
|
F2 = GLFW_KEY_F2,
|
||||||
|
F3 = GLFW_KEY_F3,
|
||||||
|
F4 = GLFW_KEY_F4,
|
||||||
|
F5 = GLFW_KEY_F5,
|
||||||
|
F6 = GLFW_KEY_F6,
|
||||||
|
F7 = GLFW_KEY_F7,
|
||||||
|
F8 = GLFW_KEY_F8,
|
||||||
|
F9 = GLFW_KEY_F9,
|
||||||
|
F10 = GLFW_KEY_F10,
|
||||||
|
F11 = GLFW_KEY_F11,
|
||||||
|
F12 = GLFW_KEY_F12,
|
||||||
|
F13 = GLFW_KEY_F13,
|
||||||
|
F14 = GLFW_KEY_F14,
|
||||||
|
F15 = GLFW_KEY_F15,
|
||||||
|
F16 = GLFW_KEY_F16,
|
||||||
|
F17 = GLFW_KEY_F17,
|
||||||
|
F18 = GLFW_KEY_F18,
|
||||||
|
F19 = GLFW_KEY_F19,
|
||||||
|
F20 = GLFW_KEY_F20,
|
||||||
|
F21 = GLFW_KEY_F21,
|
||||||
|
F22 = GLFW_KEY_F22,
|
||||||
|
F23 = GLFW_KEY_F23,
|
||||||
|
F24 = GLFW_KEY_F24,
|
||||||
|
F25 = GLFW_KEY_F25,
|
||||||
|
KP0 = GLFW_KEY_KP_0,
|
||||||
|
KP1 = GLFW_KEY_KP_1,
|
||||||
|
KP2 = GLFW_KEY_KP_2,
|
||||||
|
KP3 = GLFW_KEY_KP_3,
|
||||||
|
KP4 = GLFW_KEY_KP_4,
|
||||||
|
KP5 = GLFW_KEY_KP_5,
|
||||||
|
KP6 = GLFW_KEY_KP_6,
|
||||||
|
KP7 = GLFW_KEY_KP_7,
|
||||||
|
KP8 = GLFW_KEY_KP_8,
|
||||||
|
KP9 = GLFW_KEY_KP_9,
|
||||||
|
KPDecimal = GLFW_KEY_KP_DECIMAL,
|
||||||
|
KPDivide = GLFW_KEY_KP_DIVIDE,
|
||||||
|
KPMultiply = GLFW_KEY_KP_MULTIPLY,
|
||||||
|
KPSubtract = GLFW_KEY_KP_SUBTRACT,
|
||||||
|
KPAdd = GLFW_KEY_KP_ADD,
|
||||||
|
KPEnter = GLFW_KEY_KP_ENTER,
|
||||||
|
KPEqual = GLFW_KEY_KP_EQUAL,
|
||||||
|
LeftShift = GLFW_KEY_LEFT_SHIFT,
|
||||||
|
LeftControl = GLFW_KEY_LEFT_CONTROL,
|
||||||
|
LeftAlt = GLFW_KEY_LEFT_ALT,
|
||||||
|
LeftSuper = GLFW_KEY_LEFT_SUPER,
|
||||||
|
RightShift = GLFW_KEY_RIGHT_SHIFT,
|
||||||
|
RightControl = GLFW_KEY_RIGHT_CONTROL,
|
||||||
|
RightAlt = GLFW_KEY_RIGHT_ALT,
|
||||||
|
RightSuper = GLFW_KEY_RIGHT_SUPER,
|
||||||
|
Menu = GLFW_KEY_MENU
|
||||||
|
};
|
@ -9,6 +9,9 @@
|
|||||||
#include "Componenets/ScriptComponent.h"
|
#include "Componenets/ScriptComponent.h"
|
||||||
#include "Componenets/GameObject.h"
|
#include "Componenets/GameObject.h"
|
||||||
#include "Windows/LoggerWindow.h"
|
#include "Windows/LoggerWindow.h"
|
||||||
|
#include "Engine/InputManager.h"
|
||||||
|
|
||||||
|
#include "KeyCode.h"
|
||||||
|
|
||||||
#include <yaml-cpp/yaml.h>
|
#include <yaml-cpp/yaml.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
@ -21,6 +24,10 @@
|
|||||||
// External LoggerWindow instance for logging
|
// External LoggerWindow instance for logging
|
||||||
extern LoggerWindow *g_LoggerWindow;
|
extern LoggerWindow *g_LoggerWindow;
|
||||||
|
|
||||||
|
|
||||||
|
// Forward declaration of the InputManager instance
|
||||||
|
extern InputManager g_InputManager;
|
||||||
|
|
||||||
// External GameObjects list
|
// External GameObjects list
|
||||||
extern std::vector<std::unique_ptr<GameObject>> g_GameObjects;
|
extern std::vector<std::unique_ptr<GameObject>> g_GameObjects;
|
||||||
|
|
||||||
@ -43,6 +50,149 @@ LuaManager::~LuaManager()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Function to create and register the KeyCode table
|
||||||
|
void LuaManager::RegisterKeyCodeTable(lua_State* L)
|
||||||
|
{
|
||||||
|
lua_newtable(L); // Create a new table and push it onto the stack
|
||||||
|
|
||||||
|
// Push key-value pairs
|
||||||
|
#define REGISTER_KEYCODE(name) \
|
||||||
|
lua_pushstring(L, #name); \
|
||||||
|
lua_pushinteger(L, static_cast<int>(KeyCode::name)); \
|
||||||
|
lua_settable(L, -3);
|
||||||
|
|
||||||
|
REGISTER_KEYCODE(Space)
|
||||||
|
REGISTER_KEYCODE(Apostrophe)
|
||||||
|
REGISTER_KEYCODE(Comma)
|
||||||
|
REGISTER_KEYCODE(Minus)
|
||||||
|
REGISTER_KEYCODE(Period)
|
||||||
|
REGISTER_KEYCODE(Slash)
|
||||||
|
REGISTER_KEYCODE(D0)
|
||||||
|
REGISTER_KEYCODE(D1)
|
||||||
|
REGISTER_KEYCODE(D2)
|
||||||
|
REGISTER_KEYCODE(D3)
|
||||||
|
REGISTER_KEYCODE(D4)
|
||||||
|
REGISTER_KEYCODE(D5)
|
||||||
|
REGISTER_KEYCODE(D6)
|
||||||
|
REGISTER_KEYCODE(D7)
|
||||||
|
REGISTER_KEYCODE(D8)
|
||||||
|
REGISTER_KEYCODE(D9)
|
||||||
|
REGISTER_KEYCODE(Semicolon)
|
||||||
|
REGISTER_KEYCODE(Equal)
|
||||||
|
REGISTER_KEYCODE(A)
|
||||||
|
REGISTER_KEYCODE(B)
|
||||||
|
REGISTER_KEYCODE(C)
|
||||||
|
REGISTER_KEYCODE(D)
|
||||||
|
REGISTER_KEYCODE(E)
|
||||||
|
REGISTER_KEYCODE(F)
|
||||||
|
REGISTER_KEYCODE(G)
|
||||||
|
REGISTER_KEYCODE(H)
|
||||||
|
REGISTER_KEYCODE(I)
|
||||||
|
REGISTER_KEYCODE(J)
|
||||||
|
REGISTER_KEYCODE(K)
|
||||||
|
REGISTER_KEYCODE(L)
|
||||||
|
REGISTER_KEYCODE(M)
|
||||||
|
REGISTER_KEYCODE(N)
|
||||||
|
REGISTER_KEYCODE(O)
|
||||||
|
REGISTER_KEYCODE(P)
|
||||||
|
REGISTER_KEYCODE(Q)
|
||||||
|
REGISTER_KEYCODE(R)
|
||||||
|
REGISTER_KEYCODE(S)
|
||||||
|
REGISTER_KEYCODE(T)
|
||||||
|
REGISTER_KEYCODE(U)
|
||||||
|
REGISTER_KEYCODE(V)
|
||||||
|
REGISTER_KEYCODE(W)
|
||||||
|
REGISTER_KEYCODE(X)
|
||||||
|
REGISTER_KEYCODE(Y)
|
||||||
|
REGISTER_KEYCODE(Z)
|
||||||
|
REGISTER_KEYCODE(LeftBracket)
|
||||||
|
REGISTER_KEYCODE(Backslash)
|
||||||
|
REGISTER_KEYCODE(RightBracket)
|
||||||
|
REGISTER_KEYCODE(GraveAccent)
|
||||||
|
REGISTER_KEYCODE(World1)
|
||||||
|
REGISTER_KEYCODE(World2)
|
||||||
|
REGISTER_KEYCODE(Escape)
|
||||||
|
REGISTER_KEYCODE(Enter)
|
||||||
|
REGISTER_KEYCODE(Tab)
|
||||||
|
REGISTER_KEYCODE(Backspace)
|
||||||
|
REGISTER_KEYCODE(Insert)
|
||||||
|
REGISTER_KEYCODE(Delete)
|
||||||
|
REGISTER_KEYCODE(Right)
|
||||||
|
REGISTER_KEYCODE(Left)
|
||||||
|
REGISTER_KEYCODE(Down)
|
||||||
|
REGISTER_KEYCODE(Up)
|
||||||
|
REGISTER_KEYCODE(PageUp)
|
||||||
|
REGISTER_KEYCODE(PageDown)
|
||||||
|
REGISTER_KEYCODE(Home)
|
||||||
|
REGISTER_KEYCODE(End)
|
||||||
|
REGISTER_KEYCODE(CapsLock)
|
||||||
|
REGISTER_KEYCODE(ScrollLock)
|
||||||
|
REGISTER_KEYCODE(NumLock)
|
||||||
|
REGISTER_KEYCODE(PrintScreen)
|
||||||
|
REGISTER_KEYCODE(Pause)
|
||||||
|
REGISTER_KEYCODE(F1)
|
||||||
|
REGISTER_KEYCODE(F2)
|
||||||
|
REGISTER_KEYCODE(F3)
|
||||||
|
REGISTER_KEYCODE(F4)
|
||||||
|
REGISTER_KEYCODE(F5)
|
||||||
|
REGISTER_KEYCODE(F6)
|
||||||
|
REGISTER_KEYCODE(F7)
|
||||||
|
REGISTER_KEYCODE(F8)
|
||||||
|
REGISTER_KEYCODE(F9)
|
||||||
|
REGISTER_KEYCODE(F10)
|
||||||
|
REGISTER_KEYCODE(F11)
|
||||||
|
REGISTER_KEYCODE(F12)
|
||||||
|
REGISTER_KEYCODE(F13)
|
||||||
|
REGISTER_KEYCODE(F14)
|
||||||
|
REGISTER_KEYCODE(F15)
|
||||||
|
REGISTER_KEYCODE(F16)
|
||||||
|
REGISTER_KEYCODE(F17)
|
||||||
|
REGISTER_KEYCODE(F18)
|
||||||
|
REGISTER_KEYCODE(F19)
|
||||||
|
REGISTER_KEYCODE(F20)
|
||||||
|
REGISTER_KEYCODE(F21)
|
||||||
|
REGISTER_KEYCODE(F22)
|
||||||
|
REGISTER_KEYCODE(F23)
|
||||||
|
REGISTER_KEYCODE(F24)
|
||||||
|
REGISTER_KEYCODE(F25)
|
||||||
|
REGISTER_KEYCODE(KP0)
|
||||||
|
REGISTER_KEYCODE(KP1)
|
||||||
|
REGISTER_KEYCODE(KP2)
|
||||||
|
REGISTER_KEYCODE(KP3)
|
||||||
|
REGISTER_KEYCODE(KP4)
|
||||||
|
REGISTER_KEYCODE(KP5)
|
||||||
|
REGISTER_KEYCODE(KP6)
|
||||||
|
REGISTER_KEYCODE(KP7)
|
||||||
|
REGISTER_KEYCODE(KP8)
|
||||||
|
REGISTER_KEYCODE(KP9)
|
||||||
|
REGISTER_KEYCODE(KPDecimal)
|
||||||
|
REGISTER_KEYCODE(KPDivide)
|
||||||
|
REGISTER_KEYCODE(KPMultiply)
|
||||||
|
REGISTER_KEYCODE(KPSubtract)
|
||||||
|
REGISTER_KEYCODE(KPAdd)
|
||||||
|
REGISTER_KEYCODE(KPEnter)
|
||||||
|
REGISTER_KEYCODE(KPEqual)
|
||||||
|
REGISTER_KEYCODE(LeftShift)
|
||||||
|
REGISTER_KEYCODE(LeftControl)
|
||||||
|
REGISTER_KEYCODE(LeftAlt)
|
||||||
|
REGISTER_KEYCODE(LeftSuper)
|
||||||
|
REGISTER_KEYCODE(RightShift)
|
||||||
|
REGISTER_KEYCODE(RightControl)
|
||||||
|
REGISTER_KEYCODE(RightAlt)
|
||||||
|
REGISTER_KEYCODE(RightSuper)
|
||||||
|
REGISTER_KEYCODE(Menu)
|
||||||
|
|
||||||
|
#undef REGISTER_KEYCODE
|
||||||
|
|
||||||
|
// Set the table in the global namespace as 'KeyCode'
|
||||||
|
lua_setglobal(L, "_T_KeyCode_Table");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Initialize the LuaManager with the given script path
|
// Initialize the LuaManager with the given script path
|
||||||
bool LuaManager::Initialize(const std::string &scriptPath)
|
bool LuaManager::Initialize(const std::string &scriptPath)
|
||||||
{
|
{
|
||||||
@ -84,6 +234,8 @@ bool LuaManager::Initialize(const std::string &scriptPath)
|
|||||||
// Register all necessary metatables
|
// Register all necessary metatables
|
||||||
RegisterAllMetatables();
|
RegisterAllMetatables();
|
||||||
|
|
||||||
|
RegisterKeyCodeTable(m_LuaState);
|
||||||
|
|
||||||
// Create the Engine table
|
// Create the Engine table
|
||||||
lua_newtable(m_LuaState);
|
lua_newtable(m_LuaState);
|
||||||
lua_setglobal(m_LuaState, "_T_Engine_Table");
|
lua_setglobal(m_LuaState, "_T_Engine_Table");
|
||||||
@ -96,6 +248,10 @@ bool LuaManager::Initialize(const std::string &scriptPath)
|
|||||||
lua_pushcfunction(m_LuaState, Lua_Engine_Expose);
|
lua_pushcfunction(m_LuaState, Lua_Engine_Expose);
|
||||||
lua_setfield(m_LuaState, -2, "Expose");
|
lua_setfield(m_LuaState, -2, "Expose");
|
||||||
|
|
||||||
|
// Bind the KeyDown function to Engine.KeyDown
|
||||||
|
lua_pushcfunction(m_LuaState, Lua_Engine_KeyDown);
|
||||||
|
lua_setfield(m_LuaState, -2, "KeyDown");
|
||||||
|
|
||||||
// Add the ScriptName binding
|
// Add the ScriptName binding
|
||||||
lua_pushcfunction(m_LuaState, Lua_Engine_ScriptName);
|
lua_pushcfunction(m_LuaState, Lua_Engine_ScriptName);
|
||||||
lua_setfield(m_LuaState, -2, "ScriptName");
|
lua_setfield(m_LuaState, -2, "ScriptName");
|
||||||
@ -212,6 +368,26 @@ void LuaManager::UpdateVariable(const std::string &name, const LuaManager::LuaEx
|
|||||||
lua_pop(m_LuaState, 1);
|
lua_pop(m_LuaState, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Lua binding for Engine.KeyDown
|
||||||
|
int LuaManager::Lua_Engine_KeyDown(lua_State* L)
|
||||||
|
{
|
||||||
|
// Check if the first argument is an integer (keycode)
|
||||||
|
if (!lua_isinteger(L, 1))
|
||||||
|
{
|
||||||
|
lua_pushstring(L, "KeyDown expects an integer keycode argument.");
|
||||||
|
lua_error(L); // Raises a Lua error and does not return
|
||||||
|
return 0; // This line won't be reached
|
||||||
|
}
|
||||||
|
|
||||||
|
int keycode = static_cast<int>(lua_tointeger(L, 1));
|
||||||
|
|
||||||
|
// Check if the key is currently pressed
|
||||||
|
bool isPressed = g_InputManager.IsKeyPressed(static_cast<KeyCode>(keycode));
|
||||||
|
|
||||||
|
lua_pushboolean(L, isPressed ? 1 : 0); // Push true or false onto the Lua stack
|
||||||
|
|
||||||
|
return 1; // Number of return values
|
||||||
|
}
|
||||||
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
|
// Check that at least two arguments are passed: name and value
|
||||||
|
@ -62,12 +62,9 @@ public:
|
|||||||
|
|
||||||
using LuaExposedVariant = std::variant<int, float, std::string, bool>;
|
using LuaExposedVariant = std::variant<int, float, std::string, bool>;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Retrieve exposed variables
|
// Retrieve exposed variables
|
||||||
std::unordered_map<std::string, LuaExposedVariant> GetExposedVariables();
|
std::unordered_map<std::string, LuaExposedVariant> GetExposedVariables();
|
||||||
void UpdateVariable(const std::string& name, const LuaExposedVariant& value);
|
void UpdateVariable(const std::string &name, const LuaExposedVariant &value);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Lua state
|
// Lua state
|
||||||
@ -79,13 +76,14 @@ private:
|
|||||||
|
|
||||||
static std::unordered_map<std::string, LuaExposedVariant> m_ExposedVariables;
|
static std::unordered_map<std::string, LuaExposedVariant> m_ExposedVariables;
|
||||||
|
|
||||||
|
|
||||||
// Last error message to prevent duplicate logging
|
// Last error message to prevent duplicate logging
|
||||||
std::string m_LastErrorMessage;
|
std::string m_LastErrorMessage;
|
||||||
|
|
||||||
|
void RegisterKeyCodeTable(lua_State *L);
|
||||||
|
|
||||||
|
void LogError(const char *message);
|
||||||
|
void HandleLuaError(const std::string &functionName);
|
||||||
|
|
||||||
void LogError(const char* message);
|
|
||||||
void HandleLuaError(const std::string& functionName);
|
|
||||||
|
|
||||||
void RegisterAllMetatables();
|
void RegisterAllMetatables();
|
||||||
void RegisterComponentMetaTable();
|
void RegisterComponentMetaTable();
|
||||||
@ -120,8 +118,7 @@ private:
|
|||||||
static int Lua_Engine_Log(lua_State *L);
|
static int Lua_Engine_Log(lua_State *L);
|
||||||
static int Lua_Engine_ScriptName(lua_State *L);
|
static int Lua_Engine_ScriptName(lua_State *L);
|
||||||
static int Lua_Engine_GetGameObjectByTag(lua_State *L);
|
static int Lua_Engine_GetGameObjectByTag(lua_State *L);
|
||||||
static int Lua_Engine_Expose(lua_State* L);
|
static int Lua_Engine_Expose(lua_State *L);
|
||||||
|
static int Lua_Engine_KeyDown(lua_State* L);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -5,6 +5,22 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
class Profiler; // Forward declaration
|
class Profiler; // Forward declaration
|
||||||
|
// Helper macros for token concatenation
|
||||||
|
#define CONCATENATE_DETAIL(x, y) x##y
|
||||||
|
#define CONCATENATE(x, y) CONCATENATE_DETAIL(x, y)
|
||||||
|
|
||||||
|
#ifdef TIMERS
|
||||||
|
// Use __COUNTER__ for unique variable names if available
|
||||||
|
#ifdef __COUNTER__
|
||||||
|
#define SCOPE_TIMER(name) ScopedTimer CONCATENATE(timer_, __COUNTER__)(name)
|
||||||
|
#else
|
||||||
|
// Fallback to __LINE__ if __COUNTER__ is not supported
|
||||||
|
#define SCOPE_TIMER(name) ScopedTimer CONCATENATE(timer_, __LINE__)(name)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
// When TIMERS is not defined, expand to nothing
|
||||||
|
#define SCOPE_TIMER(name)
|
||||||
|
#endif
|
||||||
|
|
||||||
class ScopedTimer {
|
class ScopedTimer {
|
||||||
public:
|
public:
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <cstring> // for strcpy, if needed
|
#include <cstring> // for strcpy, if needed
|
||||||
|
|
||||||
#include <glm/gtc/type_ptr.hpp> // Required for glm::value_ptr
|
#include <glm/gtc/type_ptr.hpp> // Required for glm::value_ptr
|
||||||
|
#include "Engine/ScopedTimer.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -18,6 +19,8 @@ extern LoggerWindow *g_LoggerWindow;
|
|||||||
|
|
||||||
void InspectorWindow::Show()
|
void InspectorWindow::Show()
|
||||||
{
|
{
|
||||||
|
SCOPE_TIMER("InspectorWindow::Show");
|
||||||
|
|
||||||
// Increase window/item spacing for a cleaner look
|
// Increase window/item spacing for a cleaner look
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(12, 12));
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(12, 12));
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 4));
|
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 4));
|
||||||
|
@ -5,15 +5,18 @@
|
|||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include "Icons.h"
|
#include "Icons.h"
|
||||||
|
#include "Engine/ScopedTimer.h"
|
||||||
|
|
||||||
// Helper function to format strings
|
// Helper function to format strings
|
||||||
static std::string FormatString(const char* fmt, va_list args) {
|
static std::string FormatString(const char *fmt, va_list args)
|
||||||
|
{
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
vsnprintf(buffer, sizeof(buffer), fmt, args);
|
vsnprintf(buffer, sizeof(buffer), fmt, args);
|
||||||
return std::string(buffer);
|
return std::string(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoggerWindow::AddLog(const char* fmt, ...) {
|
void LoggerWindow::AddLog(const char *fmt, ...)
|
||||||
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
std::string formatted = FormatString(fmt, args);
|
std::string formatted = FormatString(fmt, args);
|
||||||
@ -23,7 +26,8 @@ void LoggerWindow::AddLog(const char* fmt, ...) {
|
|||||||
m_ScrollToBottom = true;
|
m_ScrollToBottom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoggerWindow::AddLog(const char* fmt, std::optional<ImVec4> color, ...) {
|
void LoggerWindow::AddLog(const char *fmt, std::optional<ImVec4> color, ...)
|
||||||
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, color);
|
va_start(args, color);
|
||||||
std::string formatted = FormatString(fmt, args);
|
std::string formatted = FormatString(fmt, args);
|
||||||
@ -33,10 +37,14 @@ void LoggerWindow::AddLog(const char* fmt, std::optional<ImVec4> color, ...) {
|
|||||||
m_ScrollToBottom = true;
|
m_ScrollToBottom = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoggerWindow::Show() {
|
void LoggerWindow::Show()
|
||||||
|
{
|
||||||
|
SCOPE_TIMER("LoggerWindow::Show");
|
||||||
|
|
||||||
ImGui::Begin(ICON_FA_TERMINAL " Logger##logger");
|
ImGui::Begin(ICON_FA_TERMINAL " Logger##logger");
|
||||||
|
|
||||||
if (ImGui::Button("Clear")) {
|
if (ImGui::Button("Clear"))
|
||||||
|
{
|
||||||
m_Logs.clear();
|
m_Logs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,18 +53,23 @@ void LoggerWindow::Show() {
|
|||||||
// Begin a child region to enable scrolling
|
// Begin a child region to enable scrolling
|
||||||
ImGui::BeginChild("LoggerScrollRegion", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar);
|
ImGui::BeginChild("LoggerScrollRegion", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||||
|
|
||||||
for (const auto& logEntry : m_Logs) {
|
for (const auto &logEntry : m_Logs)
|
||||||
if (logEntry.color.has_value()) {
|
{
|
||||||
|
if (logEntry.color.has_value())
|
||||||
|
{
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text, logEntry.color.value());
|
ImGui::PushStyleColor(ImGuiCol_Text, logEntry.color.value());
|
||||||
ImGui::TextUnformatted(logEntry.text.c_str());
|
ImGui::TextUnformatted(logEntry.text.c_str());
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
ImGui::TextUnformatted(logEntry.text.c_str());
|
ImGui::TextUnformatted(logEntry.text.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auto-scroll to bottom if new logs are added
|
// Auto-scroll to bottom if new logs are added
|
||||||
if (m_ScrollToBottom) {
|
if (m_ScrollToBottom)
|
||||||
|
{
|
||||||
ImGui::SetScrollHereY(1.0f);
|
ImGui::SetScrollHereY(1.0f);
|
||||||
m_ScrollToBottom = false;
|
m_ScrollToBottom = false;
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,12 @@
|
|||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
#include <algorithm> // for std::max_element, etc.
|
#include <algorithm> // for std::max_element, etc.
|
||||||
#include "Engine/ThemeManager.h"
|
#include "Engine/ThemeManager.h"
|
||||||
|
#include "Engine/ScopedTimer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern int LoadedAssets;
|
extern int LoadedAssets;
|
||||||
extern int g_GPU_Triangles_drawn_to_screen;
|
extern int g_GPU_Triangles_drawn_to_screen;
|
||||||
|
|
||||||
const char* polygonModeOptions[] = { "Fill", "Wireframe", "Points" };
|
const char *polygonModeOptions[] = {"Fill", "Wireframe", "Points"};
|
||||||
const int numPolygonModes = sizeof(polygonModeOptions) / sizeof(polygonModeOptions[0]);
|
const int numPolygonModes = sizeof(polygonModeOptions) / sizeof(polygonModeOptions[0]);
|
||||||
|
|
||||||
int polygonMode = 0;
|
int polygonMode = 0;
|
||||||
@ -49,11 +47,12 @@ void PerformanceWindow::UpdatePerformanceStats(int newCallCount, int newTriangle
|
|||||||
m_TriangleCount = newTriangleCount;
|
m_TriangleCount = newTriangleCount;
|
||||||
|
|
||||||
g_GPU_Triangles_drawn_to_screen = 0;
|
g_GPU_Triangles_drawn_to_screen = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerformanceWindow::Show(float fps, float ms)
|
void PerformanceWindow::Show(float fps, float ms)
|
||||||
{
|
{
|
||||||
|
SCOPE_TIMER("PerformanceWindow::Show");
|
||||||
|
|
||||||
// 1) Get current time from ImGui's internal clock
|
// 1) Get current time from ImGui's internal clock
|
||||||
double currentTime = ImGui::GetTime();
|
double currentTime = ImGui::GetTime();
|
||||||
|
|
||||||
@ -154,7 +153,7 @@ void PerformanceWindow::Show(float fps, float ms)
|
|||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
0.0f,
|
0.0f,
|
||||||
m_TriangleCount*2.5,
|
m_TriangleCount * 2.5,
|
||||||
ImVec2(0, 50));
|
ImVec2(0, 50));
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
@ -164,8 +163,6 @@ void PerformanceWindow::Show(float fps, float ms)
|
|||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char *options[] = {"Bootsrap", "Duck Red", "Windark", "Deep Dark", "Tesseract Black"};
|
const char *options[] = {"Bootsrap", "Duck Red", "Windark", "Deep Dark", "Tesseract Black"};
|
||||||
static int current_option = -1; // No selection initially
|
static int current_option = -1; // No selection initially
|
||||||
|
|
||||||
@ -177,7 +174,7 @@ void PerformanceWindow::Show(float fps, float ms)
|
|||||||
bool is_selected = (current_option == n);
|
bool is_selected = (current_option == n);
|
||||||
if (ImGui::Selectable(options[n], is_selected))
|
if (ImGui::Selectable(options[n], is_selected))
|
||||||
{
|
{
|
||||||
current_option = n; // Update current option
|
current_option = n; // Update current option
|
||||||
ThemeManager_ChangeTheme(n); // Call the function with the selected option
|
ThemeManager_ChangeTheme(n); // Call the function with the selected option
|
||||||
}
|
}
|
||||||
// Set the initial focus when opening the combo (optional)
|
// Set the initial focus when opening the combo (optional)
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream> // For debug statements
|
#include <iostream> // For debug statements
|
||||||
#include "Icons.h"
|
#include "Icons.h"
|
||||||
|
#include "Engine/ScopedTimer.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
ProfilerWindow::ProfilerWindow()
|
ProfilerWindow::ProfilerWindow()
|
||||||
@ -87,6 +88,8 @@ void ProfilerWindow::UpdateHistory(const std::unordered_map<std::string, Profile
|
|||||||
|
|
||||||
void ProfilerWindow::Show()
|
void ProfilerWindow::Show()
|
||||||
{
|
{
|
||||||
|
SCOPE_TIMER("ProfilerWindow::Show");
|
||||||
|
|
||||||
// Check if it's time to update the profiler data
|
// Check if it's time to update the profiler data
|
||||||
auto now = std::chrono::steady_clock::now();
|
auto now = std::chrono::steady_clock::now();
|
||||||
std::chrono::duration<double> elapsed = now - m_LastUpdateTime;
|
std::chrono::duration<double> elapsed = now - m_LastUpdateTime;
|
||||||
@ -99,7 +102,7 @@ void ProfilerWindow::Show()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Begin ImGui window with improved styling
|
// Begin ImGui window with improved styling
|
||||||
ImGui::Begin(ICON_FA_GAUGE " Profiler", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_HorizontalScrollbar);
|
ImGui::Begin(ICON_FA_GAUGE " Profiler", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_HorizontalScrollbar);
|
||||||
|
|
||||||
const auto &data = Profiler::Get().GetLastFrameData();
|
const auto &data = Profiler::Get().GetLastFrameData();
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "Engine/AssetManager.h"
|
#include "Engine/AssetManager.h"
|
||||||
#include "TestModel.h"
|
#include "TestModel.h"
|
||||||
#include "gcml.h"
|
#include "gcml.h"
|
||||||
|
#include "Engine/ScopedTimer.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
@ -28,6 +29,7 @@ std::shared_ptr<GameObject> CreateDefaultCube()
|
|||||||
|
|
||||||
void SceneWindow::Show()
|
void SceneWindow::Show()
|
||||||
{
|
{
|
||||||
|
SCOPE_TIMER("SceneWindow::Show");
|
||||||
if (ImGui::Begin("Scene Window##SceneWindow"))
|
if (ImGui::Begin("Scene Window##SceneWindow"))
|
||||||
{
|
{
|
||||||
// Add Button
|
// Add Button
|
||||||
|
Loading…
Reference in New Issue
Block a user