This commit is contained in:
Isuru Samarathunga
2025-10-12 16:39:29 +05:30
parent 09131d7fab
commit 4380705f81
18 changed files with 511 additions and 94 deletions

View File

@ -1,10 +1,11 @@
set(SRC_FILES set(SRC_FILES
"Src/Imp/CPP/UI.cpp" "Src/Imp/CPP/UI.cpp"
"Src/Imp/CPP/Time.cpp" "Src/Imp/CPP/Time.cpp"
"Src/Imp/CPP/Utils.cpp"
"Src/Imp/CPP/Scene.cpp" "Src/Imp/CPP/Scene.cpp"
"Src/Imp/CPP/Random.cpp" "Src/Imp/CPP/Random.cpp"
"Src/Imp/CPP/Engine.cpp" "Src/Imp/CPP/Engine.cpp"
"Src/Imp/CPP/Utils.cpp" "Src/Imp/CPP/Physics.cpp"
"Src/Imp/CPP/InternalEngine.cpp" "Src/Imp/CPP/InternalEngine.cpp"
"Src/Imp/CPP/InputManager.cpp" "Src/Imp/CPP/InputManager.cpp"

View File

@ -46,7 +46,7 @@ namespace ia::iae
VOID CameraComponent::Update() VOID CameraComponent::Update()
{ {
const auto pos = m_node->GetPosition(); const auto pos = m_node->GetPosition() + m_positionOffset;
m_viewMatrix = glm::lookAtLH(glm::vec3{pos, -2.0f}, {pos, 0.0f}, {0.0f, 1.0f, 0.0f}); m_viewMatrix = glm::lookAtLH(glm::vec3{pos, -2.0f}, {pos, 0.0f}, {0.0f, 1.0f, 0.0f});
} }

View File

@ -0,0 +1,83 @@
// IAEngine: 2D Game Engine by IA
// Copyright (C) 2025 IASoft (PVT) LTD (oss@iasoft.dev)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#include <Physics.hpp>
#include <IAEngine/Nodes/Node2D.hpp>
#include <IAEngine/Components/PhysicsComponent.hpp>
namespace ia::iae
{
PhysicsComponent::PhysicsComponent(IN Node2D *node) : IComponent(node)
{
m_physicsHandle = Physics::RegisterComponent(this);
}
VOID PhysicsComponent::Draw()
{
}
VOID PhysicsComponent::DebugDraw()
{
}
VOID PhysicsComponent::Update()
{
m_velocity = {};
}
VOID PhysicsComponent::FixedUpdate()
{
}
Handle PhysicsComponent::CreateCollider()
{
m_colliders.pushBack({});
return m_colliders.size() - 1;
}
Handle PhysicsComponent::AddCollider(IN Collider collider)
{
m_colliders.pushBack(collider);
return m_colliders.size() - 1;
}
PhysicsComponent::Collider &PhysicsComponent::GetCollider(IN Handle handle)
{
return m_colliders[handle];
}
VOID PhysicsComponent::Move(IN glm::vec2 direction)
{
IA_ASSERT(m_isDynamic);
const auto v = direction * m_movementSpeed;
m_velocity += v;
for(const auto& t: m_colliders)
{
if(!Physics::CanMove(m_physicsHandle, t, v))
return;
}
m_node->SetLocalPosition(m_node->GetLocalPosition() + v);
}
VOID PhysicsComponent::Jump(IN FLOAT32 force)
{
}
VOID PhysicsComponent::OnCollision(IN PhysicsComponent *other)
{
}
} // namespace ia::iae

View File

@ -37,6 +37,20 @@ namespace ia::iae
#endif #endif
} }
Direction Engine::GetVectorPointingDirection(IN Vec2 v)
{
STATIC CONSTEXPR Direction DIRECTION_MAP[] = {Direction::RIGHT, Direction::DOWN_RIGHT, Direction::DOWN, Direction::DOWN_LEFT,
Direction::LEFT, Direction::UP_LEFT, Direction::UP, Direction::UP_RIGHT};
if ((abs(v.x) <= FLOAT32_EPSILON) && (abs(v.y) <= FLOAT32_EPSILON))
return Direction::NONE;
auto angle = glm::degrees(atan2(v.y, v.x));
if (angle < 0)
angle += 360;
return DIRECTION_MAP[INT32((angle + 22.5) / 45) % 8];
}
VOID Engine::ResizeDisplay(IN INT32 newWidth, IN INT32 newHeight) VOID Engine::ResizeDisplay(IN INT32 newWidth, IN INT32 newHeight)
{ {
Renderer::WaitForGPUIdle(); Renderer::WaitForGPUIdle();

View File

@ -22,6 +22,7 @@
#include <Renderer/Renderer.hpp> #include <Renderer/Renderer.hpp>
#include <ResourceManager.hpp> #include <ResourceManager.hpp>
#include <Time.hpp> #include <Time.hpp>
#include <Physics.hpp>
#include <WorldManager.hpp> #include <WorldManager.hpp>
#include <IAEngine/Engine.hpp> #include <IAEngine/Engine.hpp>
@ -64,6 +65,7 @@ namespace ia::iae
ResourceManager::Initialize(); ResourceManager::Initialize();
WorldManager::Initialize(); WorldManager::Initialize();
UI::Initialize(); UI::Initialize();
Physics::Initialize();
g_gameFunctions.OnInitialize(); g_gameFunctions.OnInitialize();
} }
@ -72,6 +74,7 @@ namespace ia::iae
{ {
g_gameFunctions.OnTerminate(); g_gameFunctions.OnTerminate();
Physics::Terminate();
UI::Terminate(); UI::Terminate();
WorldManager::Terminate(); WorldManager::Terminate();
ResourceManager::Terminate(); ResourceManager::Terminate();
@ -90,6 +93,7 @@ namespace ia::iae
VOID __Internal_Engine::Iterate() VOID __Internal_Engine::Iterate()
{ {
UI::Update(); UI::Update();
Physics::Update();
WorldManager::Update(); WorldManager::Update();
WorldManager::FixedUpdate(); WorldManager::FixedUpdate();
g_gameFunctions.OnUpdate(Time::GetFrameDeltaTime()); g_gameFunctions.OnUpdate(Time::GetFrameDeltaTime());

View File

@ -0,0 +1,95 @@
// IAEngine: 2D Game Engine by IA
// Copyright (C) 2025 IASoft (PVT) LTD (oss@iasoft.dev)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#include <IAEngine/Engine.hpp>
#include <Physics.hpp>
namespace ia::iae
{
BOOL g_physicsDebugDrawEnabled = false;
Vector<PhysicsComponent *> g_physicsComponents;
VOID Physics::Initialize()
{
}
VOID Physics::Terminate()
{
}
VOID Physics::Update()
{
if(Engine::WasInputKeyPressed(InputKey::F6))
g_physicsDebugDrawEnabled = !g_physicsDebugDrawEnabled;
}
VOID Physics::DebugDraw()
{
if (!g_physicsDebugDrawEnabled)
return;
for (const auto &t : g_physicsComponents)
{
for (const auto &c : t->Colliders())
{
auto color = Color{192, 0, 0, 0xFF};
if (c.IsTrigger)
color = {64, 96, 192, 192};
Engine::DebugDraw_SetColor(color);
Engine::DebugDraw_SetStrokeWidth(2);
Engine::DebugDraw_StrokeRect(t->GetNode()->GetPosition() + c.Position -
Engine::GetActiveCamera()->GetNode()->GetPosition(),
c.Size);
}
}
}
Handle Physics::RegisterComponent(IN PhysicsComponent *component)
{
g_physicsComponents.pushBack(component);
return g_physicsComponents.size() - 1;
}
BOOL Physics::CanMove(IN Handle handle, IN CONST PhysicsComponent::Collider &collider, IN glm::vec2 movement)
{
const auto comp = g_physicsComponents[handle];
const auto pos = comp->GetNode()->GetPosition() + movement + collider.Position;
for (const auto &t : g_physicsComponents)
{
if (t == comp)
continue;
for (const auto &tc : t->Colliders())
{
const auto tPos = t->GetNode()->GetPosition() + tc.Position;
const auto xColliding = ((pos.x + collider.Size.x) >= tPos.x) && ((tPos.x + tc.Size.x) >= pos.x);
const auto yColliding = ((pos.y + collider.Size.y) >= tPos.y) && ((tPos.y + tc.Size.y) >= pos.y);
if (xColliding && yColliding)
{
// Collision callback
comp->OnCollision(t);
t->OnCollision(comp);
// Overlap block
if (tc.IsTrigger)
continue;
return false;
}
}
}
return true;
}
} // namespace ia::iae

View File

@ -18,6 +18,7 @@
#include <Renderer/Renderer.hpp> #include <Renderer/Renderer.hpp>
#include <Renderer/DebugDraw.hpp> #include <Renderer/DebugDraw.hpp>
#include <Physics.hpp>
#include <WorldManager.hpp> #include <WorldManager.hpp>
#include <IAEngine/imgui/backends/imgui_impl_sdl3.h> #include <IAEngine/imgui/backends/imgui_impl_sdl3.h>
@ -69,6 +70,7 @@ namespace ia::iae
ImGui_ImplSDL3_NewFrame(); ImGui_ImplSDL3_NewFrame();
ImGui::NewFrame(); ImGui::NewFrame();
Physics::DebugDraw();
WorldManager::DebugDraw(); WorldManager::DebugDraw();
g_gameFunctions.OnDebugDraw(); g_gameFunctions.OnDebugDraw();
@ -89,7 +91,7 @@ namespace ia::iae
g_debugDrawState.ActiveColor = IM_COL32(color.R, color.G, color.B, color.A); g_debugDrawState.ActiveColor = IM_COL32(color.R, color.G, color.B, color.A);
} }
VOID Engine::DebugDraw_StrokeWidth(IN FLOAT32 width) VOID Engine::DebugDraw_SetStrokeWidth(IN FLOAT32 width)
{ {
g_debugDrawState.ActiveStrokeWidth = width; g_debugDrawState.ActiveStrokeWidth = width;
} }

View File

@ -239,7 +239,8 @@ namespace ia::iae
const auto sceneExtent = activeScene->Extent(); const auto sceneExtent = activeScene->Extent();
s_state.SceneScaleFactor = {(FLOAT32) newWidth / (FLOAT32) sceneExtent.x, s_state.SceneScaleFactor = {(FLOAT32) newWidth / (FLOAT32) sceneExtent.x,
(FLOAT32) newHeight / (FLOAT32) sceneExtent.y}; (FLOAT32) newHeight / (FLOAT32) sceneExtent.y};
IAE_LOG_INFO("Updated Scene Scale Factor: (", s_state.SceneScaleFactor.x, ", ", s_state.SceneScaleFactor.y, ")"); IAE_LOG_INFO("Updated Scene Scale Factor: (", s_state.SceneScaleFactor.x, ", ", s_state.SceneScaleFactor.y,
")");
} }
} }
@ -319,6 +320,11 @@ namespace ia::iae
Renderer::OnScreenResize(Renderer::s_screenWidth, Renderer::s_screenHeight); Renderer::OnScreenResize(Renderer::s_screenWidth, Renderer::s_screenHeight);
} }
CameraComponent *Engine::GetActiveCamera()
{
return Renderer::s_state.ActiveCamera;
}
Handle Engine::CreateGeometry(IN CONST Vector<GeometryVertex> &vertices, IN CONST Vector<INT32> &indices) Handle Engine::CreateGeometry(IN CONST Vector<GeometryVertex> &vertices, IN CONST Vector<INT32> &indices)
{ {
return (Handle) Renderer::CreateGeometry(vertices, indices); return (Handle) Renderer::CreateGeometry(vertices, indices);
@ -379,7 +385,7 @@ namespace ia::iae
sortIndex += static_cast<INT16>(position.y); sortIndex += static_cast<INT16>(position.y);
position *= Renderer::s_state.SceneScaleFactor; position *= Renderer::s_state.SceneScaleFactor;
//scale *= Renderer::s_state.SceneScaleFactor; // scale *= Renderer::s_state.SceneScaleFactor;
Renderer::s_state.ModelMatrix = Renderer::s_state.ModelMatrix =
glm::translate(glm::mat4(1.0f), glm::vec3{position.x, position.y, glm::translate(glm::mat4(1.0f), glm::vec3{position.x, position.y,

View File

@ -52,10 +52,71 @@ namespace ia::iae
{ {
} }
VOID ProcessEvent(IN Rml::Event &event) VOID AddClickListener(IN Rml::Element *element, IN std::function<VOID()> callback)
{ {
element->AddEventListener("click", this);
m_clickCallbacks[element->GetId().c_str()] = callback;
} }
// VOID AddHoverEnterListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mouseover", this);
// m_hoverEnterCallbacks[elementId] = callback;
// }
//
// VOID AddHoverExitListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mouseout", this);
// m_hoverExitCallbacks[elementId] = callback;
//}
//
// VOID AddPointerDownListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mousedown", this);
// m_pointerDownCallbacks[elementId] = callback;
//}
//
// VOID AddPointerUpListener(IN PCCHAR elementId, IN std::function<VOID()> callback)
//{
// m_document->GetElementById(elementId)->AddEventListener("mouseup", this);
// m_pointerUpCallbacks[elementId] = callback;
//}
VOID ProcessEvent(IN Rml::Event &event)
{
switch (event.GetId())
{
case Rml::EventId::Click:
m_clickCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mouseover:
m_hoverEnterCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mouseout:
m_hoverExitCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mousedown:
m_pointerDownCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
case Rml::EventId::Mouseup:
m_pointerUpCallbacks[event.GetTargetElement()->GetId().c_str()]();
break;
default:
break;
}
}
private:
Map<String, std::function<VOID()>> m_clickCallbacks;
Map<String, std::function<VOID()>> m_hoverEnterCallbacks;
Map<String, std::function<VOID()>> m_hoverExitCallbacks;
Map<String, std::function<VOID()>> m_pointerDownCallbacks;
Map<String, std::function<VOID()>> m_pointerUpCallbacks;
} g_eventListener{}; } g_eventListener{};
/* Taken from https://github.com/mikke89/RmlUi/blob/master/Backends/RmlUi_Platform_SDL.cpp */ /* Taken from https://github.com/mikke89/RmlUi/blob/master/Backends/RmlUi_Platform_SDL.cpp */
@ -396,6 +457,11 @@ namespace ia::iae
g_document->SetInnerRML( g_document->SetInnerRML(
BuildString("<body style=\"display: block; width: 100%; height: 100%;\">", source, "</body>").c_str()); BuildString("<body style=\"display: block; width: 100%; height: 100%;\">", source, "</body>").c_str());
} }
VOID UI::AddClickEvent(IN PCCHAR elementId, IN std::function<VOID()> callback)
{
g_eventListener.AddClickListener(g_document->GetElementById(elementId), callback);
}
} // namespace ia::iae } // namespace ia::iae
namespace ia::iae namespace ia::iae

View File

@ -0,0 +1,40 @@
// IAEngine: 2D Game Engine by IA
// Copyright (C) 2025 IASoft (PVT) LTD (oss@iasoft.dev)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#pragma once
#include <IAEngine/Components/PhysicsComponent.hpp>
namespace ia::iae
{
class Physics
{
public:
STATIC Handle RegisterComponent(IN PhysicsComponent* component);
STATIC BOOL CanMove(IN Handle handle, IN CONST PhysicsComponent::Collider& collider, IN glm::vec2 movement);
private:
STATIC VOID Initialize();
STATIC VOID Terminate();
STATIC VOID Update();
STATIC VOID DebugDraw();
friend class DebugDraw;
friend class __Internal_Engine;
};
}

View File

@ -102,6 +102,18 @@ namespace ia::iae
Vec4 Color{}; Vec4 Color{};
}; };
enum class Direction : UINT8 {
NONE = 255,
DOWN = 0,
DOWN_LEFT,
LEFT,
UP_LEFT,
UP,
UP_RIGHT,
RIGHT,
DOWN_RIGHT
};
struct Color struct Color
{ {
UINT8 R{0xFF}; UINT8 R{0xFF};

View File

@ -35,6 +35,11 @@ namespace ia::iae
public: public:
VOID SetViewport(IN INT32 width, IN INT32 height); VOID SetViewport(IN INT32 width, IN INT32 height);
Vec2& PositionOffset()
{
return m_positionOffset;
}
Vec4 GetViewport() CONST Vec4 GetViewport() CONST
{ {
return m_viewport; return m_viewport;
@ -53,6 +58,7 @@ namespace ia::iae
private: private:
Vec4 m_viewport{}; Vec4 m_viewport{};
Mat4 m_viewMatrix{1.0f}; Mat4 m_viewMatrix{1.0f};
Vec2 m_positionOffset{};
Mat4 m_projectionMatrix{1.0f}; Mat4 m_projectionMatrix{1.0f};
}; };
} // namespace ia::iae } // namespace ia::iae

View File

@ -0,0 +1,83 @@
// IAEngine: 2D Game Engine by IA
// Copyright (C) 2025 IASoft (PVT) LTD (oss@iasoft.dev)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
#pragma once
#include <IAEngine/Components/IComponent.hpp>
namespace ia::iae
{
class PhysicsComponent : public IComponent
{
public:
struct Collider
{
BOOL IsTrigger{false};
Vec2 Position{};
Vec2 Size{};
};
public:
PhysicsComponent(IN Node2D *node);
Handle CreateCollider();
Handle AddCollider(IN Collider collider);
Collider &GetCollider(IN Handle handle);
VOID Move(IN glm::vec2 direction);
VOID Jump(IN FLOAT32 force);
public:
BOOL &IsDynamic()
{
return m_isDynamic;
}
FLOAT32 &MovementSpeed()
{
return m_movementSpeed;
}
Vector<Collider> &Colliders()
{
return m_colliders;
}
CONST Vec2 &GetVelocity() CONST
{
return m_velocity;
}
private:
Vec2 m_velocity{};
BOOL m_isDynamic{false};
Vector<Collider> m_colliders;
FLOAT32 m_movementSpeed{1.0f};
Handle m_physicsHandle{INVALID_HANDLE};
VOID OnCollision(IN PhysicsComponent *other);
friend class Physics;
public:
VIRTUAL VOID Draw();
VIRTUAL VOID DebugDraw();
VIRTUAL VOID Update();
VIRTUAL VOID FixedUpdate();
};
} // namespace ia::iae

View File

@ -24,8 +24,8 @@
#include <IAEngine/Components/CameraComponent.hpp> #include <IAEngine/Components/CameraComponent.hpp>
#include <IAEngine/Components/SoundEmitterComponent.hpp> #include <IAEngine/Components/SoundEmitterComponent.hpp>
#include <IAEngine/UI.hpp>
#include <IAEngine/Scene.hpp> #include <IAEngine/Scene.hpp>
#include <IAEngine/UI.hpp>
#include <IAEngine/Utils.hpp> #include <IAEngine/Utils.hpp>
namespace ia::iae namespace ia::iae
@ -34,103 +34,104 @@ namespace ia::iae
{ {
public: public:
// Event Functions // Event Functions
STATIC Handle CreateEvent(IN CONST String &name); STATIC Handle CreateEvent(IN CONST String &name);
STATIC VOID DestroyEvent(IN Handle event); STATIC VOID DestroyEvent(IN Handle event);
STATIC Handle GetEventByName(IN CONST String &name); STATIC Handle GetEventByName(IN CONST String &name);
STATIC VOID AddEventListener(IN Handle event, IN std::function<VOID()> callback); STATIC VOID AddEventListener(IN Handle event, IN std::function<VOID()> callback);
STATIC VOID AddEventListener(IN CONST String &eventName, IN std::function<VOID()> callback); STATIC VOID AddEventListener(IN CONST String &eventName, IN std::function<VOID()> callback);
STATIC VOID BroadcastEvent(IN Handle event); STATIC VOID BroadcastEvent(IN Handle event);
STATIC VOID BroadcastEvent(IN CONST String &eventName); STATIC VOID BroadcastEvent(IN CONST String &eventName);
// Renderer Functions // Renderer Functions
STATIC Handle GetGeometry_Quad(); STATIC Handle GetGeometry_Quad();
STATIC Handle CreateGeometry(IN CONST Vector<GeometryVertex> &vertices, STATIC Handle CreateGeometry(IN CONST Vector<GeometryVertex> &vertices, IN CONST Vector<INT32> &indices);
IN CONST Vector<INT32> &indices); STATIC VOID DestroyGeometry(IN Handle geometry);
STATIC VOID DestroyGeometry(IN Handle geometry); STATIC VOID DrawGeometry(IN Handle handle);
STATIC VOID DrawGeometry(IN Handle handle); STATIC IVec2 GetDisplayExtent();
STATIC IVec2 GetDisplayExtent(); STATIC VOID ResizeDisplay(IN INT32 newWidth, IN INT32 newHeight);
STATIC VOID ResizeDisplay(IN INT32 newWidth, IN INT32 newHeight);
// Renderer State Functions // Renderer State Functions
STATIC VOID SetRenderState_Scissor(IN IVec4 rect); STATIC VOID SetRenderState_Scissor(IN IVec4 rect);
STATIC VOID SetRenderState_FlippedH(IN BOOL value); STATIC VOID SetRenderState_FlippedH(IN BOOL value);
STATIC VOID SetRenderState_FlippedV(IN BOOL value); STATIC VOID SetRenderState_FlippedV(IN BOOL value);
STATIC VOID SetRenderState_TextureOffset(IN Vec2 off); STATIC VOID SetRenderState_TextureOffset(IN Vec2 off);
STATIC VOID SetRenderState_YSortingEnabled(IN BOOL value); STATIC VOID SetRenderState_YSortingEnabled(IN BOOL value);
STATIC VOID SetRenderState_ColorOverlay(IN Color color); STATIC VOID SetRenderState_ColorOverlay(IN Color color);
STATIC VOID SetRenderState_CameraRelative(IN BOOL value); STATIC VOID SetRenderState_CameraRelative(IN BOOL value);
STATIC VOID SetRenderState_Texture(IN Handle image); STATIC VOID SetRenderState_Texture(IN Handle image);
STATIC VOID SetRenderState_Transform(IN Vec2 position, IN Vec2 scale, IN FLOAT32 rotation, STATIC VOID SetRenderState_Transform(IN Vec2 position, IN Vec2 scale, IN FLOAT32 rotation, IN UINT8 layer,
IN UINT8 layer, IN INT16 sortIndex); IN INT16 sortIndex);
// Debug Draw Functions // Debug Draw Functions
STATIC VOID DebugDraw_SetColor(IN Color color); STATIC VOID DebugDraw_SetColor(IN Color color);
STATIC VOID DebugDraw_StrokeWidth(IN FLOAT32 width); STATIC VOID DebugDraw_SetStrokeWidth(IN FLOAT32 width);
STATIC VOID DebugDraw_Line(IN Vec2 from, IN Vec2 to); STATIC VOID DebugDraw_Line(IN Vec2 from, IN Vec2 to);
STATIC VOID DebugDraw_FillRect(IN Vec2 position, IN Vec2 size); STATIC VOID DebugDraw_FillRect(IN Vec2 position, IN Vec2 size);
STATIC VOID DebugDraw_StrokeRect(IN Vec2 position, IN Vec2 size); STATIC VOID DebugDraw_StrokeRect(IN Vec2 position, IN Vec2 size);
// Resource Functions // Resource Functions
STATIC Handle CreateSoundFromFile(IN CONST String &name, IN CONST String &path); STATIC Handle CreateSoundFromFile(IN CONST String &name, IN CONST String &path);
STATIC Handle CreateImageFromFile(IN CONST String &name, IN CONST String &path, STATIC Handle CreateImageFromFile(IN CONST String &name, IN CONST String &path, IN INT32 resizeToWidth = 0,
IN INT32 resizeToWidth = 0, IN INT32 resizeToHeight = 0); IN INT32 resizeToHeight = 0);
STATIC Handle CreateImage(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); STATIC Handle CreateImage(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize);
STATIC Handle CreateImage(IN CONST String &name, IN PCUINT8 rgbaData, IN INT32 width, STATIC Handle CreateImage(IN CONST String &name, IN PCUINT8 rgbaData, IN INT32 width, IN INT32 height);
IN INT32 height); STATIC Handle CreateSound(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize);
STATIC Handle CreateSound(IN CONST String &name, IN PCUINT8 encodedData, IN SIZE_T encodedDataSize); STATIC Handle GetImage(IN CONST String &name);
STATIC Handle GetImage(IN CONST String &name); STATIC Handle GetSound(IN CONST String &name);
STATIC Handle GetSound(IN CONST String &name); STATIC VOID DestroyImage(IN Handle image);
STATIC VOID DestroyImage(IN Handle image); STATIC VOID DestroySound(IN Handle sound);
STATIC VOID DestroySound(IN Handle sound); STATIC IVec2 GetImageExtent(IN Handle image);
STATIC IVec2 GetImageExtent(IN Handle image); STATIC Handle ResizeImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight);
STATIC Handle ResizeImage(IN Handle image, IN INT32 newWidth, IN INT32 newHeight); STATIC Handle ResizeImage(IN CONST String &name, IN INT32 newWidth, IN INT32 newHeight);
STATIC Handle ResizeImage(IN CONST String& name, IN INT32 newWidth, IN INT32 newHeight); STATIC VOID RescaleAllImages(IN FLOAT32 factorX, IN FLOAT32 factorY);
STATIC VOID RescaleAllImages(IN FLOAT32 factorX, IN FLOAT32 factorY); STATIC Handle CombineImages(IN CONST Vector<Handle> &images, IN INT32 unitWidth, IN INT32 unitHeight,
STATIC Handle CombineImages(IN CONST Vector<Handle> &images, IN INT32 unitWidth, IN INT32 unitCountX, IN INT32 unitCountY);
IN INT32 unitHeight, IN INT32 unitCountX, IN INT32 unitCountY);
// Game Functions // Game Functions
STATIC VOID SetTimeScale(IN FLOAT32 scale); STATIC VOID SetTimeScale(IN FLOAT32 scale);
STATIC VOID SetActiveCamera(IN CameraComponent *cameraComponent); STATIC VOID SetActiveCamera(IN CameraComponent *cameraComponent);
STATIC CameraComponent *GetActiveCamera();
// Scene Functions // Scene Functions
STATIC RefPtr<Scene> CreateSceneFromFile(IN CONST String &path); STATIC RefPtr<Scene> CreateSceneFromFile(IN CONST String &path);
STATIC Scene *GetActiveScene(); STATIC Scene *GetActiveScene();
STATIC VOID ChangeActiveScene(IN RefPtr<Scene> scene); STATIC VOID ChangeActiveScene(IN RefPtr<Scene> scene);
STATIC VOID AddNodeToActiveScene(IN RefPtr<INode> node); STATIC VOID AddNodeToActiveScene(IN RefPtr<INode> node);
STATIC INode *GetNodeFromActiveScene(IN CONST String &name); STATIC INode *GetNodeFromActiveScene(IN CONST String &name);
STATIC VOID RemoveNodeFromActiveScene(IN CONST String &name); STATIC VOID RemoveNodeFromActiveScene(IN CONST String &name);
// Input Functions // Input Functions
STATIC Vec2 GetInputAxis(); STATIC Vec2 GetInputAxis();
STATIC VOID SwitchInputModeToText(); STATIC VOID SwitchInputModeToText();
STATIC VOID SwitchInputModeToAction(); STATIC VOID SwitchInputModeToAction();
STATIC Vec2 GetInputPointerPosition(); STATIC Vec2 GetInputPointerPosition();
STATIC BOOL IsInputKeyDown(IN InputKey key); STATIC BOOL IsInputKeyDown(IN InputKey key);
STATIC BOOL WasInputKeyPressed(IN InputKey key); STATIC BOOL WasInputKeyPressed(IN InputKey key);
STATIC BOOL WasInputKeyReleased(IN InputKey key); STATIC BOOL WasInputKeyReleased(IN InputKey key);
STATIC BOOL IsInputActionDown(IN Handle action); STATIC BOOL IsInputActionDown(IN Handle action);
STATIC BOOL WasInputActionPressed(IN Handle action); STATIC BOOL WasInputActionPressed(IN Handle action);
STATIC BOOL WasInputActionReleased(IN Handle action); STATIC BOOL WasInputActionReleased(IN Handle action);
STATIC BOOL IsInputActionDown(IN CONST String &action); STATIC BOOL IsInputActionDown(IN CONST String &action);
STATIC BOOL WasInputActionPressed(IN CONST String &action); STATIC BOOL WasInputActionPressed(IN CONST String &action);
STATIC BOOL WasInputActionReleased(IN CONST String &action); STATIC BOOL WasInputActionReleased(IN CONST String &action);
STATIC Handle BindInputAction(IN CONST String &name, IN InputKey key); STATIC Handle BindInputAction(IN CONST String &name, IN InputKey key);
STATIC VOID BindInputAxis(IN InputKey upKey, IN InputKey downKey, IN InputKey leftKey, STATIC VOID BindInputAxis(IN InputKey upKey, IN InputKey downKey, IN InputKey leftKey, IN InputKey rightKey);
IN InputKey rightKey);
// Utility Functions
STATIC Direction GetVectorPointingDirection(IN Vec2 v);
// Random Functions // Random Functions
STATIC FLOAT32 GetRandomFloat(); STATIC FLOAT32 GetRandomFloat();
STATIC INT32 GetRandomInRange(IN INT32 min, IN INT32 max); STATIC INT32 GetRandomInRange(IN INT32 min, IN INT32 max);
// Time Functions // Time Functions
STATIC INT64 GetTickCount(); STATIC INT64 GetTickCount();
STATIC INT64 GetUnixSecond(); STATIC INT64 GetUnixSecond();
STATIC INT64 GetUnixMillisecond(); STATIC INT64 GetUnixMillisecond();
STATIC FLOAT32 GetFrameDeltaTime(); STATIC FLOAT32 GetFrameDeltaTime();
// Engine Functions // Engine Functions
STATIC BOOL IsDebugMode(); STATIC BOOL IsDebugMode();
STATIC String GetUniqueResourceName(); STATIC String GetUniqueResourceName();
}; };
} // namespace ia::iae } // namespace ia::iae

