[deploy] Merge pull request #44 from KiwanoEngine/dev
Refactoring Event distribution mechanism
This commit is contained in:
commit
8119de2c4a
|
|
@ -13,7 +13,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\Body.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\Body.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\Contact.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\Contact.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\ContactListener.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\ContactEvent.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\Fixture.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\Fixture.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\helper.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\helper.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\Joint.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\Joint.h" />
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Body.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Body.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Contact.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Contact.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\ContactListener.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\ContactEvent.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Fixture.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Fixture.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Joint.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Joint.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Shape.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Shape.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\helper.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\helper.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\Fixture.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\Fixture.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\Contact.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\Contact.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano-physics\ContactListener.h" />
|
<ClInclude Include="..\..\src\kiwano-physics\ContactEvent.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Body.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Body.cpp" />
|
||||||
|
|
@ -18,6 +18,6 @@
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Shape.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Shape.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Fixture.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Fixture.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\Contact.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\Contact.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano-physics\ContactListener.cpp" />
|
<ClCompile Include="..\..\src\kiwano-physics\ContactEvent.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -11,19 +11,21 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\action\Animation.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\action\Animation.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Frame.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Frame.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\GifSprite.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Director.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Director.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\win32\ComPtr.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\Event.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\win32\helper.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Library.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\any.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\win32\ComPtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\basic_json.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\win32\helper.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\function.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\any.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\core.h" />
|
<ClInclude Include="..\..\src\kiwano\common\basic_json.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\intrusive_list.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\function.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\intrusive_ptr.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\common.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\noncopyable.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\intrusive_list.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\singleton.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\intrusive_ptr.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\string.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\noncopyable.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\core\vector.hpp" />
|
<ClInclude Include="..\..\src\kiwano\common\singleton.hpp" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\common\string.hpp" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\common\vector.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\kiwano.h" />
|
<ClInclude Include="..\..\src\kiwano\kiwano.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\config.h" />
|
<ClInclude Include="..\..\src\kiwano\config.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\macros.h" />
|
<ClInclude Include="..\..\src\kiwano\macros.h" />
|
||||||
|
|
@ -40,22 +42,19 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\TextStyle.hpp" />
|
<ClInclude Include="..\..\src\kiwano\2d\TextStyle.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Transform.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Transform.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Transition.h" />
|
<ClInclude Include="..\..\src\kiwano\2d\Transition.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\AsyncTask.h" />
|
<ClInclude Include="..\..\src\kiwano\core\AsyncTask.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Component.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Component.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Event.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\EventDispatcher.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\EventDispatcher.h" />
|
<ClInclude Include="..\..\src\kiwano\core\EventListener.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\EventListener.h" />
|
<ClInclude Include="..\..\src\kiwano\core\keys.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Input.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Logger.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\keys.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\ObjectBase.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Logger.h" />
|
<ClInclude Include="..\..\src\kiwano\core\RefCounter.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\ObjectBase.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Resource.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\RefCounter.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\SmartPtr.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Resource.h" />
|
<ClInclude Include="..\..\src\kiwano\core\Timer.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\SmartPtr.hpp" />
|
<ClInclude Include="..\..\src\kiwano\core\TimerManager.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Timer.h" />
|
<ClInclude Include="..\..\src\kiwano\core\time.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\TimerManager.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\base\time.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Window.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\math\constants.h" />
|
<ClInclude Include="..\..\src\kiwano\math\constants.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\math\ease.h" />
|
<ClInclude Include="..\..\src\kiwano\math\ease.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\math\math.h" />
|
<ClInclude Include="..\..\src\kiwano\math\math.h" />
|
||||||
|
|
@ -65,7 +64,10 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\math\scalar.h" />
|
<ClInclude Include="..\..\src\kiwano\math\scalar.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\math\Vec2.hpp" />
|
<ClInclude Include="..\..\src\kiwano\math\Vec2.hpp" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\Application.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\Application.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\FileSystem.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\Input.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\platform\modules.h" />
|
<ClInclude Include="..\..\src\kiwano\platform\modules.h" />
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\Window.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\renderer\Brush.h" />
|
<ClInclude Include="..\..\src\kiwano\renderer\Brush.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\renderer\Color.h" />
|
<ClInclude Include="..\..\src\kiwano\renderer\Color.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\renderer\Font.h" />
|
<ClInclude Include="..\..\src\kiwano\renderer\Font.h" />
|
||||||
|
|
@ -88,7 +90,6 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\ui\Button.h" />
|
<ClInclude Include="..\..\src\kiwano\ui\Button.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\ui\Menu.h" />
|
<ClInclude Include="..\..\src\kiwano\ui\Menu.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\LocalStorage.h" />
|
<ClInclude Include="..\..\src\kiwano\utils\LocalStorage.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\FileSystem.h" />
|
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\ResourceCache.h" />
|
<ClInclude Include="..\..\src\kiwano\utils\ResourceCache.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\UserData.h" />
|
<ClInclude Include="..\..\src\kiwano\utils\UserData.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
@ -113,21 +114,24 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Text.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Text.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Transform.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Transform.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp" />
|
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\AsyncTask.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\AsyncTask.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Component.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Component.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\EventDispatcher.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Event.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\EventListener.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\EventDispatcher.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Input.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\EventListener.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Logger.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Library.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\ObjectBase.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Logger.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Resource.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\ObjectBase.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Director.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Resource.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Timer.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Director.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\TimerManager.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\Timer.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\time.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\TimerManager.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Window.cpp" />
|
<ClCompile Include="..\..\src\kiwano\core\time.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\platform\Application.cpp" />
|
<ClCompile Include="..\..\src\kiwano\platform\Application.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\platform\FileSystem.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\platform\Input.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\platform\modules.cpp" />
|
<ClCompile Include="..\..\src\kiwano\platform\modules.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\kiwano\platform\Window.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\renderer\Brush.cpp" />
|
<ClCompile Include="..\..\src\kiwano\renderer\Brush.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\renderer\Color.cpp" />
|
<ClCompile Include="..\..\src\kiwano\renderer\Color.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\renderer\Font.cpp" />
|
<ClCompile Include="..\..\src\kiwano\renderer\Font.cpp" />
|
||||||
|
|
@ -148,7 +152,6 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\ui\Button.cpp" />
|
<ClCompile Include="..\..\src\kiwano\ui\Button.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\ui\Menu.cpp" />
|
<ClCompile Include="..\..\src\kiwano\ui\Menu.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\LocalStorage.cpp" />
|
<ClCompile Include="..\..\src\kiwano\utils\LocalStorage.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\FileSystem.cpp" />
|
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\ResourceCache.cpp" />
|
<ClCompile Include="..\..\src\kiwano\utils\ResourceCache.cpp" />
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\UserData.cpp" />
|
<ClCompile Include="..\..\src\kiwano\utils\UserData.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
<Filter Include="2d">
|
<Filter Include="2d">
|
||||||
<UniqueIdentifier>{896bdedf-6e82-449b-9b6e-0bc69f3699b1}</UniqueIdentifier>
|
<UniqueIdentifier>{896bdedf-6e82-449b-9b6e-0bc69f3699b1}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="base">
|
<Filter Include="core">
|
||||||
<UniqueIdentifier>{2e18d99a-e906-499a-9e29-4e0783202644}</UniqueIdentifier>
|
<UniqueIdentifier>{2e18d99a-e906-499a-9e29-4e0783202644}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="renderer">
|
<Filter Include="renderer">
|
||||||
|
|
@ -25,13 +25,13 @@
|
||||||
<Filter Include="2d\action">
|
<Filter Include="2d\action">
|
||||||
<UniqueIdentifier>{9314f30d-5742-48b6-94e5-e3b4284106f6}</UniqueIdentifier>
|
<UniqueIdentifier>{9314f30d-5742-48b6-94e5-e3b4284106f6}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="core">
|
<Filter Include="common">
|
||||||
<UniqueIdentifier>{86e2d0f2-a9d0-4456-b6a5-d480228bbf82}</UniqueIdentifier>
|
<UniqueIdentifier>{86e2d0f2-a9d0-4456-b6a5-d480228bbf82}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="renderer\win32">
|
<Filter Include="renderer\win32">
|
||||||
<UniqueIdentifier>{30333461-e9bc-4709-84bd-ce6e0e1a3079}</UniqueIdentifier>
|
<UniqueIdentifier>{30333461-e9bc-4709-84bd-ce6e0e1a3079}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="base\win32">
|
<Filter Include="core\win32">
|
||||||
<UniqueIdentifier>{192a47a9-9df6-4f40-a7d3-888eb00c53ac}</UniqueIdentifier>
|
<UniqueIdentifier>{192a47a9-9df6-4f40-a7d3-888eb00c53ac}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
@ -63,29 +63,23 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Transition.h">
|
<ClInclude Include="..\..\src\kiwano\2d\Transition.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Component.h">
|
<ClInclude Include="..\..\src\kiwano\core\Component.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Event.hpp">
|
<ClInclude Include="..\..\src\kiwano\core\EventDispatcher.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\EventDispatcher.h">
|
<ClInclude Include="..\..\src\kiwano\core\EventListener.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\EventListener.h">
|
<ClInclude Include="..\..\src\kiwano\core\RefCounter.hpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\keys.hpp">
|
<ClInclude Include="..\..\src\kiwano\core\Resource.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\RefCounter.hpp">
|
<ClInclude Include="..\..\src\kiwano\core\time.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Resource.h">
|
|
||||||
<Filter>base</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\base\time.h">
|
|
||||||
<Filter>base</Filter>
|
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\math\Matrix.hpp">
|
<ClInclude Include="..\..\src\kiwano\math\Matrix.hpp">
|
||||||
<Filter>math</Filter>
|
<Filter>math</Filter>
|
||||||
|
|
@ -107,27 +101,24 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\math\Vec2.hpp">
|
<ClInclude Include="..\..\src\kiwano\math\Vec2.hpp">
|
||||||
<Filter>math</Filter>
|
<Filter>math</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Input.h">
|
<ClInclude Include="..\..\src\kiwano\core\SmartPtr.hpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\base\SmartPtr.hpp">
|
|
||||||
<Filter>base</Filter>
|
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\kiwano.h" />
|
<ClInclude Include="..\..\src\kiwano\kiwano.h" />
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Timer.h">
|
<ClInclude Include="..\..\src\kiwano\core\Timer.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\TimerManager.h">
|
<ClInclude Include="..\..\src\kiwano\core\TimerManager.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\AsyncTask.h">
|
<ClInclude Include="..\..\src\kiwano\core\AsyncTask.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<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\base\Director.h">
|
<ClInclude Include="..\..\src\kiwano\core\Director.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\Actor.h">
|
<ClInclude Include="..\..\src\kiwano\2d\Actor.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
|
|
@ -162,32 +153,32 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\FrameSequence.h">
|
<ClInclude Include="..\..\src\kiwano\2d\FrameSequence.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\basic_json.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\basic_json.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\function.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\function.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\intrusive_list.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\intrusive_list.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\intrusive_ptr.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\intrusive_ptr.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\noncopyable.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\noncopyable.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\singleton.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\singleton.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\string.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\string.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\vector.hpp">
|
<ClInclude Include="..\..\src\kiwano\common\vector.hpp">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\core\core.h">
|
<ClInclude Include="..\..\src\kiwano\common\common.h">
|
||||||
<Filter>core</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\DebugActor.h">
|
<ClInclude Include="..\..\src\kiwano\2d\DebugActor.h">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
|
|
@ -201,17 +192,14 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\2d\action\ActionWalk.h">
|
<ClInclude Include="..\..\src\kiwano\2d\action\ActionWalk.h">
|
||||||
<Filter>2d\action</Filter>
|
<Filter>2d\action</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Logger.h">
|
<ClInclude Include="..\..\src\kiwano\core\Logger.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\base\Window.h">
|
|
||||||
<Filter>base</Filter>
|
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\math\math.h">
|
<ClInclude Include="..\..\src\kiwano\math\math.h">
|
||||||
<Filter>math</Filter>
|
<Filter>math</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\ObjectBase.h">
|
<ClInclude Include="..\..\src\kiwano\core\ObjectBase.h">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\renderer\Color.h">
|
<ClInclude Include="..\..\src\kiwano\renderer\Color.h">
|
||||||
<Filter>renderer</Filter>
|
<Filter>renderer</Filter>
|
||||||
|
|
@ -282,24 +270,39 @@
|
||||||
<ClInclude Include="..\..\src\kiwano\math\scalar.h">
|
<ClInclude Include="..\..\src\kiwano\math\scalar.h">
|
||||||
<Filter>math</Filter>
|
<Filter>math</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\win32\ComPtr.hpp">
|
<ClInclude Include="..\..\src\kiwano\core\win32\ComPtr.hpp">
|
||||||
<Filter>base\win32</Filter>
|
<Filter>core\win32</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\base\win32\helper.h">
|
<ClInclude Include="..\..\src\kiwano\core\win32\helper.h">
|
||||||
<Filter>base\win32</Filter>
|
<Filter>core\win32</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\LocalStorage.h">
|
<ClInclude Include="..\..\src\kiwano\utils\LocalStorage.h">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\FileSystem.h">
|
<ClInclude Include="..\..\src\kiwano\common\any.hpp">
|
||||||
<Filter>utils</Filter>
|
<Filter>common</Filter>
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\kiwano\core\any.hpp">
|
|
||||||
<Filter>core</Filter>
|
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\src\kiwano\utils\UserData.h">
|
<ClInclude Include="..\..\src\kiwano\utils\UserData.h">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\core\Library.h">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\core\Event.h">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\FileSystem.h">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\core\keys.h">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\Input.h">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\kiwano\platform\Window.h">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\kiwano\ui\Button.cpp">
|
<ClCompile Include="..\..\src\kiwano\ui\Button.cpp">
|
||||||
|
|
@ -323,17 +326,17 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\Transition.cpp">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\EventDispatcher.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\EventDispatcher.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\EventListener.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\EventListener.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Resource.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Resource.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\time.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\time.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\platform\Application.cpp">
|
<ClCompile Include="..\..\src\kiwano\platform\Application.cpp">
|
||||||
<Filter>platform</Filter>
|
<Filter>platform</Filter>
|
||||||
|
|
@ -341,23 +344,20 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\platform\modules.cpp">
|
<ClCompile Include="..\..\src\kiwano\platform\modules.cpp">
|
||||||
<Filter>platform</Filter>
|
<Filter>platform</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Input.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Timer.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Timer.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\TimerManager.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\TimerManager.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\AsyncTask.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\base\AsyncTask.cpp">
|
|
||||||
<Filter>base</Filter>
|
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<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\base\Director.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Director.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\Actor.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\Actor.cpp">
|
||||||
<Filter>2d</Filter>
|
<Filter>2d</Filter>
|
||||||
|
|
@ -401,14 +401,11 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\2d\action\ActionWalk.cpp">
|
<ClCompile Include="..\..\src\kiwano\2d\action\ActionWalk.cpp">
|
||||||
<Filter>2d\action</Filter>
|
<Filter>2d\action</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Logger.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Logger.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Window.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\ObjectBase.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\base\ObjectBase.cpp">
|
|
||||||
<Filter>base</Filter>
|
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\renderer\Color.cpp">
|
<ClCompile Include="..\..\src\kiwano\renderer\Color.cpp">
|
||||||
<Filter>renderer</Filter>
|
<Filter>renderer</Filter>
|
||||||
|
|
@ -464,17 +461,29 @@
|
||||||
<ClCompile Include="..\..\src\kiwano\renderer\Brush.cpp">
|
<ClCompile Include="..\..\src\kiwano\renderer\Brush.cpp">
|
||||||
<Filter>renderer</Filter>
|
<Filter>renderer</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\base\Component.cpp">
|
<ClCompile Include="..\..\src\kiwano\core\Component.cpp">
|
||||||
<Filter>base</Filter>
|
<Filter>core</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\LocalStorage.cpp">
|
<ClCompile Include="..\..\src\kiwano\utils\LocalStorage.cpp">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\FileSystem.cpp">
|
|
||||||
<Filter>utils</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\kiwano\utils\UserData.cpp">
|
<ClCompile Include="..\..\src\kiwano\utils\UserData.cpp">
|
||||||
<Filter>utils</Filter>
|
<Filter>utils</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\core\Library.cpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\core\Event.cpp">
|
||||||
|
<Filter>core</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\platform\FileSystem.cpp">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\platform\Input.cpp">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\kiwano\platform\Window.cpp">
|
||||||
|
<Filter>platform</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -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/base/win32/helper.h>
|
#include <kiwano/core/win32/helper.h>
|
||||||
#include <kiwano-audio/audio-modules.h>
|
#include <kiwano-audio/audio-modules.h>
|
||||||
#include <kiwano-audio/AudioEngine.h>
|
#include <kiwano-audio/AudioEngine.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,11 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/singleton.hpp>
|
#include <kiwano/common/singleton.hpp>
|
||||||
#include <kiwano/base/Component.h>
|
#include <kiwano/core/Component.h>
|
||||||
#include <kiwano/base/win32/ComPtr.hpp>
|
#include <kiwano/core/win32/ComPtr.hpp>
|
||||||
#include <kiwano-audio/Transcoder.h>
|
#include <kiwano-audio/Transcoder.h>
|
||||||
|
#include <xaudio2.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@
|
||||||
// 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/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/utils/FileSystem.h>
|
#include <kiwano/platform/FileSystem.h>
|
||||||
#include <kiwano-audio/Sound.h>
|
#include <kiwano-audio/Sound.h>
|
||||||
#include <kiwano-audio/AudioEngine.h>
|
#include <kiwano-audio/AudioEngine.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/intrusive_ptr.hpp>
|
#include <kiwano/common/intrusive_ptr.hpp>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano/base/Resource.h>
|
#include <kiwano/core/Resource.h>
|
||||||
#include <xaudio2.h>
|
|
||||||
#include <kiwano-audio/Transcoder.h>
|
#include <kiwano-audio/Transcoder.h>
|
||||||
|
#include <xaudio2.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/intrusive_ptr.hpp>
|
#include <kiwano/common/intrusive_ptr.hpp>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano-audio/Sound.h>
|
#include <kiwano-audio/Sound.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,10 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/core/string.hpp>
|
#include <kiwano/common/string.hpp>
|
||||||
#include <kiwano/base/Resource.h>
|
#include <kiwano/core/Resource.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/base/win32/ComPtr.hpp>
|
#include <kiwano/core/win32/ComPtr.hpp>
|
||||||
#include <kiwano/platform/modules.h>
|
#include <kiwano/platform/modules.h>
|
||||||
#include <kiwano-audio/audio-modules.h>
|
#include <kiwano-audio/audio-modules.h>
|
||||||
#include <kiwano-audio/Transcoder.h>
|
#include <kiwano-audio/Transcoder.h>
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/Resource.h>
|
#include <kiwano/core/Resource.h>
|
||||||
#include <mfapi.h>
|
#include <mfapi.h>
|
||||||
#include <mfidl.h>
|
#include <mfidl.h>
|
||||||
#include <mfreadwrite.h>
|
#include <mfreadwrite.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/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano-audio/audio-modules.h>
|
#include <kiwano-audio/audio-modules.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
@ -28,7 +28,7 @@ namespace kiwano
|
||||||
namespace modules
|
namespace modules
|
||||||
{
|
{
|
||||||
XAudio2::XAudio2()
|
XAudio2::XAudio2()
|
||||||
: xaudio2(nullptr)
|
: xaudio2()
|
||||||
, XAudio2Create(nullptr)
|
, XAudio2Create(nullptr)
|
||||||
{
|
{
|
||||||
const auto xaudio2_dll_names =
|
const auto xaudio2_dll_names =
|
||||||
|
|
@ -40,16 +40,17 @@ namespace kiwano
|
||||||
|
|
||||||
for (const auto& name : xaudio2_dll_names)
|
for (const auto& name : xaudio2_dll_names)
|
||||||
{
|
{
|
||||||
xaudio2 = LoadLibraryW(name);
|
if (xaudio2.Load(name))
|
||||||
if (xaudio2)
|
|
||||||
{
|
{
|
||||||
XAudio2Create = (PFN_XAudio2Create)
|
|
||||||
GetProcAddress(xaudio2, "XAudio2Create");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xaudio2)
|
if (xaudio2.IsValid())
|
||||||
|
{
|
||||||
|
XAudio2Create = xaudio2.GetProcess<PFN_XAudio2Create>(L"XAudio2Create");
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
KGE_ERROR_LOG(L"Load xaudio2.dll failed");
|
KGE_ERROR_LOG(L"Load xaudio2.dll failed");
|
||||||
throw std::runtime_error("Load xaudio2.dll failed");
|
throw std::runtime_error("Load xaudio2.dll failed");
|
||||||
|
|
@ -57,8 +58,8 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaFoundation::MediaFoundation()
|
MediaFoundation::MediaFoundation()
|
||||||
: mfplat(nullptr)
|
: mfplat()
|
||||||
, mfreadwrite(nullptr)
|
, mfreadwrite()
|
||||||
, MFStartup(nullptr)
|
, MFStartup(nullptr)
|
||||||
, MFShutdown(nullptr)
|
, MFShutdown(nullptr)
|
||||||
, MFCreateMediaType(nullptr)
|
, MFCreateMediaType(nullptr)
|
||||||
|
|
@ -67,23 +68,13 @@ namespace kiwano
|
||||||
, MFCreateSourceReaderFromByteStream(nullptr)
|
, MFCreateSourceReaderFromByteStream(nullptr)
|
||||||
, MFCreateMFByteStreamOnStream(nullptr)
|
, MFCreateMFByteStreamOnStream(nullptr)
|
||||||
{
|
{
|
||||||
mfplat = LoadLibraryW(L"Mfplat.dll");
|
if (mfplat.Load(L"Mfplat.dll"))
|
||||||
if (mfplat)
|
|
||||||
{
|
{
|
||||||
MFStartup = (PFN_MFStartup)
|
MFStartup = mfplat.GetProcess<PFN_MFStartup>(L"MFStartup");
|
||||||
GetProcAddress(mfplat, "MFStartup");
|
MFShutdown = mfplat.GetProcess<PFN_MFShutdown>(L"MFShutdown");
|
||||||
|
MFCreateMediaType = mfplat.GetProcess<PFN_MFCreateMediaType>(L"MFCreateMediaType");
|
||||||
MFShutdown = (PFN_MFShutdown)
|
MFCreateWaveFormatExFromMFMediaType = mfplat.GetProcess<PFN_MFCreateWaveFormatExFromMFMediaType>(L"MFCreateWaveFormatExFromMFMediaType");
|
||||||
GetProcAddress(mfplat, "MFShutdown");
|
MFCreateMFByteStreamOnStream = mfplat.GetProcess<PFN_MFCreateMFByteStreamOnStream>(L"MFCreateMFByteStreamOnStream");
|
||||||
|
|
||||||
MFCreateMediaType = (PFN_MFCreateMediaType)
|
|
||||||
GetProcAddress(mfplat, "MFCreateMediaType");
|
|
||||||
|
|
||||||
MFCreateWaveFormatExFromMFMediaType = (PFN_MFCreateWaveFormatExFromMFMediaType)
|
|
||||||
GetProcAddress(mfplat, "MFCreateWaveFormatExFromMFMediaType");
|
|
||||||
|
|
||||||
MFCreateMFByteStreamOnStream = (PFN_MFCreateMFByteStreamOnStream)
|
|
||||||
GetProcAddress(mfplat, "MFCreateMFByteStreamOnStream");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -91,14 +82,10 @@ namespace kiwano
|
||||||
throw std::runtime_error("Load Mfplat.dll failed");
|
throw std::runtime_error("Load Mfplat.dll failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
mfreadwrite = LoadLibraryW(L"Mfreadwrite.dll");
|
if (mfreadwrite.Load(L"Mfreadwrite.dll"))
|
||||||
if (mfreadwrite)
|
|
||||||
{
|
{
|
||||||
MFCreateSourceReaderFromURL = (PFN_MFCreateSourceReaderFromURL)
|
MFCreateSourceReaderFromURL = mfreadwrite.GetProcess<PFN_MFCreateSourceReaderFromURL>(L"MFCreateSourceReaderFromURL");
|
||||||
GetProcAddress(mfreadwrite, "MFCreateSourceReaderFromURL");
|
MFCreateSourceReaderFromByteStream = mfreadwrite.GetProcess<PFN_MFCreateSourceReaderFromByteStream>(L"MFCreateSourceReaderFromByteStream");
|
||||||
|
|
||||||
MFCreateSourceReaderFromByteStream = (PFN_MFCreateSourceReaderFromByteStream)
|
|
||||||
GetProcAddress(mfreadwrite, "MFCreateSourceReaderFromByteStream");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <kiwano/core/Library.h>
|
||||||
#include <xaudio2.h>
|
#include <xaudio2.h>
|
||||||
#include <mfapi.h>
|
#include <mfapi.h>
|
||||||
#include <mfidl.h>
|
#include <mfidl.h>
|
||||||
|
|
@ -32,13 +33,6 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
class KGE_API XAudio2
|
class KGE_API XAudio2
|
||||||
{
|
{
|
||||||
XAudio2();
|
|
||||||
|
|
||||||
HMODULE xaudio2;
|
|
||||||
|
|
||||||
// XAudio2 functions
|
|
||||||
typedef HRESULT(WINAPI* PFN_XAudio2Create)(IXAudio2**, UINT32, XAUDIO2_PROCESSOR);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static inline XAudio2& Get()
|
static inline XAudio2& Get()
|
||||||
{
|
{
|
||||||
|
|
@ -46,16 +40,29 @@ namespace kiwano
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XAudio2 functions
|
||||||
|
typedef HRESULT(WINAPI* PFN_XAudio2Create)(IXAudio2**, UINT32, XAUDIO2_PROCESSOR);
|
||||||
|
|
||||||
PFN_XAudio2Create XAudio2Create;
|
PFN_XAudio2Create XAudio2Create;
|
||||||
|
|
||||||
|
private:
|
||||||
|
XAudio2();
|
||||||
|
|
||||||
|
XAudio2(const XAudio2&) = delete;
|
||||||
|
XAudio2& operator=(const XAudio2&) = delete;
|
||||||
|
|
||||||
|
Library xaudio2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class KGE_API MediaFoundation
|
class KGE_API MediaFoundation
|
||||||
{
|
{
|
||||||
MediaFoundation();
|
public:
|
||||||
|
static inline MediaFoundation& Get()
|
||||||
HMODULE mfplat;
|
{
|
||||||
HMODULE mfreadwrite;
|
static MediaFoundation instance;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
// MediaFoundation functions
|
// MediaFoundation functions
|
||||||
typedef HRESULT(WINAPI* PFN_MFStartup)(ULONG, DWORD);
|
typedef HRESULT(WINAPI* PFN_MFStartup)(ULONG, DWORD);
|
||||||
|
|
@ -66,13 +73,6 @@ namespace kiwano
|
||||||
typedef HRESULT(WINAPI* PFN_MFCreateSourceReaderFromByteStream)(IMFByteStream*, IMFAttributes*, IMFSourceReader**);
|
typedef HRESULT(WINAPI* PFN_MFCreateSourceReaderFromByteStream)(IMFByteStream*, IMFAttributes*, IMFSourceReader**);
|
||||||
typedef HRESULT(WINAPI* PFN_MFCreateMFByteStreamOnStream)(IStream*, IMFByteStream**);
|
typedef HRESULT(WINAPI* PFN_MFCreateMFByteStreamOnStream)(IStream*, IMFByteStream**);
|
||||||
|
|
||||||
public:
|
|
||||||
static inline MediaFoundation& Get()
|
|
||||||
{
|
|
||||||
static MediaFoundation instance;
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
PFN_MFStartup MFStartup;
|
PFN_MFStartup MFStartup;
|
||||||
PFN_MFShutdown MFShutdown;
|
PFN_MFShutdown MFShutdown;
|
||||||
PFN_MFCreateMediaType MFCreateMediaType;
|
PFN_MFCreateMediaType MFCreateMediaType;
|
||||||
|
|
@ -80,6 +80,15 @@ namespace kiwano
|
||||||
PFN_MFCreateSourceReaderFromURL MFCreateSourceReaderFromURL;
|
PFN_MFCreateSourceReaderFromURL MFCreateSourceReaderFromURL;
|
||||||
PFN_MFCreateSourceReaderFromByteStream MFCreateSourceReaderFromByteStream;
|
PFN_MFCreateSourceReaderFromByteStream MFCreateSourceReaderFromByteStream;
|
||||||
PFN_MFCreateMFByteStreamOnStream MFCreateMFByteStreamOnStream;
|
PFN_MFCreateMFByteStreamOnStream MFCreateMFByteStreamOnStream;
|
||||||
|
|
||||||
|
private:
|
||||||
|
MediaFoundation();
|
||||||
|
|
||||||
|
MediaFoundation(const MediaFoundation&) = delete;
|
||||||
|
MediaFoundation& operator=(const MediaFoundation&) = delete;
|
||||||
|
|
||||||
|
Library mfplat;
|
||||||
|
Library mfreadwrite;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
// Copyright (C) 2019 Nomango
|
// Copyright (C) 2019 Nomango
|
||||||
|
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/common/common.h>
|
||||||
#include <kiwano/core/Function.hpp>
|
#include <kiwano/common/Function.hpp>
|
||||||
#include <kiwano/core/intrusive_ptr.hpp>
|
#include <kiwano/common/intrusive_ptr.hpp>
|
||||||
#include <kiwano/base/Window.h>
|
#include <kiwano/platform/Window.h>
|
||||||
#include <kiwano/base/Input.h>
|
#include <kiwano/platform/Input.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
#include <kiwano-imgui/ImGuiModule.h>
|
#include <kiwano-imgui/ImGuiModule.h>
|
||||||
#include <kiwano-imgui/imgui_impl.h>
|
#include <kiwano-imgui/imgui_impl.h>
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/Component.h>
|
#include <kiwano/core/Component.h>
|
||||||
#include <kiwano/core/singleton.hpp>
|
#include <kiwano/common/singleton.hpp>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// dear imgui: Renderer for Kiwano (DirectX11)
|
// dear imgui: Renderer for Kiwano (DirectX11)
|
||||||
|
|
||||||
#include <kiwano/base/win32/helper.h>
|
#include <kiwano/core/win32/helper.h>
|
||||||
#include <kiwano-imgui/imgui_impl_dx11.h>
|
#include <kiwano-imgui/imgui_impl_dx11.h>
|
||||||
|
|
||||||
// DirectX
|
// DirectX
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include <kiwano-network/HttpResponse.hpp>
|
#include <kiwano-network/HttpResponse.hpp>
|
||||||
#include <kiwano-network/HttpClient.h>
|
#include <kiwano-network/HttpClient.h>
|
||||||
|
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/platform/Application.h>
|
#include <kiwano/platform/Application.h>
|
||||||
#include <3rd-party/curl/curl.h> // CURL
|
#include <3rd-party/curl/curl.h> // CURL
|
||||||
|
|
||||||
|
|
@ -36,7 +36,7 @@ namespace
|
||||||
|
|
||||||
uint32_t write_data(void* buffer, uint32_t size, uint32_t nmemb, void* userp)
|
uint32_t write_data(void* buffer, uint32_t size, uint32_t nmemb, void* userp)
|
||||||
{
|
{
|
||||||
core::string* recv_buffer = (core::string*)userp;
|
common::string* recv_buffer = (common::string*)userp;
|
||||||
uint32_t total = size * nmemb;
|
uint32_t total = size * nmemb;
|
||||||
|
|
||||||
// add data to the end of recv_buffer
|
// add data to the end of recv_buffer
|
||||||
|
|
@ -46,10 +46,10 @@ namespace
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
core::string convert_to_utf8(core::wstring const& str)
|
common::string convert_to_utf8(common::wstring const& str)
|
||||||
{
|
{
|
||||||
std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;
|
std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8_conv;
|
||||||
core::string result;
|
common::string result;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -63,10 +63,10 @@ namespace
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
core::wstring convert_from_utf8(core::string const& str)
|
common::wstring convert_from_utf8(common::string const& str)
|
||||||
{
|
{
|
||||||
kiwano::string_convert<std::codecvt_utf8<wchar_t>> utf8_conv;
|
kiwano::string_convert<std::codecvt_utf8<wchar_t>> utf8_conv;
|
||||||
core::wstring result;
|
common::wstring result;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -104,7 +104,7 @@ namespace
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Init(HttpClient* client, Vector<core::string> const& headers, core::string const& url, core::string* response_data, core::string* response_header, char* error_buffer)
|
bool Init(HttpClient* client, Vector<common::string> const& headers, common::string const& url, common::string* response_data, common::string* response_header, char* error_buffer)
|
||||||
{
|
{
|
||||||
if (!SetOption(CURLOPT_ERRORBUFFER, error_buffer))
|
if (!SetOption(CURLOPT_ERRORBUFFER, error_buffer))
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -170,11 +170,11 @@ namespace
|
||||||
public:
|
public:
|
||||||
static inline bool GetRequest(
|
static inline bool GetRequest(
|
||||||
HttpClient* client,
|
HttpClient* client,
|
||||||
Vector<core::string> const& headers,
|
Vector<common::string> const& headers,
|
||||||
core::string const& url,
|
common::string const& url,
|
||||||
long* response_code,
|
long* response_code,
|
||||||
core::string* response_data,
|
common::string* response_data,
|
||||||
core::string* response_header,
|
common::string* response_header,
|
||||||
char* error_buffer)
|
char* error_buffer)
|
||||||
{
|
{
|
||||||
Curl curl;
|
Curl curl;
|
||||||
|
|
@ -185,12 +185,12 @@ namespace
|
||||||
|
|
||||||
static inline bool PostRequest(
|
static inline bool PostRequest(
|
||||||
HttpClient* client,
|
HttpClient* client,
|
||||||
Vector<core::string> const& headers,
|
Vector<common::string> const& headers,
|
||||||
core::string const& url,
|
common::string const& url,
|
||||||
core::string const& request_data,
|
common::string const& request_data,
|
||||||
long* response_code,
|
long* response_code,
|
||||||
core::string* response_data,
|
common::string* response_data,
|
||||||
core::string* response_header,
|
common::string* response_header,
|
||||||
char* error_buffer)
|
char* error_buffer)
|
||||||
{
|
{
|
||||||
Curl curl;
|
Curl curl;
|
||||||
|
|
@ -203,12 +203,12 @@ namespace
|
||||||
|
|
||||||
static inline bool PutRequest(
|
static inline bool PutRequest(
|
||||||
HttpClient* client,
|
HttpClient* client,
|
||||||
Vector<core::string> const& headers,
|
Vector<common::string> const& headers,
|
||||||
core::string const& url,
|
common::string const& url,
|
||||||
core::string const& request_data,
|
common::string const& request_data,
|
||||||
long* response_code,
|
long* response_code,
|
||||||
core::string* response_data,
|
common::string* response_data,
|
||||||
core::string* response_header,
|
common::string* response_header,
|
||||||
char* error_buffer)
|
char* error_buffer)
|
||||||
{
|
{
|
||||||
Curl curl;
|
Curl curl;
|
||||||
|
|
@ -221,11 +221,11 @@ namespace
|
||||||
|
|
||||||
static inline bool DeleteRequest(
|
static inline bool DeleteRequest(
|
||||||
HttpClient* client,
|
HttpClient* client,
|
||||||
Vector<core::string> const& headers,
|
Vector<common::string> const& headers,
|
||||||
core::string const& url,
|
common::string const& url,
|
||||||
long* response_code,
|
long* response_code,
|
||||||
core::string* response_data,
|
common::string* response_data,
|
||||||
core::string* response_header,
|
common::string* response_header,
|
||||||
char* error_buffer)
|
char* error_buffer)
|
||||||
{
|
{
|
||||||
Curl curl;
|
Curl curl;
|
||||||
|
|
@ -307,13 +307,13 @@ namespace kiwano
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
long response_code = 0;
|
long response_code = 0;
|
||||||
char error_message[256] = { 0 };
|
char error_message[256] = { 0 };
|
||||||
core::string response_header;
|
common::string response_header;
|
||||||
core::string response_data;
|
common::string response_data;
|
||||||
|
|
||||||
core::string url = convert_to_utf8(request->GetUrl());
|
common::string url = convert_to_utf8(request->GetUrl());
|
||||||
core::string data = convert_to_utf8(request->GetData());
|
common::string data = convert_to_utf8(request->GetData());
|
||||||
|
|
||||||
Vector<core::string> headers;
|
Vector<common::string> headers;
|
||||||
headers.reserve(request->GetHeaders().size());
|
headers.reserve(request->GetHeaders().size());
|
||||||
for (const auto& pair : request->GetHeaders())
|
for (const auto& pair : request->GetHeaders())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/common/common.h>
|
||||||
#include <kiwano/core/singleton.hpp>
|
#include <kiwano/common/singleton.hpp>
|
||||||
#include <kiwano/base/Component.h>
|
#include <kiwano/core/Component.h>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
|
||||||
|
|
@ -36,39 +36,19 @@ namespace kiwano
|
||||||
KGE_DECLARE_SINGLETON(HttpClient);
|
KGE_DECLARE_SINGLETON(HttpClient);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Send(
|
void Send(HttpRequestPtr request);
|
||||||
HttpRequestPtr request
|
|
||||||
);
|
|
||||||
|
|
||||||
inline void SetTimeoutForConnect(Duration timeout)
|
void SetTimeoutForConnect(Duration timeout);
|
||||||
{
|
|
||||||
timeout_for_connect_ = timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Duration GetTimeoutForConnect() const
|
Duration GetTimeoutForConnect() const;
|
||||||
{
|
|
||||||
return timeout_for_connect_;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void SetTimeoutForRead(Duration timeout)
|
void SetTimeoutForRead(Duration timeout);
|
||||||
{
|
|
||||||
timeout_for_read_ = timeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Duration GetTimeoutForRead() const
|
Duration GetTimeoutForRead() const;
|
||||||
{
|
|
||||||
return timeout_for_read_;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void SetSSLVerification(String const& root_certificate_path)
|
void SetSSLVerification(String const& root_certificate_path);
|
||||||
{
|
|
||||||
ssl_verification_ = root_certificate_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline String const& GetSSLVerification() const
|
String const& GetSSLVerification() const;
|
||||||
{
|
|
||||||
return ssl_verification_;
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void SetupComponent() override;
|
virtual void SetupComponent() override;
|
||||||
|
|
@ -101,5 +81,37 @@ namespace kiwano
|
||||||
|
|
||||||
std::condition_variable_any sleep_condition_;
|
std::condition_variable_any sleep_condition_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline void HttpClient::SetTimeoutForConnect(Duration timeout)
|
||||||
|
{
|
||||||
|
timeout_for_connect_ = timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Duration HttpClient::GetTimeoutForConnect() const
|
||||||
|
{
|
||||||
|
return timeout_for_connect_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void HttpClient::SetTimeoutForRead(Duration timeout)
|
||||||
|
{
|
||||||
|
timeout_for_read_ = timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Duration HttpClient::GetTimeoutForRead() const
|
||||||
|
{
|
||||||
|
return timeout_for_read_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void HttpClient::SetSSLVerification(String const& root_certificate_path)
|
||||||
|
{
|
||||||
|
ssl_verification_ = root_certificate_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline String const& HttpClient::GetSSLVerification() const
|
||||||
|
{
|
||||||
|
return ssl_verification_;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,19 +30,5 @@ namespace kiwano
|
||||||
SetHeader(L"Content-Type", L"application/json;charset=UTF-8");
|
SetHeader(L"Content-Type", L"application/json;charset=UTF-8");
|
||||||
data_ = json.dump();
|
data_ = json.dump();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HttpRequest::SetHeader(String const& field, String const& content)
|
|
||||||
{
|
|
||||||
auto iter = headers_.find(field);
|
|
||||||
if (iter != headers_.end())
|
|
||||||
{
|
|
||||||
headers_[field] = content;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
headers_.insert(std::make_pair(field, content));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,10 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/function.hpp>
|
#include <kiwano/common/function.hpp>
|
||||||
#include <kiwano/core/basic_json.hpp>
|
#include <kiwano/common/basic_json.hpp>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano/base/SmartPtr.hpp>
|
#include <kiwano/core/SmartPtr.hpp>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -47,35 +47,32 @@ namespace kiwano
|
||||||
Delete
|
Delete
|
||||||
};
|
};
|
||||||
|
|
||||||
inline HttpRequest() : type_(Type::Unknown) {}
|
HttpRequest();
|
||||||
|
|
||||||
inline HttpRequest(Type type) : type_(type) {}
|
HttpRequest(Type type);
|
||||||
|
|
||||||
inline void SetUrl(String const& url) { url_ = url; }
|
// 请求地址
|
||||||
|
void SetUrl(String const& url);
|
||||||
|
String const& GetUrl() const;
|
||||||
|
|
||||||
inline String const& GetUrl() const { return url_; }
|
// 请求类型
|
||||||
|
void SetType(Type type);
|
||||||
|
Type GetType() const;
|
||||||
|
|
||||||
inline void SetType(Type type) { type_ = type; }
|
// 请求数据
|
||||||
|
void SetData(String const& data);
|
||||||
|
void SetJsonData(Json const& json);
|
||||||
|
String const& GetData() const;
|
||||||
|
|
||||||
inline Type GetType() const { return type_; }
|
// 请求头
|
||||||
|
void SetHeaders(Map<String, String> const& headers);
|
||||||
|
void SetHeader(String const& field, String const& content);
|
||||||
|
Map<String, String>& GetHeaders();
|
||||||
|
String const& GetHeader(String const& header) const;
|
||||||
|
|
||||||
inline void SetData(String const& data) { data_ = data; }
|
// 响应回调
|
||||||
|
void SetResponseCallback(ResponseCallback const& callback);
|
||||||
void SetJsonData(Json const& json);
|
ResponseCallback const& GetResponseCallback() const;
|
||||||
|
|
||||||
inline String const& GetData() const { return data_; }
|
|
||||||
|
|
||||||
inline void SetHeaders(Map<String, String> const& headers) { headers_ = headers; }
|
|
||||||
|
|
||||||
void SetHeader(String const& field, String const& content);
|
|
||||||
|
|
||||||
inline Map<String, String>& GetHeaders() { return headers_; }
|
|
||||||
|
|
||||||
inline String const& GetHeader(String const& header) const { return headers_.at(header); }
|
|
||||||
|
|
||||||
inline void SetResponseCallback(ResponseCallback const& callback) { response_cb_ = callback; }
|
|
||||||
|
|
||||||
inline ResponseCallback const& GetResponseCallback() const { return response_cb_; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Type type_;
|
Type type_;
|
||||||
|
|
@ -84,5 +81,33 @@ namespace kiwano
|
||||||
Map<String, String> headers_;
|
Map<String, String> headers_;
|
||||||
ResponseCallback response_cb_;
|
ResponseCallback response_cb_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline HttpRequest::HttpRequest() : type_(Type::Unknown) {}
|
||||||
|
|
||||||
|
inline HttpRequest::HttpRequest(Type type) : type_(type) {}
|
||||||
|
|
||||||
|
inline void HttpRequest::SetUrl(String const& url) { url_ = url; }
|
||||||
|
|
||||||
|
inline String const& HttpRequest::GetUrl() const { return url_; }
|
||||||
|
|
||||||
|
inline void HttpRequest::SetType(Type type) { type_ = type; }
|
||||||
|
|
||||||
|
inline HttpRequest::Type HttpRequest::GetType() const { return type_; }
|
||||||
|
|
||||||
|
inline void HttpRequest::SetData(String const& data) { data_ = data; }
|
||||||
|
|
||||||
|
inline String const& HttpRequest::GetData() const { return data_; }
|
||||||
|
|
||||||
|
inline void HttpRequest::SetHeaders(Map<String, String> const& headers) { headers_ = headers; }
|
||||||
|
|
||||||
|
inline void HttpRequest::SetHeader(String const& field, String const& content) { headers_[field] = content; }
|
||||||
|
|
||||||
|
inline Map<String, String>& HttpRequest::GetHeaders() { return headers_; }
|
||||||
|
|
||||||
|
inline String const& HttpRequest::GetHeader(String const& header) const { return headers_.at(header); }
|
||||||
|
|
||||||
|
inline void HttpRequest::SetResponseCallback(ResponseCallback const& callback) { response_cb_ = callback; }
|
||||||
|
|
||||||
|
inline HttpRequest::ResponseCallback const& HttpRequest::GetResponseCallback() const { return response_cb_; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,29 +31,30 @@ namespace kiwano
|
||||||
: public ObjectBase
|
: public ObjectBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline HttpResponse(HttpRequestPtr request) : request_(request), succeed_(false), response_code_(0) {}
|
HttpResponse(HttpRequestPtr request);
|
||||||
|
|
||||||
inline HttpRequestPtr GetRequest() const { return request_; }
|
// 获取请求
|
||||||
|
HttpRequestPtr GetRequest() const;
|
||||||
|
|
||||||
inline void SetSucceed(bool succeed) { succeed_ = succeed; }
|
// 响应状态
|
||||||
|
bool IsSucceed() const;
|
||||||
|
void SetSucceed(bool succeed);
|
||||||
|
|
||||||
inline bool IsSucceed() const { return succeed_; }
|
// 响应状态码
|
||||||
|
long GetResponseCode() const;
|
||||||
|
void SetResponseCode(long response_code);
|
||||||
|
|
||||||
inline void SetResponseCode(long response_code) { response_code_ = response_code; }
|
// 响应头
|
||||||
|
String GetHeader() const;
|
||||||
|
void SetHeader(String const& response_header);
|
||||||
|
|
||||||
inline long GetResponseCode() const { return response_code_; }
|
// 响应数据
|
||||||
|
String const& GetData() const;
|
||||||
|
void SetData(String const& response_data);
|
||||||
|
|
||||||
inline void SetHeader(String const& response_header) { response_header_ = response_header; }
|
// 错误信息
|
||||||
|
String const& GetError() const;
|
||||||
inline String GetHeader() const { return response_header_; }
|
void SetError(String const& error_buffer);
|
||||||
|
|
||||||
inline void SetData(String const& response_data) { response_data_ = response_data; }
|
|
||||||
|
|
||||||
inline String const& GetData() const { return response_data_; }
|
|
||||||
|
|
||||||
inline void SetError(String const& error_buffer) { error_buffer_ = error_buffer; }
|
|
||||||
|
|
||||||
inline String const& GetError() const { return error_buffer_; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool succeed_;
|
bool succeed_;
|
||||||
|
|
@ -64,5 +65,29 @@ namespace kiwano
|
||||||
String response_data_;
|
String response_data_;
|
||||||
String error_buffer_;
|
String error_buffer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline HttpResponse::HttpResponse(HttpRequestPtr request) : request_(request), succeed_(false), response_code_(0) {}
|
||||||
|
|
||||||
|
inline HttpRequestPtr HttpResponse::GetRequest() const { return request_; }
|
||||||
|
|
||||||
|
inline void HttpResponse::SetSucceed(bool succeed) { succeed_ = succeed; }
|
||||||
|
|
||||||
|
inline bool HttpResponse::IsSucceed() const { return succeed_; }
|
||||||
|
|
||||||
|
inline void HttpResponse::SetResponseCode(long response_code) { response_code_ = response_code; }
|
||||||
|
|
||||||
|
inline long HttpResponse::GetResponseCode() const { return response_code_; }
|
||||||
|
|
||||||
|
inline void HttpResponse::SetHeader(String const& response_header) { response_header_ = response_header; }
|
||||||
|
|
||||||
|
inline String HttpResponse::GetHeader() const { return response_header_; }
|
||||||
|
|
||||||
|
inline void HttpResponse::SetData(String const& response_data) { response_data_ = response_data; }
|
||||||
|
|
||||||
|
inline String const& HttpResponse::GetData() const { return response_data_; }
|
||||||
|
|
||||||
|
inline void HttpResponse::SetError(String const& error_buffer) { error_buffer_ = error_buffer; }
|
||||||
|
|
||||||
|
inline String const& HttpResponse::GetError() const { return error_buffer_; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace kiwano
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
|
|
||||||
PhysicBody::PhysicBody()
|
Body::Body()
|
||||||
: body_(nullptr)
|
: body_(nullptr)
|
||||||
, actor_(nullptr)
|
, actor_(nullptr)
|
||||||
, world_(nullptr)
|
, world_(nullptr)
|
||||||
|
|
@ -36,25 +36,25 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBody::PhysicBody(b2Body* body, Actor* actor)
|
Body::Body(b2Body* body, Actor* actor)
|
||||||
: PhysicBody()
|
: Body()
|
||||||
{
|
{
|
||||||
SetB2Body(body);
|
SetB2Body(body);
|
||||||
SetActor(actor);
|
SetActor(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBody::PhysicBody(PhysicWorld* world, Actor* actor)
|
Body::Body(World* world, Actor* actor)
|
||||||
: PhysicBody()
|
: Body()
|
||||||
{
|
{
|
||||||
Init(world, actor);
|
Init(world, actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBody::~PhysicBody()
|
Body::~Body()
|
||||||
{
|
{
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::Init(PhysicWorld* world, Actor* actor)
|
void Body::Init(World* world, Actor* actor)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
|
|
@ -69,38 +69,38 @@ namespace kiwano
|
||||||
UpdateFromActor();
|
UpdateFromActor();
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicBody::AddFixture(PhysicShape* shape, const PhysicFixture::Param& param)
|
Fixture Body::AddFixture(Shape* shape, const Fixture::Param& param)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
return PhysicFixture(this, shape, param);
|
return Fixture(this, shape, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicBody::AddCircleShape(float radius, float density)
|
Fixture Body::AddCircleShape(float radius, float density)
|
||||||
{
|
{
|
||||||
return AddFixture(&PhysicCircleShape(radius), PhysicFixture::Param(density));
|
return AddFixture(&CircleShape(radius), Fixture::Param(density));
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicBody::AddBoxShape(Vec2 const& size, float density)
|
Fixture Body::AddBoxShape(Vec2 const& size, float density)
|
||||||
{
|
{
|
||||||
return AddFixture(&PhysicBoxShape(size), PhysicFixture::Param(density));
|
return AddFixture(&BoxShape(size), Fixture::Param(density));
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicBody::AddPolygonShape(Vector<Point> const& vertexs, float density)
|
Fixture Body::AddPolygonShape(Vector<Point> const& vertexs, float density)
|
||||||
{
|
{
|
||||||
return AddFixture(&PhysicPolygonShape(vertexs), PhysicFixture::Param(density));
|
return AddFixture(&PolygonShape(vertexs), Fixture::Param(density));
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicBody::AddEdgeShape(Point const& p1, Point const& p2, float density)
|
Fixture Body::AddEdgeShape(Point const& p1, Point const& p2, float density)
|
||||||
{
|
{
|
||||||
return AddFixture(&PhysicEdgeShape(p1, p2), PhysicFixture::Param(density));
|
return AddFixture(&EdgeShape(p1, p2), Fixture::Param(density));
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicBody::AddChainShape(Vector<Point> const& vertexs, bool loop, float density)
|
Fixture Body::AddChainShape(Vector<Point> const& vertexs, bool loop, float density)
|
||||||
{
|
{
|
||||||
return AddFixture(&PhysicChainShape(vertexs, loop), PhysicFixture::Param(density));
|
return AddFixture(&ChainShape(vertexs, loop), Fixture::Param(density));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::RemoveFixture(PhysicFixture const& fixture)
|
void Body::RemoveFixture(Fixture const& fixture)
|
||||||
{
|
{
|
||||||
if (fixture.GetB2Fixture())
|
if (fixture.GetB2Fixture())
|
||||||
{
|
{
|
||||||
|
|
@ -109,7 +109,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::SetCategoryBits(uint16_t category_bits)
|
void Body::SetCategoryBits(uint16_t category_bits)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_);
|
KGE_ASSERT(body_);
|
||||||
|
|
||||||
|
|
@ -126,7 +126,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::SetMaskBits(uint16_t mask_bits)
|
void Body::SetMaskBits(uint16_t mask_bits)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_);
|
KGE_ASSERT(body_);
|
||||||
|
|
||||||
|
|
@ -143,7 +143,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::SetGroupIndex(int16_t index)
|
void Body::SetGroupIndex(int16_t index)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_);
|
KGE_ASSERT(body_);
|
||||||
|
|
||||||
|
|
@ -160,7 +160,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::GetMassData(float* mass, Point* center, float* inertia) const
|
void Body::GetMassData(float* mass, Point* center, float* inertia) const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
|
|
||||||
|
|
@ -172,7 +172,7 @@ namespace kiwano
|
||||||
if (inertia) *inertia = data.I;
|
if (inertia) *inertia = data.I;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::SetMassData(float mass, Point const& center, float inertia)
|
void Body::SetMassData(float mass, Point const& center, float inertia)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
|
|
||||||
|
|
@ -183,67 +183,67 @@ namespace kiwano
|
||||||
body_->SetMassData(&data);
|
body_->SetMassData(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::ResetMassData()
|
void Body::ResetMassData()
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_);
|
KGE_ASSERT(body_);
|
||||||
body_->ResetMassData();
|
body_->ResetMassData();
|
||||||
}
|
}
|
||||||
|
|
||||||
Point PhysicBody::GetBodyPosition() const
|
Point Body::GetBodyPosition() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
return world_->World2Stage(body_->GetPosition());
|
return world_->World2Stage(body_->GetPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::SetBodyTransform(Point const& pos, float angle)
|
void Body::SetBodyTransform(Point const& pos, float angle)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
body_->SetTransform(world_->Stage2World(pos), math::Degree2Radian(angle));
|
body_->SetTransform(world_->Stage2World(pos), math::Degree2Radian(angle));
|
||||||
}
|
}
|
||||||
|
|
||||||
Point PhysicBody::GetLocalPoint(Point const& world) const
|
Point Body::GetLocalPoint(Point const& world) const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
return world_->World2Stage(body_->GetLocalPoint(world_->Stage2World(world)));
|
return world_->World2Stage(body_->GetLocalPoint(world_->Stage2World(world)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Point PhysicBody::GetWorldPoint(Point const& local) const
|
Point Body::GetWorldPoint(Point const& local) const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
return world_->World2Stage(body_->GetWorldPoint(world_->Stage2World(local)));
|
return world_->World2Stage(body_->GetWorldPoint(world_->Stage2World(local)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Point PhysicBody::GetLocalCenter() const
|
Point Body::GetLocalCenter() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
return world_->World2Stage(body_->GetLocalCenter());
|
return world_->World2Stage(body_->GetLocalCenter());
|
||||||
}
|
}
|
||||||
|
|
||||||
Point PhysicBody::GetWorldCenter() const
|
Point Body::GetWorldCenter() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
return world_->World2Stage(body_->GetWorldCenter());
|
return world_->World2Stage(body_->GetWorldCenter());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::ApplyForce(Vec2 const& force, Point const& point, bool wake)
|
void Body::ApplyForce(Vec2 const& force, Point const& point, bool wake)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
body_->ApplyForce(b2Vec2(force.x, force.y), world_->Stage2World(point), wake);
|
body_->ApplyForce(b2Vec2(force.x, force.y), world_->Stage2World(point), wake);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::ApplyForceToCenter(Vec2 const& force, bool wake)
|
void Body::ApplyForceToCenter(Vec2 const& force, bool wake)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
body_->ApplyForceToCenter(b2Vec2(force.x, force.y), wake);
|
body_->ApplyForceToCenter(b2Vec2(force.x, force.y), wake);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::ApplyTorque(float torque, bool wake)
|
void Body::ApplyTorque(float torque, bool wake)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body_ && world_);
|
KGE_ASSERT(body_ && world_);
|
||||||
body_->ApplyTorque(torque, wake);
|
body_->ApplyTorque(torque, wake);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::SetB2Body(b2Body* body)
|
void Body::SetB2Body(b2Body* body)
|
||||||
{
|
{
|
||||||
body_ = body;
|
body_ = body;
|
||||||
if (body_)
|
if (body_)
|
||||||
|
|
@ -252,7 +252,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::Destroy()
|
void Body::Destroy()
|
||||||
{
|
{
|
||||||
if (world_)
|
if (world_)
|
||||||
{
|
{
|
||||||
|
|
@ -264,7 +264,7 @@ namespace kiwano
|
||||||
actor_ = nullptr;
|
actor_ = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::UpdateActor()
|
void Body::UpdateActor()
|
||||||
{
|
{
|
||||||
if (actor_ && body_)
|
if (actor_ && body_)
|
||||||
{
|
{
|
||||||
|
|
@ -280,7 +280,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::UpdateFromActor()
|
void Body::UpdateFromActor()
|
||||||
{
|
{
|
||||||
if (actor_ && body_)
|
if (actor_ && body_)
|
||||||
{
|
{
|
||||||
|
|
@ -301,7 +301,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBody::UpdateFixtureFilter(b2Fixture* fixture)
|
void Body::UpdateFixtureFilter(b2Fixture* fixture)
|
||||||
{
|
{
|
||||||
b2Filter filter;
|
b2Filter filter;
|
||||||
filter.categoryBits = category_bits_;
|
filter.categoryBits = category_bits_;
|
||||||
|
|
|
||||||
|
|
@ -28,11 +28,11 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
class PhysicWorld;
|
class World;
|
||||||
|
|
||||||
// 膠竟
|
// 膠竟
|
||||||
KGE_DECLARE_SMART_PTR(PhysicBody);
|
KGE_DECLARE_SMART_PTR(Body);
|
||||||
class KGE_API PhysicBody
|
class KGE_API Body
|
||||||
: public virtual RefCounter
|
: public virtual RefCounter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -43,33 +43,33 @@ namespace kiwano
|
||||||
Dynamic,
|
Dynamic,
|
||||||
};
|
};
|
||||||
|
|
||||||
PhysicBody();
|
Body();
|
||||||
PhysicBody(b2Body* body, Actor* actor);
|
Body(b2Body* body, Actor* actor);
|
||||||
PhysicBody(PhysicWorld* world, Actor* actor);
|
Body(World* world, Actor* actor);
|
||||||
PhysicBody(PhysicWorld* world, ActorPtr actor) : PhysicBody(world, actor.get()) {}
|
Body(World* world, ActorPtr actor) : Body(world, actor.get()) {}
|
||||||
virtual ~PhysicBody();
|
virtual ~Body();
|
||||||
|
|
||||||
// 놓迦뺏
|
// 놓迦뺏
|
||||||
void Init(PhysicWorld* world, Actor* actor);
|
void Init(World* world, Actor* actor);
|
||||||
|
|
||||||
// 警속셸야
|
// 警속셸야
|
||||||
PhysicFixture AddFixture(PhysicShape* shape, const PhysicFixture::Param& param);
|
Fixture AddFixture(Shape* shape, const Fixture::Param& param);
|
||||||
|
|
||||||
// 警속近榴
|
// 警속近榴
|
||||||
PhysicFixture AddCircleShape(float radius, float density = 0.f);
|
Fixture AddCircleShape(float radius, float density = 0.f);
|
||||||
PhysicFixture AddBoxShape(Vec2 const& size, float density = 0.f);
|
Fixture AddBoxShape(Vec2 const& size, float density = 0.f);
|
||||||
PhysicFixture AddPolygonShape(Vector<Point> const& vertexs, float density = 0.f);
|
Fixture AddPolygonShape(Vector<Point> const& vertexs, float density = 0.f);
|
||||||
PhysicFixture AddEdgeShape(Point const& p1, Point const& p2, float density = 0.f);
|
Fixture AddEdgeShape(Point const& p1, Point const& p2, float density = 0.f);
|
||||||
PhysicFixture AddChainShape(Vector<Point> const& vertexs, bool loop, float density = 0.f);
|
Fixture AddChainShape(Vector<Point> const& vertexs, bool loop, float density = 0.f);
|
||||||
|
|
||||||
// 삿혤셸야
|
// 삿혤셸야
|
||||||
PhysicFixture GetFixtureList() const { KGE_ASSERT(body_); return PhysicFixture(body_->GetFixtureList()); }
|
Fixture GetFixtureList() const { KGE_ASSERT(body_); return Fixture(body_->GetFixtureList()); }
|
||||||
|
|
||||||
// 盧뇜셸야
|
// 盧뇜셸야
|
||||||
void RemoveFixture(PhysicFixture const& fixture);
|
void RemoveFixture(Fixture const& fixture);
|
||||||
|
|
||||||
// 삿혤쌈뇰긋
|
// 삿혤쌈뇰긋
|
||||||
PhysicContactEdge GetContactList() const { KGE_ASSERT(body_); PhysicContactEdge(body_->GetContactList()); }
|
ContactEdge GetContactList() const { KGE_ASSERT(body_); ContactEdge(body_->GetContactList()); }
|
||||||
|
|
||||||
// 잚깎쯤
|
// 잚깎쯤
|
||||||
uint16_t GetCategoryBits() const { return category_bits_; }
|
uint16_t GetCategoryBits() const { return category_bits_; }
|
||||||
|
|
@ -153,8 +153,8 @@ namespace kiwano
|
||||||
const b2Body* GetB2Body() const { return body_; }
|
const b2Body* GetB2Body() const { return body_; }
|
||||||
void SetB2Body(b2Body* body);
|
void SetB2Body(b2Body* body);
|
||||||
|
|
||||||
PhysicWorld* GetWorld() { return world_; }
|
World* GetWorld() { return world_; }
|
||||||
const PhysicWorld* GetWorld() const { return world_; }
|
const World* GetWorld() const { return world_; }
|
||||||
|
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
|
|
@ -166,7 +166,7 @@ namespace kiwano
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Actor* actor_;
|
Actor* actor_;
|
||||||
PhysicWorld* world_;
|
World* world_;
|
||||||
b2Body* body_;
|
b2Body* body_;
|
||||||
|
|
||||||
uint16_t category_bits_;
|
uint16_t category_bits_;
|
||||||
|
|
|
||||||
|
|
@ -27,87 +27,87 @@ namespace kiwano
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
|
|
||||||
PhysicContact::PhysicContact()
|
Contact::Contact()
|
||||||
: contact_(nullptr)
|
: contact_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicContact::PhysicContact(b2Contact* contact)
|
Contact::Contact(b2Contact* contact)
|
||||||
: PhysicContact()
|
: Contact()
|
||||||
{
|
{
|
||||||
SetB2Contact(contact);
|
SetB2Contact(contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicContact PhysicContact::GetNext()
|
Contact Contact::GetNext()
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
return PhysicContact(contact_->GetNext());
|
return Contact(contact_->GetNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
const PhysicContact PhysicContact::GetNext() const
|
const Contact Contact::GetNext() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
return PhysicContact(contact_->GetNext());
|
return Contact(contact_->GetNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicContact::GetFixtureA()
|
Fixture Contact::GetFixtureA()
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
return PhysicFixture(contact_->GetFixtureA());
|
return Fixture(contact_->GetFixtureA());
|
||||||
}
|
}
|
||||||
|
|
||||||
const PhysicFixture PhysicContact::GetFixtureA() const
|
const Fixture Contact::GetFixtureA() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
return PhysicFixture(contact_->GetFixtureA());
|
return Fixture(contact_->GetFixtureA());
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicContact::GetFixtureB()
|
Fixture Contact::GetFixtureB()
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
return PhysicFixture(contact_->GetFixtureB());
|
return Fixture(contact_->GetFixtureB());
|
||||||
}
|
}
|
||||||
|
|
||||||
const PhysicFixture PhysicContact::GetFixtureB() const
|
const Fixture Contact::GetFixtureB() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
return PhysicFixture(contact_->GetFixtureB());
|
return Fixture(contact_->GetFixtureB());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicContact::SetTangentSpeed(float speed)
|
void Contact::SetTangentSpeed(float speed)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
|
|
||||||
PhysicBody* body = GetFixtureA().GetBody();
|
Body* body = GetFixtureA().GetBody();
|
||||||
KGE_ASSERT(body);
|
KGE_ASSERT(body);
|
||||||
|
|
||||||
PhysicWorld* world = body->GetWorld();
|
World* world = body->GetWorld();
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
contact_->SetTangentSpeed(world->Stage2World(speed));
|
contact_->SetTangentSpeed(world->Stage2World(speed));
|
||||||
}
|
}
|
||||||
|
|
||||||
float PhysicContact::GetTangentSpeed() const
|
float Contact::GetTangentSpeed() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(contact_);
|
KGE_ASSERT(contact_);
|
||||||
|
|
||||||
const PhysicBody* body = GetFixtureA().GetBody();
|
const Body* body = GetFixtureA().GetBody();
|
||||||
KGE_ASSERT(body);
|
KGE_ASSERT(body);
|
||||||
|
|
||||||
const PhysicWorld* world = body->GetWorld();
|
const World* world = body->GetWorld();
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
return world->World2Stage(contact_->GetTangentSpeed());
|
return world->World2Stage(contact_->GetTangentSpeed());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PhysicContactEdge::PhysicContactEdge()
|
ContactEdge::ContactEdge()
|
||||||
: edge_(nullptr)
|
: edge_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicContactEdge::PhysicContactEdge(b2ContactEdge* edge)
|
ContactEdge::ContactEdge(b2ContactEdge* edge)
|
||||||
: PhysicContactEdge()
|
: ContactEdge()
|
||||||
{
|
{
|
||||||
SetB2ContactEdge(edge);
|
SetB2ContactEdge(edge);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,14 +26,14 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
class PhysicBody;
|
class Body;
|
||||||
|
|
||||||
// 接触
|
// 接触
|
||||||
class KGE_API PhysicContact
|
class KGE_API Contact
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicContact();
|
Contact();
|
||||||
PhysicContact(b2Contact* contact);
|
Contact(b2Contact* contact);
|
||||||
|
|
||||||
// 是否是接触
|
// 是否是接触
|
||||||
bool IsTouching() const { KGE_ASSERT(contact_); return contact_->IsTouching(); }
|
bool IsTouching() const { KGE_ASSERT(contact_); return contact_->IsTouching(); }
|
||||||
|
|
@ -43,16 +43,16 @@ namespace kiwano
|
||||||
bool IsEnabled() const { KGE_ASSERT(contact_); return contact_->IsEnabled(); }
|
bool IsEnabled() const { KGE_ASSERT(contact_); return contact_->IsEnabled(); }
|
||||||
|
|
||||||
// 获取下一接触
|
// 获取下一接触
|
||||||
PhysicContact GetNext();
|
Contact GetNext();
|
||||||
const PhysicContact GetNext() const;
|
const Contact GetNext() const;
|
||||||
|
|
||||||
// 夹具 A
|
// 夹具 A
|
||||||
PhysicFixture GetFixtureA();
|
Fixture GetFixtureA();
|
||||||
const PhysicFixture GetFixtureA() const;
|
const Fixture GetFixtureA() const;
|
||||||
|
|
||||||
// 夹具 B
|
// 夹具 B
|
||||||
PhysicFixture GetFixtureB();
|
Fixture GetFixtureB();
|
||||||
const PhysicFixture GetFixtureB() const;
|
const Fixture GetFixtureB() const;
|
||||||
|
|
||||||
// 摩擦
|
// 摩擦
|
||||||
void SetFriction(float friction) { KGE_ASSERT(contact_); contact_->SetFriction(friction); }
|
void SetFriction(float friction) { KGE_ASSERT(contact_); contact_->SetFriction(friction); }
|
||||||
|
|
@ -78,27 +78,27 @@ namespace kiwano
|
||||||
|
|
||||||
|
|
||||||
// 接触边
|
// 接触边
|
||||||
class KGE_API PhysicContactEdge
|
class KGE_API ContactEdge
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicContactEdge();
|
ContactEdge();
|
||||||
PhysicContactEdge(b2ContactEdge* edge);
|
ContactEdge(b2ContactEdge* edge);
|
||||||
|
|
||||||
// 获取接触物体
|
// 获取接触物体
|
||||||
PhysicBody* GetOtherBody() { KGE_ASSERT(edge_); return static_cast<PhysicBody*>(edge_->other->GetUserData()); }
|
Body* GetOtherBody() { KGE_ASSERT(edge_); return static_cast<Body*>(edge_->other->GetUserData()); }
|
||||||
const PhysicBody* GetOtherBody() const { KGE_ASSERT(edge_); return static_cast<PhysicBody*>(edge_->other->GetUserData()); }
|
const Body* GetOtherBody() const { KGE_ASSERT(edge_); return static_cast<Body*>(edge_->other->GetUserData()); }
|
||||||
|
|
||||||
// 获取接触
|
// 获取接触
|
||||||
PhysicContact GetContact() { KGE_ASSERT(edge_); return PhysicContact(edge_->contact); }
|
Contact GetContact() { KGE_ASSERT(edge_); return Contact(edge_->contact); }
|
||||||
const PhysicContact GetContact() const { KGE_ASSERT(edge_); return PhysicContact(edge_->contact); }
|
const Contact GetContact() const { KGE_ASSERT(edge_); return Contact(edge_->contact); }
|
||||||
|
|
||||||
// 获取上一接触边
|
// 获取上一接触边
|
||||||
PhysicContactEdge GetPrev() { KGE_ASSERT(edge_); return PhysicContactEdge(edge_->prev); }
|
ContactEdge GetPrev() { KGE_ASSERT(edge_); return ContactEdge(edge_->prev); }
|
||||||
const PhysicContactEdge GetPrev() const { KGE_ASSERT(edge_); return PhysicContactEdge(edge_->prev); }
|
const ContactEdge GetPrev() const { KGE_ASSERT(edge_); return ContactEdge(edge_->prev); }
|
||||||
|
|
||||||
// 获取下一接触边
|
// 获取下一接触边
|
||||||
PhysicContactEdge GetNext() { KGE_ASSERT(edge_); return PhysicContactEdge(edge_->next); }
|
ContactEdge GetNext() { KGE_ASSERT(edge_); return ContactEdge(edge_->next); }
|
||||||
const PhysicContactEdge GetNext() const { KGE_ASSERT(edge_); return PhysicContactEdge(edge_->next); }
|
const ContactEdge GetNext() const { KGE_ASSERT(edge_); return ContactEdge(edge_->next); }
|
||||||
|
|
||||||
b2ContactEdge* GetB2ContactEdge() { return edge_; }
|
b2ContactEdge* GetB2ContactEdge() { return edge_; }
|
||||||
const b2ContactEdge* GetB2ContactEdge() const { return edge_; }
|
const b2ContactEdge* GetB2ContactEdge() const { return edge_; }
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
// Copyright (c) 2018-2019 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-physics/ContactEvent.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
namespace event
|
||||||
|
{
|
||||||
|
EventType event::ContactBegin = EventType(L"ContactBegin");
|
||||||
|
EventType event::ContactEnd = EventType(L"ContactEnd");
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace physics
|
||||||
|
{
|
||||||
|
|
||||||
|
ContactBeginEvent::ContactBeginEvent()
|
||||||
|
: Event(event::ContactBegin)
|
||||||
|
, body_a(nullptr)
|
||||||
|
, body_b(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ContactBeginEvent::ContactBeginEvent(Contact const& contact)
|
||||||
|
: ContactBeginEvent()
|
||||||
|
{
|
||||||
|
this->contact = contact;
|
||||||
|
body_a = this->contact.GetFixtureA().GetBody();
|
||||||
|
body_b = this->contact.GetFixtureB().GetBody();
|
||||||
|
}
|
||||||
|
|
||||||
|
ContactEndEvent::ContactEndEvent()
|
||||||
|
: Event(event::ContactEnd)
|
||||||
|
, body_a(nullptr)
|
||||||
|
, body_b(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ContactEndEvent::ContactEndEvent(Contact const& contact)
|
||||||
|
: ContactEndEvent()
|
||||||
|
{
|
||||||
|
this->contact = contact;
|
||||||
|
body_a = this->contact.GetFixtureA().GetBody();
|
||||||
|
body_b = this->contact.GetFixtureB().GetBody();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
// Copyright (c) 2018-2019 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-physics/Contact.h>
|
||||||
|
#include <kiwano-physics/Body.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
namespace physics
|
||||||
|
{
|
||||||
|
// 接触开始事件
|
||||||
|
class KGE_API ContactBeginEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Contact contact;
|
||||||
|
Body* body_a;
|
||||||
|
Body* body_b;
|
||||||
|
|
||||||
|
ContactBeginEvent();
|
||||||
|
ContactBeginEvent(Contact const& contact);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 接触结束事件
|
||||||
|
class KGE_API ContactEndEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Contact contact;
|
||||||
|
Body* body_a;
|
||||||
|
Body* body_b;
|
||||||
|
|
||||||
|
ContactEndEvent();
|
||||||
|
ContactEndEvent(Contact const& contact);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace event
|
||||||
|
{
|
||||||
|
extern EventType ContactBegin; // 接触开始
|
||||||
|
extern EventType ContactEnd; // 接触结束
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,158 +0,0 @@
|
||||||
// Copyright (c) 2018-2019 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-physics/ContactListener.h>
|
|
||||||
#include <kiwano-physics/Body.h>
|
|
||||||
#include <kiwano-physics/World.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
namespace physics
|
|
||||||
{
|
|
||||||
PhysicContactListener::PhysicContactListener()
|
|
||||||
: running_(true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
PhysicContactListener::~PhysicContactListener()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PhysicContactCallbackListener::PhysicContactCallbackListener()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
PhysicContactCallbackListener::~PhysicContactCallbackListener()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PhysicContactListener* PhysicContactDispatcher::AddContactListener(PhysicContactListenerPtr listener)
|
|
||||||
{
|
|
||||||
return AddContactListener(listener.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
PhysicContactListener* PhysicContactDispatcher::AddContactListener(PhysicContactListener* listener)
|
|
||||||
{
|
|
||||||
KGE_ASSERT(listener && "AddListener failed, NULL pointer exception");
|
|
||||||
|
|
||||||
if (listener)
|
|
||||||
{
|
|
||||||
listeners_.push_back(listener);
|
|
||||||
}
|
|
||||||
return listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::StartContactListeners(String const& listener_name)
|
|
||||||
{
|
|
||||||
for (auto listener : listeners_)
|
|
||||||
{
|
|
||||||
if (listener->IsName(listener_name))
|
|
||||||
{
|
|
||||||
listener->Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::StopContactListeners(String const& listener_name)
|
|
||||||
{
|
|
||||||
for (auto listener : listeners_)
|
|
||||||
{
|
|
||||||
if (listener->IsName(listener_name))
|
|
||||||
{
|
|
||||||
listener->Stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::RemoveContactListeners(String const& listener_name)
|
|
||||||
{
|
|
||||||
PhysicContactListenerPtr next;
|
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = next)
|
|
||||||
{
|
|
||||||
next = listener->next_item();
|
|
||||||
|
|
||||||
if (listener->IsName(listener_name))
|
|
||||||
{
|
|
||||||
listeners_.remove(listener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::StartAllContactListeners()
|
|
||||||
{
|
|
||||||
for (auto listener : listeners_)
|
|
||||||
{
|
|
||||||
listener->Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::StopAllContactListeners()
|
|
||||||
{
|
|
||||||
for (auto listener : listeners_)
|
|
||||||
{
|
|
||||||
listener->Stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::RemoveAllContactListeners()
|
|
||||||
{
|
|
||||||
listeners_.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::OnContactBegin(b2Contact* b2contact)
|
|
||||||
{
|
|
||||||
if (listeners_.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
PhysicContact contact(b2contact);
|
|
||||||
PhysicContactListenerPtr next;
|
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = next)
|
|
||||||
{
|
|
||||||
next = listener->next_item();
|
|
||||||
|
|
||||||
if (listener->IsRunning())
|
|
||||||
{
|
|
||||||
listener->OnContactBegin(contact);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PhysicContactDispatcher::OnContactEnd(b2Contact* b2contact)
|
|
||||||
{
|
|
||||||
if (listeners_.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
PhysicContact contact(b2contact);
|
|
||||||
PhysicContactListenerPtr next;
|
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = next)
|
|
||||||
{
|
|
||||||
next = listener->next_item();
|
|
||||||
|
|
||||||
if (listener->IsRunning())
|
|
||||||
{
|
|
||||||
listener->OnContactEnd(contact);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,141 +0,0 @@
|
||||||
// Copyright (c) 2018-2019 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-physics/Contact.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
namespace physics
|
|
||||||
{
|
|
||||||
class PhysicContactDispatcher;
|
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(PhysicContactListener);
|
|
||||||
|
|
||||||
// 接触监听器
|
|
||||||
class KGE_API PhysicContactListener
|
|
||||||
: public ObjectBase
|
|
||||||
, protected IntrusiveListItem<PhysicContactListenerPtr>
|
|
||||||
{
|
|
||||||
friend IntrusiveList<PhysicContactListenerPtr>;
|
|
||||||
friend class PhysicContactDispatcher;
|
|
||||||
|
|
||||||
public:
|
|
||||||
PhysicContactListener();
|
|
||||||
virtual ~PhysicContactListener();
|
|
||||||
|
|
||||||
// 接触开始
|
|
||||||
virtual void OnContactBegin(PhysicContact contact) { KGE_NOT_USED(contact); }
|
|
||||||
|
|
||||||
// 接触结束
|
|
||||||
virtual void OnContactEnd(PhysicContact contact) { KGE_NOT_USED(contact); }
|
|
||||||
|
|
||||||
inline void Start() { running_ = true; }
|
|
||||||
inline void Stop() { running_ = true; }
|
|
||||||
inline bool IsRunning() const { return running_; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool running_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(PhysicContactCallbackListener);
|
|
||||||
|
|
||||||
// 接触回调监听器
|
|
||||||
class KGE_API PhysicContactCallbackListener
|
|
||||||
: public PhysicContactListener
|
|
||||||
{
|
|
||||||
friend IntrusiveList<PhysicContactListenerPtr>;
|
|
||||||
friend class PhysicContactDispatcher;
|
|
||||||
|
|
||||||
public:
|
|
||||||
using ContactBeginCallback = Function<void(PhysicContact)>;
|
|
||||||
using ContactEndCallback = Function<void(PhysicContact)>;
|
|
||||||
|
|
||||||
PhysicContactCallbackListener();
|
|
||||||
virtual ~PhysicContactCallbackListener();
|
|
||||||
|
|
||||||
// 接触开始回调
|
|
||||||
void SetCallbackOnContactBegin(ContactBeginCallback const& cb) { begin_ = cb; }
|
|
||||||
ContactBeginCallback GetCallbackOnContactBegin() const { return begin_; }
|
|
||||||
|
|
||||||
// 接触结束回调
|
|
||||||
void SetCallbackOnContactEnd(ContactEndCallback const& cb) { end_ = cb; }
|
|
||||||
ContactEndCallback GetCallbackOnContactEnd() const { return end_; }
|
|
||||||
|
|
||||||
void OnContactBegin(PhysicContact contact) override { if (begin_) begin_(contact); }
|
|
||||||
void OnContactEnd(PhysicContact contact) override { if (end_) end_(contact); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
ContactBeginCallback begin_;
|
|
||||||
ContactEndCallback end_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// 接触分发器
|
|
||||||
class KGE_API PhysicContactDispatcher
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
using Listeners = IntrusiveList<PhysicContactListenerPtr>;
|
|
||||||
|
|
||||||
// 添加监听器
|
|
||||||
PhysicContactListener* AddContactListener(
|
|
||||||
PhysicContactListenerPtr listener
|
|
||||||
);
|
|
||||||
|
|
||||||
// 添加监听器
|
|
||||||
PhysicContactListener* AddContactListener(
|
|
||||||
PhysicContactListener* listener
|
|
||||||
);
|
|
||||||
|
|
||||||
// 启动监听器
|
|
||||||
void StartContactListeners(
|
|
||||||
String const& listener_name
|
|
||||||
);
|
|
||||||
|
|
||||||
// 停止监听器
|
|
||||||
void StopContactListeners(
|
|
||||||
String const& listener_name
|
|
||||||
);
|
|
||||||
|
|
||||||
// 移除监听器
|
|
||||||
void RemoveContactListeners(
|
|
||||||
String const& listener_name
|
|
||||||
);
|
|
||||||
|
|
||||||
// 启动所有监听器
|
|
||||||
void StartAllContactListeners();
|
|
||||||
|
|
||||||
// 停止所有监听器
|
|
||||||
void StopAllContactListeners();
|
|
||||||
|
|
||||||
// 移除所有监听器
|
|
||||||
void RemoveAllContactListeners();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void OnContactBegin(b2Contact* contact);
|
|
||||||
|
|
||||||
void OnContactEnd(b2Contact* contact);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Listeners listeners_;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -27,19 +27,19 @@ namespace kiwano
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
|
|
||||||
PhysicFixture::PhysicFixture()
|
Fixture::Fixture()
|
||||||
: fixture_(nullptr)
|
: fixture_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture::PhysicFixture(b2Fixture* fixture)
|
Fixture::Fixture(b2Fixture* fixture)
|
||||||
: PhysicFixture()
|
: Fixture()
|
||||||
{
|
{
|
||||||
SetB2Fixture(fixture);
|
SetB2Fixture(fixture);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture::PhysicFixture(PhysicBody* body, PhysicShape* shape, const Param& param)
|
Fixture::Fixture(Body* body, Shape* shape, const Param& param)
|
||||||
: PhysicFixture()
|
: Fixture()
|
||||||
{
|
{
|
||||||
KGE_ASSERT(body);
|
KGE_ASSERT(body);
|
||||||
|
|
||||||
|
|
@ -58,38 +58,38 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBody* PhysicFixture::GetBody()
|
Body* Fixture::GetBody()
|
||||||
{
|
{
|
||||||
KGE_ASSERT(fixture_);
|
KGE_ASSERT(fixture_);
|
||||||
return static_cast<PhysicBody*>(fixture_->GetBody()->GetUserData());
|
return static_cast<Body*>(fixture_->GetBody()->GetUserData());
|
||||||
}
|
}
|
||||||
|
|
||||||
const PhysicBody* PhysicFixture::GetBody() const
|
const Body* Fixture::GetBody() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(fixture_);
|
KGE_ASSERT(fixture_);
|
||||||
return static_cast<const PhysicBody*>(fixture_->GetBody()->GetUserData());
|
return static_cast<const Body*>(fixture_->GetBody()->GetUserData());
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicShape PhysicFixture::GetShape() const
|
Shape Fixture::GetShape() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(fixture_);
|
KGE_ASSERT(fixture_);
|
||||||
return PhysicShape(fixture_->GetShape());
|
return Shape(fixture_->GetShape());
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicFixture PhysicFixture::GetNext() const
|
Fixture Fixture::GetNext() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(fixture_);
|
KGE_ASSERT(fixture_);
|
||||||
return PhysicFixture(fixture_->GetNext());
|
return Fixture(fixture_->GetNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicFixture::GetMassData(float* mass, Point* center, float* inertia) const
|
void Fixture::GetMassData(float* mass, Point* center, float* inertia) const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(fixture_);
|
KGE_ASSERT(fixture_);
|
||||||
|
|
||||||
const PhysicBody* body = GetBody();
|
const Body* body = GetBody();
|
||||||
KGE_ASSERT(body);
|
KGE_ASSERT(body);
|
||||||
|
|
||||||
const PhysicWorld* world = body->GetWorld();
|
const World* world = body->GetWorld();
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
b2MassData data;
|
b2MassData data;
|
||||||
|
|
@ -100,14 +100,14 @@ namespace kiwano
|
||||||
if (inertia) *inertia = data.I;
|
if (inertia) *inertia = data.I;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PhysicFixture::TestPoint(const Point& p) const
|
bool Fixture::TestPoint(const Point& p) const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(fixture_);
|
KGE_ASSERT(fixture_);
|
||||||
|
|
||||||
const PhysicBody* body = GetBody();
|
const Body* body = GetBody();
|
||||||
KGE_ASSERT(body);
|
KGE_ASSERT(body);
|
||||||
|
|
||||||
const PhysicWorld* world = body->GetWorld();
|
const World* world = body->GetWorld();
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
return fixture_->TestPoint(world->Stage2World(p));
|
return fixture_->TestPoint(world->Stage2World(p));
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
class PhysicBody;
|
class Body;
|
||||||
|
|
||||||
// 夹具
|
// 夹具
|
||||||
class PhysicFixture
|
class Fixture
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param
|
struct Param
|
||||||
|
|
@ -49,19 +49,19 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
PhysicFixture();
|
Fixture();
|
||||||
PhysicFixture(b2Fixture* fixture);
|
Fixture(b2Fixture* fixture);
|
||||||
PhysicFixture(PhysicBody* body, PhysicShape* shape, const Param& param);
|
Fixture(Body* body, Shape* shape, const Param& param);
|
||||||
|
|
||||||
// 物体
|
// 物体
|
||||||
PhysicBody* GetBody();
|
Body* GetBody();
|
||||||
const PhysicBody* GetBody() const;
|
const Body* GetBody() const;
|
||||||
|
|
||||||
// 形状
|
// 形状
|
||||||
PhysicShape GetShape() const;
|
Shape GetShape() const;
|
||||||
|
|
||||||
// 下一夹具 (同一物体上)
|
// 下一夹具 (同一物体上)
|
||||||
PhysicFixture GetNext() const;
|
Fixture GetNext() const;
|
||||||
|
|
||||||
// 接触传感器
|
// 接触传感器
|
||||||
bool IsSensor() const { KGE_ASSERT(fixture_); return fixture_->IsSensor(); }
|
bool IsSensor() const { KGE_ASSERT(fixture_); return fixture_->IsSensor(); }
|
||||||
|
|
|
||||||
|
|
@ -26,29 +26,29 @@ namespace kiwano
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// PhysicJoint
|
// Joint
|
||||||
//
|
//
|
||||||
|
|
||||||
PhysicJoint::PhysicJoint()
|
Joint::Joint()
|
||||||
: joint_(nullptr)
|
: joint_(nullptr)
|
||||||
, world_(nullptr)
|
, world_(nullptr)
|
||||||
, type_(Type::Unknown)
|
, type_(Type::Unknown)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicJoint::PhysicJoint(b2Joint* joint)
|
Joint::Joint(b2Joint* joint)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
{
|
{
|
||||||
SetB2Joint(joint);
|
SetB2Joint(joint);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicJoint::PhysicJoint(PhysicWorld* world, b2JointDef* joint_def)
|
Joint::Joint(World* world, b2JointDef* joint_def)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
{
|
{
|
||||||
Init(world, joint_def);
|
Init(world, joint_def);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicJoint::~PhysicJoint()
|
Joint::~Joint()
|
||||||
{
|
{
|
||||||
if (world_)
|
if (world_)
|
||||||
{
|
{
|
||||||
|
|
@ -56,7 +56,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicJoint::Init(PhysicWorld* world, b2JointDef* joint_def)
|
void Joint::Init(World* world, b2JointDef* joint_def)
|
||||||
{
|
{
|
||||||
world_ = world;
|
world_ = world;
|
||||||
if (world_)
|
if (world_)
|
||||||
|
|
@ -68,28 +68,28 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBodyPtr PhysicJoint::GetBodyA() const
|
BodyPtr Joint::GetBodyA() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(joint_);
|
KGE_ASSERT(joint_);
|
||||||
|
|
||||||
b2Body* body = joint_->GetBodyA();
|
b2Body* body = joint_->GetBodyA();
|
||||||
return PhysicBodyPtr(static_cast<PhysicBody*>(body->GetUserData()));
|
return BodyPtr(static_cast<Body*>(body->GetUserData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBodyPtr PhysicJoint::GetBodyB() const
|
BodyPtr Joint::GetBodyB() const
|
||||||
{
|
{
|
||||||
KGE_ASSERT(joint_);
|
KGE_ASSERT(joint_);
|
||||||
|
|
||||||
b2Body* body = joint_->GetBodyB();
|
b2Body* body = joint_->GetBodyB();
|
||||||
return PhysicBodyPtr(static_cast<PhysicBody*>(body->GetUserData()));
|
return BodyPtr(static_cast<Body*>(body->GetUserData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicJoint::SetB2Joint(b2Joint* joint)
|
void Joint::SetB2Joint(b2Joint* joint)
|
||||||
{
|
{
|
||||||
joint_ = joint;
|
joint_ = joint;
|
||||||
if (joint_)
|
if (joint_)
|
||||||
{
|
{
|
||||||
type_ = PhysicJoint::Type(joint_->GetType());
|
type_ = Joint::Type(joint_->GetType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,19 +98,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
DistanceJoint::DistanceJoint()
|
DistanceJoint::DistanceJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
DistanceJoint::DistanceJoint(PhysicWorld* world, b2DistanceJointDef* def)
|
DistanceJoint::DistanceJoint(World* world, b2DistanceJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
DistanceJoint::DistanceJoint(PhysicWorld* world, DistanceJoint::Param const& param)
|
DistanceJoint::DistanceJoint(World* world, DistanceJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -141,19 +141,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
FrictionJoint::FrictionJoint()
|
FrictionJoint::FrictionJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
FrictionJoint::FrictionJoint(PhysicWorld* world, b2FrictionJointDef* def)
|
FrictionJoint::FrictionJoint(World* world, b2FrictionJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
FrictionJoint::FrictionJoint(PhysicWorld* world, FrictionJoint::Param const& param)
|
FrictionJoint::FrictionJoint(World* world, FrictionJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -196,19 +196,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
GearJoint::GearJoint()
|
GearJoint::GearJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
GearJoint::GearJoint(PhysicWorld* world, b2GearJointDef* def)
|
GearJoint::GearJoint(World* world, b2GearJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
GearJoint::GearJoint(PhysicWorld* world, GearJoint::Param const& param)
|
GearJoint::GearJoint(World* world, GearJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.joint_a && param.joint_b);
|
KGE_ASSERT(param.joint_a && param.joint_b);
|
||||||
|
|
@ -239,19 +239,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
MotorJoint::MotorJoint()
|
MotorJoint::MotorJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MotorJoint::MotorJoint(PhysicWorld* world, b2MotorJointDef* def)
|
MotorJoint::MotorJoint(World* world, b2MotorJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MotorJoint::MotorJoint(PhysicWorld* world, MotorJoint::Param const& param)
|
MotorJoint::MotorJoint(World* world, MotorJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -294,19 +294,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
PrismaticJoint::PrismaticJoint()
|
PrismaticJoint::PrismaticJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PrismaticJoint::PrismaticJoint(PhysicWorld* world, b2PrismaticJointDef* def)
|
PrismaticJoint::PrismaticJoint(World* world, b2PrismaticJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PrismaticJoint::PrismaticJoint(PhysicWorld* world, PrismaticJoint::Param const& param)
|
PrismaticJoint::PrismaticJoint(World* world, PrismaticJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -359,19 +359,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
PulleyJoint::PulleyJoint()
|
PulleyJoint::PulleyJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PulleyJoint::PulleyJoint(PhysicWorld* world, b2PulleyJointDef* def)
|
PulleyJoint::PulleyJoint(World* world, b2PulleyJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PulleyJoint::PulleyJoint(PhysicWorld* world, PulleyJoint::Param const& param)
|
PulleyJoint::PulleyJoint(World* world, PulleyJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -431,19 +431,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
RevoluteJoint::RevoluteJoint()
|
RevoluteJoint::RevoluteJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
RevoluteJoint::RevoluteJoint(PhysicWorld* world, b2RevoluteJointDef* def)
|
RevoluteJoint::RevoluteJoint(World* world, b2RevoluteJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
RevoluteJoint::RevoluteJoint(PhysicWorld* world, RevoluteJoint::Param const& param)
|
RevoluteJoint::RevoluteJoint(World* world, RevoluteJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -508,19 +508,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
RopeJoint::RopeJoint()
|
RopeJoint::RopeJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
RopeJoint::RopeJoint(PhysicWorld* world, b2RopeJointDef* def)
|
RopeJoint::RopeJoint(World* world, b2RopeJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
RopeJoint::RopeJoint(PhysicWorld* world, RopeJoint::Param const& param)
|
RopeJoint::RopeJoint(World* world, RopeJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -553,19 +553,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
WeldJoint::WeldJoint()
|
WeldJoint::WeldJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WeldJoint::WeldJoint(PhysicWorld* world, b2WeldJointDef* def)
|
WeldJoint::WeldJoint(World* world, b2WeldJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WeldJoint::WeldJoint(PhysicWorld* world, WeldJoint::Param const& param)
|
WeldJoint::WeldJoint(World* world, WeldJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -584,19 +584,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
WheelJoint::WheelJoint()
|
WheelJoint::WheelJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WheelJoint::WheelJoint(PhysicWorld* world, b2WheelJointDef* def)
|
WheelJoint::WheelJoint(World* world, b2WheelJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
WheelJoint::WheelJoint(PhysicWorld* world, WheelJoint::Param const& param)
|
WheelJoint::WheelJoint(World* world, WheelJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
@ -642,19 +642,19 @@ namespace kiwano
|
||||||
//
|
//
|
||||||
|
|
||||||
MouseJoint::MouseJoint()
|
MouseJoint::MouseJoint()
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseJoint::MouseJoint(PhysicWorld* world, b2MouseJointDef* def)
|
MouseJoint::MouseJoint(World* world, b2MouseJointDef* def)
|
||||||
: PhysicJoint(world, def)
|
: Joint(world, def)
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseJoint::MouseJoint(PhysicWorld* world, MouseJoint::Param const& param)
|
MouseJoint::MouseJoint(World* world, MouseJoint::Param const& param)
|
||||||
: PhysicJoint()
|
: Joint()
|
||||||
, raw_joint_(nullptr)
|
, raw_joint_(nullptr)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(param.body_a && param.body_b);
|
KGE_ASSERT(param.body_a && param.body_b);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
KGE_DECLARE_SMART_PTR(PhysicJoint);
|
KGE_DECLARE_SMART_PTR(Joint);
|
||||||
KGE_DECLARE_SMART_PTR(DistanceJoint);
|
KGE_DECLARE_SMART_PTR(DistanceJoint);
|
||||||
KGE_DECLARE_SMART_PTR(FrictionJoint);
|
KGE_DECLARE_SMART_PTR(FrictionJoint);
|
||||||
KGE_DECLARE_SMART_PTR(GearJoint);
|
KGE_DECLARE_SMART_PTR(GearJoint);
|
||||||
|
|
@ -40,7 +40,7 @@ namespace kiwano
|
||||||
KGE_DECLARE_SMART_PTR(WheelJoint);
|
KGE_DECLARE_SMART_PTR(WheelJoint);
|
||||||
|
|
||||||
// 关节
|
// 关节
|
||||||
class KGE_API PhysicJoint
|
class KGE_API Joint
|
||||||
: public virtual RefCounter
|
: public virtual RefCounter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -62,43 +62,43 @@ namespace kiwano
|
||||||
|
|
||||||
struct ParamBase
|
struct ParamBase
|
||||||
{
|
{
|
||||||
PhysicBody* body_a;
|
Body* body_a;
|
||||||
PhysicBody* body_b;
|
Body* body_b;
|
||||||
|
|
||||||
ParamBase(PhysicBody* body_a, PhysicBody* body_b) : body_a(body_a), body_b(body_b) {}
|
ParamBase(Body* body_a, Body* body_b) : body_a(body_a), body_b(body_b) {}
|
||||||
ParamBase(PhysicBodyPtr body_a, PhysicBodyPtr body_b) : body_a(body_a.get()), body_b(body_b.get()) {}
|
ParamBase(BodyPtr body_a, BodyPtr body_b) : body_a(body_a.get()), body_b(body_b.get()) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
PhysicJoint();
|
Joint();
|
||||||
PhysicJoint(b2Joint* joint);
|
Joint(b2Joint* joint);
|
||||||
PhysicJoint(PhysicWorld* world, b2JointDef* joint_def);
|
Joint(World* world, b2JointDef* joint_def);
|
||||||
virtual ~PhysicJoint();
|
virtual ~Joint();
|
||||||
|
|
||||||
void Init(PhysicWorld* world, b2JointDef* joint_def);
|
void Init(World* world, b2JointDef* joint_def);
|
||||||
|
|
||||||
PhysicBodyPtr GetBodyA() const;
|
BodyPtr GetBodyA() const;
|
||||||
PhysicBodyPtr GetBodyB() const;
|
BodyPtr GetBodyB() const;
|
||||||
|
|
||||||
b2Joint* GetB2Joint() { return joint_; }
|
b2Joint* GetB2Joint() { return joint_; }
|
||||||
const b2Joint* GetB2Joint() const { return joint_; }
|
const b2Joint* GetB2Joint() const { return joint_; }
|
||||||
void SetB2Joint(b2Joint* joint);
|
void SetB2Joint(b2Joint* joint);
|
||||||
|
|
||||||
PhysicWorld* GetWorld() { return world_; }
|
World* GetWorld() { return world_; }
|
||||||
const PhysicWorld* GetWorld() const { return world_; }
|
const World* GetWorld() const { return world_; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
b2Joint* joint_;
|
b2Joint* joint_;
|
||||||
PhysicWorld* world_;
|
World* world_;
|
||||||
Type type_;
|
Type type_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 固定距离关节
|
// 固定距离关节
|
||||||
class KGE_API DistanceJoint
|
class KGE_API DistanceJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor_a;
|
Point anchor_a;
|
||||||
Point anchor_b;
|
Point anchor_b;
|
||||||
|
|
@ -106,8 +106,8 @@ namespace kiwano
|
||||||
float damping_ratio;
|
float damping_ratio;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor_a,
|
Point const& anchor_a,
|
||||||
Point const& anchor_b,
|
Point const& anchor_b,
|
||||||
float frequency_hz = 0.f,
|
float frequency_hz = 0.f,
|
||||||
|
|
@ -121,8 +121,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor_a,
|
Point const& anchor_a,
|
||||||
Point const& anchor_b,
|
Point const& anchor_b,
|
||||||
float frequency_hz = 0.f,
|
float frequency_hz = 0.f,
|
||||||
|
|
@ -133,8 +133,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
DistanceJoint();
|
DistanceJoint();
|
||||||
DistanceJoint(PhysicWorld* world, b2DistanceJointDef* def);
|
DistanceJoint(World* world, b2DistanceJointDef* def);
|
||||||
DistanceJoint(PhysicWorld* world, Param const& param);
|
DistanceJoint(World* world, Param const& param);
|
||||||
|
|
||||||
void SetLength(float length);
|
void SetLength(float length);
|
||||||
float GetLength() const;
|
float GetLength() const;
|
||||||
|
|
@ -154,18 +154,18 @@ namespace kiwano
|
||||||
|
|
||||||
// 摩擦关节
|
// 摩擦关节
|
||||||
class KGE_API FrictionJoint
|
class KGE_API FrictionJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor;
|
Point anchor;
|
||||||
float max_force;
|
float max_force;
|
||||||
float max_torque;
|
float max_torque;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
float max_force = 0.f,
|
float max_force = 0.f,
|
||||||
float max_torque = 0.f
|
float max_torque = 0.f
|
||||||
|
|
@ -177,8 +177,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
float max_force = 0.f,
|
float max_force = 0.f,
|
||||||
float max_torque = 0.f
|
float max_torque = 0.f
|
||||||
|
|
@ -188,8 +188,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
FrictionJoint();
|
FrictionJoint();
|
||||||
FrictionJoint(PhysicWorld* world, b2FrictionJointDef* def);
|
FrictionJoint(World* world, b2FrictionJointDef* def);
|
||||||
FrictionJoint(PhysicWorld* world, Param const& param);
|
FrictionJoint(World* world, Param const& param);
|
||||||
|
|
||||||
// 设定最大摩擦力
|
// 设定最大摩擦力
|
||||||
void SetMaxForce(float force);
|
void SetMaxForce(float force);
|
||||||
|
|
@ -206,18 +206,18 @@ namespace kiwano
|
||||||
|
|
||||||
// 齿轮关节
|
// 齿轮关节
|
||||||
class KGE_API GearJoint
|
class KGE_API GearJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
PhysicJointPtr joint_a;
|
JointPtr joint_a;
|
||||||
PhysicJointPtr joint_b;
|
JointPtr joint_b;
|
||||||
float ratio;
|
float ratio;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicJoint* joint_a,
|
Joint* joint_a,
|
||||||
PhysicJoint* joint_b,
|
Joint* joint_b,
|
||||||
float ratio = 1.f
|
float ratio = 1.f
|
||||||
)
|
)
|
||||||
: ParamBase(nullptr, nullptr)
|
: ParamBase(nullptr, nullptr)
|
||||||
|
|
@ -227,8 +227,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicJointPtr joint_a,
|
JointPtr joint_a,
|
||||||
PhysicJointPtr joint_b,
|
JointPtr joint_b,
|
||||||
float ratio = 1.f
|
float ratio = 1.f
|
||||||
)
|
)
|
||||||
: Param(joint_a.get(), joint_b.get(), ratio)
|
: Param(joint_a.get(), joint_b.get(), ratio)
|
||||||
|
|
@ -236,8 +236,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
GearJoint();
|
GearJoint();
|
||||||
GearJoint(PhysicWorld* world, b2GearJointDef* def);
|
GearJoint(World* world, b2GearJointDef* def);
|
||||||
GearJoint(PhysicWorld* world, Param const& param);
|
GearJoint(World* world, Param const& param);
|
||||||
|
|
||||||
// 设定齿轮传动比
|
// 设定齿轮传动比
|
||||||
void SetRatio(float ratio);
|
void SetRatio(float ratio);
|
||||||
|
|
@ -250,18 +250,18 @@ namespace kiwano
|
||||||
|
|
||||||
// 马达关节
|
// 马达关节
|
||||||
class KGE_API MotorJoint
|
class KGE_API MotorJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
float max_force;
|
float max_force;
|
||||||
float max_torque;
|
float max_torque;
|
||||||
float correction_factor;
|
float correction_factor;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
float max_force = 1.f,
|
float max_force = 1.f,
|
||||||
float max_torque = 100.f,
|
float max_torque = 100.f,
|
||||||
float correction_factor = 0.3f
|
float correction_factor = 0.3f
|
||||||
|
|
@ -273,8 +273,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
float max_force = 0.f,
|
float max_force = 0.f,
|
||||||
float max_torque = 0.f,
|
float max_torque = 0.f,
|
||||||
float correction_factor = 0.3f
|
float correction_factor = 0.3f
|
||||||
|
|
@ -284,8 +284,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
MotorJoint();
|
MotorJoint();
|
||||||
MotorJoint(PhysicWorld* world, b2MotorJointDef* def);
|
MotorJoint(World* world, b2MotorJointDef* def);
|
||||||
MotorJoint(PhysicWorld* world, Param const& param);
|
MotorJoint(World* world, Param const& param);
|
||||||
|
|
||||||
// 设定最大摩擦力
|
// 设定最大摩擦力
|
||||||
void SetMaxForce(float force);
|
void SetMaxForce(float force);
|
||||||
|
|
@ -302,10 +302,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 平移关节
|
// 平移关节
|
||||||
class KGE_API PrismaticJoint
|
class KGE_API PrismaticJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor;
|
Point anchor;
|
||||||
Vec2 axis;
|
Vec2 axis;
|
||||||
|
|
@ -317,8 +317,8 @@ namespace kiwano
|
||||||
float motor_speed;
|
float motor_speed;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
Vec2 const& axis,
|
Vec2 const& axis,
|
||||||
bool enable_limit = false,
|
bool enable_limit = false,
|
||||||
|
|
@ -340,8 +340,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
Vec2 const& axis,
|
Vec2 const& axis,
|
||||||
bool enable_limit = false,
|
bool enable_limit = false,
|
||||||
|
|
@ -356,8 +356,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
PrismaticJoint();
|
PrismaticJoint();
|
||||||
PrismaticJoint(PhysicWorld* world, b2PrismaticJointDef* def);
|
PrismaticJoint(World* world, b2PrismaticJointDef* def);
|
||||||
PrismaticJoint(PhysicWorld* world, Param const& param);
|
PrismaticJoint(World* world, Param const& param);
|
||||||
|
|
||||||
float GetReferenceAngle() const { KGE_ASSERT(raw_joint_); return math::Radian2Degree(raw_joint_->GetReferenceAngle()); }
|
float GetReferenceAngle() const { KGE_ASSERT(raw_joint_); return math::Radian2Degree(raw_joint_->GetReferenceAngle()); }
|
||||||
float GetJointTranslation() const;
|
float GetJointTranslation() const;
|
||||||
|
|
@ -388,10 +388,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 滑轮关节
|
// 滑轮关节
|
||||||
class KGE_API PulleyJoint
|
class KGE_API PulleyJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor_a;
|
Point anchor_a;
|
||||||
Point anchor_b;
|
Point anchor_b;
|
||||||
|
|
@ -400,8 +400,8 @@ namespace kiwano
|
||||||
float ratio;
|
float ratio;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor_a,
|
Point const& anchor_a,
|
||||||
Point const& anchor_b,
|
Point const& anchor_b,
|
||||||
Point const& ground_anchor_a,
|
Point const& ground_anchor_a,
|
||||||
|
|
@ -417,8 +417,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor_a,
|
Point const& anchor_a,
|
||||||
Point const& anchor_b,
|
Point const& anchor_b,
|
||||||
Point const& ground_anchor_a,
|
Point const& ground_anchor_a,
|
||||||
|
|
@ -430,8 +430,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
PulleyJoint();
|
PulleyJoint();
|
||||||
PulleyJoint(PhysicWorld* world, b2PulleyJointDef* def);
|
PulleyJoint(World* world, b2PulleyJointDef* def);
|
||||||
PulleyJoint(PhysicWorld* world, Param const& param);
|
PulleyJoint(World* world, Param const& param);
|
||||||
|
|
||||||
Point GetGroundAnchorA() const;
|
Point GetGroundAnchorA() const;
|
||||||
Point GetGroundAnchorB() const;
|
Point GetGroundAnchorB() const;
|
||||||
|
|
@ -451,10 +451,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 旋转关节
|
// 旋转关节
|
||||||
class KGE_API RevoluteJoint
|
class KGE_API RevoluteJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor;
|
Point anchor;
|
||||||
bool enable_limit;
|
bool enable_limit;
|
||||||
|
|
@ -465,8 +465,8 @@ namespace kiwano
|
||||||
float motor_speed;
|
float motor_speed;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
bool enable_limit = false,
|
bool enable_limit = false,
|
||||||
float lower_angle = 0.0f,
|
float lower_angle = 0.0f,
|
||||||
|
|
@ -486,8 +486,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
bool enable_limit = false,
|
bool enable_limit = false,
|
||||||
float lower_angle = 0.0f,
|
float lower_angle = 0.0f,
|
||||||
|
|
@ -501,8 +501,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
RevoluteJoint();
|
RevoluteJoint();
|
||||||
RevoluteJoint(PhysicWorld* world, b2RevoluteJointDef* def);
|
RevoluteJoint(World* world, b2RevoluteJointDef* def);
|
||||||
RevoluteJoint(PhysicWorld* world, Param const& param);
|
RevoluteJoint(World* world, Param const& param);
|
||||||
|
|
||||||
float GetReferenceAngle() const { KGE_ASSERT(raw_joint_); return math::Radian2Degree(raw_joint_->GetReferenceAngle()); }
|
float GetReferenceAngle() const { KGE_ASSERT(raw_joint_); return math::Radian2Degree(raw_joint_->GetReferenceAngle()); }
|
||||||
float GetJointAngle() const;
|
float GetJointAngle() const;
|
||||||
|
|
@ -533,18 +533,18 @@ namespace kiwano
|
||||||
|
|
||||||
// 绳关节
|
// 绳关节
|
||||||
class KGE_API RopeJoint
|
class KGE_API RopeJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point local_anchor_a;
|
Point local_anchor_a;
|
||||||
Point local_anchor_b;
|
Point local_anchor_b;
|
||||||
float max_length;
|
float max_length;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& local_anchor_a,
|
Point const& local_anchor_a,
|
||||||
Point const& local_anchor_b,
|
Point const& local_anchor_b,
|
||||||
float max_length = 0.f
|
float max_length = 0.f
|
||||||
|
|
@ -556,8 +556,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& local_anchor_a,
|
Point const& local_anchor_a,
|
||||||
Point const& local_anchor_b,
|
Point const& local_anchor_b,
|
||||||
float max_length = 0.f
|
float max_length = 0.f
|
||||||
|
|
@ -567,8 +567,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
RopeJoint();
|
RopeJoint();
|
||||||
RopeJoint(PhysicWorld* world, b2RopeJointDef* def);
|
RopeJoint(World* world, b2RopeJointDef* def);
|
||||||
RopeJoint(PhysicWorld* world, Param const& param);
|
RopeJoint(World* world, Param const& param);
|
||||||
|
|
||||||
void SetMaxLength(float length);
|
void SetMaxLength(float length);
|
||||||
float GetMaxLength() const;
|
float GetMaxLength() const;
|
||||||
|
|
@ -580,18 +580,18 @@ namespace kiwano
|
||||||
|
|
||||||
// 焊接关节
|
// 焊接关节
|
||||||
class KGE_API WeldJoint
|
class KGE_API WeldJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor;
|
Point anchor;
|
||||||
float frequency_hz;
|
float frequency_hz;
|
||||||
float damping_ratio;
|
float damping_ratio;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
float frequency_hz = 0.f,
|
float frequency_hz = 0.f,
|
||||||
float damping_ratio = 0.f
|
float damping_ratio = 0.f
|
||||||
|
|
@ -603,8 +603,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
float frequency_hz = 0.f,
|
float frequency_hz = 0.f,
|
||||||
float damping_ratio = 0.f
|
float damping_ratio = 0.f
|
||||||
|
|
@ -614,8 +614,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
WeldJoint();
|
WeldJoint();
|
||||||
WeldJoint(PhysicWorld* world, b2WeldJointDef* def);
|
WeldJoint(World* world, b2WeldJointDef* def);
|
||||||
WeldJoint(PhysicWorld* world, Param const& param);
|
WeldJoint(World* world, Param const& param);
|
||||||
|
|
||||||
// 设置弹簧阻尼器频率 [赫兹]
|
// 设置弹簧阻尼器频率 [赫兹]
|
||||||
void SetFrequency(float hz) { KGE_ASSERT(raw_joint_); raw_joint_->SetFrequency(hz); }
|
void SetFrequency(float hz) { KGE_ASSERT(raw_joint_); raw_joint_->SetFrequency(hz); }
|
||||||
|
|
@ -632,10 +632,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 轮关节
|
// 轮关节
|
||||||
class KGE_API WheelJoint
|
class KGE_API WheelJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point anchor;
|
Point anchor;
|
||||||
Vec2 axis;
|
Vec2 axis;
|
||||||
|
|
@ -646,8 +646,8 @@ namespace kiwano
|
||||||
float damping_ratio;
|
float damping_ratio;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
Vec2 const& axis,
|
Vec2 const& axis,
|
||||||
float frequency_hz = 2.0f,
|
float frequency_hz = 2.0f,
|
||||||
|
|
@ -667,8 +667,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& anchor,
|
Point const& anchor,
|
||||||
Vec2 const& axis,
|
Vec2 const& axis,
|
||||||
float frequency_hz = 2.0f,
|
float frequency_hz = 2.0f,
|
||||||
|
|
@ -682,8 +682,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
WheelJoint();
|
WheelJoint();
|
||||||
WheelJoint(PhysicWorld* world, b2WheelJointDef* def);
|
WheelJoint(World* world, b2WheelJointDef* def);
|
||||||
WheelJoint(PhysicWorld* world, Param const& param);
|
WheelJoint(World* world, Param const& param);
|
||||||
|
|
||||||
float GetJointTranslation() const;
|
float GetJointTranslation() const;
|
||||||
float GetJointLinearSpeed() const;
|
float GetJointLinearSpeed() const;
|
||||||
|
|
@ -715,10 +715,10 @@ namespace kiwano
|
||||||
// 鼠标关节
|
// 鼠标关节
|
||||||
// 用于使身体的某个点追踪世界上的指定点,例如让物体追踪鼠标位置
|
// 用于使身体的某个点追踪世界上的指定点,例如让物体追踪鼠标位置
|
||||||
class KGE_API MouseJoint
|
class KGE_API MouseJoint
|
||||||
: public PhysicJoint
|
: public Joint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct Param : public PhysicJoint::ParamBase
|
struct Param : public Joint::ParamBase
|
||||||
{
|
{
|
||||||
Point target;
|
Point target;
|
||||||
float max_force;
|
float max_force;
|
||||||
|
|
@ -726,8 +726,8 @@ namespace kiwano
|
||||||
float damping_ratio;
|
float damping_ratio;
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBody* body_a,
|
Body* body_a,
|
||||||
PhysicBody* body_b,
|
Body* body_b,
|
||||||
Point const& target,
|
Point const& target,
|
||||||
float max_force,
|
float max_force,
|
||||||
float frequency_hz = 5.0f,
|
float frequency_hz = 5.0f,
|
||||||
|
|
@ -741,8 +741,8 @@ namespace kiwano
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Param(
|
Param(
|
||||||
PhysicBodyPtr body_a,
|
BodyPtr body_a,
|
||||||
PhysicBodyPtr body_b,
|
BodyPtr body_b,
|
||||||
Point const& target,
|
Point const& target,
|
||||||
float max_force,
|
float max_force,
|
||||||
float frequency_hz = 5.0f,
|
float frequency_hz = 5.0f,
|
||||||
|
|
@ -753,8 +753,8 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
MouseJoint();
|
MouseJoint();
|
||||||
MouseJoint(PhysicWorld* world, b2MouseJointDef* def);
|
MouseJoint(World* world, b2MouseJointDef* def);
|
||||||
MouseJoint(PhysicWorld* world, Param const& param);
|
MouseJoint(World* world, Param const& param);
|
||||||
|
|
||||||
// 设定最大摩擦力 [N]
|
// 设定最大摩擦力 [N]
|
||||||
void SetMaxForce(float force);
|
void SetMaxForce(float force);
|
||||||
|
|
|
||||||
|
|
@ -25,55 +25,55 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
PhysicShape::PhysicShape()
|
Shape::Shape()
|
||||||
: shape_(nullptr)
|
: shape_(nullptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicShape::PhysicShape(b2Shape* shape)
|
Shape::Shape(b2Shape* shape)
|
||||||
: shape_(shape)
|
: shape_(shape)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
b2Shape* PhysicShape::GetB2Shape()
|
b2Shape* Shape::GetB2Shape()
|
||||||
{
|
{
|
||||||
return shape_;
|
return shape_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const b2Shape* PhysicShape::GetB2Shape() const
|
const b2Shape* Shape::GetB2Shape() const
|
||||||
{
|
{
|
||||||
return shape_;
|
return shape_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicShape::SetB2Shape(b2Shape* shape)
|
void Shape::SetB2Shape(b2Shape* shape)
|
||||||
{
|
{
|
||||||
shape_ = shape;
|
shape_ = shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// PhysicCircleShape
|
// CircleShape
|
||||||
//
|
//
|
||||||
|
|
||||||
PhysicCircleShape::PhysicCircleShape()
|
CircleShape::CircleShape()
|
||||||
: PhysicShape(&circle_)
|
: Shape(&circle_)
|
||||||
, circle_()
|
, circle_()
|
||||||
, radius_(0.f)
|
, radius_(0.f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicCircleShape::PhysicCircleShape(float radius, Point const& offset)
|
CircleShape::CircleShape(float radius, Point const& offset)
|
||||||
: PhysicCircleShape()
|
: CircleShape()
|
||||||
{
|
{
|
||||||
Set(radius, offset);
|
Set(radius, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicCircleShape::Set(float radius, Point const& offset)
|
void CircleShape::Set(float radius, Point const& offset)
|
||||||
{
|
{
|
||||||
radius_ = radius;
|
radius_ = radius;
|
||||||
offset_ = offset;
|
offset_ = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicCircleShape::FitWorld(PhysicWorld* world)
|
void CircleShape::FitWorld(World* world)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
circle_.m_radius = world->Stage2World(radius_);
|
circle_.m_radius = world->Stage2World(radius_);
|
||||||
|
|
@ -81,30 +81,30 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// PhysicBoxShape
|
// BoxShape
|
||||||
//
|
//
|
||||||
|
|
||||||
PhysicBoxShape::PhysicBoxShape()
|
BoxShape::BoxShape()
|
||||||
: PhysicShape(&polygon_)
|
: Shape(&polygon_)
|
||||||
, polygon_()
|
, polygon_()
|
||||||
, rotation_(0.f)
|
, rotation_(0.f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicBoxShape::PhysicBoxShape(Vec2 const& size, Point const& offset, float rotation)
|
BoxShape::BoxShape(Vec2 const& size, Point const& offset, float rotation)
|
||||||
: PhysicBoxShape()
|
: BoxShape()
|
||||||
{
|
{
|
||||||
Set(size, offset, rotation);
|
Set(size, offset, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBoxShape::Set(Vec2 const& size, Point const& offset, float rotation)
|
void BoxShape::Set(Vec2 const& size, Point const& offset, float rotation)
|
||||||
{
|
{
|
||||||
box_size_ = size;
|
box_size_ = size;
|
||||||
offset_ = offset;
|
offset_ = offset;
|
||||||
rotation_ = rotation;
|
rotation_ = rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicBoxShape::FitWorld(PhysicWorld* world)
|
void BoxShape::FitWorld(World* world)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
|
|
@ -114,27 +114,27 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// PhysicPolygonShape
|
// PolygonShape
|
||||||
//
|
//
|
||||||
|
|
||||||
PhysicPolygonShape::PhysicPolygonShape()
|
PolygonShape::PolygonShape()
|
||||||
: PhysicShape(&polygon_)
|
: Shape(&polygon_)
|
||||||
, polygon_()
|
, polygon_()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicPolygonShape::PhysicPolygonShape(Vector<Point> const& vertexs)
|
PolygonShape::PolygonShape(Vector<Point> const& vertexs)
|
||||||
: PhysicPolygonShape()
|
: PolygonShape()
|
||||||
{
|
{
|
||||||
Set(vertexs);
|
Set(vertexs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicPolygonShape::Set(Vector<Point> const& vertexs)
|
void PolygonShape::Set(Vector<Point> const& vertexs)
|
||||||
{
|
{
|
||||||
vertexs_ = vertexs;
|
vertexs_ = vertexs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicPolygonShape::FitWorld(PhysicWorld* world)
|
void PolygonShape::FitWorld(World* world)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
|
|
@ -149,28 +149,28 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// PhysicEdgeShape
|
// EdgeShape
|
||||||
//
|
//
|
||||||
|
|
||||||
PhysicEdgeShape::PhysicEdgeShape()
|
EdgeShape::EdgeShape()
|
||||||
: PhysicShape(&edge_)
|
: Shape(&edge_)
|
||||||
, edge_()
|
, edge_()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicEdgeShape::PhysicEdgeShape(Point const& p1, Point const& p2)
|
EdgeShape::EdgeShape(Point const& p1, Point const& p2)
|
||||||
: PhysicEdgeShape()
|
: EdgeShape()
|
||||||
{
|
{
|
||||||
Set(p1, p2);
|
Set(p1, p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicEdgeShape::Set(Point const& p1, Point const& p2)
|
void EdgeShape::Set(Point const& p1, Point const& p2)
|
||||||
{
|
{
|
||||||
p_[0] = p1;
|
p_[0] = p1;
|
||||||
p_[1] = p2;
|
p_[1] = p2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicEdgeShape::FitWorld(PhysicWorld* world)
|
void EdgeShape::FitWorld(World* world)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
|
|
@ -180,29 +180,29 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// PhysicChainShape
|
// ChainShape
|
||||||
//
|
//
|
||||||
|
|
||||||
PhysicChainShape::PhysicChainShape()
|
ChainShape::ChainShape()
|
||||||
: PhysicShape(&chain_)
|
: Shape(&chain_)
|
||||||
, chain_()
|
, chain_()
|
||||||
, loop_(false)
|
, loop_(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicChainShape::PhysicChainShape(Vector<Point> const& vertexs, bool loop)
|
ChainShape::ChainShape(Vector<Point> const& vertexs, bool loop)
|
||||||
: PhysicChainShape()
|
: ChainShape()
|
||||||
{
|
{
|
||||||
Set(vertexs, loop);
|
Set(vertexs, loop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicChainShape::Set(Vector<Point> const& vertexs, bool loop)
|
void ChainShape::Set(Vector<Point> const& vertexs, bool loop)
|
||||||
{
|
{
|
||||||
vertexs_ = vertexs;
|
vertexs_ = vertexs;
|
||||||
loop_ = loop;
|
loop_ = loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicChainShape::FitWorld(PhysicWorld* world)
|
void ChainShape::FitWorld(World* world)
|
||||||
{
|
{
|
||||||
KGE_ASSERT(world);
|
KGE_ASSERT(world);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,37 +25,37 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
class PhysicWorld;
|
class World;
|
||||||
|
|
||||||
// 形状基类
|
// 形状基类
|
||||||
class KGE_API PhysicShape
|
class KGE_API Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicShape();
|
Shape();
|
||||||
PhysicShape(b2Shape* shape);
|
Shape(b2Shape* shape);
|
||||||
|
|
||||||
b2Shape* GetB2Shape();
|
b2Shape* GetB2Shape();
|
||||||
const b2Shape* GetB2Shape() const;
|
const b2Shape* GetB2Shape() const;
|
||||||
void SetB2Shape(b2Shape* shape);
|
void SetB2Shape(b2Shape* shape);
|
||||||
|
|
||||||
virtual void FitWorld(PhysicWorld* world) {}
|
virtual void FitWorld(World* world) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
b2Shape* shape_;
|
b2Shape* shape_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 圆形形状
|
// 圆形形状
|
||||||
class KGE_API PhysicCircleShape
|
class KGE_API CircleShape
|
||||||
: public PhysicShape
|
: public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicCircleShape();
|
CircleShape();
|
||||||
|
|
||||||
PhysicCircleShape(float radius, Point const& offset = Point());
|
CircleShape(float radius, Point const& offset = Point());
|
||||||
|
|
||||||
void Set(float radius, Point const& offset = Point());
|
void Set(float radius, Point const& offset = Point());
|
||||||
|
|
||||||
void FitWorld(PhysicWorld* world) override;
|
void FitWorld(World* world) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
float radius_;
|
float radius_;
|
||||||
|
|
@ -64,17 +64,17 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
// 盒子形状
|
// 盒子形状
|
||||||
class KGE_API PhysicBoxShape
|
class KGE_API BoxShape
|
||||||
: public PhysicShape
|
: public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicBoxShape();
|
BoxShape();
|
||||||
|
|
||||||
PhysicBoxShape(Vec2 const& size, Point const& offset = Point(), float rotation = 0.f);
|
BoxShape(Vec2 const& size, Point const& offset = Point(), float rotation = 0.f);
|
||||||
|
|
||||||
void Set(Vec2 const& size, Point const& offset = Point(), float rotation = 0.f);
|
void Set(Vec2 const& size, Point const& offset = Point(), float rotation = 0.f);
|
||||||
|
|
||||||
void FitWorld(PhysicWorld* world) override;
|
void FitWorld(World* world) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
float rotation_;
|
float rotation_;
|
||||||
|
|
@ -84,17 +84,17 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
// 多边形形状
|
// 多边形形状
|
||||||
class KGE_API PhysicPolygonShape
|
class KGE_API PolygonShape
|
||||||
: public PhysicShape
|
: public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicPolygonShape();
|
PolygonShape();
|
||||||
|
|
||||||
PhysicPolygonShape(Vector<Point> const& vertexs);
|
PolygonShape(Vector<Point> const& vertexs);
|
||||||
|
|
||||||
void Set(Vector<Point> const& vertexs);
|
void Set(Vector<Point> const& vertexs);
|
||||||
|
|
||||||
void FitWorld(PhysicWorld* world) override;
|
void FitWorld(World* world) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Vector<Point> vertexs_;
|
Vector<Point> vertexs_;
|
||||||
|
|
@ -102,17 +102,17 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
// 线段形状, 用于表示一条边
|
// 线段形状, 用于表示一条边
|
||||||
class KGE_API PhysicEdgeShape
|
class KGE_API EdgeShape
|
||||||
: public PhysicShape
|
: public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicEdgeShape();
|
EdgeShape();
|
||||||
|
|
||||||
PhysicEdgeShape(Point const& p1, Point const& p2);
|
EdgeShape(Point const& p1, Point const& p2);
|
||||||
|
|
||||||
void Set(Point const& p1, Point const& p2);
|
void Set(Point const& p1, Point const& p2);
|
||||||
|
|
||||||
void FitWorld(PhysicWorld* world) override;
|
void FitWorld(World* world) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Point p_[2];
|
Point p_[2];
|
||||||
|
|
@ -120,17 +120,17 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
// 链式形状
|
// 链式形状
|
||||||
class KGE_API PhysicChainShape
|
class KGE_API ChainShape
|
||||||
: public PhysicShape
|
: public Shape
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicChainShape();
|
ChainShape();
|
||||||
|
|
||||||
PhysicChainShape(Vector<Point> const& vertexs, bool loop = false);
|
ChainShape(Vector<Point> const& vertexs, bool loop = false);
|
||||||
|
|
||||||
void Set(Vector<Point> const& vertexs, bool loop = false);
|
void Set(Vector<Point> const& vertexs, bool loop = false);
|
||||||
|
|
||||||
void FitWorld(PhysicWorld* world) override;
|
void FitWorld(World* world) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool loop_;
|
bool loop_;
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
#include <kiwano-physics/ContactEvent.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -29,12 +30,12 @@ namespace kiwano
|
||||||
const float DefaultGlobalScale = 100.f; // 100 pixels per meters
|
const float DefaultGlobalScale = 100.f; // 100 pixels per meters
|
||||||
}
|
}
|
||||||
|
|
||||||
class PhysicWorld::DestructionListener : public b2DestructionListener
|
class World::DestructionListener : public b2DestructionListener
|
||||||
{
|
{
|
||||||
PhysicWorld* world_;
|
World* world_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DestructionListener(PhysicWorld* world)
|
DestructionListener(World* world)
|
||||||
: world_(world)
|
: world_(world)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -53,24 +54,34 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class PhysicWorld::ContactListener
|
class World::ContactListener
|
||||||
: public b2ContactListener
|
: public b2ContactListener
|
||||||
{
|
{
|
||||||
PhysicWorld* world_;
|
World* world_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ContactListener(PhysicWorld* world)
|
ContactListener(World* world)
|
||||||
: world_(world)
|
: world_(world)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void BeginContact(b2Contact* contact) override { world_->OnContactBegin(contact); }
|
void BeginContact(b2Contact* contact) override
|
||||||
void EndContact(b2Contact* contact) override { world_->OnContactEnd(contact); }
|
{
|
||||||
|
ContactBeginEvent evt(contact);
|
||||||
|
world_->Dispatch(&evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EndContact(b2Contact* contact) override
|
||||||
|
{
|
||||||
|
ContactEndEvent evt(contact);
|
||||||
|
world_->Dispatch(&evt);
|
||||||
|
}
|
||||||
|
|
||||||
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold) override { KGE_NOT_USED(contact); KGE_NOT_USED(oldManifold); }
|
void PreSolve(b2Contact* contact, const b2Manifold* oldManifold) override { KGE_NOT_USED(contact); KGE_NOT_USED(oldManifold); }
|
||||||
void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) override { KGE_NOT_USED(contact); KGE_NOT_USED(impulse); }
|
void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) override { KGE_NOT_USED(contact); KGE_NOT_USED(impulse); }
|
||||||
};
|
};
|
||||||
|
|
||||||
PhysicWorld::PhysicWorld()
|
World::World()
|
||||||
: world_(b2Vec2(0, 10.0f))
|
: world_(b2Vec2(0, 10.0f))
|
||||||
, vel_iter_(6)
|
, vel_iter_(6)
|
||||||
, pos_iter_(2)
|
, pos_iter_(2)
|
||||||
|
|
@ -86,7 +97,7 @@ namespace kiwano
|
||||||
world_.SetContactListener(contact_listener_);
|
world_.SetContactListener(contact_listener_);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicWorld::~PhysicWorld()
|
World::~World()
|
||||||
{
|
{
|
||||||
world_.SetDestructionListener(nullptr);
|
world_.SetDestructionListener(nullptr);
|
||||||
if (destruction_listener_)
|
if (destruction_listener_)
|
||||||
|
|
@ -102,15 +113,13 @@ namespace kiwano
|
||||||
contact_listener_ = nullptr;
|
contact_listener_ = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAllContactListeners();
|
|
||||||
|
|
||||||
// Make sure b2World was destroyed after b2Body
|
// Make sure b2World was destroyed after b2Body
|
||||||
RemoveAllChildren();
|
RemoveAllChildren();
|
||||||
RemoveAllBodies();
|
RemoveAllBodies();
|
||||||
RemoveAllJoints();
|
RemoveAllJoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::RemoveBody(PhysicBody* body)
|
void World::RemoveBody(Body* body)
|
||||||
{
|
{
|
||||||
if (body && body->GetB2Body())
|
if (body && body->GetB2Body())
|
||||||
{
|
{
|
||||||
|
|
@ -118,7 +127,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::RemoveAllBodies()
|
void World::RemoveAllBodies()
|
||||||
{
|
{
|
||||||
if (world_.GetBodyCount())
|
if (world_.GetBodyCount())
|
||||||
{
|
{
|
||||||
|
|
@ -132,7 +141,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::AddJoint(PhysicJoint* joint)
|
void World::AddJoint(Joint* joint)
|
||||||
{
|
{
|
||||||
if (joint)
|
if (joint)
|
||||||
{
|
{
|
||||||
|
|
@ -140,7 +149,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::RemoveJoint(PhysicJoint* joint)
|
void World::RemoveJoint(Joint* joint)
|
||||||
{
|
{
|
||||||
if (joint)
|
if (joint)
|
||||||
{
|
{
|
||||||
|
|
@ -159,7 +168,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::RemoveAllJoints()
|
void World::RemoveAllJoints()
|
||||||
{
|
{
|
||||||
if (world_.GetJointCount())
|
if (world_.GetJointCount())
|
||||||
{
|
{
|
||||||
|
|
@ -178,14 +187,14 @@ namespace kiwano
|
||||||
joints_.clear();
|
joints_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::JointRemoved(b2Joint* joint)
|
void World::JointRemoved(b2Joint* joint)
|
||||||
{
|
{
|
||||||
if (!removing_joint_ && joint)
|
if (!removing_joint_ && joint)
|
||||||
{
|
{
|
||||||
auto iter = std::find_if(
|
auto iter = std::find_if(
|
||||||
joints_.begin(),
|
joints_.begin(),
|
||||||
joints_.end(),
|
joints_.end(),
|
||||||
[joint](PhysicJoint* j) -> bool { return j->GetB2Joint() == joint; }
|
[joint](Joint* j) -> bool { return j->GetB2Joint() == joint; }
|
||||||
);
|
);
|
||||||
|
|
||||||
if (iter != joints_.end())
|
if (iter != joints_.end())
|
||||||
|
|
@ -195,36 +204,36 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b2World* PhysicWorld::GetB2World()
|
b2World* World::GetB2World()
|
||||||
{
|
{
|
||||||
return &world_;
|
return &world_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const b2World* PhysicWorld::GetB2World() const
|
const b2World* World::GetB2World() const
|
||||||
{
|
{
|
||||||
return &world_;
|
return &world_;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec2 PhysicWorld::GetGravity() const
|
Vec2 World::GetGravity() const
|
||||||
{
|
{
|
||||||
b2Vec2 g = world_.GetGravity();
|
b2Vec2 g = world_.GetGravity();
|
||||||
return Vec2(g.x, g.y);
|
return Vec2(g.x, g.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::SetGravity(Vec2 gravity)
|
void World::SetGravity(Vec2 gravity)
|
||||||
{
|
{
|
||||||
world_.SetGravity(b2Vec2(gravity.x, gravity.y));
|
world_.SetGravity(b2Vec2(gravity.x, gravity.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicWorld::Update(Duration dt)
|
void World::Update(Duration dt)
|
||||||
{
|
{
|
||||||
Stage::Update(dt);
|
Stage::Update(dt);
|
||||||
|
|
||||||
b2Body* b2body = world_.GetBodyList();
|
b2Body* b2body = world_.GetBodyList();
|
||||||
while (b2body)
|
while (b2body)
|
||||||
{
|
{
|
||||||
PhysicBody* body = static_cast<PhysicBody*>(b2body->GetUserData());
|
Body* body = static_cast<Body*>(b2body->GetUserData());
|
||||||
if (body && body->GetType() != PhysicBody::Type::Static)
|
if (body && body->GetType() != Body::Type::Static)
|
||||||
{
|
{
|
||||||
body->UpdateFromActor();
|
body->UpdateFromActor();
|
||||||
}
|
}
|
||||||
|
|
@ -237,8 +246,8 @@ namespace kiwano
|
||||||
b2body = world_.GetBodyList();
|
b2body = world_.GetBodyList();
|
||||||
while (b2body)
|
while (b2body)
|
||||||
{
|
{
|
||||||
PhysicBody* body = static_cast<PhysicBody*>(b2body->GetUserData());
|
Body* body = static_cast<Body*>(b2body->GetUserData());
|
||||||
if (body && body->GetType() != PhysicBody::Type::Static)
|
if (body && body->GetType() != Body::Type::Static)
|
||||||
{
|
{
|
||||||
body->UpdateActor();
|
body->UpdateActor();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,24 +21,22 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano-physics/Body.h>
|
#include <kiwano-physics/Body.h>
|
||||||
#include <kiwano-physics/Joint.h>
|
#include <kiwano-physics/Joint.h>
|
||||||
#include <kiwano-physics/ContactListener.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
namespace physics
|
namespace physics
|
||||||
{
|
{
|
||||||
// 物理世界
|
// 物理世界
|
||||||
class KGE_API PhysicWorld
|
class KGE_API World
|
||||||
: public Stage
|
: public Stage
|
||||||
, public PhysicContactDispatcher
|
|
||||||
{
|
{
|
||||||
friend class PhysicBody;
|
friend class Body;
|
||||||
friend class PhysicJoint;
|
friend class Joint;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PhysicWorld();
|
World();
|
||||||
|
|
||||||
virtual ~PhysicWorld();
|
virtual ~World();
|
||||||
|
|
||||||
// 获取重力
|
// 获取重力
|
||||||
Vec2 GetGravity() const;
|
Vec2 GetGravity() const;
|
||||||
|
|
@ -71,16 +69,16 @@ namespace kiwano
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// 移除物体
|
// 移除物体
|
||||||
void RemoveBody(PhysicBody* body);
|
void RemoveBody(Body* body);
|
||||||
|
|
||||||
// 移除所有物体
|
// 移除所有物体
|
||||||
void RemoveAllBodies();
|
void RemoveAllBodies();
|
||||||
|
|
||||||
// 添加关节
|
// 添加关节
|
||||||
void AddJoint(PhysicJoint* joint);
|
void AddJoint(Joint* joint);
|
||||||
|
|
||||||
// 移除关节
|
// 移除关节
|
||||||
void RemoveJoint(PhysicJoint* joint);
|
void RemoveJoint(Joint* joint);
|
||||||
|
|
||||||
// 移除所有关节
|
// 移除所有关节
|
||||||
void RemoveAllJoints();
|
void RemoveAllJoints();
|
||||||
|
|
@ -105,9 +103,9 @@ namespace kiwano
|
||||||
ContactListener* contact_listener_;
|
ContactListener* contact_listener_;
|
||||||
|
|
||||||
bool removing_joint_;
|
bool removing_joint_;
|
||||||
Vector<PhysicJoint*> joints_;
|
Vector<Joint*> joints_;
|
||||||
};
|
};
|
||||||
|
|
||||||
KGE_DECLARE_SMART_PTR(PhysicWorld);
|
KGE_DECLARE_SMART_PTR(World);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
#include <kiwano-physics/Shape.h>
|
#include <kiwano-physics/Shape.h>
|
||||||
#include <kiwano-physics/Fixture.h>
|
#include <kiwano-physics/Fixture.h>
|
||||||
#include <kiwano-physics/Contact.h>
|
#include <kiwano-physics/Contact.h>
|
||||||
#include <kiwano-physics/ContactListener.h>
|
#include <kiwano-physics/ContactEvent.h>
|
||||||
#include <kiwano-physics/Body.h>
|
#include <kiwano-physics/Body.h>
|
||||||
#include <kiwano-physics/Joint.h>
|
#include <kiwano-physics/Joint.h>
|
||||||
#include <kiwano-physics/World.h>
|
#include <kiwano-physics/World.h>
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
@ -155,7 +155,7 @@ namespace kiwano
|
||||||
return visible_in_rt_;
|
return visible_in_rt_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Actor::Dispatch(Event& evt)
|
void Actor::Dispatch(Event* evt)
|
||||||
{
|
{
|
||||||
if (!visible_)
|
if (!visible_)
|
||||||
return;
|
return;
|
||||||
|
|
@ -167,21 +167,25 @@ namespace kiwano
|
||||||
child->Dispatch(evt);
|
child->Dispatch(evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (responsible_ && MouseEvent::Check(evt.type))
|
if (responsible_)
|
||||||
{
|
{
|
||||||
if (evt.type == Event::MouseMove)
|
if (evt->type == event::MouseMove)
|
||||||
{
|
{
|
||||||
if (!evt.target && ContainsPoint(Point{ evt.mouse.x, evt.mouse.y }))
|
auto mouse_evt = evt->SafeCast<MouseMoveEvent>();
|
||||||
|
if (!mouse_evt->target && ContainsPoint(mouse_evt->pos))
|
||||||
{
|
{
|
||||||
evt.target = this;
|
mouse_evt->target = this;
|
||||||
|
|
||||||
if (!hover_)
|
if (!hover_)
|
||||||
{
|
{
|
||||||
hover_ = true;
|
hover_ = true;
|
||||||
|
|
||||||
Event hover = evt;
|
MouseHoverEvent hover;
|
||||||
hover.type = Event::MouseHover;
|
hover.pos = mouse_evt->pos;
|
||||||
EventDispatcher::Dispatch(hover);
|
hover.left_btn_down = mouse_evt->left_btn_down;
|
||||||
|
hover.right_btn_down = mouse_evt->right_btn_down;
|
||||||
|
hover.target = this;
|
||||||
|
EventDispatcher::Dispatch(&hover);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (hover_)
|
else if (hover_)
|
||||||
|
|
@ -189,27 +193,34 @@ namespace kiwano
|
||||||
hover_ = false;
|
hover_ = false;
|
||||||
pressed_ = false;
|
pressed_ = false;
|
||||||
|
|
||||||
Event out = evt;
|
MouseOutEvent out;
|
||||||
|
out.pos = mouse_evt->pos;
|
||||||
|
out.left_btn_down = mouse_evt->left_btn_down;
|
||||||
|
out.right_btn_down = mouse_evt->right_btn_down;
|
||||||
out.target = this;
|
out.target = this;
|
||||||
out.type = Event::MouseOut;
|
EventDispatcher::Dispatch(&out);
|
||||||
EventDispatcher::Dispatch(out);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (evt.type == Event::MouseBtnDown && hover_)
|
if (evt->type == event::MouseDown && hover_)
|
||||||
{
|
{
|
||||||
pressed_ = true;
|
pressed_ = true;
|
||||||
evt.target = this;
|
evt->SafeCast<MouseDownEvent>()->target = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (evt.type == Event::MouseBtnUp && pressed_)
|
if (evt->type == event::MouseUp && pressed_)
|
||||||
{
|
{
|
||||||
pressed_ = false;
|
pressed_ = false;
|
||||||
evt.target = this;
|
|
||||||
|
|
||||||
Event click = evt;
|
auto mouse_up_evt = evt->SafeCast<MouseUpEvent>();
|
||||||
click.type = Event::Click;
|
mouse_up_evt->target = this;
|
||||||
EventDispatcher::Dispatch(click);
|
|
||||||
|
MouseOutEvent click;
|
||||||
|
click.pos = mouse_up_evt->pos;
|
||||||
|
click.left_btn_down = mouse_up_evt->left_btn_down;
|
||||||
|
click.right_btn_down = mouse_up_evt->right_btn_down;
|
||||||
|
click.target = this;
|
||||||
|
EventDispatcher::Dispatch(&click);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@
|
||||||
#include <kiwano/2d/include-forwards.h>
|
#include <kiwano/2d/include-forwards.h>
|
||||||
#include <kiwano/2d/Transform.h>
|
#include <kiwano/2d/Transform.h>
|
||||||
#include <kiwano/2d/action/ActionManager.h>
|
#include <kiwano/2d/action/ActionManager.h>
|
||||||
#include <kiwano/base/TimerManager.h>
|
#include <kiwano/core/TimerManager.h>
|
||||||
#include <kiwano/base/EventDispatcher.h>
|
#include <kiwano/core/EventDispatcher.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -49,109 +49,109 @@ namespace kiwano
|
||||||
Actor();
|
Actor();
|
||||||
|
|
||||||
// 更新角色
|
// 更新角色
|
||||||
virtual void OnUpdate(Duration dt) { KGE_NOT_USED(dt); }
|
virtual void OnUpdate(Duration dt);
|
||||||
|
|
||||||
// 渲染角色
|
// 渲染角色
|
||||||
virtual void OnRender(RenderTarget* rt) { KGE_NOT_USED(rt); }
|
virtual void OnRender(RenderTarget* rt);
|
||||||
|
|
||||||
// 获取显示状态
|
// 获取显示状态
|
||||||
bool IsVisible() const { return visible_; }
|
bool IsVisible() const;
|
||||||
|
|
||||||
// 获取响应状态
|
// 获取响应状态
|
||||||
bool IsResponsible() const { return responsible_; }
|
bool IsResponsible() const;
|
||||||
|
|
||||||
// 是否启用级联透明度
|
// 是否启用级联透明度
|
||||||
bool IsCascadeOpacityEnabled() const { return cascade_opacity_; }
|
bool IsCascadeOpacityEnabled() const;
|
||||||
|
|
||||||
// 获取名称的 Hash 值
|
// 获取名称的 Hash 值
|
||||||
size_t GetHashName() const { return hash_name_; }
|
size_t GetHashName() const;
|
||||||
|
|
||||||
// 获取 Z 轴顺序
|
// 获取 Z 轴顺序
|
||||||
int GetZOrder() const { return z_order_; }
|
int GetZOrder() const;
|
||||||
|
|
||||||
// 获取坐标
|
// 获取坐标
|
||||||
Point const& GetPosition() const { return transform_.position; }
|
Point const& GetPosition() const;
|
||||||
|
|
||||||
// 获取 x 坐标
|
// 获取 x 坐标
|
||||||
float GetPositionX() const { return GetPosition().x; }
|
float GetPositionX() const;
|
||||||
|
|
||||||
// 获取 y 坐标
|
// 获取 y 坐标
|
||||||
float GetPositionY() const { return GetPosition().y; }
|
float GetPositionY() const;
|
||||||
|
|
||||||
// 获取缩放比例
|
// 获取缩放比例
|
||||||
Point const& GetScale() const { return transform_.scale; }
|
Point const& GetScale() const;
|
||||||
|
|
||||||
// 获取横向缩放比例
|
// 获取横向缩放比例
|
||||||
float GetScaleX() const { return GetScale().x; }
|
float GetScaleX() const;
|
||||||
|
|
||||||
// 获取纵向缩放比例
|
// 获取纵向缩放比例
|
||||||
float GetScaleY() const { return GetScale().y; }
|
float GetScaleY() const;
|
||||||
|
|
||||||
// 获取错切角度
|
// 获取错切角度
|
||||||
Point const& GetSkew() const { return transform_.skew; }
|
Point const& GetSkew() const;
|
||||||
|
|
||||||
// 获取横向错切角度
|
// 获取横向错切角度
|
||||||
float GetSkewX() const { return GetSkew().x; }
|
float GetSkewX() const;
|
||||||
|
|
||||||
// 获取纵向错切角度
|
// 获取纵向错切角度
|
||||||
float GetSkewY() const { return GetSkew().y; }
|
float GetSkewY() const;
|
||||||
|
|
||||||
// 获取旋转角度
|
// 获取旋转角度
|
||||||
float GetRotation() const { return transform_.rotation; }
|
float GetRotation() const;
|
||||||
|
|
||||||
// 获取宽度
|
// 获取宽度
|
||||||
float GetWidth() const { return GetSize().x; }
|
float GetWidth() const;
|
||||||
|
|
||||||
// 获取高度
|
// 获取高度
|
||||||
float GetHeight() const { return GetSize().y; }
|
float GetHeight() const;
|
||||||
|
|
||||||
// 获取大小
|
// 获取大小
|
||||||
Size const& GetSize() const { return size_; }
|
Size const& GetSize() const;
|
||||||
|
|
||||||
// 获取缩放后的宽度
|
// 获取缩放后的宽度
|
||||||
float GetScaledWidth() const { return GetWidth() * GetScaleX(); }
|
float GetScaledWidth() const;
|
||||||
|
|
||||||
// 获取缩放后的高度
|
// 获取缩放后的高度
|
||||||
float GetScaledHeight() const { return GetHeight() * GetScaleY(); }
|
float GetScaledHeight() const;
|
||||||
|
|
||||||
// 获取缩放后的大小
|
// 获取缩放后的大小
|
||||||
Size GetScaledSize() const { return Size{ GetScaledWidth(), GetScaledHeight() }; }
|
Size GetScaledSize() const;
|
||||||
|
|
||||||
// 获取锚点
|
// 获取锚点
|
||||||
Point const& GetAnchor() const { return anchor_; }
|
Point const& GetAnchor() const;
|
||||||
|
|
||||||
// 获取 x 方向锚点
|
// 获取 x 方向锚点
|
||||||
float GetAnchorX() const { return GetAnchor().x; }
|
float GetAnchorX() const;
|
||||||
|
|
||||||
// 获取 y 方向锚点
|
// 获取 y 方向锚点
|
||||||
float GetAnchorY() const { return GetAnchor().y; }
|
float GetAnchorY() const;
|
||||||
|
|
||||||
// 获取透明度
|
// 获取透明度
|
||||||
float GetOpacity() const { return opacity_; }
|
float GetOpacity() const;
|
||||||
|
|
||||||
// 获取显示透明度
|
// 获取显示透明度
|
||||||
float GetDisplayedOpacity() const { return displayed_opacity_; }
|
float GetDisplayedOpacity() const;
|
||||||
|
|
||||||
// 获取变换
|
// 获取变换
|
||||||
Transform GetTransform() const { return transform_; }
|
Transform GetTransform() const;
|
||||||
|
|
||||||
// 获取父角色
|
// 获取父角色
|
||||||
inline Actor* GetParent() const { return parent_; }
|
Actor* GetParent() const;
|
||||||
|
|
||||||
// 获取所在舞台
|
// 获取所在舞台
|
||||||
inline Stage* GetStage() const { return stage_; }
|
Stage* GetStage() const;
|
||||||
|
|
||||||
// 获取边框
|
// 获取边框
|
||||||
virtual Rect GetBounds() const;
|
virtual Rect GetBounds() const;
|
||||||
|
|
||||||
// 获取外切包围盒
|
// 获取外切包围盒
|
||||||
virtual Rect GetBoundingBox() const;
|
virtual Rect GetBoundingBox() const;
|
||||||
|
|
||||||
// 获取二维变换矩阵
|
// 获取二维变换矩阵
|
||||||
Matrix3x2 const& GetTransformMatrix() const;
|
Matrix3x2 const& GetTransformMatrix() const;
|
||||||
|
|
||||||
// 获取二维变换的逆矩阵
|
// 获取二维变换的逆矩阵
|
||||||
Matrix3x2 const& GetTransformInverseMatrix() const;
|
Matrix3x2 const& GetTransformInverseMatrix() const;
|
||||||
|
|
||||||
// 设置是否显示
|
// 设置是否显示
|
||||||
void SetVisible(
|
void SetVisible(
|
||||||
|
|
@ -169,13 +169,10 @@ namespace kiwano
|
||||||
);
|
);
|
||||||
|
|
||||||
// 设置坐标
|
// 设置坐标
|
||||||
inline void SetPosition(
|
void SetPosition(
|
||||||
float x,
|
float x,
|
||||||
float y
|
float y
|
||||||
)
|
);
|
||||||
{
|
|
||||||
SetPosition(Point{ x, y });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置横坐标
|
// 设置横坐标
|
||||||
void SetPositionX(
|
void SetPositionX(
|
||||||
|
|
@ -193,13 +190,10 @@ namespace kiwano
|
||||||
);
|
);
|
||||||
|
|
||||||
// 移动坐标
|
// 移动坐标
|
||||||
inline void Move(
|
void Move(
|
||||||
float vx,
|
float vx,
|
||||||
float vy
|
float vy
|
||||||
)
|
);
|
||||||
{
|
|
||||||
Move(Vec2{ vx, vy });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置缩放比例
|
// 设置缩放比例
|
||||||
// 默认为 (1.0, 1.0)
|
// 默认为 (1.0, 1.0)
|
||||||
|
|
@ -209,13 +203,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 设置缩放比例
|
// 设置缩放比例
|
||||||
// 默认为 (1.0, 1.0)
|
// 默认为 (1.0, 1.0)
|
||||||
inline void SetScale(
|
void SetScale(
|
||||||
float scalex,
|
float scalex,
|
||||||
float scaley
|
float scaley
|
||||||
)
|
);
|
||||||
{
|
|
||||||
SetScale(Vec2{ scalex, scaley });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置错切角度
|
// 设置错切角度
|
||||||
// 默认为 (0, 0)
|
// 默认为 (0, 0)
|
||||||
|
|
@ -225,13 +216,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 设置错切角度
|
// 设置错切角度
|
||||||
// 默认为 (0, 0)
|
// 默认为 (0, 0)
|
||||||
inline void SetSkew(
|
void SetSkew(
|
||||||
float skewx,
|
float skewx,
|
||||||
float skewy
|
float skewy
|
||||||
)
|
);
|
||||||
{
|
|
||||||
SetSkew(Vec2{ skewx, skewy });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置旋转角度
|
// 设置旋转角度
|
||||||
// 默认为 0
|
// 默认为 0
|
||||||
|
|
@ -247,13 +235,10 @@ namespace kiwano
|
||||||
|
|
||||||
// 设置锚点位置
|
// 设置锚点位置
|
||||||
// 默认为 (0, 0), 范围 [0, 1]
|
// 默认为 (0, 0), 范围 [0, 1]
|
||||||
inline void SetAnchor(
|
void SetAnchor(
|
||||||
float anchorx,
|
float anchorx,
|
||||||
float anchory
|
float anchory
|
||||||
)
|
);
|
||||||
{
|
|
||||||
SetAnchor(Vec2{ anchorx, anchory });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 修改宽度
|
// 修改宽度
|
||||||
virtual void SetWidth(
|
virtual void SetWidth(
|
||||||
|
|
@ -271,13 +256,10 @@ namespace kiwano
|
||||||
);
|
);
|
||||||
|
|
||||||
// 修改大小
|
// 修改大小
|
||||||
inline void SetSize(
|
void SetSize(
|
||||||
float width,
|
float width,
|
||||||
float height
|
float height
|
||||||
)
|
);
|
||||||
{
|
|
||||||
SetSize(Size{ width, height });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置透明度
|
// 设置透明度
|
||||||
// 默认为 1.0, 范围 [0, 1]
|
// 默认为 1.0, 范围 [0, 1]
|
||||||
|
|
@ -364,8 +346,26 @@ namespace kiwano
|
||||||
// 判断点是否在角色内
|
// 判断点是否在角色内
|
||||||
virtual bool ContainsPoint(const Point& point) const;
|
virtual bool ContainsPoint(const Point& point) const;
|
||||||
|
|
||||||
|
// 暂停角色更新
|
||||||
|
void PauseUpdating();
|
||||||
|
|
||||||
|
// 继续角色更新
|
||||||
|
void ResumeUpdating();
|
||||||
|
|
||||||
|
// 角色更新是否暂停
|
||||||
|
bool IsUpdatePausing() const;
|
||||||
|
|
||||||
|
// 设置更新时的回调函数
|
||||||
|
void SetCallbackOnUpdate(UpdateCallback const& cb);
|
||||||
|
|
||||||
|
// 获取更新时的回调函数
|
||||||
|
UpdateCallback GetCallbackOnUpdate() const;
|
||||||
|
|
||||||
|
// 渲染角色边界
|
||||||
|
void ShowBorder(bool show);
|
||||||
|
|
||||||
// 事件分发
|
// 事件分发
|
||||||
void Dispatch(Event& evt) override;
|
void Dispatch(Event* evt) override;
|
||||||
|
|
||||||
// 设置默认锚点
|
// 设置默认锚点
|
||||||
static void SetDefaultAnchor(
|
static void SetDefaultAnchor(
|
||||||
|
|
@ -373,24 +373,6 @@ namespace kiwano
|
||||||
float anchor_y
|
float anchor_y
|
||||||
);
|
);
|
||||||
|
|
||||||
// 暂停角色更新
|
|
||||||
inline void PauseUpdating() { update_pausing_ = true; }
|
|
||||||
|
|
||||||
// 继续角色更新
|
|
||||||
inline void ResumeUpdating() { update_pausing_ = false; }
|
|
||||||
|
|
||||||
// 角色更新是否暂停
|
|
||||||
inline bool IsUpdatePausing() const { return update_pausing_; }
|
|
||||||
|
|
||||||
// 设置更新时的回调函数
|
|
||||||
inline void SetCallbackOnUpdate(UpdateCallback const& cb) { cb_update_ = cb; }
|
|
||||||
|
|
||||||
// 获取更新时的回调函数
|
|
||||||
inline UpdateCallback GetCallbackOnUpdate() const { return cb_update_; }
|
|
||||||
|
|
||||||
// 渲染角色边界
|
|
||||||
inline void ShowBorder(bool show) { show_border_ = show; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Update(Duration dt);
|
virtual void Update(Duration dt);
|
||||||
|
|
||||||
|
|
@ -439,4 +421,219 @@ namespace kiwano
|
||||||
mutable Matrix3x2 transform_matrix_inverse_;
|
mutable Matrix3x2 transform_matrix_inverse_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline void Actor::OnUpdate(Duration dt)
|
||||||
|
{
|
||||||
|
KGE_NOT_USED(dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::OnRender(RenderTarget* rt)
|
||||||
|
{
|
||||||
|
KGE_NOT_USED(rt);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Actor::IsVisible() const
|
||||||
|
{
|
||||||
|
return visible_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Actor::IsResponsible() const
|
||||||
|
{
|
||||||
|
return responsible_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Actor::IsCascadeOpacityEnabled() const
|
||||||
|
{
|
||||||
|
return cascade_opacity_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline size_t Actor::GetHashName() const
|
||||||
|
{
|
||||||
|
return hash_name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int Actor::GetZOrder() const
|
||||||
|
{
|
||||||
|
return z_order_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Point const& Actor::GetPosition() const
|
||||||
|
{
|
||||||
|
return transform_.position;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetPositionX() const
|
||||||
|
{
|
||||||
|
return GetPosition().x;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetPositionY() const
|
||||||
|
{
|
||||||
|
return GetPosition().y;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Point const& Actor::GetScale() const
|
||||||
|
{
|
||||||
|
return transform_.scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetScaleX() const
|
||||||
|
{
|
||||||
|
return GetScale().x;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetScaleY() const
|
||||||
|
{
|
||||||
|
return GetScale().y;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Point const& Actor::GetSkew() const
|
||||||
|
{
|
||||||
|
return transform_.skew;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetSkewX() const
|
||||||
|
{
|
||||||
|
return GetSkew().x;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetSkewY() const
|
||||||
|
{
|
||||||
|
return GetSkew().y;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetRotation() const
|
||||||
|
{
|
||||||
|
return transform_.rotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetWidth() const
|
||||||
|
{
|
||||||
|
return GetSize().x;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetHeight() const
|
||||||
|
{
|
||||||
|
return GetSize().y;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Size const& Actor::GetSize() const
|
||||||
|
{
|
||||||
|
return size_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetScaledWidth() const
|
||||||
|
{
|
||||||
|
return GetWidth() * GetScaleX();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetScaledHeight() const
|
||||||
|
{
|
||||||
|
return GetHeight() * GetScaleY();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Size Actor::GetScaledSize() const
|
||||||
|
{
|
||||||
|
return Size{ GetScaledWidth(), GetScaledHeight() };
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Point const& Actor::GetAnchor() const
|
||||||
|
{
|
||||||
|
return anchor_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetAnchorX() const
|
||||||
|
{
|
||||||
|
return GetAnchor().x;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetAnchorY() const
|
||||||
|
{
|
||||||
|
return GetAnchor().y;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetOpacity() const
|
||||||
|
{
|
||||||
|
return opacity_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float Actor::GetDisplayedOpacity() const
|
||||||
|
{
|
||||||
|
return displayed_opacity_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Transform Actor::GetTransform() const
|
||||||
|
{
|
||||||
|
return transform_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Actor* Actor::GetParent() const
|
||||||
|
{
|
||||||
|
return parent_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Stage* Actor::GetStage() const
|
||||||
|
{
|
||||||
|
return stage_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::PauseUpdating()
|
||||||
|
{
|
||||||
|
update_pausing_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::ResumeUpdating()
|
||||||
|
{
|
||||||
|
update_pausing_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Actor::IsUpdatePausing() const
|
||||||
|
{
|
||||||
|
return update_pausing_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::SetCallbackOnUpdate(UpdateCallback const& cb)
|
||||||
|
{
|
||||||
|
cb_update_ = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Actor::UpdateCallback Actor::GetCallbackOnUpdate() const
|
||||||
|
{
|
||||||
|
return cb_update_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::ShowBorder(bool show)
|
||||||
|
{
|
||||||
|
show_border_ = show;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::SetPosition(float x, float y)
|
||||||
|
{
|
||||||
|
SetPosition(Point{ x, y });
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::Move(float vx, float vy)
|
||||||
|
{
|
||||||
|
Move(Vec2{ vx, vy });
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::SetScale(float scalex, float scaley)
|
||||||
|
{
|
||||||
|
SetScale(Vec2{ scalex, scaley });
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::SetAnchor(float anchorx, float anchory)
|
||||||
|
{
|
||||||
|
SetAnchor(Vec2{ anchorx, anchory });
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::SetSize(float width, float height)
|
||||||
|
{
|
||||||
|
SetSize(Size{ width, height });
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Actor::SetSkew(float skewx, float skewy)
|
||||||
|
{
|
||||||
|
SetSkew(Vec2{ skewx, skewy });
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/Canvas.h>
|
#include <kiwano/2d/Canvas.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ namespace kiwano
|
||||||
style.line_spacing = 20.f;
|
style.line_spacing = 20.f;
|
||||||
debug_text_->SetStyle(style);
|
debug_text_->SetStyle(style);
|
||||||
|
|
||||||
AddListener(Event::MouseHover, [=](const Event&) { SetOpacity(0.4f); });
|
AddListener(event::MouseHover, [=](Event*) { SetOpacity(0.4f); });
|
||||||
AddListener(Event::MouseOut, [=](const Event&) { SetOpacity(1.f); });
|
AddListener(event::MouseOut, [=](Event*) { SetOpacity(1.f); });
|
||||||
}
|
}
|
||||||
|
|
||||||
DebugActor::~DebugActor()
|
DebugActor::~DebugActor()
|
||||||
|
|
@ -87,7 +87,7 @@ namespace kiwano
|
||||||
KGE_NOT_USED(dt);
|
KGE_NOT_USED(dt);
|
||||||
|
|
||||||
frame_time_.push_back(Time::Now());
|
frame_time_.push_back(Time::Now());
|
||||||
while (frame_time_.back() - frame_time_.front() >= time::Sec)
|
while (frame_time_.back() - frame_time_.front() >= Duration::Second)
|
||||||
{
|
{
|
||||||
frame_time_.erase(frame_time_.begin());
|
frame_time_.erase(frame_time_.begin());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano/renderer/Texture.h>
|
#include <kiwano/renderer/Texture.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <kiwano/2d/FrameSequence.h>
|
#include <kiwano/2d/FrameSequence.h>
|
||||||
#include <kiwano/2d/Frame.h>
|
#include <kiwano/2d/Frame.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/GifSprite.h>
|
#include <kiwano/2d/GifSprite.h>
|
||||||
#include <kiwano/base/win32/helper.h>
|
#include <kiwano/core/win32/helper.h>
|
||||||
#include <kiwano/renderer/TextureCache.h>
|
#include <kiwano/renderer/TextureCache.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/base/Resource.h>
|
#include <kiwano/core/Resource.h>
|
||||||
#include <kiwano/renderer/RenderTarget.h>
|
#include <kiwano/renderer/RenderTarget.h>
|
||||||
#include <kiwano/renderer/GifImage.h>
|
#include <kiwano/renderer/GifImage.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,14 +29,14 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
auto handler = Closure(this, &Layer::HandleMessages);
|
auto handler = Closure(this, &Layer::HandleMessages);
|
||||||
|
|
||||||
AddListener(Event::MouseBtnDown, handler);
|
AddListener(event::MouseDown, handler);
|
||||||
AddListener(Event::MouseBtnUp, handler);
|
AddListener(event::MouseUp, handler);
|
||||||
AddListener(Event::MouseMove, handler);
|
AddListener(event::MouseMove, handler);
|
||||||
AddListener(Event::MouseWheel, handler);
|
AddListener(event::MouseWheel, handler);
|
||||||
|
|
||||||
AddListener(Event::KeyDown, handler);
|
AddListener(event::KeyDown, handler);
|
||||||
AddListener(Event::KeyUp, handler);
|
AddListener(event::KeyUp, handler);
|
||||||
AddListener(Event::Char, handler);
|
AddListener(event::KeyChar, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
Layer::~Layer()
|
Layer::~Layer()
|
||||||
|
|
@ -64,7 +64,7 @@ namespace kiwano
|
||||||
area_.SetMaskTransform(transform);
|
area_.SetMaskTransform(transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Layer::Dispatch(Event& evt)
|
void Layer::Dispatch(Event* evt)
|
||||||
{
|
{
|
||||||
if (!IsVisible())
|
if (!IsVisible())
|
||||||
return;
|
return;
|
||||||
|
|
@ -91,31 +91,42 @@ namespace kiwano
|
||||||
rt->PopLayer();
|
rt->PopLayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Layer::HandleMessages(Event const& evt)
|
void Layer::HandleMessages(Event* evt)
|
||||||
{
|
{
|
||||||
switch (evt.type)
|
if (evt->type == event::MouseDown)
|
||||||
{
|
{
|
||||||
case Event::MouseBtnDown:
|
auto real_evt = evt->SafeCast<MouseDownEvent>();
|
||||||
OnMouseButtonDown(evt.mouse.button, Point{ evt.mouse.x, evt.mouse.y });
|
OnMouseButtonDown(real_evt->button, real_evt->pos);
|
||||||
break;
|
}
|
||||||
case Event::MouseBtnUp:
|
else if (evt->type == event::MouseUp)
|
||||||
OnMouseButtonUp(evt.mouse.button, Point{ evt.mouse.x, evt.mouse.y });
|
{
|
||||||
break;
|
auto real_evt = evt->SafeCast<MouseUpEvent>();
|
||||||
case Event::MouseMove:
|
OnMouseButtonUp(real_evt->button, real_evt->pos);
|
||||||
OnMouseMoved(Point{ evt.mouse.x, evt.mouse.y });
|
}
|
||||||
break;
|
else if (evt->type == event::MouseMove)
|
||||||
case Event::MouseWheel:
|
{
|
||||||
OnMouseWheel(evt.mouse.wheel);
|
auto real_evt = evt->SafeCast<MouseMoveEvent>();
|
||||||
break;
|
OnMouseMoved(real_evt->pos);
|
||||||
case Event::KeyDown:
|
}
|
||||||
OnKeyDown(evt.key.code);
|
else if (evt->type == event::MouseWheel)
|
||||||
break;
|
{
|
||||||
case Event::KeyUp:
|
auto real_evt = evt->SafeCast<MouseWheelEvent>();
|
||||||
OnKeyUp(evt.key.code);
|
OnMouseWheel(real_evt->wheel);
|
||||||
break;
|
}
|
||||||
case Event::Char:
|
else if (evt->type == event::KeyDown)
|
||||||
OnChar(evt.key.c);
|
{
|
||||||
break;
|
auto real_evt = evt->SafeCast<KeyDownEvent>();
|
||||||
|
OnKeyDown(real_evt->code);
|
||||||
|
}
|
||||||
|
else if (evt->type == event::KeyUp)
|
||||||
|
{
|
||||||
|
auto real_evt = evt->SafeCast<KeyUpEvent>();
|
||||||
|
OnKeyUp(real_evt->code);
|
||||||
|
}
|
||||||
|
else if (evt->type == event::KeyChar)
|
||||||
|
{
|
||||||
|
auto real_evt = evt->SafeCast<KeyCharEvent>();
|
||||||
|
OnChar(real_evt->value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ namespace kiwano
|
||||||
virtual ~Layer();
|
virtual ~Layer();
|
||||||
|
|
||||||
// 重载下列函数以获取图层事件
|
// 重载下列函数以获取图层事件
|
||||||
virtual void OnMouseButtonDown(int btn, Point const& p) {}
|
virtual void OnMouseButtonDown(MouseButton::Value btn, Point const& p) {}
|
||||||
virtual void OnMouseButtonUp(int btn, Point const& p) {}
|
virtual void OnMouseButtonUp(MouseButton::Value btn, Point const& p) {}
|
||||||
virtual void OnMouseMoved(Point const& p) {}
|
virtual void OnMouseMoved(Point const& p) {}
|
||||||
virtual void OnMouseWheel(float wheel) {}
|
virtual void OnMouseWheel(float wheel) {}
|
||||||
virtual void OnKeyDown(int key) {}
|
virtual void OnKeyDown(int key) {}
|
||||||
|
|
@ -67,12 +67,12 @@ namespace kiwano
|
||||||
inline LayerArea const& GetArea() const { return area_; }
|
inline LayerArea const& GetArea() const { return area_; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Dispatch(Event& evt) override;
|
void Dispatch(Event* evt) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Render(RenderTarget* rt) override;
|
void Render(RenderTarget* rt) override;
|
||||||
|
|
||||||
void HandleMessages(Event const& evt);
|
void HandleMessages(Event* evt);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool swallow_;
|
bool swallow_;
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/ShapeActor.h>
|
#include <kiwano/2d/ShapeActor.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <kiwano/2d/Text.h>
|
#include <kiwano/2d/Text.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@
|
||||||
#include <kiwano/2d/Transition.h>
|
#include <kiwano/2d/Transition.h>
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/base/Window.h>
|
#include <kiwano/platform/Window.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
#include <kiwano/renderer/Renderer.h>
|
#include <kiwano/renderer/Renderer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
|
||||||
|
|
@ -36,42 +36,33 @@ namespace kiwano
|
||||||
friend IntrusiveList<ActionPtr>;
|
friend IntrusiveList<ActionPtr>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum class Status
|
|
||||||
{
|
|
||||||
NotStarted,
|
|
||||||
Delayed,
|
|
||||||
Started,
|
|
||||||
Done,
|
|
||||||
Removeable
|
|
||||||
};
|
|
||||||
|
|
||||||
Action();
|
Action();
|
||||||
|
|
||||||
virtual ~Action();
|
virtual ~Action();
|
||||||
|
|
||||||
// 继续动作
|
// 继续动作
|
||||||
inline void Resume() { running_ = true; }
|
void Resume();
|
||||||
|
|
||||||
// 暂停动作
|
// 暂停动作
|
||||||
inline void Pause() { running_ = false; }
|
void Pause();
|
||||||
|
|
||||||
// 停止动作
|
// 停止动作
|
||||||
inline void Stop() { status_ = Status::Removeable; }
|
void Stop();
|
||||||
|
|
||||||
// 设置动作延时
|
// 设置动作延时
|
||||||
inline void SetDelay(Duration delay) { delay_ = delay; }
|
void SetDelay(Duration delay);
|
||||||
|
|
||||||
// 设置循环次数 (-1 为永久循环)
|
// 设置循环次数 (-1 为永久循环)
|
||||||
inline void SetLoops(int loops) { loops_ = loops; }
|
void SetLoops(int loops);
|
||||||
|
|
||||||
// 动作结束时移除目标角色
|
// 动作结束时移除目标角色
|
||||||
inline void RemoveTargetWhenDone() { detach_target_ = true; }
|
void RemoveTargetWhenDone();
|
||||||
|
|
||||||
// 设置动作结束时的回调函数
|
// 设置动作结束时的回调函数
|
||||||
inline void SetDoneCallback(ActionCallback const& cb) { cb_done_ = cb; }
|
void SetDoneCallback(ActionCallback const& cb);
|
||||||
|
|
||||||
// 设置动作循环结束时的回调函数
|
// 设置动作循环结束时的回调函数
|
||||||
inline void SetLoopDoneCallback(ActionCallback const& cb) { cb_loop_done_ = cb; }
|
void SetLoopDoneCallback(ActionCallback const& cb);
|
||||||
|
|
||||||
// 获取动作的拷贝
|
// 获取动作的拷贝
|
||||||
virtual ActionPtr Clone() const = 0;
|
virtual ActionPtr Clone() const = 0;
|
||||||
|
|
@ -79,25 +70,15 @@ namespace kiwano
|
||||||
// 获取动作的倒转
|
// 获取动作的倒转
|
||||||
virtual ActionPtr Reverse() const = 0;
|
virtual ActionPtr Reverse() const = 0;
|
||||||
|
|
||||||
inline void Done() { status_ = Status::Done; }
|
bool IsRunning() const;
|
||||||
|
|
||||||
inline Status GetStatus() const { return status_; }
|
int GetLoops() const;
|
||||||
|
|
||||||
inline bool IsRunning() const { return running_; }
|
Duration GetDelay() const;
|
||||||
|
|
||||||
inline bool IsDone() const { return status_ == Status::Done || status_ == Status::Removeable; }
|
ActionCallback GetDoneCallback() const;
|
||||||
|
|
||||||
inline bool IsRemoveable() const { return status_ == Status::Removeable; }
|
ActionCallback GetLoopDoneCallback() const;
|
||||||
|
|
||||||
inline int GetLoops() const { return loops_; }
|
|
||||||
|
|
||||||
inline Duration GetDelay() const { return delay_; }
|
|
||||||
|
|
||||||
inline Duration GetElapsed() const { return elapsed_; }
|
|
||||||
|
|
||||||
inline ActionCallback GetDoneCallback() const { return cb_done_; }
|
|
||||||
|
|
||||||
inline ActionCallback GetLoopDoneCallback() const { return cb_loop_done_; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void Init(ActorPtr target);
|
virtual void Init(ActorPtr target);
|
||||||
|
|
@ -110,7 +91,28 @@ namespace kiwano
|
||||||
|
|
||||||
void Restart(ActorPtr target);
|
void Restart(ActorPtr target);
|
||||||
|
|
||||||
protected:
|
enum class Status
|
||||||
|
{
|
||||||
|
NotStarted,
|
||||||
|
Delayed,
|
||||||
|
Started,
|
||||||
|
Done,
|
||||||
|
Removeable
|
||||||
|
};
|
||||||
|
|
||||||
|
Status GetStatus() const;
|
||||||
|
|
||||||
|
Duration GetElapsed() const;
|
||||||
|
|
||||||
|
int GetLoopsDone() const;
|
||||||
|
|
||||||
|
void Done();
|
||||||
|
|
||||||
|
bool IsDone() const;
|
||||||
|
|
||||||
|
bool IsRemoveable() const;
|
||||||
|
|
||||||
|
private:
|
||||||
Status status_;
|
Status status_;
|
||||||
bool running_;
|
bool running_;
|
||||||
bool detach_target_;
|
bool detach_target_;
|
||||||
|
|
@ -121,4 +123,100 @@ namespace kiwano
|
||||||
ActionCallback cb_done_;
|
ActionCallback cb_done_;
|
||||||
ActionCallback cb_loop_done_;
|
ActionCallback cb_loop_done_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline void Action::Resume()
|
||||||
|
{
|
||||||
|
running_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::Pause()
|
||||||
|
{
|
||||||
|
running_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::Stop()
|
||||||
|
{
|
||||||
|
Done();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::SetDelay(Duration delay)
|
||||||
|
{
|
||||||
|
delay_ = delay;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::SetLoops(int loops)
|
||||||
|
{
|
||||||
|
loops_ = loops;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::RemoveTargetWhenDone()
|
||||||
|
{
|
||||||
|
detach_target_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::SetDoneCallback(ActionCallback const& cb)
|
||||||
|
{
|
||||||
|
cb_done_ = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::SetLoopDoneCallback(ActionCallback const& cb)
|
||||||
|
{
|
||||||
|
cb_loop_done_ = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Action::Done()
|
||||||
|
{
|
||||||
|
status_ = Status::Done;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Action::Status Action::GetStatus() const
|
||||||
|
{
|
||||||
|
return status_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Action::IsRunning() const
|
||||||
|
{
|
||||||
|
return running_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Action::IsDone() const
|
||||||
|
{
|
||||||
|
return status_ == Status::Done || status_ == Status::Removeable;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Action::IsRemoveable() const
|
||||||
|
{
|
||||||
|
return status_ == Status::Removeable;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int Action::GetLoops() const
|
||||||
|
{
|
||||||
|
return loops_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Duration Action::GetDelay() const
|
||||||
|
{
|
||||||
|
return delay_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Duration Action::GetElapsed() const
|
||||||
|
{
|
||||||
|
return elapsed_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int Action::GetLoopsDone() const
|
||||||
|
{
|
||||||
|
return loops_done_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ActionCallback Action::GetDoneCallback() const
|
||||||
|
{
|
||||||
|
return cb_done_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ActionCallback Action::GetLoopDoneCallback() const
|
||||||
|
{
|
||||||
|
return cb_loop_done_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,12 @@ namespace kiwano
|
||||||
|
|
||||||
ActionPtr ActionDelay::Clone() const
|
ActionPtr ActionDelay::Clone() const
|
||||||
{
|
{
|
||||||
return new ActionDelay(delay_);
|
return new ActionDelay(GetDelay());
|
||||||
}
|
}
|
||||||
|
|
||||||
ActionPtr ActionDelay::Reverse() const
|
ActionPtr ActionDelay::Reverse() const
|
||||||
{
|
{
|
||||||
return new ActionDelay(delay_);
|
return new ActionDelay(GetDelay());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <kiwano/2d/action/ActionGroup.h>
|
#include <kiwano/2d/action/ActionGroup.h>
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -30,71 +30,71 @@ namespace kiwano
|
||||||
struct ActionHelper
|
struct ActionHelper
|
||||||
{
|
{
|
||||||
// 设置循环次数
|
// 设置循环次数
|
||||||
inline ActionHelper& SetLoops(int loops) { base->SetLoops(loops); return (*this); }
|
inline ActionHelper& SetLoops(int loops) { core->SetLoops(loops); return (*this); }
|
||||||
|
|
||||||
// 设置动作延迟
|
// 设置动作延迟
|
||||||
inline ActionHelper& SetDelay(Duration delay) { base->SetDelay(delay); return (*this); }
|
inline ActionHelper& SetDelay(Duration delay) { core->SetDelay(delay); return (*this); }
|
||||||
|
|
||||||
// 设置动作结束回调函数
|
// 设置动作结束回调函数
|
||||||
inline ActionHelper& SetDoneCallback(ActionCallback const& cb) { base->SetDoneCallback(cb); return (*this); }
|
inline ActionHelper& SetDoneCallback(ActionCallback const& cb) { core->SetDoneCallback(cb); return (*this); }
|
||||||
|
|
||||||
// 设置动作循环结束时的回调函数
|
// 设置动作循环结束时的回调函数
|
||||||
inline ActionHelper& SetLoopDoneCallback(ActionCallback const& cb) { base->SetLoopDoneCallback(cb); return (*this); }
|
inline ActionHelper& SetLoopDoneCallback(ActionCallback const& cb) { core->SetLoopDoneCallback(cb); return (*this); }
|
||||||
|
|
||||||
// 动作结束时移除目标角色
|
// 动作结束时移除目标角色
|
||||||
inline ActionHelper& RemoveTargetWhenDone() { base->RemoveTargetWhenDone(); return (*this); }
|
inline ActionHelper& RemoveTargetWhenDone() { core->RemoveTargetWhenDone(); return (*this); }
|
||||||
|
|
||||||
// 设置名称
|
// 设置名称
|
||||||
inline ActionHelper& SetName(String const& name) { base->SetName(name); return (*this); }
|
inline ActionHelper& SetName(String const& name) { core->SetName(name); return (*this); }
|
||||||
|
|
||||||
// 获取指针
|
// 获取指针
|
||||||
inline ActionPtr Get() const { return base; }
|
inline ActionPtr Get() const { return core; }
|
||||||
|
|
||||||
inline ActionHelper(ActionPtr base) : base(base) {}
|
inline ActionHelper(ActionPtr core) : core(core) {}
|
||||||
|
|
||||||
inline operator ActionPtr() const { return base; }
|
inline operator ActionPtr() const { return core; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ActionPtr base;
|
ActionPtr core;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TweenHelper
|
struct TweenHelper
|
||||||
{
|
{
|
||||||
// 设置动画持续时长
|
// 设置动画持续时长
|
||||||
inline TweenHelper& SetDuration(Duration dur) { base->SetDuration(dur); return (*this); }
|
inline TweenHelper& SetDuration(Duration dur) { core->SetDuration(dur); return (*this); }
|
||||||
|
|
||||||
// 设置循环次数
|
// 设置循环次数
|
||||||
inline TweenHelper& SetLoops(int loops) { base->SetLoops(loops); return (*this); }
|
inline TweenHelper& SetLoops(int loops) { core->SetLoops(loops); return (*this); }
|
||||||
|
|
||||||
// 设置缓动函数
|
// 设置缓动函数
|
||||||
inline TweenHelper& SetEaseFunc(EaseFunc ease) { base->SetEaseFunc(ease); return (*this); }
|
inline TweenHelper& SetEaseFunc(EaseFunc ease) { core->SetEaseFunc(ease); return (*this); }
|
||||||
|
|
||||||
// 设置动作延迟
|
// 设置动作延迟
|
||||||
inline TweenHelper& SetDelay(Duration delay) { base->SetDelay(delay); return (*this); }
|
inline TweenHelper& SetDelay(Duration delay) { core->SetDelay(delay); return (*this); }
|
||||||
|
|
||||||
// 设置动作结束回调函数
|
// 设置动作结束回调函数
|
||||||
inline TweenHelper& SetDoneCallback(ActionCallback const& cb) { base->SetDoneCallback(cb); return (*this); }
|
inline TweenHelper& SetDoneCallback(ActionCallback const& cb) { core->SetDoneCallback(cb); return (*this); }
|
||||||
|
|
||||||
// 设置动作循环结束时的回调函数
|
// 设置动作循环结束时的回调函数
|
||||||
inline TweenHelper& SetLoopDoneCallback(ActionCallback const& cb) { base->SetLoopDoneCallback(cb); return (*this); }
|
inline TweenHelper& SetLoopDoneCallback(ActionCallback const& cb) { core->SetLoopDoneCallback(cb); return (*this); }
|
||||||
|
|
||||||
// 动作结束时移除目标角色
|
// 动作结束时移除目标角色
|
||||||
inline TweenHelper& RemoveTargetWhenDone() { base->RemoveTargetWhenDone(); return (*this); }
|
inline TweenHelper& RemoveTargetWhenDone() { core->RemoveTargetWhenDone(); return (*this); }
|
||||||
|
|
||||||
// 设置名称
|
// 设置名称
|
||||||
inline TweenHelper& SetName(String const& name) { base->SetName(name); return (*this); }
|
inline TweenHelper& SetName(String const& name) { core->SetName(name); return (*this); }
|
||||||
|
|
||||||
// 获取指针
|
// 获取指针
|
||||||
inline ActionTweenPtr Get() const { return base; }
|
inline ActionTweenPtr Get() const { return core; }
|
||||||
|
|
||||||
inline TweenHelper(ActionTweenPtr base) : base(base) {}
|
inline TweenHelper(ActionTweenPtr core) : core(core) {}
|
||||||
|
|
||||||
inline operator ActionPtr() const { return base; }
|
inline operator ActionPtr() const { return core; }
|
||||||
|
|
||||||
inline operator ActionTweenPtr() const { return base; }
|
inline operator ActionTweenPtr() const { return core; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ActionTweenPtr base;
|
ActionTweenPtr core;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Tween actions helper
|
// Tween actions helper
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <kiwano/2d/action/ActionManager.h>
|
#include <kiwano/2d/action/ActionManager.h>
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -108,15 +108,15 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Duration elapsed = elapsed_ - delay_;
|
Duration elapsed = GetElapsed() - GetDelay();
|
||||||
float loops_done = elapsed / dur_;
|
float loops_done = elapsed / dur_;
|
||||||
|
|
||||||
while (loops_done_ < static_cast<int>(loops_done))
|
while (GetLoopsDone() < static_cast<int>(loops_done))
|
||||||
{
|
{
|
||||||
Complete(target); // loops_done_++
|
Complete(target); // loops_done_++
|
||||||
}
|
}
|
||||||
|
|
||||||
percent = (status_ == Status::Done) ? 1.f : (loops_done - static_cast<float>(loops_done_));
|
percent = (GetStatus() == Status::Done) ? 1.f : (loops_done - static_cast<float>(GetLoopsDone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ease_func_)
|
if (ease_func_)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/2d/action/Action.h>
|
#include <kiwano/2d/action/Action.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/common/common.h>
|
||||||
#include <kiwano/base/time.h>
|
#include <kiwano/core/time.h>
|
||||||
#include <kiwano/base/RefCounter.hpp>
|
#include <kiwano/core/RefCounter.hpp>
|
||||||
#include <kiwano/base/SmartPtr.hpp>
|
#include <kiwano/core/SmartPtr.hpp>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano/math/math.h>
|
#include <kiwano/math/math.h>
|
||||||
#include <kiwano/renderer/Color.h>
|
#include <kiwano/renderer/Color.h>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,181 +0,0 @@
|
||||||
// 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/base/keys.hpp>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
// 事件类型
|
|
||||||
typedef int EventType;
|
|
||||||
|
|
||||||
// 鼠标事件
|
|
||||||
struct MouseEvent
|
|
||||||
{
|
|
||||||
float x;
|
|
||||||
float y;
|
|
||||||
bool left_btn_down; // 左键是否按下
|
|
||||||
bool right_btn_down; // 右键是否按下
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct // Events::MouseDown | Events::MouseUp | Events::MouseClick
|
|
||||||
{
|
|
||||||
MouseButton::Value button;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct // Events::MouseWheel
|
|
||||||
{
|
|
||||||
float wheel;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool Check(EventType type);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 键盘事件
|
|
||||||
struct KeyboardEvent
|
|
||||||
{
|
|
||||||
int count;
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct // Events::KeyDown | Events::KeyUp
|
|
||||||
{
|
|
||||||
KeyCode::Value code;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct // Events::Char
|
|
||||||
{
|
|
||||||
char c;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool Check(EventType type);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 窗口事件
|
|
||||||
struct WindowEvent
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct // Events::WindowMoved
|
|
||||||
{
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct // Events::WindowResized
|
|
||||||
{
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct // Events::WindowFocusChanged
|
|
||||||
{
|
|
||||||
bool focus;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct // Events::WindowTitleChanged
|
|
||||||
{
|
|
||||||
const wchar_t* title;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool Check(EventType type);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 自定义事件
|
|
||||||
struct CustomEvent
|
|
||||||
{
|
|
||||||
void* data;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Actor;
|
|
||||||
|
|
||||||
// 事件
|
|
||||||
struct KGE_API Event
|
|
||||||
{
|
|
||||||
enum Type : EventType
|
|
||||||
{
|
|
||||||
First,
|
|
||||||
|
|
||||||
// 鼠标事件
|
|
||||||
MouseFirst,
|
|
||||||
MouseMove, // 移动
|
|
||||||
MouseBtnDown, // 鼠标按下
|
|
||||||
MouseBtnUp, // 鼠标抬起
|
|
||||||
MouseWheel, // 滚轮滚动
|
|
||||||
MouseHover, // 鼠标移入
|
|
||||||
MouseOut, // 鼠标移出
|
|
||||||
Click, // 鼠标点击
|
|
||||||
MouseLast,
|
|
||||||
|
|
||||||
// 按键事件
|
|
||||||
KeyFirst,
|
|
||||||
KeyDown, // 按键按下
|
|
||||||
KeyUp, // 按键抬起
|
|
||||||
Char, // 输出字符
|
|
||||||
KeyLast,
|
|
||||||
|
|
||||||
// 窗口消息
|
|
||||||
WindowFirst,
|
|
||||||
WindowMoved, // 窗口移动
|
|
||||||
WindowResized, // 窗口大小变化
|
|
||||||
WindowFocusChanged, // 获得或失去焦点
|
|
||||||
WindowTitleChanged, // 标题变化
|
|
||||||
WindowClosed, // 窗口被关闭
|
|
||||||
WindowLast,
|
|
||||||
|
|
||||||
Last
|
|
||||||
};
|
|
||||||
|
|
||||||
int type;
|
|
||||||
Actor* target;
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
MouseEvent mouse;
|
|
||||||
KeyboardEvent key;
|
|
||||||
WindowEvent window;
|
|
||||||
CustomEvent custom;
|
|
||||||
};
|
|
||||||
|
|
||||||
Event(EventType type = Type::First) : type(type), target(nullptr) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Check-functions
|
|
||||||
|
|
||||||
inline bool MouseEvent::Check(EventType type)
|
|
||||||
{
|
|
||||||
return type > Event::MouseFirst && type < Event::MouseLast;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool KeyboardEvent::Check(EventType type)
|
|
||||||
{
|
|
||||||
return type > Event::KeyFirst && type < Event::KeyLast;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool WindowEvent::Check(EventType type)
|
|
||||||
{
|
|
||||||
return type > Event::WindowFirst && type < Event::WindowLast;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,426 +0,0 @@
|
||||||
// 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 <regex>
|
|
||||||
#include <unordered_map>
|
|
||||||
|
|
||||||
#include <kiwano/base/time.h>
|
|
||||||
#include <kiwano/base/Logger.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
namespace time
|
|
||||||
{
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Time
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
Time::Time()
|
|
||||||
: dur_(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Time::Time(long dur)
|
|
||||||
: dur_(dur)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const Time Time::operator+(const Duration & dur) const
|
|
||||||
{
|
|
||||||
return Time{ dur_ + dur.Milliseconds() };
|
|
||||||
}
|
|
||||||
|
|
||||||
const Time Time::operator-(const Duration & dur) const
|
|
||||||
{
|
|
||||||
return Time{ dur_ - dur.Milliseconds() };
|
|
||||||
}
|
|
||||||
|
|
||||||
Time & Time::operator+=(const Duration & other)
|
|
||||||
{
|
|
||||||
dur_ += other.Milliseconds();
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Time & Time::operator-=(const Duration &other)
|
|
||||||
{
|
|
||||||
dur_ -= other.Milliseconds();
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Time::operator-(const Time & other) const
|
|
||||||
{
|
|
||||||
return Duration(dur_ - other.dur_);
|
|
||||||
}
|
|
||||||
|
|
||||||
Time Time::Now() noexcept
|
|
||||||
{
|
|
||||||
static LARGE_INTEGER freq = {};
|
|
||||||
if (freq.QuadPart == 0LL)
|
|
||||||
{
|
|
||||||
// the Function will always succceed on systems that run Windows XP or later
|
|
||||||
QueryPerformanceFrequency(&freq);
|
|
||||||
}
|
|
||||||
|
|
||||||
LARGE_INTEGER count;
|
|
||||||
QueryPerformanceCounter(&count);
|
|
||||||
|
|
||||||
const long long whole = (count.QuadPart / freq.QuadPart) * 1000LL;
|
|
||||||
const long long part = (count.QuadPart % freq.QuadPart) * 1000LL / freq.QuadPart;
|
|
||||||
return Time{ static_cast<long>(whole + part) };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Duration
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
const Duration Ms = 1L;
|
|
||||||
const Duration Sec = 1000 * Ms;
|
|
||||||
const Duration Min = 60 * Sec;
|
|
||||||
const Duration Hour = 60 * Min;
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
const auto duration_regex = std::wregex(LR"(^[-+]?([0-9]*(\.[0-9]*)?(h|m|s|ms)+)+$)");
|
|
||||||
|
|
||||||
typedef std::unordered_map<String, Duration> UnitMap;
|
|
||||||
const auto unit_map = UnitMap
|
|
||||||
{
|
|
||||||
{L"ms", Ms},
|
|
||||||
{L"s", Sec},
|
|
||||||
{L"m", Min},
|
|
||||||
{L"h", Hour}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration::Duration()
|
|
||||||
: milliseconds_(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration::Duration(long milliseconds)
|
|
||||||
: milliseconds_(milliseconds)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
float Duration::Seconds() const
|
|
||||||
{
|
|
||||||
long sec = milliseconds_ / Sec.milliseconds_;
|
|
||||||
long ms = milliseconds_ % Sec.milliseconds_;
|
|
||||||
return static_cast<float>(sec) + static_cast<float>(ms) / 1000.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
float Duration::Minutes() const
|
|
||||||
{
|
|
||||||
long min = milliseconds_ / Min.milliseconds_;
|
|
||||||
long ms = milliseconds_ % Min.milliseconds_;
|
|
||||||
return static_cast<float>(min) + static_cast<float>(ms) / (60 * 1000.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
float Duration::Hours() const
|
|
||||||
{
|
|
||||||
long hour = milliseconds_ / Hour.milliseconds_;
|
|
||||||
long ms = milliseconds_ % Hour.milliseconds_;
|
|
||||||
return static_cast<float>(hour) + static_cast<float>(ms) / (60 * 60 * 1000.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
String kiwano::time::Duration::ToString() const
|
|
||||||
{
|
|
||||||
if (IsZero())
|
|
||||||
{
|
|
||||||
return String(L"0s");
|
|
||||||
}
|
|
||||||
|
|
||||||
String result;
|
|
||||||
long total_ms = milliseconds_;
|
|
||||||
if (total_ms < 0)
|
|
||||||
{
|
|
||||||
result.append(L"-");
|
|
||||||
total_ms = -total_ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
long hour = total_ms / Hour.milliseconds_;
|
|
||||||
long min = total_ms / Min.milliseconds_ - hour * 60;
|
|
||||||
long sec = total_ms / Sec.milliseconds_ - (hour * 60 * 60 + min * 60);
|
|
||||||
long ms = total_ms % Sec.milliseconds_;
|
|
||||||
|
|
||||||
if (hour)
|
|
||||||
{
|
|
||||||
result.append(String::parse(hour)).append(L"h");
|
|
||||||
result.append(String::parse(min)).append(L"m");
|
|
||||||
}
|
|
||||||
else if(min)
|
|
||||||
{
|
|
||||||
result.append(String::parse(min)).append(L"m");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ms != 0)
|
|
||||||
{
|
|
||||||
result.append(String::parse(static_cast<float>(sec) + static_cast<float>(ms) / 1000.f))
|
|
||||||
.append(L"s");
|
|
||||||
}
|
|
||||||
else if (sec != 0)
|
|
||||||
{
|
|
||||||
result.append(String::parse(sec)).append(L"s");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Duration::operator==(const Duration & other) const
|
|
||||||
{
|
|
||||||
return milliseconds_ == other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Duration::operator!=(const Duration & other) const
|
|
||||||
{
|
|
||||||
return milliseconds_ != other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Duration::operator>(const Duration & other) const
|
|
||||||
{
|
|
||||||
return milliseconds_ > other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Duration::operator>=(const Duration & other) const
|
|
||||||
{
|
|
||||||
return milliseconds_ >= other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Duration::operator<(const Duration & other) const
|
|
||||||
{
|
|
||||||
return milliseconds_ < other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Duration::operator<=(const Duration & other) const
|
|
||||||
{
|
|
||||||
return milliseconds_ <= other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
float kiwano::time::Duration::operator/(const Duration & other) const
|
|
||||||
{
|
|
||||||
return static_cast<float>(milliseconds_) / other.milliseconds_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator+(const Duration & other) const
|
|
||||||
{
|
|
||||||
return Duration(milliseconds_ + other.milliseconds_);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator-(const Duration & other) const
|
|
||||||
{
|
|
||||||
return Duration(milliseconds_ - other.milliseconds_);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator-() const
|
|
||||||
{
|
|
||||||
return Duration(-milliseconds_);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator*(int val) const
|
|
||||||
{
|
|
||||||
return Duration(milliseconds_ * val);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::Duration::operator*(unsigned long long val) const
|
|
||||||
{
|
|
||||||
return Duration(static_cast<long>(milliseconds_ * val));
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator*(float val) const
|
|
||||||
{
|
|
||||||
return Duration(static_cast<long>(milliseconds_ * val));
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator*(double val) const
|
|
||||||
{
|
|
||||||
return Duration(static_cast<long>(milliseconds_ * val));
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator*(long double val) const
|
|
||||||
{
|
|
||||||
return Duration(static_cast<long>(milliseconds_ * val));
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator/(int val) const
|
|
||||||
{
|
|
||||||
return Duration(milliseconds_ / val);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator/(float val) const
|
|
||||||
{
|
|
||||||
return Duration(static_cast<long>(milliseconds_ / val));
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration Duration::operator/(double val) const
|
|
||||||
{
|
|
||||||
return Duration(static_cast<long>(milliseconds_ / val));
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator+=(const Duration &other)
|
|
||||||
{
|
|
||||||
milliseconds_ += other.milliseconds_;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator-=(const Duration &other)
|
|
||||||
{
|
|
||||||
milliseconds_ -= other.milliseconds_;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator*=(int val)
|
|
||||||
{
|
|
||||||
milliseconds_ *= val;
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator/=(int val)
|
|
||||||
{
|
|
||||||
milliseconds_ = static_cast<long>(milliseconds_ / val);
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator*=(float val)
|
|
||||||
{
|
|
||||||
milliseconds_ = static_cast<long>(milliseconds_ * val);
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator/=(float val)
|
|
||||||
{
|
|
||||||
milliseconds_ = static_cast<long>(milliseconds_ / val);
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator*=(double val)
|
|
||||||
{
|
|
||||||
milliseconds_ = static_cast<long>(milliseconds_ * val);
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration & Duration::operator/=(double val)
|
|
||||||
{
|
|
||||||
milliseconds_ = static_cast<long>(milliseconds_ / val);
|
|
||||||
return (*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator*(int val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator/(int val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur / val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator*(float val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator/(float val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur / val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator*(double val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator/(double val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur / val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Duration kiwano::time::operator*(long double val, const Duration & dur)
|
|
||||||
{
|
|
||||||
return dur * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
Duration Duration::Parse(const String& str)
|
|
||||||
{
|
|
||||||
bool negative = false;
|
|
||||||
size_t len = str.length();
|
|
||||||
size_t pos = 0;
|
|
||||||
Duration ret;
|
|
||||||
|
|
||||||
if (!std::regex_match(str.c_str(), duration_regex))
|
|
||||||
{
|
|
||||||
KGE_ERROR_LOG(L"Duration::Parse failed, invalid duration");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str.empty() || str == L"0") { return ret; }
|
|
||||||
|
|
||||||
// ·ûºÅλ
|
|
||||||
if (str[0] == L'-' || str[0] == L'+')
|
|
||||||
{
|
|
||||||
negative = (str[0] == L'-');
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (pos < len)
|
|
||||||
{
|
|
||||||
// ÊýÖµ
|
|
||||||
size_t i = pos;
|
|
||||||
for (; i < len; ++i)
|
|
||||||
{
|
|
||||||
wchar_t ch = str[i];
|
|
||||||
if (!(ch == L'.' || L'0' <= ch && ch <= L'9'))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String num_str = str.substr(pos, i - pos);
|
|
||||||
pos = i;
|
|
||||||
|
|
||||||
KGE_ASSERT(!(num_str.empty() || num_str == L".") && "Duration::Parse failed, invalid duration");
|
|
||||||
|
|
||||||
// µ¥Î»
|
|
||||||
for (; i < len; ++i)
|
|
||||||
{
|
|
||||||
wchar_t ch = str[i];
|
|
||||||
if (ch == L'.' || L'0' <= ch && ch <= L'9')
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String unit_str = str.substr(pos, i - pos);
|
|
||||||
pos = i;
|
|
||||||
|
|
||||||
KGE_ASSERT(unit_map.find(unit_str) != unit_map.end() && "Duration::Parse failed, invalid duration");
|
|
||||||
|
|
||||||
double num = std::wcstod(num_str.c_str(), nullptr);
|
|
||||||
Duration unit = unit_map.at(unit_str);
|
|
||||||
ret += unit * num;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
{
|
|
||||||
ret = -ret;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,247 +0,0 @@
|
||||||
// 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 <ostream>
|
|
||||||
#include <istream>
|
|
||||||
|
|
||||||
#include <kiwano/macros.h>
|
|
||||||
#include <kiwano/core/core.h>
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
namespace time
|
|
||||||
{
|
|
||||||
// 时间段
|
|
||||||
//
|
|
||||||
// 时间段表示法:
|
|
||||||
// 5 秒: time::Sec * 5
|
|
||||||
// 1.5 小时: time::Hour * 1.5
|
|
||||||
// 3 小时 45 分 15 秒: time::Hour * 3 + time::Min * 45 + time::Sec * 15
|
|
||||||
// 在 VS2015 及更高版本可以使用 time literals:
|
|
||||||
// 5 秒: 5_s
|
|
||||||
// 1.5 小时: 1.5_h
|
|
||||||
// 3 小时 45 分 15 秒: 3_h + 45_m + 15_s
|
|
||||||
//
|
|
||||||
struct KGE_API Duration
|
|
||||||
{
|
|
||||||
Duration();
|
|
||||||
|
|
||||||
Duration(
|
|
||||||
long milliseconds
|
|
||||||
);
|
|
||||||
|
|
||||||
// 转化为毫秒
|
|
||||||
inline long Milliseconds() const { return milliseconds_; }
|
|
||||||
|
|
||||||
// 转化为秒
|
|
||||||
float Seconds() const;
|
|
||||||
|
|
||||||
// 转化为分钟
|
|
||||||
float Minutes() const;
|
|
||||||
|
|
||||||
// 转化为小时
|
|
||||||
float Hours() const;
|
|
||||||
|
|
||||||
// 时长是否是零
|
|
||||||
inline bool IsZero() const { return milliseconds_ == 0LL; }
|
|
||||||
|
|
||||||
inline void SetMilliseconds(long ms) { milliseconds_ = ms; }
|
|
||||||
|
|
||||||
inline void SetSeconds(float seconds) { milliseconds_ = static_cast<long>(seconds * 1000.f); }
|
|
||||||
|
|
||||||
inline void SetMinutes(float minutes) { milliseconds_ = static_cast<long>(minutes * 60 * 1000.f); }
|
|
||||||
|
|
||||||
inline void SetHours(float hours) { milliseconds_ = static_cast<long>(hours * 60 * 60 * 1000.f); }
|
|
||||||
|
|
||||||
// 转为字符串
|
|
||||||
String ToString() const;
|
|
||||||
|
|
||||||
inline operator bool() const { return !IsZero(); }
|
|
||||||
|
|
||||||
bool operator== (const Duration &) const;
|
|
||||||
bool operator!= (const Duration &) const;
|
|
||||||
bool operator> (const Duration &) const;
|
|
||||||
bool operator>= (const Duration &) const;
|
|
||||||
bool operator< (const Duration &) const;
|
|
||||||
bool operator<= (const Duration &) const;
|
|
||||||
|
|
||||||
float operator / (const Duration &) const;
|
|
||||||
|
|
||||||
const Duration operator + (const Duration &) const;
|
|
||||||
const Duration operator - (const Duration &) const;
|
|
||||||
const Duration operator - () const;
|
|
||||||
const Duration operator * (int) const;
|
|
||||||
const Duration operator * (unsigned long long) const;
|
|
||||||
const Duration operator * (float) const;
|
|
||||||
const Duration operator * (double) const;
|
|
||||||
const Duration operator * (long double) const;
|
|
||||||
const Duration operator / (int) const;
|
|
||||||
const Duration operator / (float) const;
|
|
||||||
const Duration operator / (double) const;
|
|
||||||
|
|
||||||
Duration& operator += (const Duration &);
|
|
||||||
Duration& operator -= (const Duration &);
|
|
||||||
Duration& operator *= (int);
|
|
||||||
Duration& operator *= (float);
|
|
||||||
Duration& operator *= (double);
|
|
||||||
Duration& operator /= (int);
|
|
||||||
Duration& operator /= (float);
|
|
||||||
Duration& operator /= (double);
|
|
||||||
|
|
||||||
friend const Duration operator* (int, const Duration &);
|
|
||||||
friend const Duration operator* (float, const Duration &);
|
|
||||||
friend const Duration operator* (double, const Duration &);
|
|
||||||
friend const Duration operator* (long double, const Duration &);
|
|
||||||
friend const Duration operator/ (int, const Duration &);
|
|
||||||
friend const Duration operator/ (float, const Duration &);
|
|
||||||
friend const Duration operator/ (double, const Duration &);
|
|
||||||
|
|
||||||
public:
|
|
||||||
// 时间段格式化
|
|
||||||
//
|
|
||||||
// 时间段字符串允许是有符号的浮点数, 并且带有时间单位后缀
|
|
||||||
// 例如: "300ms", "-1.5h", "2h45m"
|
|
||||||
// 允许的时间单位有 "ms", "s", "m", "h"
|
|
||||||
static Duration Parse(const String& parse_str);
|
|
||||||
|
|
||||||
template <typename _Char>
|
|
||||||
friend inline std::basic_ostream<_Char>& operator<<(std::basic_ostream<_Char>& out, const Duration& dur)
|
|
||||||
{
|
|
||||||
return out << dur.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename _Char>
|
|
||||||
friend inline std::basic_istream<_Char>& operator>>(std::basic_istream<_Char>& in, Duration& dur)
|
|
||||||
{
|
|
||||||
String str;
|
|
||||||
if (in >> str)
|
|
||||||
{
|
|
||||||
dur = Duration::Parse(str);
|
|
||||||
}
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
long milliseconds_;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* 预定义的时间段 */
|
|
||||||
KGE_API extern const Duration Ms; // 毫秒
|
|
||||||
KGE_API extern const Duration Sec; // 秒
|
|
||||||
KGE_API extern const Duration Min; // 分钟
|
|
||||||
KGE_API extern const Duration Hour; // 小时
|
|
||||||
|
|
||||||
|
|
||||||
// 时间
|
|
||||||
//
|
|
||||||
// 获取当前时间: Time now = Time::Now();
|
|
||||||
// 两时间相减, 得到一个 Duration 对象, 例如:
|
|
||||||
// Time t1, t2;
|
|
||||||
// int ms = (t2 - t1).Milliseconds(); // 获取两时间相差的毫秒数
|
|
||||||
//
|
|
||||||
struct KGE_API Time
|
|
||||||
{
|
|
||||||
Time();
|
|
||||||
|
|
||||||
Time(long);
|
|
||||||
|
|
||||||
// 是否是零时
|
|
||||||
inline bool IsZero() const { return dur_ == 0; }
|
|
||||||
|
|
||||||
const Time operator + (const Duration &) const;
|
|
||||||
const Time operator - (const Duration &) const;
|
|
||||||
|
|
||||||
Time& operator += (const Duration &);
|
|
||||||
Time& operator -= (const Duration &);
|
|
||||||
|
|
||||||
const Duration operator - (const Time &) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// 获取当前时间
|
|
||||||
// 由于该时间点基于系统启动时间开始计算, 所以无法格式化该时间,
|
|
||||||
// 也无法获得该时间的 Unix 时间戳
|
|
||||||
static Time Now() noexcept;
|
|
||||||
|
|
||||||
private:
|
|
||||||
long dur_;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
using namespace time;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if KGE_VS_VER > KGE_VS_2013
|
|
||||||
|
|
||||||
namespace kiwano
|
|
||||||
{
|
|
||||||
inline namespace literals
|
|
||||||
{
|
|
||||||
inline const kiwano::time::Duration operator "" _ms(long double val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Ms * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _s(long double val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Sec * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _m(long double val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Min * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _h(long double val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Hour * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _ms(unsigned long long val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Ms * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _s(unsigned long long val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Sec * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _m(unsigned long long val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Min * val;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const kiwano::time::Duration operator "" _h(unsigned long long val)
|
|
||||||
{
|
|
||||||
return kiwano::time::Hour * val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace time
|
|
||||||
{
|
|
||||||
using namespace kiwano::literals;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
class bad_any_cast : public std::exception
|
class bad_any_cast : public std::exception
|
||||||
|
|
@ -519,13 +519,13 @@ _Ty any_cast(any&& a)
|
||||||
return static_cast<_Ty>(std::move(*ptr));
|
return static_cast<_Ty>(std::move(*ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
|
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
inline void swap(kiwano::core::any& lhs, kiwano::core::any& rhs) noexcept
|
inline void swap(kiwano::common::any& lhs, kiwano::common::any& rhs) noexcept
|
||||||
{
|
{
|
||||||
lhs.swap(rhs);
|
lhs.swap(rhs);
|
||||||
}
|
}
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -1602,14 +1602,14 @@ namespace __json_detail
|
||||||
|
|
||||||
if ((std::isdigit(current) && current != '0') || (current == '-') || (current == '+'))
|
if ((std::isdigit(current) && current != '0') || (current == '-') || (current == '+'))
|
||||||
{
|
{
|
||||||
float_type base = 10;
|
float_type core = 10;
|
||||||
if (current == '+')
|
if (current == '+')
|
||||||
{
|
{
|
||||||
read_next();
|
read_next();
|
||||||
}
|
}
|
||||||
else if (current == '-')
|
else if (current == '-')
|
||||||
{
|
{
|
||||||
base = static_cast<float_type>(0.1);
|
core = static_cast<float_type>(0.1);
|
||||||
read_next();
|
read_next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1620,9 +1620,9 @@ namespace __json_detail
|
||||||
}
|
}
|
||||||
|
|
||||||
float_type power = 1;
|
float_type power = 1;
|
||||||
for (; exponent; exponent >>= 1, base *= base)
|
for (; exponent; exponent >>= 1, core *= core)
|
||||||
if (exponent & 1)
|
if (exponent & 1)
|
||||||
power *= base;
|
power *= core;
|
||||||
|
|
||||||
number_value *= power;
|
number_value *= power;
|
||||||
return token_type::value_float;
|
return token_type::value_float;
|
||||||
|
|
@ -2728,7 +2728,7 @@ private:
|
||||||
__json_detail::json_value<basic_json> value_;
|
__json_detail::json_value<basic_json> value_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
|
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
||||||
|
|
@ -28,24 +28,24 @@
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include <kiwano/core/vector.hpp>
|
#include <kiwano/common/vector.hpp>
|
||||||
#include <kiwano/core/string.hpp>
|
#include <kiwano/common/string.hpp>
|
||||||
#include <kiwano/core/any.hpp>
|
#include <kiwano/common/any.hpp>
|
||||||
#include <kiwano/core/intrusive_list.hpp>
|
#include <kiwano/common/intrusive_list.hpp>
|
||||||
#include <kiwano/core/intrusive_ptr.hpp>
|
#include <kiwano/common/intrusive_ptr.hpp>
|
||||||
#include <kiwano/core/noncopyable.hpp>
|
#include <kiwano/common/noncopyable.hpp>
|
||||||
#include <kiwano/core/singleton.hpp>
|
#include <kiwano/common/singleton.hpp>
|
||||||
#include <kiwano/core/function.hpp>
|
#include <kiwano/common/function.hpp>
|
||||||
#include <kiwano/core/basic_json.hpp>
|
#include <kiwano/common/basic_json.hpp>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
using String = kiwano::core::wstring;
|
using String = kiwano::common::wstring;
|
||||||
|
|
||||||
using StringStream = std::wstringstream;
|
using StringStream = std::wstringstream;
|
||||||
|
|
||||||
template <typename _Ty, typename... _Args>
|
template <typename _Ty, typename... _Args>
|
||||||
using Vector = kiwano::core::vector<_Ty, _Args...>;
|
using Vector = kiwano::common::vector<_Ty, _Args...>;
|
||||||
|
|
||||||
template <typename _Ty, typename... _Args>
|
template <typename _Ty, typename... _Args>
|
||||||
using List = std::list<_Ty, _Args...>;
|
using List = std::list<_Ty, _Args...>;
|
||||||
|
|
@ -72,21 +72,21 @@ namespace kiwano
|
||||||
using UnorderedMap = std::unordered_map<_Kty, _Ty, _Args...>;
|
using UnorderedMap = std::unordered_map<_Kty, _Ty, _Args...>;
|
||||||
|
|
||||||
template <typename _FuncTy>
|
template <typename _FuncTy>
|
||||||
using Function = kiwano::core::function<_FuncTy>;
|
using Function = kiwano::common::function<_FuncTy>;
|
||||||
|
|
||||||
using Any = kiwano::core::any;
|
using Any = kiwano::common::any;
|
||||||
|
|
||||||
using Json = kiwano::core::basic_json<kiwano::Map, kiwano::Vector, kiwano::String,
|
using Json = kiwano::common::basic_json<kiwano::Map, kiwano::Vector, kiwano::String,
|
||||||
int, double, bool, std::allocator>;
|
int, double, bool, std::allocator>;
|
||||||
|
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
using Singleton = core::singleton<_Ty>;
|
using Singleton = common::singleton<_Ty>;
|
||||||
|
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
using IntrusiveList = core::intrusive_list<_Ty>;
|
using IntrusiveList = common::intrusive_list<_Ty>;
|
||||||
|
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
using IntrusiveListItem = core::intrusive_list_item<_Ty>;
|
using IntrusiveListItem = common::intrusive_list_item<_Ty>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// function is a light weight ::std::function<>-like class
|
// function is a light weight ::std::function<>-like class
|
||||||
|
|
@ -321,7 +321,7 @@ private:
|
||||||
__function_detail::callable<_Ret, _Args...>* callable_;
|
__function_detail::callable<_Ret, _Args...>* callable_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
|
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
||||||
|
|
@ -335,9 +335,9 @@ namespace kiwano
|
||||||
typename _Ret,
|
typename _Ret,
|
||||||
typename... _Args
|
typename... _Args
|
||||||
>
|
>
|
||||||
inline core::function<_Ret(_Args...)> Closure(_Uty* ptr, _Ret(_Ty::* func)(_Args...))
|
inline common::function<_Ret(_Args...)> Closure(_Uty* ptr, _Ret(_Ty::* func)(_Args...))
|
||||||
{
|
{
|
||||||
return core::function<_Ret(_Args...)>(ptr, func);
|
return common::function<_Ret(_Args...)>(ptr, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename _Ty,
|
template<typename _Ty,
|
||||||
|
|
@ -348,8 +348,8 @@ namespace kiwano
|
||||||
typename _Ret,
|
typename _Ret,
|
||||||
typename... _Args
|
typename... _Args
|
||||||
>
|
>
|
||||||
inline core::function<_Ret(_Args...)> Closure(_Uty* ptr, _Ret(_Ty::* func)(_Args...) const)
|
inline common::function<_Ret(_Args...)> Closure(_Uty* ptr, _Ret(_Ty::* func)(_Args...) const)
|
||||||
{
|
{
|
||||||
return core::function<_Ret(_Args...)>(ptr, func);
|
return common::function<_Ret(_Args...)>(ptr, func);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
|
|
@ -261,7 +261,7 @@ private:
|
||||||
// disable warning 4996
|
// disable warning 4996
|
||||||
using _Unchecked_type = _Ty;
|
using _Unchecked_type = _Ty;
|
||||||
|
|
||||||
inline iterator_impl(value_type base = nullptr, bool is_end = false) : base_(base), is_end_(is_end) {}
|
inline iterator_impl(value_type core = nullptr, bool is_end = false) : base_(core), is_end_(is_end) {}
|
||||||
|
|
||||||
inline _Ty operator*() const { KGE_ASSERT(base_); return static_cast<_Ty>(const_cast<reference>(base_)); }
|
inline _Ty operator*() const { KGE_ASSERT(base_); return static_cast<_Ty>(const_cast<reference>(base_)); }
|
||||||
inline iterator_impl& operator++() { KGE_ASSERT(base_ && !is_end_); value_type next = base_->next_item(); if (next) base_ = next; else is_end_ = true; return (*this);}
|
inline iterator_impl& operator++() { KGE_ASSERT(base_ && !is_end_); value_type next = base_->next_item(); if (next) base_ = next; else is_end_ = true; return (*this);}
|
||||||
|
|
@ -307,7 +307,7 @@ private:
|
||||||
value_type last_;
|
value_type last_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
|
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
template <typename _Ty, typename _ManagerTy>
|
template <typename _Ty, typename _ManagerTy>
|
||||||
|
|
@ -141,6 +141,6 @@ inline void swap(intrusive_ptr<_Ty, manager_type>& lhs, intrusive_ptr<_Ty, manag
|
||||||
lhs.swap(rhs);
|
lhs.swap(rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
|
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
class noncopyable
|
class noncopyable
|
||||||
|
|
@ -36,5 +36,5 @@ private:
|
||||||
noncopyable& operator=(const noncopyable&) = delete;
|
noncopyable& operator=(const noncopyable&) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
@ -27,13 +27,13 @@
|
||||||
|
|
||||||
#ifndef KGE_DECLARE_SINGLETON
|
#ifndef KGE_DECLARE_SINGLETON
|
||||||
#define KGE_DECLARE_SINGLETON( CLASS ) \
|
#define KGE_DECLARE_SINGLETON( CLASS ) \
|
||||||
friend ::kiwano::core::singleton< CLASS >; \
|
friend ::kiwano::common::singleton< CLASS >; \
|
||||||
friend typename std::unique_ptr< CLASS >::deleter_type
|
friend typename std::unique_ptr< CLASS >::deleter_type
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
|
|
@ -81,5 +81,5 @@ std::once_flag singleton<_Ty>::once_;
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
std::unique_ptr<_Ty> singleton<_Ty>::instance_;
|
std::unique_ptr<_Ty> singleton<_Ty>::instance_;
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -56,10 +56,10 @@ private:
|
||||||
// disable warning 4996
|
// disable warning 4996
|
||||||
using _Unchecked_type = _Ty;
|
using _Unchecked_type = _Ty;
|
||||||
|
|
||||||
inline iterator_impl(pointer base = nullptr) : base_(base) {}
|
inline iterator_impl(pointer core = nullptr) : base_(core) {}
|
||||||
|
|
||||||
inline reference operator*() const { return *base_; }
|
inline reference operator*() const { return *base_; }
|
||||||
inline pointer base() const { return base_; }
|
inline pointer core() const { return base_; }
|
||||||
|
|
||||||
inline iterator_impl& operator++() { ++base_; return (*this); }
|
inline iterator_impl& operator++() { ++base_; return (*this); }
|
||||||
inline iterator_impl operator++(int) { iterator_impl old = (*this); ++(*this); return old; }
|
inline iterator_impl operator++(int) { iterator_impl old = (*this); ++(*this); return old; }
|
||||||
|
|
@ -176,8 +176,8 @@ public:
|
||||||
inline basic_string& assign(_Iter first, _Iter last) { assign_iter(first, last); return(*this); }
|
inline basic_string& assign(_Iter first, _Iter last) { assign_iter(first, last); return(*this); }
|
||||||
|
|
||||||
basic_string& erase(size_type offset = 0, size_type count = npos);
|
basic_string& erase(size_type offset = 0, size_type count = npos);
|
||||||
iterator erase(const const_iterator where) { size_type off = where - cbegin(); erase(off, 1); return begin().base() + off; }
|
iterator erase(const const_iterator where) { size_type off = where - cbegin(); erase(off, 1); return begin().core() + off; }
|
||||||
iterator erase(const const_iterator first, const const_iterator last) { size_type off = first - cbegin(); erase(first - cbegin(), last - first); return begin().base() + off; }
|
iterator erase(const const_iterator first, const const_iterator last) { size_type off = first - cbegin(); erase(first - cbegin(), last - first); return begin().core() + off; }
|
||||||
|
|
||||||
basic_string substr(size_type pos = 0, size_type count = npos) const { return basic_string(*this, pos, count); }
|
basic_string substr(size_type pos = 0, size_type count = npos) const { return basic_string(*this, pos, count); }
|
||||||
|
|
||||||
|
|
@ -186,7 +186,7 @@ public:
|
||||||
basic_string& insert(size_type index, const basic_string& str, size_type off, size_type count = npos);
|
basic_string& insert(size_type index, const basic_string& str, size_type off, size_type count = npos);
|
||||||
inline basic_string& insert(size_type index, const char_type* s) { return insert(index, s, traits_type::length(s)); }
|
inline basic_string& insert(size_type index, const char_type* s) { return insert(index, s, traits_type::length(s)); }
|
||||||
inline basic_string& insert(size_type index, const basic_string& str) { return insert(index, str, 0, str.size()); }
|
inline basic_string& insert(size_type index, const basic_string& str) { return insert(index, str, 0, str.size()); }
|
||||||
inline iterator insert(const_iterator pos, size_type count, char_type ch) { size_type off = pos - cbegin(); insert(off, count, ch); return begin().base() + off; }
|
inline iterator insert(const_iterator pos, size_type count, char_type ch) { size_type off = pos - cbegin(); insert(off, count, ch); return begin().core() + off; }
|
||||||
inline iterator insert(const_iterator pos, char_type ch) { return insert(pos, 1, ch); }
|
inline iterator insert(const_iterator pos, char_type ch) { return insert(pos, 1, ch); }
|
||||||
|
|
||||||
inline void push_back(const char_type ch) { append(1, ch); }
|
inline void push_back(const char_type ch) { append(1, ch); }
|
||||||
|
|
@ -425,8 +425,8 @@ basic_string<wchar_t> format_string(const wchar_t* const fmt, _Args&& ... args);
|
||||||
//
|
//
|
||||||
// string && wstring
|
// string && wstring
|
||||||
//
|
//
|
||||||
using string = ::kiwano::core::basic_string<char>;
|
using string = ::kiwano::common::basic_string<char>;
|
||||||
using wstring = ::kiwano::core::basic_string<wchar_t>;
|
using wstring = ::kiwano::common::basic_string<wchar_t>;
|
||||||
|
|
||||||
|
|
||||||
inline string to_string(int val) { return to_basic_string<char>(val); }
|
inline string to_string(int val) { return to_basic_string<char>(val); }
|
||||||
|
|
@ -450,7 +450,7 @@ inline wstring to_wstring(double val) { return to_basic_string<wchar_t>(val);
|
||||||
inline wstring to_wstring(long double val) { return to_basic_string<wchar_t>(val); }
|
inline wstring to_wstring(long double val) { return to_basic_string<wchar_t>(val); }
|
||||||
|
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
@ -515,7 +515,7 @@ namespace __string_details
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
|
|
@ -670,7 +670,7 @@ namespace core
|
||||||
}
|
}
|
||||||
size_ = count;
|
size_ = count;
|
||||||
|
|
||||||
traits_type::move(str_, rhs.begin().base() + pos, size_);
|
traits_type::move(str_, rhs.begin().core() + pos, size_);
|
||||||
traits_type::assign(str_[size_], value_type());
|
traits_type::assign(str_[size_], value_type());
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
@ -693,8 +693,8 @@ namespace core
|
||||||
}
|
}
|
||||||
|
|
||||||
size_type new_size = size_ - count;
|
size_type new_size = size_ - count;
|
||||||
iterator erase_at = begin().base() + offset;
|
iterator erase_at = begin().core() + offset;
|
||||||
traits_type::move(erase_at.base(), erase_at.base() + count, new_size - offset + 1);
|
traits_type::move(erase_at.core(), erase_at.core() + count, new_size - offset + 1);
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -807,7 +807,7 @@ namespace core
|
||||||
|
|
||||||
char_type* const insert_at = new_ptr + index;
|
char_type* const insert_at = new_ptr + index;
|
||||||
traits_type::move(new_ptr, old_ptr, index); // (0) - (index)
|
traits_type::move(new_ptr, old_ptr, index); // (0) - (index)
|
||||||
traits_type::move(insert_at, str.begin().base() + off, count); // (index) - (index + count)
|
traits_type::move(insert_at, str.begin().core() + off, count); // (index) - (index + count)
|
||||||
traits_type::move(insert_at + count, old_ptr + index, suffix_size); // (index + count) - (old_size - index)
|
traits_type::move(insert_at + count, old_ptr + index, suffix_size); // (index + count) - (old_size - index)
|
||||||
|
|
||||||
deallocate(str_, old_capacity + 1);
|
deallocate(str_, old_capacity + 1);
|
||||||
|
|
@ -817,7 +817,7 @@ namespace core
|
||||||
{
|
{
|
||||||
char_type* const insert_at = old_ptr + index;
|
char_type* const insert_at = old_ptr + index;
|
||||||
traits_type::move(insert_at + count, old_ptr + index, suffix_size);
|
traits_type::move(insert_at + count, old_ptr + index, suffix_size);
|
||||||
traits_type::move(insert_at, str.begin().base() + off, count);
|
traits_type::move(insert_at, str.begin().core() + off, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (*this);
|
return (*this);
|
||||||
|
|
@ -880,7 +880,7 @@ namespace core
|
||||||
char_type* new_str = allocate(new_cap);
|
char_type* new_str = allocate(new_cap);
|
||||||
|
|
||||||
traits_type::move(new_str, str_, size_);
|
traits_type::move(new_str, str_, size_);
|
||||||
traits_type::move(new_str + size_, other.begin().base() + pos, count);
|
traits_type::move(new_str + size_, other.begin().core() + pos, count);
|
||||||
traits_type::assign(new_str[new_size], value_type());
|
traits_type::assign(new_str[new_size], value_type());
|
||||||
|
|
||||||
destroy();
|
destroy();
|
||||||
|
|
@ -948,7 +948,7 @@ namespace core
|
||||||
if (offset >= size_)
|
if (offset >= size_)
|
||||||
return basic_string<_CharTy>::npos;
|
return basic_string<_CharTy>::npos;
|
||||||
|
|
||||||
const_iterator citer = traits_type::find(cbegin().base() + offset, size_, ch);
|
const_iterator citer = traits_type::find(cbegin().core() + offset, size_, ch);
|
||||||
return citer ? (citer - cbegin()) : basic_string<_CharTy>::npos;
|
return citer ? (citer - cbegin()) : basic_string<_CharTy>::npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -966,7 +966,7 @@ namespace core
|
||||||
if (offset >= size_)
|
if (offset >= size_)
|
||||||
return basic_string<_CharTy>::npos;
|
return basic_string<_CharTy>::npos;
|
||||||
|
|
||||||
const_iterator citer = std::find_first_of(cbegin().base() + offset, cend().base(), str, str + count);
|
const_iterator citer = std::find_first_of(cbegin().core() + offset, cend().core(), str, str + count);
|
||||||
return (citer != cend()) ? (citer - cbegin()) : basic_string<_CharTy>::npos;
|
return (citer != cend()) ? (citer - cbegin()) : basic_string<_CharTy>::npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -977,7 +977,7 @@ namespace core
|
||||||
return npos;
|
return npos;
|
||||||
|
|
||||||
const_reverse_iterator criter = std::find(crbegin(), crend(), ch);
|
const_reverse_iterator criter = std::find(crbegin(), crend(), ch);
|
||||||
return (criter != crend()) ? (criter.base() - cbegin()) : basic_string<_CharTy>::npos;
|
return (criter != crend()) ? (criter.core() - cbegin()) : basic_string<_CharTy>::npos;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
|
|
@ -1090,7 +1090,7 @@ namespace core
|
||||||
check_offset(pos);
|
check_offset(pos);
|
||||||
|
|
||||||
count = clamp_suffix_size(pos, count);
|
count = clamp_suffix_size(pos, count);
|
||||||
traits_type::move(cstr, cbegin().base() + pos, count);
|
traits_type::move(cstr, cbegin().core() + pos, count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1159,31 +1159,31 @@ namespace core
|
||||||
//
|
//
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(int val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(int val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(unsigned int val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(unsigned int val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(long val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(long val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(unsigned long val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(unsigned long val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(long long val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(long long val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(unsigned long long val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(unsigned long long val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(float val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(float val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(double val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(double val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
template <typename _CharTy>
|
template <typename _CharTy>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::parse(long double val) { return ::kiwano::core::to_basic_string<char_type>(val); }
|
inline basic_string<_CharTy> basic_string<_CharTy>::parse(long double val) { return ::kiwano::common::to_basic_string<char_type>(val); }
|
||||||
|
|
||||||
//
|
//
|
||||||
// details of basic_string::format
|
// details of basic_string::format
|
||||||
|
|
@ -1193,7 +1193,7 @@ namespace core
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline basic_string<_CharTy> basic_string<_CharTy>::format(const char_type* fmt, _Args&& ... args)
|
inline basic_string<_CharTy> basic_string<_CharTy>::format(const char_type* fmt, _Args&& ... args)
|
||||||
{
|
{
|
||||||
return ::kiwano::core::format_string(fmt, std::forward<_Args>(args)...);
|
return ::kiwano::common::format_string(fmt, std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -1527,8 +1527,8 @@ class string_convert
|
||||||
enum : size_t { BUFFER_INCREASE = 8, BUFFER_MAX = 16 };
|
enum : size_t { BUFFER_INCREASE = 8, BUFFER_MAX = 16 };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using byte_string = ::kiwano::core::basic_string<char>;
|
using byte_string = ::kiwano::common::basic_string<char>;
|
||||||
using wide_string = ::kiwano::core::basic_string<_Elem>;
|
using wide_string = ::kiwano::common::basic_string<_Elem>;
|
||||||
using codecvt_type = _Codecvt;
|
using codecvt_type = _Codecvt;
|
||||||
using state_type = typename codecvt_type::state_type;
|
using state_type = typename codecvt_type::state_type;
|
||||||
using int_type = typename wide_string::traits_type::int_type;
|
using int_type = typename wide_string::traits_type::int_type;
|
||||||
|
|
@ -1702,25 +1702,25 @@ class chs_codecvt
|
||||||
public:
|
public:
|
||||||
chs_codecvt() : codecvt_byname("chs") {}
|
chs_codecvt() : codecvt_byname("chs") {}
|
||||||
|
|
||||||
static inline ::kiwano::core::wstring string_to_wide(::kiwano::core::string const& str)
|
static inline ::kiwano::common::wstring string_to_wide(::kiwano::common::string const& str)
|
||||||
{
|
{
|
||||||
string_convert<chs_codecvt> conv;
|
string_convert<chs_codecvt> conv;
|
||||||
return conv.from_bytes(str);
|
return conv.from_bytes(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline ::kiwano::core::string wide_to_string(::kiwano::core::wstring const& str)
|
static inline ::kiwano::common::string wide_to_string(::kiwano::common::wstring const& str)
|
||||||
{
|
{
|
||||||
string_convert<chs_codecvt> conv;
|
string_convert<chs_codecvt> conv;
|
||||||
return conv.to_bytes(str);
|
return conv.to_bytes(str);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline ::kiwano::core::wstring string_to_wide(::kiwano::core::string const& str)
|
inline ::kiwano::common::wstring string_to_wide(::kiwano::common::string const& str)
|
||||||
{
|
{
|
||||||
return kiwano::chs_codecvt::string_to_wide(str);
|
return kiwano::chs_codecvt::string_to_wide(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ::kiwano::core::string wide_to_string(::kiwano::core::wstring const& str)
|
inline ::kiwano::common::string wide_to_string(::kiwano::common::wstring const& str)
|
||||||
{
|
{
|
||||||
return kiwano::chs_codecvt::wide_to_string(str);
|
return kiwano::chs_codecvt::wide_to_string(str);
|
||||||
}
|
}
|
||||||
|
|
@ -1730,18 +1730,18 @@ inline ::kiwano::core::string wide_to_string(::kiwano::core::wstring const& str)
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
template<>
|
template<>
|
||||||
struct hash<::kiwano::core::string>
|
struct hash<::kiwano::common::string>
|
||||||
{
|
{
|
||||||
inline size_t operator()(const ::kiwano::core::string& key) const
|
inline size_t operator()(const ::kiwano::common::string& key) const
|
||||||
{
|
{
|
||||||
return key.hash();
|
return key.hash();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct hash<::kiwano::core::wstring>
|
struct hash<::kiwano::common::wstring>
|
||||||
{
|
{
|
||||||
inline size_t operator()(const ::kiwano::core::wstring& key) const
|
inline size_t operator()(const ::kiwano::common::wstring& key) const
|
||||||
{
|
{
|
||||||
return key.hash();
|
return key.hash();
|
||||||
}
|
}
|
||||||
|
|
@ -1751,13 +1751,13 @@ namespace std
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
template<>
|
template<>
|
||||||
inline void swap<::kiwano::core::string>(::kiwano::core::string& lhs, ::kiwano::core::string& rhs) noexcept
|
inline void swap<::kiwano::common::string>(::kiwano::common::string& lhs, ::kiwano::common::string& rhs) noexcept
|
||||||
{
|
{
|
||||||
lhs.swap(rhs);
|
lhs.swap(rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
inline void swap<::kiwano::core::wstring>(::kiwano::core::wstring& lhs, ::kiwano::core::wstring& rhs) noexcept
|
inline void swap<::kiwano::common::wstring>(::kiwano::common::wstring& lhs, ::kiwano::common::wstring& rhs) noexcept
|
||||||
{
|
{
|
||||||
lhs.swap(rhs);
|
lhs.swap(rhs);
|
||||||
}
|
}
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
namespace core
|
namespace common
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -284,5 +284,5 @@ namespace __vector_details
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace core
|
} // namespace common
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
@ -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/base/AsyncTask.h>
|
#include <kiwano/core/AsyncTask.h>
|
||||||
#include <kiwano/platform/Application.h>
|
#include <kiwano/platform/Application.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -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/base/Component.h>
|
#include <kiwano/core/Component.h>
|
||||||
|
|
||||||
#define KGE_DEFINE_COMPONENT_FLAG(OFFSET) ( 0x01 << (OFFSET % 32) )
|
#define KGE_DEFINE_COMPONENT_FLAG(OFFSET) ( 0x01 << (OFFSET % 32) )
|
||||||
|
|
||||||
|
|
@ -20,11 +20,13 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/base/time.h>
|
#include <kiwano/core/time.h>
|
||||||
#include <kiwano/base/Event.hpp>
|
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
class RenderTarget;
|
||||||
|
class Event;
|
||||||
|
|
||||||
// 基础组件
|
// 基础组件
|
||||||
class KGE_API ComponentBase
|
class KGE_API ComponentBase
|
||||||
{
|
{
|
||||||
|
|
@ -42,8 +44,6 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class RenderTarget;
|
|
||||||
|
|
||||||
// 渲染支持组件
|
// 渲染支持组件
|
||||||
class KGE_API RenderComponent
|
class KGE_API RenderComponent
|
||||||
: public virtual ComponentBase
|
: public virtual ComponentBase
|
||||||
|
|
@ -85,7 +85,7 @@ namespace kiwano
|
||||||
: public virtual ComponentBase
|
: public virtual ComponentBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void HandleEvent(Event&) {}
|
virtual void HandleEvent(Event*) {}
|
||||||
|
|
||||||
virtual void HandleMessage(HWND, UINT32, WPARAM, LPARAM) {}
|
virtual void HandleMessage(HWND, UINT32, WPARAM, LPARAM) {}
|
||||||
|
|
||||||
|
|
@ -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/base/Director.h>
|
#include <kiwano/core/Director.h>
|
||||||
#include <kiwano/2d/Actor.h>
|
#include <kiwano/2d/Actor.h>
|
||||||
#include <kiwano/2d/Stage.h>
|
#include <kiwano/2d/Stage.h>
|
||||||
#include <kiwano/2d/Transition.h>
|
#include <kiwano/2d/Transition.h>
|
||||||
|
|
@ -180,7 +180,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Director::HandleEvent(Event& evt)
|
void Director::HandleEvent(Event* evt)
|
||||||
{
|
{
|
||||||
if (debug_actor_)
|
if (debug_actor_)
|
||||||
debug_actor_->Dispatch(evt);
|
debug_actor_->Dispatch(evt);
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/2d/include-forwards.h>
|
#include <kiwano/2d/include-forwards.h>
|
||||||
#include <kiwano/base/Component.h>
|
#include <kiwano/core/Component.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -72,7 +72,7 @@ namespace kiwano
|
||||||
|
|
||||||
void OnRender(RenderTarget* rt) override;
|
void OnRender(RenderTarget* rt) override;
|
||||||
|
|
||||||
void HandleEvent(Event& evt) override;
|
void HandleEvent(Event* evt) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Director();
|
Director();
|
||||||
|
|
@ -0,0 +1,134 @@
|
||||||
|
#include <kiwano/core/Event.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
EventType event::MouseMove = EventType(L"MouseMove");
|
||||||
|
EventType event::MouseDown = EventType(L"MouseBtnDown");
|
||||||
|
EventType event::MouseUp = EventType(L"MouseBtnUp");
|
||||||
|
EventType event::MouseWheel = EventType(L"MouseWheel");
|
||||||
|
EventType event::MouseHover = EventType(L"MouseHover");
|
||||||
|
EventType event::MouseOut = EventType(L"MouseOut");
|
||||||
|
EventType event::MouseClick = EventType(L"MouseClick");
|
||||||
|
|
||||||
|
EventType event::KeyDown = EventType(L"KeyDown");
|
||||||
|
EventType event::KeyUp = EventType(L"KeyUp");
|
||||||
|
EventType event::KeyChar = EventType(L"KeyChar");
|
||||||
|
|
||||||
|
EventType event::WindowMoved = EventType(L"WindowMoved");
|
||||||
|
EventType event::WindowResized = EventType(L"WindowResized");
|
||||||
|
EventType event::WindowFocusChanged = EventType(L"WindowFocusChanged");
|
||||||
|
EventType event::WindowTitleChanged = EventType(L"WindowTitleChanged");
|
||||||
|
EventType event::WindowClosed = EventType(L"WindowClosed");
|
||||||
|
|
||||||
|
|
||||||
|
Event::Event(EventType const& type)
|
||||||
|
: type(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Event::~Event()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseEvent::MouseEvent(EventType const& type)
|
||||||
|
: Event(type)
|
||||||
|
, pos()
|
||||||
|
, left_btn_down(false)
|
||||||
|
, right_btn_down(false)
|
||||||
|
, target(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseMoveEvent::MouseMoveEvent()
|
||||||
|
: MouseEvent(event::MouseMove)
|
||||||
|
, button(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseDownEvent::MouseDownEvent()
|
||||||
|
: MouseEvent(event::MouseDown)
|
||||||
|
, button(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseUpEvent::MouseUpEvent()
|
||||||
|
: MouseEvent(event::MouseUp)
|
||||||
|
, button(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseClickEvent::MouseClickEvent()
|
||||||
|
: MouseEvent(event::MouseClick)
|
||||||
|
, button(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseHoverEvent::MouseHoverEvent()
|
||||||
|
: MouseEvent(event::MouseHover)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseOutEvent::MouseOutEvent()
|
||||||
|
: MouseEvent(event::MouseOut)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseWheelEvent::MouseWheelEvent()
|
||||||
|
: MouseEvent(event::MouseWheel)
|
||||||
|
, wheel(0.f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyDownEvent::KeyDownEvent()
|
||||||
|
: Event(event::KeyDown)
|
||||||
|
, code(0)
|
||||||
|
, count(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyUpEvent::KeyUpEvent()
|
||||||
|
: Event(event::KeyUp)
|
||||||
|
, code(0)
|
||||||
|
, count(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyCharEvent::KeyCharEvent()
|
||||||
|
: Event(event::KeyChar)
|
||||||
|
, value()
|
||||||
|
, count(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowMovedEvent::WindowMovedEvent()
|
||||||
|
: Event(event::WindowMoved)
|
||||||
|
, x(0)
|
||||||
|
, y(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowResizedEvent::WindowResizedEvent()
|
||||||
|
: Event(event::WindowResized)
|
||||||
|
, width(0)
|
||||||
|
, height(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowFocusChangedEvent::WindowFocusChangedEvent()
|
||||||
|
: Event(event::WindowFocusChanged)
|
||||||
|
, focus(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowTitleChangedEvent::WindowTitleChangedEvent()
|
||||||
|
: Event(event::WindowTitleChanged)
|
||||||
|
, title()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowClosedEvent::WindowClosedEvent()
|
||||||
|
: Event(event::WindowClosed)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,272 @@
|
||||||
|
// 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/common/common.h>
|
||||||
|
#include <kiwano/math/math.h>
|
||||||
|
#include <kiwano/core/keys.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
class Actor;
|
||||||
|
|
||||||
|
// 事件类型
|
||||||
|
struct EventType
|
||||||
|
{
|
||||||
|
inline EventType() : hash(0), type()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline EventType(String const& type) : hash(0), type(type)
|
||||||
|
{
|
||||||
|
hash = type.hash();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool operator==(const EventType& rhs) const
|
||||||
|
{
|
||||||
|
return hash == rhs.hash && type == rhs.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t hash;
|
||||||
|
String type;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
namespace event
|
||||||
|
{
|
||||||
|
// 鼠标事件
|
||||||
|
extern EventType MouseMove; // 移动
|
||||||
|
extern EventType MouseDown; // 鼠标按下
|
||||||
|
extern EventType MouseUp; // 鼠标抬起
|
||||||
|
extern EventType MouseWheel; // 滚轮滚动
|
||||||
|
extern EventType MouseHover; // 鼠标移入
|
||||||
|
extern EventType MouseOut; // 鼠标移出
|
||||||
|
extern EventType MouseClick; // 鼠标点击
|
||||||
|
|
||||||
|
// 按键事件
|
||||||
|
extern EventType KeyDown; // 按键按下
|
||||||
|
extern EventType KeyUp; // 按键抬起
|
||||||
|
extern EventType KeyChar; // 输出字符
|
||||||
|
|
||||||
|
// 窗口消息
|
||||||
|
extern EventType WindowMoved; // 窗口移动
|
||||||
|
extern EventType WindowResized; // 窗口大小变化
|
||||||
|
extern EventType WindowFocusChanged; // 获得或失去焦点
|
||||||
|
extern EventType WindowTitleChanged; // 标题变化
|
||||||
|
extern EventType WindowClosed; // 窗口被关闭
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 事件
|
||||||
|
class KGE_API Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const EventType type;
|
||||||
|
|
||||||
|
Event(EventType const& type);
|
||||||
|
virtual ~Event();
|
||||||
|
|
||||||
|
template <
|
||||||
|
typename _Ty,
|
||||||
|
typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type
|
||||||
|
>
|
||||||
|
inline const _Ty* SafeCast() const
|
||||||
|
{
|
||||||
|
const _Ty* ptr = dynamic_cast<const _Ty*>(this);
|
||||||
|
if (ptr)
|
||||||
|
{
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <
|
||||||
|
typename _Ty,
|
||||||
|
typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type
|
||||||
|
>
|
||||||
|
inline _Ty* SafeCast()
|
||||||
|
{
|
||||||
|
return const_cast<_Ty*>(const_cast<const Event*>(this)->SafeCast<_Ty>());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标事件
|
||||||
|
class KGE_API MouseEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Point pos;
|
||||||
|
bool left_btn_down; // 左键是否按下
|
||||||
|
bool right_btn_down; // 右键是否按下
|
||||||
|
Actor* target;
|
||||||
|
|
||||||
|
MouseEvent(EventType const& type);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标移动事件
|
||||||
|
class KGE_API MouseMoveEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MouseButton::Value button;
|
||||||
|
|
||||||
|
MouseMoveEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标按键按下事件
|
||||||
|
class KGE_API MouseDownEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MouseButton::Value button;
|
||||||
|
|
||||||
|
MouseDownEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标按键抬起事件
|
||||||
|
class KGE_API MouseUpEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MouseButton::Value button;
|
||||||
|
|
||||||
|
MouseUpEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标点击事件
|
||||||
|
class KGE_API MouseClickEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MouseButton::Value button;
|
||||||
|
|
||||||
|
MouseClickEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标移入事件
|
||||||
|
class KGE_API MouseHoverEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MouseHoverEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标移出事件
|
||||||
|
class KGE_API MouseOutEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MouseOutEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 鼠标滚轮事件
|
||||||
|
class KGE_API MouseWheelEvent
|
||||||
|
: public MouseEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
float wheel;
|
||||||
|
|
||||||
|
MouseWheelEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 键盘按下事件
|
||||||
|
class KGE_API KeyDownEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KeyCode::Value code;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
KeyDownEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 键盘抬起事件
|
||||||
|
class KGE_API KeyUpEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KeyCode::Value code;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
KeyUpEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 键盘字符事件
|
||||||
|
class KGE_API KeyCharEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
char value;
|
||||||
|
int count;
|
||||||
|
|
||||||
|
KeyCharEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 窗口移动事件
|
||||||
|
class KGE_API WindowMovedEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
|
||||||
|
WindowMovedEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 窗口大小变化事件
|
||||||
|
class KGE_API WindowResizedEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
|
WindowResizedEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 窗口焦点变化事件
|
||||||
|
class KGE_API WindowFocusChangedEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool focus;
|
||||||
|
|
||||||
|
WindowFocusChangedEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 窗口标题更改事件
|
||||||
|
class KGE_API WindowTitleChangedEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
String title;
|
||||||
|
|
||||||
|
WindowTitleChangedEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 窗口关闭事件
|
||||||
|
class KGE_API WindowClosedEvent
|
||||||
|
: public Event
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WindowClosedEvent();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -18,12 +18,12 @@
|
||||||
// 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/base/EventDispatcher.h>
|
#include <kiwano/core/EventDispatcher.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
void EventDispatcher::Dispatch(Event& evt)
|
void EventDispatcher::Dispatch(Event* evt)
|
||||||
{
|
{
|
||||||
if (listeners_.empty())
|
if (listeners_.empty())
|
||||||
return;
|
return;
|
||||||
|
|
@ -33,7 +33,7 @@ namespace kiwano
|
||||||
{
|
{
|
||||||
next = listener->next_item();
|
next = listener->next_item();
|
||||||
|
|
||||||
if (listener->IsRunning() && listener->type_ == evt.type)
|
if (listener->IsRunning() && listener->type_ == evt->type)
|
||||||
{
|
{
|
||||||
listener->callback_(evt);
|
listener->callback_(evt);
|
||||||
}
|
}
|
||||||
|
|
@ -56,9 +56,15 @@ namespace kiwano
|
||||||
return listener;
|
return listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventListener* EventDispatcher::AddListener(EventType type, EventListener::Callback callback, String const& name)
|
EventListener* EventDispatcher::AddListener(String const& name, EventType type, EventListener::Callback callback)
|
||||||
{
|
{
|
||||||
EventListenerPtr listener = new EventListener(type, callback, name);
|
EventListenerPtr listener = new EventListener(name, type, callback);
|
||||||
|
return AddListener(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
EventListener* EventDispatcher::AddListener(EventType type, EventListener::Callback callback)
|
||||||
|
{
|
||||||
|
EventListenerPtr listener = new EventListener(type, callback);
|
||||||
return AddListener(listener);
|
return AddListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,7 +104,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventDispatcher::StartListeners(uint32_t type)
|
void EventDispatcher::StartListeners(const EventType& type)
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
||||||
{
|
{
|
||||||
|
|
@ -109,7 +115,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventDispatcher::StopListeners(uint32_t type)
|
void EventDispatcher::StopListeners(const EventType& type)
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
for (auto listener = listeners_.first_item(); listener; listener = listener->next_item())
|
||||||
{
|
{
|
||||||
|
|
@ -120,7 +126,7 @@ namespace kiwano
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventDispatcher::RemoveListeners(uint32_t type)
|
void EventDispatcher::RemoveListeners(const EventType& type)
|
||||||
{
|
{
|
||||||
EventListenerPtr next;
|
EventListenerPtr next;
|
||||||
for (auto listener = listeners_.first_item(); listener; listener = next)
|
for (auto listener = listeners_.first_item(); listener; listener = next)
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/EventListener.h>
|
#include <kiwano/core/EventListener.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -40,9 +40,15 @@ namespace kiwano
|
||||||
|
|
||||||
// 添加监听器
|
// 添加监听器
|
||||||
EventListener* AddListener(
|
EventListener* AddListener(
|
||||||
|
String const& name,
|
||||||
EventType type,
|
EventType type,
|
||||||
EventListener::Callback callback,
|
EventListener::Callback callback
|
||||||
String const& name = L""
|
);
|
||||||
|
|
||||||
|
// 添加监听器
|
||||||
|
EventListener* AddListener(
|
||||||
|
EventType type,
|
||||||
|
EventListener::Callback callback
|
||||||
);
|
);
|
||||||
|
|
||||||
// 启动监听器
|
// 启动监听器
|
||||||
|
|
@ -62,20 +68,20 @@ namespace kiwano
|
||||||
|
|
||||||
// 启动监听器
|
// 启动监听器
|
||||||
void StartListeners(
|
void StartListeners(
|
||||||
uint32_t type
|
const EventType& type
|
||||||
);
|
);
|
||||||
|
|
||||||
// 停止监听器
|
// 停止监听器
|
||||||
void StopListeners(
|
void StopListeners(
|
||||||
uint32_t type
|
const EventType& type
|
||||||
);
|
);
|
||||||
|
|
||||||
// 移除监听器
|
// 移除监听器
|
||||||
void RemoveListeners(
|
void RemoveListeners(
|
||||||
uint32_t type
|
const EventType& type
|
||||||
);
|
);
|
||||||
|
|
||||||
virtual void Dispatch(Event& evt);
|
virtual void Dispatch(Event* evt);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Listeners listeners_;
|
Listeners listeners_;
|
||||||
|
|
@ -19,14 +19,26 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/EventListener.h>
|
#include <kiwano/core/EventListener.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
EventListener::EventListener(EventType type, Callback const & callback, String const & name)
|
EventListener::EventListener()
|
||||||
|
: type_()
|
||||||
|
, callback_()
|
||||||
|
, running_(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
EventListener::EventListener(EventType type, Callback const& callback)
|
||||||
: type_(type)
|
: type_(type)
|
||||||
, callback_(callback)
|
, callback_(callback)
|
||||||
, running_(true)
|
, running_(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
EventListener::EventListener(String const& name, EventType type, Callback const& callback)
|
||||||
|
: EventListener(type, callback)
|
||||||
{
|
{
|
||||||
SetName(name);
|
SetName(name);
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
// 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/common/common.h>
|
||||||
|
#include <kiwano/core/SmartPtr.hpp>
|
||||||
|
#include <kiwano/core/ObjectBase.h>
|
||||||
|
#include <kiwano/core/Event.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
class EventDispatcher;
|
||||||
|
|
||||||
|
KGE_DECLARE_SMART_PTR(EventListener);
|
||||||
|
|
||||||
|
// ʼþ¼àÌýÆ÷
|
||||||
|
class KGE_API EventListener
|
||||||
|
: public ObjectBase
|
||||||
|
, protected IntrusiveListItem<EventListenerPtr>
|
||||||
|
{
|
||||||
|
friend class EventDispatcher;
|
||||||
|
friend IntrusiveList<EventListenerPtr>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
using Callback = Function<void(Event*)>;
|
||||||
|
|
||||||
|
EventListener();
|
||||||
|
|
||||||
|
EventListener(
|
||||||
|
EventType type,
|
||||||
|
Callback const& callback
|
||||||
|
);
|
||||||
|
|
||||||
|
EventListener(
|
||||||
|
String const& name,
|
||||||
|
EventType type,
|
||||||
|
Callback const& callback
|
||||||
|
);
|
||||||
|
|
||||||
|
virtual ~EventListener();
|
||||||
|
|
||||||
|
void Start();
|
||||||
|
|
||||||
|
void Stop();
|
||||||
|
|
||||||
|
bool IsRunning() const;
|
||||||
|
|
||||||
|
Callback GetCallback() const;
|
||||||
|
|
||||||
|
void SetCallback(Callback const& cb);
|
||||||
|
|
||||||
|
EventType const& GetEventType() const;
|
||||||
|
|
||||||
|
void SetEventType(EventType const& type);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool running_;
|
||||||
|
EventType type_;
|
||||||
|
Callback callback_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline void EventListener::Start()
|
||||||
|
{
|
||||||
|
running_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void EventListener::Stop()
|
||||||
|
{
|
||||||
|
running_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool EventListener::IsRunning() const
|
||||||
|
{
|
||||||
|
return running_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline EventListener::Callback EventListener::GetCallback() const
|
||||||
|
{
|
||||||
|
return callback_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void EventListener::SetCallback(Callback const& cb)
|
||||||
|
{
|
||||||
|
callback_ = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline EventType const& EventListener::GetEventType() const
|
||||||
|
{
|
||||||
|
return type_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void EventListener::SetEventType(EventType const& type)
|
||||||
|
{
|
||||||
|
type_ = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
// 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/core/Library.h>
|
||||||
|
|
||||||
|
namespace kiwano
|
||||||
|
{
|
||||||
|
|
||||||
|
Library::Library()
|
||||||
|
: instance_(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Library::Library(String const& lib)
|
||||||
|
: instance_(nullptr)
|
||||||
|
{
|
||||||
|
Load(lib);
|
||||||
|
}
|
||||||
|
|
||||||
|
Library::~Library()
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Library::Load(String const& lib)
|
||||||
|
{
|
||||||
|
instance_ = ::LoadLibraryW(lib.c_str());
|
||||||
|
return IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Library::IsValid() const
|
||||||
|
{
|
||||||
|
return instance_ != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Library::Free()
|
||||||
|
{
|
||||||
|
if (instance_)
|
||||||
|
{
|
||||||
|
::FreeLibrary(instance_);
|
||||||
|
instance_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FARPROC Library::GetProcess(String const& proc_name)
|
||||||
|
{
|
||||||
|
KGE_ASSERT(instance_ != nullptr);
|
||||||
|
return GetProcAddress(instance_, wide_to_string(proc_name).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,45 +19,35 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/base/SmartPtr.hpp>
|
#include <kiwano/common/common.h>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
|
||||||
#include <kiwano/base/Event.hpp>
|
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
class EventDispatcher;
|
// DLL ¿â
|
||||||
|
class KGE_API Library
|
||||||
KGE_DECLARE_SMART_PTR(EventListener);
|
|
||||||
|
|
||||||
// ʼþ¼àÌýÆ÷
|
|
||||||
class KGE_API EventListener
|
|
||||||
: public ObjectBase
|
|
||||||
, protected IntrusiveListItem<EventListenerPtr>
|
|
||||||
{
|
{
|
||||||
friend class EventDispatcher;
|
|
||||||
friend IntrusiveList<EventListenerPtr>;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using Callback = Function<void(Event const&)>;
|
Library();
|
||||||
|
Library(String const& lib);
|
||||||
|
virtual ~Library();
|
||||||
|
|
||||||
EventListener(
|
bool Load(String const& lib);
|
||||||
EventType type,
|
|
||||||
Callback const& callback,
|
|
||||||
String const& name = L""
|
|
||||||
);
|
|
||||||
|
|
||||||
virtual ~EventListener();
|
bool IsValid() const;
|
||||||
|
|
||||||
inline void Start() { running_ = true; }
|
void Free();
|
||||||
|
|
||||||
inline void Stop() { running_ = true; }
|
FARPROC GetProcess(String const& proc_name);
|
||||||
|
|
||||||
inline bool IsRunning() const { return running_; }
|
template <typename _Proc>
|
||||||
|
inline _Proc GetProcess(String const& proc_name)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<_Proc>(GetProcess(proc_name));
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
bool running_;
|
HMODULE instance_;
|
||||||
EventType type_;
|
|
||||||
Callback callback_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/common/common.h>
|
||||||
|
|
||||||
#ifndef KGE_LOG
|
#ifndef KGE_LOG
|
||||||
# ifdef KGE_DEBUG
|
# ifdef KGE_DEBUG
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -20,9 +20,9 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/common/common.h>
|
||||||
#include <kiwano/base/RefCounter.hpp>
|
#include <kiwano/core/RefCounter.hpp>
|
||||||
#include <kiwano/base/SmartPtr.hpp>
|
#include <kiwano/core/SmartPtr.hpp>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -20,12 +20,12 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/core/noncopyable.hpp>
|
#include <kiwano/common/noncopyable.hpp>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
class KGE_API RefCounter
|
class KGE_API RefCounter
|
||||||
: protected core::noncopyable
|
: protected common::noncopyable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// 增加引用计数
|
// 增加引用计数
|
||||||
|
|
@ -20,8 +20,8 @@
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include <kiwano/base/Resource.h>
|
#include <kiwano/core/Resource.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/macros.h>
|
#include <kiwano/macros.h>
|
||||||
#include <kiwano/core/core.h>
|
#include <kiwano/common/common.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/RefCounter.hpp>
|
#include <kiwano/core/RefCounter.hpp>
|
||||||
#include <kiwano/core/intrusive_ptr.hpp>
|
#include <kiwano/common/intrusive_ptr.hpp>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -38,7 +38,7 @@ namespace kiwano
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename _Ty>
|
template <typename _Ty>
|
||||||
using SmartPtr = core::intrusive_ptr<_Ty, DefaultIntrusivePtrManager>;
|
using SmartPtr = common::intrusive_ptr<_Ty, DefaultIntrusivePtrManager>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -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/base/Timer.h>
|
#include <kiwano/core/Timer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -21,8 +21,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
#include <kiwano/base/ObjectBase.h>
|
#include <kiwano/core/ObjectBase.h>
|
||||||
#include <kiwano/base/time.h>
|
#include <kiwano/core/time.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -18,8 +18,8 @@
|
||||||
// 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/base/TimerManager.h>
|
#include <kiwano/core/TimerManager.h>
|
||||||
#include <kiwano/base/Logger.h>
|
#include <kiwano/core/Logger.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <kiwano/base/Timer.h>
|
#include <kiwano/core/Timer.h>
|
||||||
|
|
||||||
namespace kiwano
|
namespace kiwano
|
||||||
{
|
{
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue