diff options
author | chai <chaifix@163.com> | 2018-10-23 22:09:22 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-10-23 22:09:22 +0800 |
commit | d74e03063095d43c654fa52c3868f7ef8fce69f1 (patch) | |
tree | ee91251c170edafacca3d3242e5b44444fb70e79 | |
parent | 6551adeca70d4299a99d45245d4e13dbfdfa87e5 (diff) |
*粒子系统
20 files changed, 387 insertions, 169 deletions
diff --git a/build/vc++/jin.vcxproj b/build/vc++/jin.vcxproj index a12378b..01b3a9a 100644 --- a/build/vc++/jin.vcxproj +++ b/build/vc++/jin.vcxproj @@ -145,31 +145,33 @@ <ItemGroup> <ClCompile Include="..\..\src\lua\jin.cpp" /> <ClCompile Include="..\..\src\lua\main.cpp" /> - <ClCompile Include="..\..\src\lua\modules\audio\audio.cpp" /> - <ClCompile Include="..\..\src\lua\modules\audio\source.cpp" /> - <ClCompile Include="..\..\src\lua\modules\bit\bit.cpp" /> - <ClCompile Include="..\..\src\lua\modules\core\core.cpp" /> - <ClCompile Include="..\..\src\lua\modules\event\event.cpp" /> - <ClCompile Include="..\..\src\lua\modules\filesystem\filesystem.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\bitmap.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\canvas.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\text.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\texture_font.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\ttf.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\ttfData.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\graphics.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\page.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\texture.cpp" /> - <ClCompile Include="..\..\src\lua\modules\graphics\shader.cpp" /> - <ClCompile Include="..\..\src\lua\modules\joypad\joypad.cpp" /> - <ClCompile Include="..\..\src\lua\modules\keyboard\keyboard.cpp" /> - <ClCompile Include="..\..\src\lua\modules\math\math.cpp" /> - <ClCompile Include="..\..\src\lua\modules\mouse\mouse.cpp" /> - <ClCompile Include="..\..\src\lua\modules\net\buffer.cpp" /> - <ClCompile Include="..\..\src\lua\modules\net\net.cpp" /> - <ClCompile Include="..\..\src\lua\modules\net\socket.cpp" /> - <ClCompile Include="..\..\src\lua\modules\thread\thread.cpp" /> - <ClCompile Include="..\..\src\lua\modules\time\time.cpp" /> + <ClCompile Include="..\..\src\lua\modules\audio\je_lua_audio.cpp" /> + <ClCompile Include="..\..\src\lua\modules\audio\je_lua_source.cpp" /> + <ClCompile Include="..\..\src\lua\modules\bit\je_lua_bit.cpp" /> + <ClCompile Include="..\..\src\lua\modules\core\je_lua_core.cpp" /> + <ClCompile Include="..\..\src\lua\modules\event\je_lua_event.cpp" /> + <ClCompile Include="..\..\src\lua\modules\filesystem\je_lua_filesystem.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_bitmap.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_canvas.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_particle_system.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_sprite.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_text.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_texture_font.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_ttf.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_ttf_data.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_graphics.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_page.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_texture.cpp" /> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_shader.cpp" /> + <ClCompile Include="..\..\src\lua\modules\joypad\je_lua_joypad.cpp" /> + <ClCompile Include="..\..\src\lua\modules\keyboard\je_lua_keyboard.cpp" /> + <ClCompile Include="..\..\src\lua\modules\math\je_lua_math.cpp" /> + <ClCompile Include="..\..\src\lua\modules\mouse\je_lua_mouse.cpp" /> + <ClCompile Include="..\..\src\lua\modules\net\je_lua_buffer.cpp" /> + <ClCompile Include="..\..\src\lua\modules\net\je_lua_net.cpp" /> + <ClCompile Include="..\..\src\lua\modules\net\je_lua_socket.cpp" /> + <ClCompile Include="..\..\src\lua\modules\thread\je_lua_thread.cpp" /> + <ClCompile Include="..\..\src\lua\modules\time\je_lua_time.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\src\lua\common\common.h" /> @@ -188,8 +190,8 @@ <ClInclude Include="..\..\src\lua\libraries\luax\luax.h" /> <ClInclude Include="..\..\src\lua\luax.h" /> <ClInclude Include="..\..\src\lua\modules\luax.h" /> - <ClInclude Include="..\..\src\lua\modules\net\buffer.h" /> - <ClInclude Include="..\..\src\lua\modules\thread\thread.h" /> + <ClInclude Include="..\..\src\lua\modules\net\je_lua_buffer.h" /> + <ClInclude Include="..\..\src\lua\modules\thread\je_lua_thread.h" /> <ClInclude Include="..\..\src\lua\modules\types.h" /> <ClInclude Include="..\..\src\lua\resources\font.ttf.h" /> <ClInclude Include="resource.h" /> diff --git a/build/vc++/jin.vcxproj.filters b/build/vc++/jin.vcxproj.filters index 1a17f85..ba41a45 100644 --- a/build/vc++/jin.vcxproj.filters +++ b/build/vc++/jin.vcxproj.filters @@ -66,87 +66,93 @@ </Filter> </ItemGroup> <ItemGroup> - <ClCompile Include="..\..\src\lua\modules\audio\audio.cpp"> + <ClCompile Include="..\..\src\lua\jin.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\main.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_sprite.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_graphics.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_page.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_shader.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_text.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_texture.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_texture_font.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_ttf.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_ttf_data.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_canvas.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_bitmap.cpp"> + <Filter>src\modules\graphics</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\audio\je_lua_audio.cpp"> <Filter>src\modules\audio</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\audio\source.cpp"> + <ClCompile Include="..\..\src\lua\modules\audio\je_lua_source.cpp"> <Filter>src\modules\audio</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\bit\bit.cpp"> + <ClCompile Include="..\..\src\lua\modules\bit\je_lua_bit.cpp"> <Filter>src\modules\bit</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\core\core.cpp"> + <ClCompile Include="..\..\src\lua\modules\core\je_lua_core.cpp"> <Filter>src\modules\core</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\event\event.cpp"> + <ClCompile Include="..\..\src\lua\modules\event\je_lua_event.cpp"> <Filter>src\modules\event</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\filesystem\filesystem.cpp"> + <ClCompile Include="..\..\src\lua\modules\filesystem\je_lua_filesystem.cpp"> <Filter>src\modules\filesystem</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\canvas.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\graphics.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\joypad\joypad.cpp"> + <ClCompile Include="..\..\src\lua\modules\joypad\je_lua_joypad.cpp"> <Filter>src\modules\joypad</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\keyboard\keyboard.cpp"> + <ClCompile Include="..\..\src\lua\modules\keyboard\je_lua_keyboard.cpp"> <Filter>src\modules\keyboard</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\math\math.cpp"> + <ClCompile Include="..\..\src\lua\modules\math\je_lua_math.cpp"> <Filter>src\modules\math</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\mouse\mouse.cpp"> + <ClCompile Include="..\..\src\lua\modules\mouse\je_lua_mouse.cpp"> <Filter>src\modules\mouse</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\net\net.cpp"> + <ClCompile Include="..\..\src\lua\modules\net\je_lua_buffer.cpp"> + <Filter>src\modules\net</Filter> + </ClCompile> + <ClCompile Include="..\..\src\lua\modules\net\je_lua_net.cpp"> <Filter>src\modules\net</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\net\socket.cpp"> + <ClCompile Include="..\..\src\lua\modules\net\je_lua_socket.cpp"> <Filter>src\modules\net</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\thread\thread.cpp"> + <ClCompile Include="..\..\src\lua\modules\thread\je_lua_thread.cpp"> <Filter>src\modules\thread</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\time\time.cpp"> + <ClCompile Include="..\..\src\lua\modules\time\je_lua_time.cpp"> <Filter>src\modules\time</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\texture.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\bitmap.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\shader.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\jin.cpp"> - <Filter>src</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\main.cpp"> - <Filter>src</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\page.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\ttfData.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\ttf.cpp"> + <ClCompile Include="..\..\src\lua\modules\graphics\je_lua_particle_system.cpp"> <Filter>src\modules\graphics</Filter> </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\text.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\graphics\texture_font.cpp"> - <Filter>src\modules\graphics</Filter> - </ClCompile> - <ClCompile Include="..\..\src\lua\modules\net\buffer.cpp"> - <Filter>src\modules\net</Filter> - </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="resource.h"> @@ -170,12 +176,6 @@ <ClInclude Include="..\..\src\lua\resources\font.ttf.h"> <Filter>src\resources</Filter> </ClInclude> - <ClInclude Include="..\..\src\lua\modules\types.h"> - <Filter>src\modules</Filter> - </ClInclude> - <ClInclude Include="..\..\src\lua\modules\thread\thread.h"> - <Filter>src\modules\thread</Filter> - </ClInclude> <ClInclude Include="..\..\src\lua\common\error.h"> <Filter>src\common</Filter> </ClInclude> @@ -209,9 +209,15 @@ <ClInclude Include="..\..\src\lua\luax.h"> <Filter>src</Filter> </ClInclude> - <ClInclude Include="..\..\src\lua\modules\net\buffer.h"> + <ClInclude Include="..\..\src\lua\modules\net\je_lua_buffer.h"> <Filter>src\modules\net</Filter> </ClInclude> + <ClInclude Include="..\..\src\lua\modules\thread\je_lua_thread.h"> + <Filter>src\modules\thread</Filter> + </ClInclude> + <ClInclude Include="..\..\src\lua\modules\types.h"> + <Filter>src\modules</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ResourceCompile Include="jin.rc"> diff --git a/build/vc++/libjin/libjin.vcxproj b/build/vc++/libjin/libjin.vcxproj index 3a9deae..e7efdd7 100644 --- a/build/vc++/libjin/libjin.vcxproj +++ b/build/vc++/libjin/libjin.vcxproj @@ -182,8 +182,8 @@ <ClInclude Include="..\..\..\src\libjin\Graphics\je_gl.h" /> <ClInclude Include="..\..\..\src\libjin\graphics\je_sprite_batch.h" /> <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle.h" /> - <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_batch.h" /> - <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_emitter.h" /> + <ClInclude Include="..\..\..\src\libjin\Graphics\particle\je_particle_pool.h" /> + <ClInclude Include="..\..\..\src\libjin\Graphics\particle\je_particle_emitter.h" /> <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_system.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Shader\je_base.shader.h" /> <ClInclude Include="..\..\..\src\libjin\Graphics\Shader\je_default.shader.h" /> @@ -256,8 +256,8 @@ <ClCompile Include="..\..\..\src\libjin\Graphics\je_gl.cpp" /> <ClCompile Include="..\..\..\src\libjin\graphics\je_sprite_batch.cpp" /> <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle.cpp" /> - <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_batch.cpp" /> - <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_emitter.cpp" /> + <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_pool.cpp" /> + <ClCompile Include="..\..\..\src\libjin\Graphics\particle\je_particle_emitter.cpp" /> <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_system.cpp" /> <ClCompile Include="..\..\..\src\libjin\Graphics\Shader\je_shader.cpp" /> <ClCompile Include="..\..\..\src\libjin\Graphics\je_shapes.cpp" /> diff --git a/build/vc++/libjin/libjin.vcxproj.filters b/build/vc++/libjin/libjin.vcxproj.filters index bddf3cb..9c35e9d 100644 --- a/build/vc++/libjin/libjin.vcxproj.filters +++ b/build/vc++/libjin/libjin.vcxproj.filters @@ -306,18 +306,9 @@ <ClInclude Include="..\..\..\src\libjin\graphics\je_sprite_batch.h"> <Filter>source\graphics</Filter> </ClInclude> - <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_emitter.h"> - <Filter>source\graphics\particle</Filter> - </ClInclude> <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle.h"> <Filter>source\graphics\particle</Filter> </ClInclude> - <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_batch.h"> - <Filter>source\graphics\particle</Filter> - </ClInclude> - <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_system.h"> - <Filter>source\graphics\particle</Filter> - </ClInclude> <ClInclude Include="..\..\..\src\libjin\ai\je_behavior_tree.h"> <Filter>source\ai</Filter> </ClInclude> @@ -345,6 +336,15 @@ <ClInclude Include="..\..\..\src\libjin\Graphics\je_graphic.h"> <Filter>source\graphics</Filter> </ClInclude> + <ClInclude Include="..\..\..\src\libjin\graphics\particle\je_particle_system.h"> + <Filter>source\graphics\particle</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\libjin\Graphics\particle\je_particle_emitter.h"> + <Filter>source\graphics\particle</Filter> + </ClInclude> + <ClInclude Include="..\..\..\src\libjin\Graphics\particle\je_particle_pool.h"> + <Filter>source\graphics\particle</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="..\..\..\src\libjin\README.md"> @@ -481,18 +481,9 @@ <ClCompile Include="..\..\..\src\libjin\graphics\je_sprite_batch.cpp"> <Filter>source\graphics</Filter> </ClCompile> - <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_system.cpp"> - <Filter>source\graphics\particle</Filter> - </ClCompile> - <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_emitter.cpp"> - <Filter>source\graphics\particle</Filter> - </ClCompile> <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle.cpp"> <Filter>source\graphics\particle</Filter> </ClCompile> - <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_batch.cpp"> - <Filter>source\graphics\particle</Filter> - </ClCompile> <ClCompile Include="..\..\..\src\libjin\ai\je_behavior_tree.cpp"> <Filter>source\ai</Filter> </ClCompile> @@ -514,5 +505,14 @@ <ClCompile Include="..\..\..\src\libjin\Graphics\je_graphic.cpp"> <Filter>source\graphics</Filter> </ClCompile> + <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_system.cpp"> + <Filter>source\graphics\particle</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\libjin\Graphics\particle\je_particle_emitter.cpp"> + <Filter>source\graphics\particle</Filter> + </ClCompile> + <ClCompile Include="..\..\..\src\libjin\graphics\particle\je_particle_pool.cpp"> + <Filter>source\graphics\particle</Filter> + </ClCompile> </ItemGroup> </Project>
\ No newline at end of file diff --git a/src/libjin/Common/je_temporary.h b/src/libjin/Common/je_temporary.h index 5af8704..9a127da 100644 --- a/src/libjin/Common/je_temporary.h +++ b/src/libjin/Common/je_temporary.h @@ -1,5 +1,5 @@ -#ifndef __JE_ON_STACK_H -#define __JE_ON_STACK_H +#ifndef __JE_TEMPORARY_H +#define __JE_TEMPORARY_H namespace JinEngine { diff --git a/src/libjin/Graphics/animation/je_animation.h b/src/libjin/Graphics/animation/je_animation.h index b3bb9fb..ca5758f 100644 --- a/src/libjin/Graphics/animation/je_animation.h +++ b/src/libjin/Graphics/animation/je_animation.h @@ -23,7 +23,6 @@ namespace JinEngine void play(); void switchClipByKey(const std::string& key); - void switchClipByName(const std::string& name); void switchClip(const Clip* clip); /// diff --git a/src/libjin/Graphics/animation/je_clip.h b/src/libjin/Graphics/animation/je_clip.h index cfa579f..eedffc0 100644 --- a/src/libjin/Graphics/animation/je_clip.h +++ b/src/libjin/Graphics/animation/je_clip.h @@ -25,7 +25,7 @@ namespace JinEngine private: /// - /// Frames + /// Key frames. /// std::vector<Sprite*> mFrames; diff --git a/src/libjin/Graphics/je_color.h b/src/libjin/Graphics/je_color.h index 8fe7691..10d2818 100644 --- a/src/libjin/Graphics/je_color.h +++ b/src/libjin/Graphics/je_color.h @@ -6,6 +6,8 @@ #include "../core/je_configuration.h" #if defined(jin_graphics) +#include "../math/je_math.h" + #include "../common/je_types.h" #include "../utils/je_endian.h" @@ -28,6 +30,25 @@ namespace JinEngine static const Color MAGENTA; static const Color YELLOW; + /// + /// Get lerp color with given factor. + /// + /// @param start Start color. + /// @param end End color. + /// @param t Factor of interplation. + /// @return Color after interplation. + /// + static Color lerp(Color start, Color end, float t) + { + t = Math::clamp<float>(t, 0, 1); + Color c; + c.r = Math::lerp(start.r, end.r, t); + c.g = Math::lerp(start.g, end.g, t); + c.b = Math::lerp(start.b, end.b, t); + c.a = Math::lerp(start.a, end.a, t); + return c; + } + /// /// /// diff --git a/src/libjin/Graphics/je_graphic.h b/src/libjin/Graphics/je_graphic.h index 5d5b2a5..d18575e 100644 --- a/src/libjin/Graphics/je_graphic.h +++ b/src/libjin/Graphics/je_graphic.h @@ -49,7 +49,7 @@ namespace JinEngine /// /// /// - void render(const Math::Quad& slice, int x, int y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0); + void render(const Math::Quad& slice, int x, int y, float sx = 1, float sy = 1, float r = 0, float ox = 0, float oy = 0); /// /// diff --git a/src/libjin/Graphics/je_sprite_batch.h b/src/libjin/Graphics/je_sprite_batch.h index 85a7951..359ce24 100644 --- a/src/libjin/Graphics/je_sprite_batch.h +++ b/src/libjin/Graphics/je_sprite_batch.h @@ -6,6 +6,9 @@ namespace JinEngine namespace Graphics { + /// + /// For reducing draw call. + /// class SpriteBatch { diff --git a/src/libjin/Graphics/particle/je_particle.h b/src/libjin/Graphics/particle/je_particle.h index d32d9fe..474e15b 100644 --- a/src/libjin/Graphics/particle/je_particle.h +++ b/src/libjin/Graphics/particle/je_particle.h @@ -8,33 +8,61 @@ namespace JinEngine namespace Graphics { + class ParticleSystem; + /// - /// Single particle. Grab from love2d. + /// A single particle contains various properties of particle, such as position, accelaration, color and + /// other attributes changed over time. /// - class Particle + struct Particle { - public: + /// + /// Whole life time. + /// + float lifeTime = 0.0f; + + /// + /// Current life time. + /// + float life = 0.0f; + + /// + /// Current position. + /// + float position[2] = {0,0}; + + /// + /// Emitte direction. + /// + float direction = 0; + + Math::Vector2<float> speed; + Math::Vector2<float> linearAcceleration; + float radialAcceleration = 0; + float tangetialAcceleration = 0; - private: - float mLifeTime; - float mLife; - float mPosition[2]; - float mDirection; + /// + /// Size over lifetime. + /// + float size = 1; + float sizeBegin = 1; + float sizeEnd = 1; - Math::Vector2<float> mSpeed; - float mGravity; - float mRadialAcceleration; - float mTangetialAcceleration; + float rotation = 0; + float angle = 0; - float mSize; - float mSizeStart; - float mSizeEnd; + /// + /// Color over lifetime. + /// + Color color = Color::WHITE; + Color colorStart = Color::WHITE; + Color colorEnd = Color::WHITE; - float mRotation; - float mSpinStart; - float mSpinEnd; + /// + /// Is particle still alive? Alive is equivalent to NOT available in particle pool. + /// + bool alive = false; - float color[4]; }; } // namespace Graphics diff --git a/src/libjin/Graphics/particle/je_particle_batch.h b/src/libjin/Graphics/particle/je_particle_batch.h deleted file mode 100644 index 19f4ded..0000000 --- a/src/libjin/Graphics/particle/je_particle_batch.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __JE_PARTICLE_BATCH_H -#define __JE_PARTICLE_BATCH_H - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// - /// - class ParticleBatch - { - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particle/je_particle_emitter.cpp b/src/libjin/Graphics/particle/je_particle_emitter.cpp index d57d5ed..e69de29 100644 --- a/src/libjin/Graphics/particle/je_particle_emitter.cpp +++ b/src/libjin/Graphics/particle/je_particle_emitter.cpp @@ -1,11 +0,0 @@ -#include "je_particle_emitter.h" - -namespace JinEngine -{ - namespace Graphics - { - - - - } -} diff --git a/src/libjin/Graphics/particle/je_particle_emitter.h b/src/libjin/Graphics/particle/je_particle_emitter.h index e191e36..95b7875 100644 --- a/src/libjin/Graphics/particle/je_particle_emitter.h +++ b/src/libjin/Graphics/particle/je_particle_emitter.h @@ -1,5 +1,10 @@ -#ifndef __JE_PARTICLE_EMMITTER_H -#define __JE_PARTICLE_EMMITTER_H +#ifndef __JE_PARTICLE_EMITTER_H +#define __JE_PARTICLE_EMITTER_H + +#include "../../common/je_temporary.h" +#include "../../math/je_vector2.hpp" + +#include "je_particle.h" namespace JinEngine { @@ -7,17 +12,37 @@ namespace JinEngine { /// - /// Particle emitter + /// Definition of particle emitter. /// + struct ParticleEmitterDef : public Temporary + { + Math::Vector2<float> position; + + }; + class ParticleEmitter { public: + ParticleEmitter(const ParticleEmitterDef& def); + + /// + /// Create new particle. + /// + Particle* emit(); + + /// + /// Emitter position. + /// + Math::Vector2<float> mPosition; - private: + /// + /// + /// + float mDirection; }; - } -} + } // namespace Graphics +} // namespace JinEngine #endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particle/je_particle_batch.cpp b/src/libjin/Graphics/particle/je_particle_pool.cpp index e69de29..e69de29 100644 --- a/src/libjin/Graphics/particle/je_particle_batch.cpp +++ b/src/libjin/Graphics/particle/je_particle_pool.cpp diff --git a/src/libjin/Graphics/particle/je_particle_pool.h b/src/libjin/Graphics/particle/je_particle_pool.h new file mode 100644 index 0000000..f1f6214 --- /dev/null +++ b/src/libjin/Graphics/particle/je_particle_pool.h @@ -0,0 +1,53 @@ +#ifndef __JE_PARTICLE_BATCH_H +#define __JE_PARTICLE_BATCH_H + +#include <list> + +#include "je_particle.h" + +namespace JinEngine +{ + namespace Graphics + { + + /// + /// Particle pool for reducing memory fragmentation. + /// + class ParticlePool + { + public: + + /// + /// Particle pool constructor. + /// + /// @param count Max count of particles. + /// + ParticlePool(uint count); + + /// + /// Particle pool destructor. + /// + ~ParticlePool(); + + /// + /// Claim a particle if available. + /// + Particle* claim(); + + /// + /// Recycle particle if the particle is no more alive. + /// + void recycle(Particle* particle); + + private: + /// + /// All particles include available and inavailable particles. + /// + std::list<Particle> particles; + + }; + + } // namespace Graphics +} // namespace JinEngine + +#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particle/je_particle_system.cpp b/src/libjin/Graphics/particle/je_particle_system.cpp index 6f70f09..68f8f21 100644 --- a/src/libjin/Graphics/particle/je_particle_system.cpp +++ b/src/libjin/Graphics/particle/je_particle_system.cpp @@ -1 +1,11 @@ -#pragma once +#include "je_particle_system.h" + +namespace JinEngine +{ + namespace Graphics + { + + + + } +} diff --git a/src/libjin/Graphics/particle/je_particle_system.h b/src/libjin/Graphics/particle/je_particle_system.h index e69de29..c5db938 100644 --- a/src/libjin/Graphics/particle/je_particle_system.h +++ b/src/libjin/Graphics/particle/je_particle_system.h @@ -0,0 +1,85 @@ +#ifndef __JE_PARTICLE_EMMITTER_H +#define __JE_PARTICLE_EMMITTER_H + +#include <vector> + +#include "../../common/je_temporary.h" + +#include "../je_sprite.h" + +#include "je_particle_emitter.h" +#include "je_particle_pool.h" +#include "je_particle.h" + +namespace JinEngine +{ + namespace Graphics + { + + /// + /// Definition of particle system. + /// + struct ParticleSystemDef : public Temporary + { + uint maxParticleCount = 1; ///< Max count of particles. 1 by default. + + }; + + /// + /// Particle emitter, handle all particles it emitts. + /// + class ParticleSystem + { + public: + /// + /// Particle system constructor + /// + /// @param def Definition of particle system. + /// + ParticleSystem(const ParticleSystemDef& def); + + /// + /// Particle system destructor. + /// + ~ParticleSystem(); + + /// + /// Render particle system's all particles. + /// + void render(int x, int y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0); + + /// + /// Set sprite to render. + /// + /// @param sprite Sprite to render. + /// + void setSprite(Sprite* sprite); + + /// + /// Release particle and make it available in particle pool. + /// + void releaseParticle(); + + private: + /// + /// Sprite to be drawn. + /// + Sprite* mSprite; + + /// + /// Particle emitter. + /// + ParticleEmitter mEmitter; + ParticlePool mParticlePool; + + /// + /// Alive particles, that means these particles could join to the life cycle loop. + /// + std::vector<Particle*> mAliveParticles; + + }; + + } // namespace Graphics +} // namespace JinEngine + +#endif
\ No newline at end of file diff --git a/src/libjin/Math/je_math.h b/src/libjin/Math/je_math.h index 1f8e0b3..e7c3ec5 100644 --- a/src/libjin/Math/je_math.h +++ b/src/libjin/Math/je_math.h @@ -71,6 +71,12 @@ namespace JinEngine return a + t * (b - a); } + float lerp(float a, float b, float f) + { + f = clamp<float>(f, 0, 1); + return a + f * (b - a); + } + } // namespace Math } // namespace JinEngine diff --git a/src/lua/modules/graphics/je_lua_particle_system.cpp b/src/lua/modules/graphics/je_lua_particle_system.cpp new file mode 100644 index 0000000..7099a5c --- /dev/null +++ b/src/lua/modules/graphics/je_lua_particle_system.cpp @@ -0,0 +1,11 @@ +#include "libjin/jin.h" + +namespace JinEngine +{ + namespace Lua + { + + + + } // Lua +} // namespace JinEngine
\ No newline at end of file |