View File

@ -17,6 +17,7 @@
#pragma once #pragma once
#include <IAEngine/Nodes/SpriteNode.hpp> #include <IAEngine/Nodes/SpriteNode.hpp>
#include <IAEngine/Components/PhysicsComponent.hpp>
namespace ia::iae namespace ia::iae
{ {

View File

@ -17,6 +17,7 @@
#pragma once #pragma once
#include <IAEngine/Nodes/TextureNode.hpp> #include <IAEngine/Nodes/TextureNode.hpp>
#include <IAEngine/Components/PhysicsComponent.hpp>
namespace ia::iae namespace ia::iae
{ {

View File

@ -22,12 +22,14 @@ namespace ia::iae
{ {
class UI class UI
{ {
public: public:
STATIC VOID AddFontFromFile(IN CONST String& path); STATIC VOID AddFontFromFile(IN CONST String &path);
STATIC VOID SetHTML(IN CONST String& source); STATIC VOID SetHTML(IN CONST String &source);
public: STATIC VOID AddClickEvent(IN PCCHAR elementId, IN std::function<VOID()> callback);
public:
STATIC VOID Initialize(); STATIC VOID Initialize();
STATIC VOID Terminate(); STATIC VOID Terminate();
@ -37,4 +39,4 @@ namespace ia::iae
STATIC VOID OnSDLEvent(IN PVOID event); STATIC VOID OnSDLEvent(IN PVOID event);
STATIC VOID OnScreenResize(IN INT32 newWidth, IN INT32 newHeight); STATIC VOID OnScreenResize(IN INT32 newWidth, IN INT32 newHeight);
}; };
} } // namespace ia::iae

2
Vendor/IACore vendored