refactoring project
This commit is contained in:
parent
76d488b4c5
commit
6d1cf35730
|
|
@ -9,9 +9,11 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\action\ActionWalk.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\action\ActionWalk.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\action\ActionTween.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\action\ActionTween.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\action\Animation.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\action\Animation.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Button.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Actor.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Component.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\base\component\Button.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\base\component\Component.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\base\component\ComponentManager.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Director.h" />
|
<ClInclude Include="..\..\src\kiwano\base\Director.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Module.h" />
|
<ClInclude Include="..\..\src\kiwano\base\Module.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\ObjectBase.h" />
|
<ClInclude Include="..\..\src\kiwano\base\ObjectBase.h" />
|
||||||
|
|
@ -44,7 +46,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\DebugActor.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\DebugActor.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\ShapeActor.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\ShapeActor.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\LayerActor.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\LayerActor.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Actor.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Stage.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Stage.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Sprite.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Sprite.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\TextActor.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\TextActor.h" />
|
||||||
|
|
@ -115,18 +116,19 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\action\ActionWalk.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\action\ActionWalk.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\action\ActionTween.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\action\ActionTween.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\action\Animation.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\action\Animation.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Button.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Actor.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Component.cpp" />
|
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\DebugActor.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\DebugActor.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\ShapeActor.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\ShapeActor.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\GifSprite.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\GifSprite.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\LayerActor.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\LayerActor.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Actor.cpp" />
|
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Stage.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Stage.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Sprite.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Sprite.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\TextActor.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\TextActor.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\base\component\Button.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\base\component\Component.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\base\component\ComponentManager.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Director.cpp" />
|
<ClCompile Include="..\..\src\kiwano\base\Director.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Module.cpp" />
|
<ClCompile Include="..\..\src\kiwano\base\Module.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\ObjectBase.cpp" />
|
<ClCompile Include="..\..\src\kiwano\base\ObjectBase.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,9 @@
|
||||||
<Filter Include="event">
|
<Filter Include="event">
|
||||||
<UniqueIdentifier>{b0d28d20-bfaf-4816-8415-28c20ecf9fac}</UniqueIdentifier>
|
<UniqueIdentifier>{b0d28d20-bfaf-4816-8415-28c20ecf9fac}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="base\component">
|
||||||
|
<UniqueIdentifier>{d15f4de1-7c2c-40d6-a3ce-68860b95a61e}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Canvas.h">
|
<ClInclude Include="..\..\src\kiwano\2d\Canvas.h">
|
||||||
|
|
@ -69,9 +72,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h">
|
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Actor.h">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Stage.h">
|
<ClInclude Include="..\..\src\kiwano\2d\Stage.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -132,9 +132,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\win32\libraries.h">
|
<ClInclude Include="..\..\src\kiwano\platform\win32\libraries.h">
|
||||||
<Filter>platform\win32</Filter>
|
<Filter>platform\win32</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Button.h">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Singleton.h">
|
<ClInclude Include="..\..\src\kiwano\core\Singleton.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -261,9 +258,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\render\ShapeMaker.h">
|
<ClInclude Include="..\..\src\kiwano\render\ShapeMaker.h">
|
||||||
<Filter>render</Filter>
|
<Filter>render</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Component.h">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\Allocator.h">
|
<ClInclude Include="..\..\src\kiwano\core\Allocator.h">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
@ -345,6 +339,18 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\event\WindowEvent.h">
|
<ClInclude Include="..\..\src\kiwano\event\WindowEvent.h">
|
||||||
<Filter>event</Filter>
|
<Filter>event</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\2d\Actor.h">
|
||||||
|
<Filter>2d</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\base\component\Button.h">
|
||||||
|
<Filter>base\component</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\base\component\Component.h">
|
||||||
|
<Filter>base\component</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\base\component\ComponentManager.h">
|
||||||
|
<Filter>base\component</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\Canvas.cpp">
|
||||||
|
|
@ -365,9 +371,6 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\GifSprite.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\GifSprite.cpp">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Actor.cpp">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Stage.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\Stage.cpp">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -422,9 +425,6 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\platform\win32\libraries.cpp">
|
<ClCompile Include="..\..\src\kiwano\platform\win32\libraries.cpp">
|
||||||
<Filter>platform\win32</Filter>
|
<Filter>platform\win32</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Button.cpp">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\platform\win32\WindowImpl.cpp">
|
<ClCompile Include="..\..\src\kiwano\platform\win32\WindowImpl.cpp">
|
||||||
<Filter>platform\win32</Filter>
|
<Filter>platform\win32</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -503,9 +503,6 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\render\ShapeMaker.cpp">
|
<ClCompile Include="..\..\src\kiwano\render\ShapeMaker.cpp">
|
||||||
<Filter>render</Filter>
|
<Filter>render</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Component.cpp">
|
|
||||||
<Filter>2d</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\core\Allocator.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Allocator.cpp">
|
||||||
<Filter>core</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -566,6 +563,18 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\event\WindowEvent.cpp">
|
<ClCompile Include="..\..\src\kiwano\event\WindowEvent.cpp">
|
||||||
<Filter>event</Filter>
|
<Filter>event</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\2d\Actor.cpp">
|
||||||
|
<Filter>2d</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\base\component\Button.cpp">
|
||||||
|
<Filter>base\component</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\base\component\Component.cpp">
|
||||||
|
<Filter>base\component</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\base\component\ComponentManager.cpp">
|
||||||
|
<Filter>base\component</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="suppress_warning.ruleset" />
|
<None Include="suppress_warning.ruleset" />
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,8 @@ ActorPtr Actor::Create()
|
||||||
}
|
}
|
||||||
|
|
||||||
Actor::Actor()
|
Actor::Actor()
|
||||||
: visible_(true)
|
: ComponentManager(this)
|
||||||
|
, visible_(true)
|
||||||
, visible_in_rt_(true)
|
, visible_in_rt_(true)
|
||||||
, update_pausing_(false)
|
, update_pausing_(false)
|
||||||
, hover_(false)
|
, hover_(false)
|
||||||
|
|
@ -79,7 +80,7 @@ void Actor::Update(Duration dt)
|
||||||
{
|
{
|
||||||
ActionScheduler::Update(this, dt);
|
ActionScheduler::Update(this, dt);
|
||||||
TaskScheduler::Update(dt);
|
TaskScheduler::Update(dt);
|
||||||
UpdateComponents(dt);
|
ComponentManager::Update(dt);
|
||||||
|
|
||||||
if (!update_pausing_)
|
if (!update_pausing_)
|
||||||
{
|
{
|
||||||
|
|
@ -112,7 +113,7 @@ void Actor::Render(RenderContext& ctx)
|
||||||
if (CheckVisibility(ctx))
|
if (CheckVisibility(ctx))
|
||||||
{
|
{
|
||||||
PrepareToRender(ctx);
|
PrepareToRender(ctx);
|
||||||
RenderComponents(ctx);
|
ComponentManager::Render(ctx);
|
||||||
OnRender(ctx);
|
OnRender(ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -132,7 +133,7 @@ void Actor::Render(RenderContext& ctx)
|
||||||
if (CheckVisibility(ctx))
|
if (CheckVisibility(ctx))
|
||||||
{
|
{
|
||||||
PrepareToRender(ctx);
|
PrepareToRender(ctx);
|
||||||
RenderComponents(ctx);
|
ComponentManager::Render(ctx);
|
||||||
OnRender(ctx);
|
OnRender(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -242,19 +243,7 @@ void Actor::DoDeserialize(Deserializer* deserializer)
|
||||||
|
|
||||||
bool Actor::HandleEvent(Event* evt)
|
bool Actor::HandleEvent(Event* evt)
|
||||||
{
|
{
|
||||||
if (!components_.IsEmpty())
|
ComponentManager::DispatchToComponents(evt);
|
||||||
{
|
|
||||||
ComponentPtr next;
|
|
||||||
for (auto component = components_.GetFirst(); component; component = next)
|
|
||||||
{
|
|
||||||
next = component->GetNext();
|
|
||||||
|
|
||||||
if (component->IsEnable())
|
|
||||||
{
|
|
||||||
component->HandleEvent(evt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EventDispatcher::DispatchEvent(evt))
|
if (!EventDispatcher::DispatchEvent(evt))
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -304,40 +293,6 @@ bool Actor::HandleEvent(Event* evt)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actor::UpdateComponents(Duration dt)
|
|
||||||
{
|
|
||||||
if (!components_.IsEmpty())
|
|
||||||
{
|
|
||||||
ComponentPtr next;
|
|
||||||
for (auto component = components_.GetFirst(); component; component = next)
|
|
||||||
{
|
|
||||||
next = component->GetNext();
|
|
||||||
|
|
||||||
if (component->IsEnable())
|
|
||||||
{
|
|
||||||
component->OnUpdate(dt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Actor::RenderComponents(RenderContext& ctx)
|
|
||||||
{
|
|
||||||
if (!components_.IsEmpty())
|
|
||||||
{
|
|
||||||
ComponentPtr next;
|
|
||||||
for (auto component = components_.GetFirst(); component; component = next)
|
|
||||||
{
|
|
||||||
next = component->GetNext();
|
|
||||||
|
|
||||||
if (component->IsEnable())
|
|
||||||
{
|
|
||||||
component->OnRender(ctx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const Matrix3x2& Actor::GetTransformMatrix() const
|
const Matrix3x2& Actor::GetTransformMatrix() const
|
||||||
{
|
{
|
||||||
UpdateTransform();
|
UpdateTransform();
|
||||||
|
|
@ -657,72 +612,6 @@ void Actor::RemoveFromParent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component* Actor::AddComponent(ComponentPtr component)
|
|
||||||
{
|
|
||||||
KGE_ASSERT(component && "AddComponent failed, NULL pointer exception");
|
|
||||||
|
|
||||||
if (component)
|
|
||||||
{
|
|
||||||
component->InitComponent(this);
|
|
||||||
components_.PushBack(component);
|
|
||||||
}
|
|
||||||
return component.Get();
|
|
||||||
}
|
|
||||||
|
|
||||||
ComponentList& Actor::GetAllComponents()
|
|
||||||
{
|
|
||||||
return components_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ComponentList& Actor::GetAllComponents() const
|
|
||||||
{
|
|
||||||
return components_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Actor::RemoveComponent(ComponentPtr component)
|
|
||||||
{
|
|
||||||
auto iter = std::find(components_.begin(), components_.end(), component);
|
|
||||||
if (iter != components_.end())
|
|
||||||
{
|
|
||||||
component->DestroyComponent();
|
|
||||||
components_.Remove(component);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Actor::RemoveComponents(const String& name)
|
|
||||||
{
|
|
||||||
if (!components_.IsEmpty())
|
|
||||||
{
|
|
||||||
ComponentPtr next;
|
|
||||||
for (auto component = components_.GetFirst(); component; component = next)
|
|
||||||
{
|
|
||||||
next = component->GetNext();
|
|
||||||
|
|
||||||
if (component->IsName(name))
|
|
||||||
{
|
|
||||||
component->DestroyComponent();
|
|
||||||
components_.Remove(component);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Actor::RemoveAllComponents()
|
|
||||||
{
|
|
||||||
// Destroy all components
|
|
||||||
if (!components_.IsEmpty())
|
|
||||||
{
|
|
||||||
ComponentPtr next;
|
|
||||||
for (auto component = components_.GetFirst(); component; component = next)
|
|
||||||
{
|
|
||||||
next = component->GetNext();
|
|
||||||
|
|
||||||
component->DestroyComponent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
components_.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Actor::RemoveChild(ActorPtr child)
|
void Actor::RemoveChild(ActorPtr child)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(child && "Actor::RemoveChild failed, NULL pointer exception");
|
KGE_ASSERT(child && "Actor::RemoveChild failed, NULL pointer exception");
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,12 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/math/Math.h>
|
#include <kiwano/math/Math.h>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
|
||||||
#include <kiwano/core/Time.h>
|
#include <kiwano/core/Time.h>
|
||||||
|
#include <kiwano/base/ObjectBase.h>
|
||||||
|
#include <kiwano/base/component/ComponentManager.h>
|
||||||
#include <kiwano/event/EventDispatcher.h>
|
#include <kiwano/event/EventDispatcher.h>
|
||||||
#include <kiwano/utils/TaskScheduler.h>
|
#include <kiwano/utils/TaskScheduler.h>
|
||||||
#include <kiwano/2d/action/ActionScheduler.h>
|
#include <kiwano/2d/action/ActionScheduler.h>
|
||||||
#include <kiwano/2d/Component.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -65,6 +65,7 @@ class KGE_API Actor
|
||||||
, public TaskScheduler
|
, public TaskScheduler
|
||||||
, public ActionScheduler
|
, public ActionScheduler
|
||||||
, public EventDispatcher
|
, public EventDispatcher
|
||||||
|
, public ComponentManager
|
||||||
, protected IntrusiveListValue<ActorPtr>
|
, protected IntrusiveListValue<ActorPtr>
|
||||||
{
|
{
|
||||||
friend class Director;
|
friend class Director;
|
||||||
|
|
@ -370,32 +371,6 @@ public:
|
||||||
/// @brief 从父角色移除
|
/// @brief 从父角色移除
|
||||||
void RemoveFromParent();
|
void RemoveFromParent();
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 添加组件
|
|
||||||
/// @param component 组件
|
|
||||||
Component* AddComponent(ComponentPtr component);
|
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 获取所有组件
|
|
||||||
ComponentList& GetAllComponents();
|
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 获取所有组件
|
|
||||||
const ComponentList& GetAllComponents() const;
|
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 移除组件
|
|
||||||
void RemoveComponent(ComponentPtr component);
|
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 移除组件
|
|
||||||
/// @param name 组件名称
|
|
||||||
void RemoveComponents(const String& name);
|
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 移除所有组件
|
|
||||||
void RemoveAllComponents();
|
|
||||||
|
|
||||||
/// \~chinese
|
/// \~chinese
|
||||||
/// @brief 暂停角色更新
|
/// @brief 暂停角色更新
|
||||||
void PauseUpdating();
|
void PauseUpdating();
|
||||||
|
|
@ -499,14 +474,6 @@ protected:
|
||||||
/// @brief 处理事件
|
/// @brief 处理事件
|
||||||
bool HandleEvent(Event* evt);
|
bool HandleEvent(Event* evt);
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 更新组件
|
|
||||||
void UpdateComponents(Duration dt);
|
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 渲染组件
|
|
||||||
void RenderComponents(RenderContext& ctx);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool visible_;
|
bool visible_;
|
||||||
bool update_pausing_;
|
bool update_pausing_;
|
||||||
|
|
@ -524,7 +491,6 @@ private:
|
||||||
Point anchor_;
|
Point anchor_;
|
||||||
Size size_;
|
Size size_;
|
||||||
ActorList children_;
|
ActorList children_;
|
||||||
ComponentList components_;
|
|
||||||
UpdateCallback cb_update_;
|
UpdateCallback cb_update_;
|
||||||
Transform transform_;
|
Transform transform_;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,10 +34,6 @@ class ActionScheduler;
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(Action);
|
KGE_DECLARE_SMART_PTR(Action);
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 动画列表
|
|
||||||
typedef IntrusiveList<ActionPtr> ActionList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \~chinese
|
* \~chinese
|
||||||
* \defgroup Actions 动画
|
* \defgroup Actions 动画
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,10 @@ namespace kiwano
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 动画列表
|
||||||
|
typedef IntrusiveList<ActionPtr> ActionList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \~chinese
|
* \~chinese
|
||||||
* @brief 动画调度器
|
* @brief 动画调度器
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/Button.h>
|
#include <kiwano/base/component/Button.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/platform/Application.h>
|
#include <kiwano/platform/Application.h>
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/Component.h>
|
#include <kiwano/base/component/Component.h>
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
@ -29,6 +29,7 @@ namespace kiwano
|
||||||
|
|
||||||
class Actor;
|
class Actor;
|
||||||
class Event;
|
class Event;
|
||||||
|
class ComponentManager;
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(Component);
|
KGE_DECLARE_SMART_PTR(Component);
|
||||||
|
|
||||||
|
|
@ -42,10 +43,6 @@ KGE_DECLARE_SMART_PTR(Component);
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 组件列表
|
|
||||||
typedef IntrusiveList<ComponentPtr> ComponentList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \~chinese
|
* \~chinese
|
||||||
* @brief ×éźţ
|
* @brief ×éźţ
|
||||||
|
|
@ -54,7 +51,7 @@ class KGE_API Component
|
||||||
: public ObjectBase
|
: public ObjectBase
|
||||||
, protected IntrusiveListValue<ComponentPtr>
|
, protected IntrusiveListValue<ComponentPtr>
|
||||||
{
|
{
|
||||||
friend class Actor;
|
friend class ComponentManager;
|
||||||
friend IntrusiveList<ComponentPtr>;
|
friend IntrusiveList<ComponentPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -0,0 +1,148 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#include <kiwano/base/component/ComponentManager.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
ComponentManager::ComponentManager(Actor* target)
|
||||||
|
: target_(target)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Component* ComponentManager::AddComponent(ComponentPtr component)
|
||||||
|
{
|
||||||
|
KGE_ASSERT(component && "AddComponent failed, NULL pointer exception");
|
||||||
|
|
||||||
|
if (component)
|
||||||
|
{
|
||||||
|
component->InitComponent(target_);
|
||||||
|
components_.PushBack(component);
|
||||||
|
}
|
||||||
|
return component.Get();
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentList& ComponentManager::GetAllComponents()
|
||||||
|
{
|
||||||
|
return components_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ComponentList& ComponentManager::GetAllComponents() const
|
||||||
|
{
|
||||||
|
return components_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentManager::RemoveComponent(ComponentPtr component)
|
||||||
|
{
|
||||||
|
auto iter = std::find(components_.begin(), components_.end(), component);
|
||||||
|
if (iter != components_.end())
|
||||||
|
{
|
||||||
|
component->DestroyComponent();
|
||||||
|
components_.Remove(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentManager::RemoveComponents(const String& name)
|
||||||
|
{
|
||||||
|
if (!components_.IsEmpty())
|
||||||
|
{
|
||||||
|
ComponentPtr next;
|
||||||
|
for (auto component = components_.GetFirst(); component; component = next)
|
||||||
|
{
|
||||||
|
next = component->GetNext();
|
||||||
|
|
||||||
|
if (component->IsName(name))
|
||||||
|
{
|
||||||
|
component->DestroyComponent();
|
||||||
|
components_.Remove(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentManager::RemoveAllComponents()
|
||||||
|
{
|
||||||
|
// Destroy all components
|
||||||
|
if (!components_.IsEmpty())
|
||||||
|
{
|
||||||
|
ComponentPtr next;
|
||||||
|
for (auto component = components_.GetFirst(); component; component = next)
|
||||||
|
{
|
||||||
|
next = component->GetNext();
|
||||||
|
|
||||||
|
component->DestroyComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
components_.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentManager::Update(Duration dt)
|
||||||
|
{
|
||||||
|
if (!components_.IsEmpty())
|
||||||
|
{
|
||||||
|
ComponentPtr next;
|
||||||
|
for (auto component = components_.GetFirst(); component; component = next)
|
||||||
|
{
|
||||||
|
next = component->GetNext();
|
||||||
|
|
||||||
|
if (component->IsEnable())
|
||||||
|
{
|
||||||
|
component->OnUpdate(dt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentManager::Render(RenderContext& ctx)
|
||||||
|
{
|
||||||
|
if (!components_.IsEmpty())
|
||||||
|
{
|
||||||
|
ComponentPtr next;
|
||||||
|
for (auto component = components_.GetFirst(); component; component = next)
|
||||||
|
{
|
||||||
|
next = component->GetNext();
|
||||||
|
|
||||||
|
if (component->IsEnable())
|
||||||
|
{
|
||||||
|
component->OnRender(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ComponentManager::DispatchToComponents(Event* evt)
|
||||||
|
{
|
||||||
|
if (!components_.IsEmpty())
|
||||||
|
{
|
||||||
|
ComponentPtr next;
|
||||||
|
for (auto component = components_.GetFirst(); component; component = next)
|
||||||
|
{
|
||||||
|
next = component->GetNext();
|
||||||
|
|
||||||
|
if (component->IsEnable())
|
||||||
|
{
|
||||||
|
component->HandleEvent(evt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -0,0 +1,92 @@
|
||||||
|
// Copyright (c) 2016-2018 Kiwano - Nomango
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <kiwano/core/IntrusiveList.h>
|
||||||
|
#include <kiwano/base/component/Component.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \addtogroup Component
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 组件列表
|
||||||
|
typedef IntrusiveList<ComponentPtr> ComponentList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \~chinese
|
||||||
|
* @brief 组件管理器
|
||||||
|
*/
|
||||||
|
class KGE_API ComponentManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 添加组件
|
||||||
|
/// @param component 组件
|
||||||
|
Component* AddComponent(ComponentPtr component);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 获取所有组件
|
||||||
|
ComponentList& GetAllComponents();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 获取所有组件
|
||||||
|
const ComponentList& GetAllComponents() const;
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 移除组件
|
||||||
|
void RemoveComponent(ComponentPtr component);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 移除组件
|
||||||
|
/// @param name 组件名称
|
||||||
|
void RemoveComponents(const String& name);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 移除所有组件
|
||||||
|
void RemoveAllComponents();
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 更新组件
|
||||||
|
void Update(Duration dt);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 渲染组件
|
||||||
|
void Render(RenderContext& ctx);
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 分发事件
|
||||||
|
void DispatchToComponents(Event* evt);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ComponentManager(Actor* target);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Actor* target_;
|
||||||
|
ComponentList components_;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
} // namespace kiwano
|
||||||
|
|
@ -23,6 +23,11 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief 监听器列表
|
||||||
|
typedef IntrusiveList<EventListenerPtr> ListenerList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \~chinese
|
* \~chinese
|
||||||
* @brief 事件分发系统
|
* @brief 事件分发系统
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,6 @@ class EventDispatcher;
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(EventListener);
|
KGE_DECLARE_SMART_PTR(EventListener);
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 监听器列表
|
|
||||||
typedef IntrusiveList<EventListenerPtr> ListenerList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \~chinese
|
* \~chinese
|
||||||
* @brief 事件监听器
|
* @brief 事件监听器
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,9 @@
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/base/ObjectBase.h>
|
||||||
#include <kiwano/base/Director.h>
|
#include <kiwano/base/Director.h>
|
||||||
#include <kiwano/base/Module.h>
|
#include <kiwano/base/Module.h>
|
||||||
|
#include <kiwano/base/component/Component.h>
|
||||||
|
#include <kiwano/base/component/ComponentManager.h>
|
||||||
|
#include <kiwano/base/component/Button.h>
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -91,7 +94,6 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/2d/Button.h>
|
|
||||||
#include <kiwano/2d/Canvas.h>
|
#include <kiwano/2d/Canvas.h>
|
||||||
#include <kiwano/2d/DebugActor.h>
|
#include <kiwano/2d/DebugActor.h>
|
||||||
#include <kiwano/2d/GifSprite.h>
|
#include <kiwano/2d/GifSprite.h>
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,6 @@ class TaskScheduler;
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(Task);
|
KGE_DECLARE_SMART_PTR(Task);
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief ÈÎÎñÁбí
|
|
||||||
typedef IntrusiveList<TaskPtr> TaskList;
|
|
||||||
|
|
||||||
/// \~chinese
|
/// \~chinese
|
||||||
/// @brief 任务
|
/// @brief 任务
|
||||||
/// @details 任务用于每隔一段时间执行一次回调函数,且可以指定执行总次数
|
/// @details 任务用于每隔一段时间执行一次回调函数,且可以指定执行总次数
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// \~chinese
|
||||||
|
/// @brief ÈÎÎñÁбí
|
||||||
|
typedef IntrusiveList<TaskPtr> TaskList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \~chinese
|
* \~chinese
|
||||||
* @brief 任务调度器
|
* @brief 任务调度器
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue