HF
This commit is contained in:
@ -4,8 +4,8 @@ namespace ia::iae::game
|
|||||||
{
|
{
|
||||||
TiledMap::TiledMap(IN Engine *engine) : m_engine(engine)
|
TiledMap::TiledMap(IN Engine *engine) : m_engine(engine)
|
||||||
{
|
{
|
||||||
m_musicEmitter = AddComponent<SoundEmitterComponent>();
|
//m_musicEmitter = AddComponent<SoundEmitterComponent>();
|
||||||
m_atlasRenderer = AddComponent<AtlasRendererComponent>();
|
//m_atlasRenderer = AddComponent<AtlasRendererComponent>();
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID TiledMap::OnAdded(IN Scene *scene)
|
VOID TiledMap::OnAdded(IN Scene *scene)
|
||||||
|
|||||||
@ -22,6 +22,6 @@ namespace ia::iae::game
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Engine *CONST m_engine;
|
Engine *CONST m_engine;
|
||||||
RefPtr<SpriteRendererComponent> m_spriteRenderer;
|
SpriteRendererComponent* m_spriteRenderer;
|
||||||
};
|
};
|
||||||
} // namespace ia::iae::game
|
} // namespace ia::iae::game
|
||||||
@ -22,6 +22,6 @@ namespace ia::iae::game
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Engine *CONST m_engine;
|
Engine *CONST m_engine;
|
||||||
RefPtr<SpriteRendererComponent> m_spriteRenderer;
|
SpriteRendererComponent* m_spriteRenderer;
|
||||||
};
|
};
|
||||||
} // namespace ia::iae::game
|
} // namespace ia::iae::game
|
||||||
@ -22,6 +22,7 @@ set(IAEngine_Sources
|
|||||||
imp/cpp/Components/SoundEmitter.cpp
|
imp/cpp/Components/SoundEmitter.cpp
|
||||||
imp/cpp/Components/ParticleEmitter.cpp
|
imp/cpp/Components/ParticleEmitter.cpp
|
||||||
imp/cpp/Components/PhysicsBody.cpp
|
imp/cpp/Components/PhysicsBody.cpp
|
||||||
|
imp/cpp/Components/TextureRenderer.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(IAEngine STATIC ${IAEngine_Sources})
|
add_library(IAEngine STATIC ${IAEngine_Sources})
|
||||||
|
|||||||
@ -77,7 +77,7 @@ namespace ia::iae
|
|||||||
|
|
||||||
VOID Audio::ClearTrack(IN INT64 trackHandle)
|
VOID Audio::ClearTrack(IN INT64 trackHandle)
|
||||||
{
|
{
|
||||||
//MIX_StopTrack(g_tracks[trackHandle], 0);
|
MIX_StopTrack(g_tracks[trackHandle], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID Audio::PauseTrack(IN INT64 trackHandle)
|
VOID Audio::PauseTrack(IN INT64 trackHandle)
|
||||||
|
|||||||
@ -40,7 +40,7 @@ namespace ia::iae
|
|||||||
{
|
{
|
||||||
const auto t = m_tileGrid.m_tileTextures[x + (y * m_tileGrid.TileCountX)];
|
const auto t = m_tileGrid.m_tileTextures[x + (y * m_tileGrid.TileCountX)];
|
||||||
if (t != INVALID_HANDLE)
|
if (t != INVALID_HANDLE)
|
||||||
m_textures[t]->Draw(p, {1.0f, 1.0f, 1.0f}, 0.0f, false, false, {1.0f, 1.0f, 1.0f, 1.0f});
|
m_textures[t]->Draw(p + m_tileGrid.Position, {1.0f, 1.0f, 1.0f}, 0.0f, false, false, {1.0f, 1.0f, 1.0f, 1.0f});
|
||||||
p.X += m_tileGrid.TileWidth;
|
p.X += m_tileGrid.TileWidth;
|
||||||
}
|
}
|
||||||
p.X = m_node->GetPosition().X;
|
p.X = m_node->GetPosition().X;
|
||||||
|
|||||||
@ -16,13 +16,26 @@ namespace ia::iae
|
|||||||
|
|
||||||
VOID ParticleEmitterComponent::Draw()
|
VOID ParticleEmitterComponent::Draw()
|
||||||
{
|
{
|
||||||
for(auto& s: m_sprites)
|
if (!m_isEmitting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (auto &s : m_sprites)
|
||||||
s->Draw();
|
s->Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID ParticleEmitterComponent::Update()
|
VOID ParticleEmitterComponent::Update()
|
||||||
{
|
{
|
||||||
for(auto& s: m_sprites)
|
if (!m_isEmitting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (auto &s : m_sprites)
|
||||||
s->Update();
|
s->Update();
|
||||||
|
|
||||||
|
m_timeline += Time::GetFrameDeltaTime();
|
||||||
|
if (m_timeline >= m_lifeTime.GetValue())
|
||||||
|
{
|
||||||
|
m_timeline = 0;
|
||||||
|
m_isEmitting = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} // namespace ia::iae
|
} // namespace ia::iae
|
||||||
@ -14,7 +14,8 @@ namespace ia::iae
|
|||||||
|
|
||||||
Handle SpriteRendererComponent::AddAnimation(IN CONST Animation &animation)
|
Handle SpriteRendererComponent::AddAnimation(IN CONST Animation &animation)
|
||||||
{
|
{
|
||||||
IA_RELEASE_ASSERT(!animation.Keys.empty());
|
if(animation.Keys.empty())
|
||||||
|
return INVALID_HANDLE;
|
||||||
m_animations.pushBack(animation);
|
m_animations.pushBack(animation);
|
||||||
return m_animations.size() - 1;
|
return m_animations.size() - 1;
|
||||||
}
|
}
|
||||||
@ -51,6 +52,7 @@ namespace ia::iae
|
|||||||
VOID SpriteRendererComponent::Draw()
|
VOID SpriteRendererComponent::Draw()
|
||||||
{
|
{
|
||||||
const auto &animFrame = m_currentAnimationState;
|
const auto &animFrame = m_currentAnimationState;
|
||||||
|
if(!animFrame.Texture) return;
|
||||||
animFrame.Texture->Draw(
|
animFrame.Texture->Draw(
|
||||||
m_node->GetPosition() + animFrame.Position, m_node->GetScale() * animFrame.Scale,
|
m_node->GetPosition() + animFrame.Position, m_node->GetScale() * animFrame.Scale,
|
||||||
m_node->GetRotation().Z + animFrame.Rotation.Z, m_isFlippedH, m_isFlippedV, animFrame.ColorOverlay);
|
m_node->GetRotation().Z + animFrame.Rotation.Z, m_isFlippedH, m_isFlippedV, animFrame.ColorOverlay);
|
||||||
|
|||||||
22
Src/IAEngine/imp/cpp/Components/TextureRenderer.cpp
Normal file
22
Src/IAEngine/imp/cpp/Components/TextureRenderer.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include <IAEngine/Components/TextureRenderer.hpp>
|
||||||
|
|
||||||
|
#include <IAEngine/Nodes/Node.hpp>
|
||||||
|
|
||||||
|
namespace ia::iae
|
||||||
|
{
|
||||||
|
TextureRendererComponent::TextureRendererComponent(IN Node *node) : IComponent(node)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID TextureRendererComponent::Update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID TextureRendererComponent::Draw()
|
||||||
|
{
|
||||||
|
m_texture->Draw(
|
||||||
|
m_node->GetPosition() + m_position, m_node->GetScale(),
|
||||||
|
m_node->GetRotation().Z, false, false, iam::Vec4f{1.0f, 1.0f, 1.0f, 1.0f});
|
||||||
|
}
|
||||||
|
} // namespace ia::iae
|
||||||
@ -1,9 +1,9 @@
|
|||||||
#include <IAEngine/Audio.hpp>
|
#include <IAEngine/Audio.hpp>
|
||||||
#include <IAEngine/IAEngine.hpp>
|
#include <IAEngine/IAEngine.hpp>
|
||||||
#include <IAEngine/Input.hpp>
|
#include <IAEngine/Input.hpp>
|
||||||
|
#include <IAEngine/Physics/Physics.hpp>
|
||||||
#include <IAEngine/Random.hpp>
|
#include <IAEngine/Random.hpp>
|
||||||
#include <IAEngine/Time.hpp>
|
#include <IAEngine/Time.hpp>
|
||||||
#include <IAEngine/Physics/Physics.hpp>
|
|
||||||
|
|
||||||
#include <SDL3/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
|
|
||||||
@ -132,6 +132,12 @@ namespace ia::iae
|
|||||||
Time::NextFrame();
|
Time::NextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID Engine::AddDebugUIWindow(IN PCCHAR title, IN CONST iam::Vec2f &position, IN CONST iam::Vec2f &size,
|
||||||
|
IN std::function<VOID()> contentDrawCallback)
|
||||||
|
{
|
||||||
|
m_debugUIWindows.pushBack(DebugUIWindow{title, position, size, contentDrawCallback});
|
||||||
|
}
|
||||||
|
|
||||||
BOOL Engine::ShouldClose()
|
BOOL Engine::ShouldClose()
|
||||||
{
|
{
|
||||||
return m_context->ShouldClose;
|
return m_context->ShouldClose;
|
||||||
@ -139,10 +145,18 @@ namespace ia::iae
|
|||||||
|
|
||||||
VOID Engine::RenderDebugUI()
|
VOID Engine::RenderDebugUI()
|
||||||
{
|
{
|
||||||
|
for (const auto &w : m_debugUIWindows) {
|
||||||
|
ImGui::Begin(w.Title);
|
||||||
|
ImGui::SetWindowPos({w.Position.X, w.Position.Y});
|
||||||
|
ImGui::SetWindowSize({w.Size.X, w.Size.Y});
|
||||||
|
w.ContentDrawCallback();
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID Engine::ProcessEvents()
|
VOID Engine::ProcessEvents()
|
||||||
{
|
{
|
||||||
|
ImGui_ImplSDL3_ProcessEvent(&m_context->Event);
|
||||||
Input::OnEvent(&m_context->Event);
|
Input::OnEvent(&m_context->Event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,13 +19,49 @@ namespace ia::iae
|
|||||||
}
|
}
|
||||||
|
|
||||||
VOID Node::Draw()
|
VOID Node::Draw()
|
||||||
|
{
|
||||||
|
BOOL drew = false;
|
||||||
|
for (auto &n : m_children)
|
||||||
|
{
|
||||||
|
if (((INT32) n->GetPosition().Z) >= 0)
|
||||||
|
continue;
|
||||||
|
n->Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(((INT32) GetPosition().Z) < 0)
|
||||||
{
|
{
|
||||||
for (auto &c : m_components)
|
for (auto &c : m_components)
|
||||||
c->Draw();
|
c->Draw();
|
||||||
|
}
|
||||||
|
|
||||||
for (auto &c : m_children)
|
for (INT32 i = 0; i < 8; i++) // [IATODO]
|
||||||
|
{
|
||||||
|
for (auto &n : m_children)
|
||||||
|
{
|
||||||
|
if (((INT32) n->GetPosition().Z) != i)
|
||||||
|
continue;
|
||||||
|
n->Draw();
|
||||||
|
}
|
||||||
|
if (((INT32) GetPosition().Z) == i)
|
||||||
|
{
|
||||||
|
for (auto &c : m_components)
|
||||||
c->Draw();
|
c->Draw();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &n : m_children)
|
||||||
|
{
|
||||||
|
if (((INT32) n->GetPosition().Z) < 8)
|
||||||
|
continue;
|
||||||
|
n->Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(((INT32) GetPosition().Z) > 8)
|
||||||
|
{
|
||||||
|
for (auto &c : m_components)
|
||||||
|
c->Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VOID Node::Update()
|
VOID Node::Update()
|
||||||
{
|
{
|
||||||
@ -50,6 +86,11 @@ namespace ia::iae
|
|||||||
c->Disable();
|
c->Disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID Node::AddChild(IN RefPtr<Node> node)
|
||||||
|
{
|
||||||
|
m_children.pushBack(node);
|
||||||
|
}
|
||||||
|
|
||||||
VOID Node::AddComponent(IN RefPtr<IComponent> component)
|
VOID Node::AddComponent(IN RefPtr<IComponent> component)
|
||||||
{
|
{
|
||||||
m_components.pushBack(IA_MOVE(component));
|
m_components.pushBack(IA_MOVE(component));
|
||||||
|
|||||||
@ -13,9 +13,30 @@ namespace ia::iae
|
|||||||
VOID Scene::Draw()
|
VOID Scene::Draw()
|
||||||
{
|
{
|
||||||
for (auto &n : m_nodes)
|
for (auto &n : m_nodes)
|
||||||
|
{
|
||||||
|
if (((INT32) n->GetPosition().Z) >= 0)
|
||||||
|
continue;
|
||||||
n->Draw();
|
n->Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (INT32 i = 0; i < 8; i++) // [IATODO]
|
||||||
|
{
|
||||||
|
for (auto &n : m_nodes)
|
||||||
|
{
|
||||||
|
if (((INT32) n->GetPosition().Z) != i)
|
||||||
|
continue;
|
||||||
|
n->Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto &n : m_nodes)
|
||||||
|
{
|
||||||
|
if (((INT32) n->GetPosition().Z) < 8)
|
||||||
|
continue;
|
||||||
|
n->Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VOID Scene::Update()
|
VOID Scene::Update()
|
||||||
{
|
{
|
||||||
for (auto &n : m_nodes)
|
for (auto &n : m_nodes)
|
||||||
@ -31,7 +52,7 @@ namespace ia::iae
|
|||||||
VOID Scene::RemoveNode(IN RefPtr<Node> node)
|
VOID Scene::RemoveNode(IN RefPtr<Node> node)
|
||||||
{
|
{
|
||||||
const auto it = m_nodes.find(node);
|
const auto it = m_nodes.find(node);
|
||||||
if(it != m_nodes.end())
|
if (it != m_nodes.end())
|
||||||
{
|
{
|
||||||
m_nodes.erase(it);
|
m_nodes.erase(it);
|
||||||
node->OnRemoved();
|
node->OnRemoved();
|
||||||
|
|||||||
@ -26,6 +26,8 @@ namespace ia::iae
|
|||||||
public:
|
public:
|
||||||
struct TileGrid
|
struct TileGrid
|
||||||
{
|
{
|
||||||
|
iam::Vec3f Position{};
|
||||||
|
|
||||||
INT32 TileWidth{};
|
INT32 TileWidth{};
|
||||||
INT32 TileHeight{};
|
INT32 TileHeight{};
|
||||||
INT32 TileCountX{};
|
INT32 TileCountX{};
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <IAEngine/Components/SpriteRenderer.hpp>
|
#include <IAEngine/Components/SpriteRenderer.hpp>
|
||||||
|
#include <IAEngine/Time.hpp>
|
||||||
|
|
||||||
namespace ia::iae
|
namespace ia::iae
|
||||||
{
|
{
|
||||||
@ -28,29 +29,24 @@ namespace ia::iae
|
|||||||
VOID AddAnimation(IN SpriteRendererComponent::Animation anim);
|
VOID AddAnimation(IN SpriteRendererComponent::Animation anim);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CONST INT32 &LifeTime() CONST
|
TimePeriod &LifeTime()
|
||||||
{
|
{
|
||||||
return m_lifeTime;
|
return m_lifeTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
CONST INT32 &CreationFrequency() CONST
|
TimePeriod &CreationDelay()
|
||||||
{
|
{
|
||||||
return m_creationFrequency;
|
return m_creationDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
CONST Vector<RefPtr<SpriteRendererComponent>> &Sprites() CONST
|
INT32 &InstanceLimit()
|
||||||
{
|
{
|
||||||
return m_sprites;
|
return m_instanceLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 &LifeTime()
|
INT32 &TimeLimit()
|
||||||
{
|
{
|
||||||
return m_lifeTime;
|
return m_timeLimit;
|
||||||
}
|
|
||||||
|
|
||||||
INT32 &CreationFrequency()
|
|
||||||
{
|
|
||||||
return m_creationFrequency;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<RefPtr<SpriteRendererComponent>> &Sprites()
|
Vector<RefPtr<SpriteRendererComponent>> &Sprites()
|
||||||
@ -63,8 +59,12 @@ namespace ia::iae
|
|||||||
VOID Update();
|
VOID Update();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
INT32 m_lifeTime{};
|
BOOL m_isEmitting{true};
|
||||||
INT32 m_creationFrequency{};
|
FLOAT32 m_timeline{};
|
||||||
|
INT32 m_timeLimit{};
|
||||||
|
INT32 m_instanceLimit{};
|
||||||
|
TimePeriod m_lifeTime{};
|
||||||
|
TimePeriod m_creationDelay{};
|
||||||
Vector<RefPtr<SpriteRendererComponent>> m_sprites{};
|
Vector<RefPtr<SpriteRendererComponent>> m_sprites{};
|
||||||
};
|
};
|
||||||
} // namespace ia::iae
|
} // namespace ia::iae
|
||||||
@ -50,6 +50,27 @@ namespace ia::iae
|
|||||||
|
|
||||||
VOID SetActiveAnimation(IN Handle animation);
|
VOID SetActiveAnimation(IN Handle animation);
|
||||||
|
|
||||||
|
public:
|
||||||
|
Vector<Animation> &Animations()
|
||||||
|
{
|
||||||
|
return m_animations;
|
||||||
|
}
|
||||||
|
|
||||||
|
CONST Vector<Animation> &Animations() CONST
|
||||||
|
{
|
||||||
|
return m_animations;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL& IsFlippedV()
|
||||||
|
{
|
||||||
|
return m_isFlippedV;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL& IsFlippedH()
|
||||||
|
{
|
||||||
|
return m_isFlippedH;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VOID Draw();
|
VOID Draw();
|
||||||
VOID Update();
|
VOID Update();
|
||||||
|
|||||||
47
Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp
Normal file
47
Src/IAEngine/inc/IAEngine/Components/TextureRenderer.hpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// IAEngine: 2D Game Engine by IA
|
||||||
|
// Copyright (C) 2025 IAS (ias@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/Component.hpp>
|
||||||
|
#include <IAEngine/Texture.hpp>
|
||||||
|
|
||||||
|
namespace ia::iae
|
||||||
|
{
|
||||||
|
class TextureRendererComponent : public IComponent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TextureRendererComponent(IN Node *node);
|
||||||
|
|
||||||
|
RefPtr<iae::Texture> &Texture()
|
||||||
|
{
|
||||||
|
return m_texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
iam::Vec3f &Position()
|
||||||
|
{
|
||||||
|
return m_position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
VOID Draw();
|
||||||
|
VOID Update();
|
||||||
|
|
||||||
|
private:
|
||||||
|
iam::Vec3f m_position;
|
||||||
|
RefPtr<iae::Texture> m_texture;
|
||||||
|
};
|
||||||
|
} // namespace ia::iae
|
||||||
@ -27,6 +27,14 @@ namespace ia::iae
|
|||||||
|
|
||||||
class Engine
|
class Engine
|
||||||
{
|
{
|
||||||
|
struct DebugUIWindow
|
||||||
|
{
|
||||||
|
PCCHAR Title{""};
|
||||||
|
iam::Vec2f Position{};
|
||||||
|
iam::Vec2f Size{};
|
||||||
|
std::function<VOID()> ContentDrawCallback{};
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
struct InitConfig
|
struct InitConfig
|
||||||
{
|
{
|
||||||
@ -46,6 +54,8 @@ namespace ia::iae
|
|||||||
VOID EndFrame();
|
VOID EndFrame();
|
||||||
BOOL ShouldClose();
|
BOOL ShouldClose();
|
||||||
|
|
||||||
|
VOID AddDebugUIWindow(IN PCCHAR title, IN CONST iam::Vec2f &position, IN CONST iam::Vec2f &size, IN std::function<VOID()> contentDrawCallback);
|
||||||
|
|
||||||
template<typename _class_type>
|
template<typename _class_type>
|
||||||
_class_type* RegisterResourceManager();
|
_class_type* RegisterResourceManager();
|
||||||
|
|
||||||
@ -68,6 +78,7 @@ namespace ia::iae
|
|||||||
RefPtr<Scene> m_activeScene{};
|
RefPtr<Scene> m_activeScene{};
|
||||||
CONST RefPtr<EngineContext> m_context;
|
CONST RefPtr<EngineContext> m_context;
|
||||||
RefPtr<ResourceManager> m_resourceManager;
|
RefPtr<ResourceManager> m_resourceManager;
|
||||||
|
Vector<DebugUIWindow> m_debugUIWindows;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename _class_type>
|
template<typename _class_type>
|
||||||
|
|||||||
@ -36,8 +36,13 @@ namespace ia::iae
|
|||||||
VIRTUAL VOID Disable();
|
VIRTUAL VOID Disable();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
VOID AddChild(IN RefPtr<Node> node);
|
||||||
|
|
||||||
template<typename _component_type>
|
template<typename _component_type>
|
||||||
RefPtr<_component_type> AddComponent();
|
_component_type* AddComponent();
|
||||||
|
|
||||||
|
template<typename _component_type>
|
||||||
|
_component_type* GetComponent();
|
||||||
|
|
||||||
CONST Vector<RefPtr<IComponent>>& GetComponents() CONST
|
CONST Vector<RefPtr<IComponent>>& GetComponents() CONST
|
||||||
{
|
{
|
||||||
@ -58,10 +63,22 @@ namespace ia::iae
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<typename _component_type>
|
template<typename _component_type>
|
||||||
RefPtr<_component_type> Node::AddComponent()
|
_component_type* Node::AddComponent()
|
||||||
{
|
{
|
||||||
const auto c = MakeRefPtr<_component_type>(this);
|
const auto c = MakeRefPtr<_component_type>(this);
|
||||||
AddComponent(c);
|
AddComponent(c);
|
||||||
return c;
|
return c.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename _component_type>
|
||||||
|
_component_type* Node::GetComponent()
|
||||||
|
{
|
||||||
|
for(auto& c: m_components)
|
||||||
|
{
|
||||||
|
_component_type* comp = dynamic_cast<_component_type*>(c.get());
|
||||||
|
if(comp)
|
||||||
|
return comp;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
} // namespace ia::iae
|
} // namespace ia::iae
|
||||||
Reference in New Issue
Block a user