aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-11-26 08:37:17 +0800
committerchai <chaifix@163.com>2018-11-26 08:37:17 +0800
commit24b712a956a48f43788e1c11e121aedf52e22278 (patch)
tree0bbccc98f1cb24c44cfb58ca99ce305b9f513e09 /src
parent1d54138b94a384917d47abd8109c586b1b7ac323 (diff)
*粒子系统
Diffstat (limited to 'src')
-rw-r--r--src/libjin/graphics/animations/je_animator.cpp5
-rw-r--r--src/libjin/graphics/animations/je_animator.h4
-rw-r--r--src/libjin/graphics/fonts/je_font.h2
-rw-r--r--src/libjin/graphics/fonts/je_ttf.cpp2
-rw-r--r--src/libjin/graphics/je_bitmap.cpp6
-rw-r--r--src/libjin/graphics/je_graphic.cpp26
-rw-r--r--src/libjin/graphics/je_graphic.h4
-rw-r--r--src/libjin/graphics/je_image.cpp2
-rw-r--r--src/libjin/graphics/je_renderable.h9
-rw-r--r--src/libjin/graphics/je_sprite.h2
-rw-r--r--src/libjin/graphics/je_sprite_batch.h9
-rw-r--r--src/libjin/graphics/je_texture.cpp2
-rw-r--r--src/libjin/graphics/particles/je_particle.cpp8
-rw-r--r--src/libjin/graphics/particles/je_particle.h4
-rw-r--r--src/libjin/graphics/particles/je_particle_system.cpp11
-rw-r--r--src/libjin/graphics/particles/je_particle_system.h21
-rw-r--r--src/libjin/graphics/shaders/je_shader.cpp4
-rw-r--r--src/libjin/time/je_timer.h2
-rw-r--r--src/lua/common/je_lua.cpp2
-rw-r--r--src/lua/common/je_lua.h2
20 files changed, 97 insertions, 30 deletions
diff --git a/src/libjin/graphics/animations/je_animator.cpp b/src/libjin/graphics/animations/je_animator.cpp
index e15dc90..449799d 100644
--- a/src/libjin/graphics/animations/je_animator.cpp
+++ b/src/libjin/graphics/animations/je_animator.cpp
@@ -118,6 +118,11 @@ namespace JinEngine
return mSpeed;
}
+ uint Animator::getFrameCount()
+ {
+ return mAnimation->getFrameCount();
+ }
+
}
}
} \ No newline at end of file
diff --git a/src/libjin/graphics/animations/je_animator.h b/src/libjin/graphics/animations/je_animator.h
index bee3d7d..e2369cf 100644
--- a/src/libjin/graphics/animations/je_animator.h
+++ b/src/libjin/graphics/animations/je_animator.h
@@ -15,7 +15,7 @@ namespace JinEngine
namespace Animations
{
- class Animator : public Object, public IRenderable
+ class Animator : public Object, public Renderable
{
public:
Animator();
@@ -46,6 +46,8 @@ namespace JinEngine
float getSpeed();
+ uint getFrameCount();
+
private:
const Animation* mAnimation;
diff --git a/src/libjin/graphics/fonts/je_font.h b/src/libjin/graphics/fonts/je_font.h
index 3f72a13..e8ce2c5 100644
--- a/src/libjin/graphics/fonts/je_font.h
+++ b/src/libjin/graphics/fonts/je_font.h
@@ -25,7 +25,7 @@ namespace JinEngine
///
/// Base Font class.
///
- class Font : public Object, public IRenderable
+ class Font : public Object, public Renderable
{
public:
///
diff --git a/src/libjin/graphics/fonts/je_ttf.cpp b/src/libjin/graphics/fonts/je_ttf.cpp
index 1f79558..d62798b 100644
--- a/src/libjin/graphics/fonts/je_ttf.cpp
+++ b/src/libjin/graphics/fonts/je_ttf.cpp
@@ -161,7 +161,7 @@ namespace JinEngine
{
}
- ///*static*/ TTF* TTF::createTTF(TTFData* fontData, unsigned int fontSzie)
+ //TTF* TTF::createTTF(TTFData* fontData, unsigned int fontSzie)
//{
// TTF* ttf;
// try
diff --git a/src/libjin/graphics/je_bitmap.cpp b/src/libjin/graphics/je_bitmap.cpp
index cdab46d..a6db55e 100644
--- a/src/libjin/graphics/je_bitmap.cpp
+++ b/src/libjin/graphics/je_bitmap.cpp
@@ -30,7 +30,7 @@ namespace JinEngine
return bitmap;
}
- /*static*/ Bitmap* Bitmap::createBitmap(const void* imgData, size_t size)
+ Bitmap* Bitmap::createBitmap(const void* imgData, size_t size)
{
if (imgData == nullptr)
return nullptr;
@@ -48,7 +48,7 @@ namespace JinEngine
return bitmap;
}
- /*static*/ Bitmap* Bitmap::createBitmap(int w, int h, Color color)
+ Bitmap* Bitmap::createBitmap(int w, int h, Color color)
{
Bitmap* bitmap = new Bitmap(w, h);
if (color != Color::BLACK)
@@ -56,7 +56,7 @@ namespace JinEngine
return bitmap;
}
- /*static*/ Bitmap* Bitmap::createBitmap(int width, int height, std::function<Color(int, int, int, int)> drawer)
+ Bitmap* Bitmap::createBitmap(int width, int height, std::function<Color(int, int, int, int)> drawer)
{
Bitmap* bitmap = new Bitmap(width, height);
for (int y = 0; y < height; ++y)
diff --git a/src/libjin/graphics/je_graphic.cpp b/src/libjin/graphics/je_graphic.cpp
index 6cd05a1..a01526e 100644
--- a/src/libjin/graphics/je_graphic.cpp
+++ b/src/libjin/graphics/je_graphic.cpp
@@ -137,6 +137,32 @@ namespace JinEngine
// glTexParameteri(GL_)
//}
+ Shaders::Shader* Graphic::getDefaultShader()
+ {
+ const char* default_shader = R"(
+ #VERTEX_SHADER
+
+ Vertex vert(Vertex v)
+ {
+ return v;
+ }
+
+ #END_VERTEX_SHADER
+
+ #FRAGMENT_SHADER
+
+ Color frag(Color col, Texture tex, Vertex v)
+ {
+ return col * texel(tex, v.uv);
+ }
+
+ #END_FRAGMENT_SHADER
+ )";
+ static Shader* shader = Shader::createShader(default_shader);
+ if(shader != nullptr)
+ return shader;
+ }
+
} // namespace Graphics
} // namespace JinEngine
diff --git a/src/libjin/graphics/je_graphic.h b/src/libjin/graphics/je_graphic.h
index d48ba3c..53eacee 100644
--- a/src/libjin/graphics/je_graphic.h
+++ b/src/libjin/graphics/je_graphic.h
@@ -21,7 +21,7 @@ namespace JinEngine
/// Class inherites Graphic doesn't keep any state such as origin, scale and other properties. Very low
/// level visualized resources.
///
- class Graphic : public Object, public IRenderable
+ class Graphic : public Object, public Renderable
{
public:
///
@@ -85,6 +85,8 @@ namespace JinEngine
Math::Vector2<uint> mSize;
private:
+ static Shaders::Shader* getDefaultShader();
+
GLuint mTexture;
};
diff --git a/src/libjin/graphics/je_image.cpp b/src/libjin/graphics/je_image.cpp
index 6baf16d..2d8ceae 100644
--- a/src/libjin/graphics/je_image.cpp
+++ b/src/libjin/graphics/je_image.cpp
@@ -11,7 +11,7 @@ namespace JinEngine
using namespace Filesystem;
- /*static*/ Image* Image::createImage(const void* imgData, size_t size)
+ Image* Image::createImage(const void* imgData, size_t size)
{
if (imgData == nullptr)
return nullptr;
diff --git a/src/libjin/graphics/je_renderable.h b/src/libjin/graphics/je_renderable.h
index ca785c3..0e29556 100644
--- a/src/libjin/graphics/je_renderable.h
+++ b/src/libjin/graphics/je_renderable.h
@@ -6,6 +6,8 @@ namespace JinEngine
namespace Graphics
{
+ namespace Shaders { class Shader; };
+
enum class Origin
{
TOPLEFT,
@@ -19,13 +21,18 @@ namespace JinEngine
BOTTOMRIGHT
};
- class IRenderable
+ class Renderable
{
public:
+ void setShader(const Shaders::Shader* shader);
+
virtual void render(float x, float y, float sx, float sy, float r) const {};
virtual void render(float x, float y, float sx, float sy, float r, float ox, float oy) const {};
virtual void render(float x, float y, float sx, float sy, float r, Origin origin) const {};
+ protected:
+ const Shaders::Shader* mShader;
+
};
}
diff --git a/src/libjin/graphics/je_sprite.h b/src/libjin/graphics/je_sprite.h
index de2117e..70e8f7b 100644
--- a/src/libjin/graphics/je_sprite.h
+++ b/src/libjin/graphics/je_sprite.h
@@ -16,7 +16,7 @@ namespace JinEngine
///
/// A sprite is unit of rendering. Animation is based on sprite, but not texture or other graphic stuff.
///
- class Sprite : public Object, public IRenderable
+ class Sprite : public Object, public Renderable
{
public:
diff --git a/src/libjin/graphics/je_sprite_batch.h b/src/libjin/graphics/je_sprite_batch.h
index d58489c..a8109cc 100644
--- a/src/libjin/graphics/je_sprite_batch.h
+++ b/src/libjin/graphics/je_sprite_batch.h
@@ -3,16 +3,23 @@
#include "../common/je_object.h"
+#include "shaders/je_shader.h"
+#include "je_renderable.h"
+
namespace JinEngine
{
namespace Graphics
{
- class SpriteBatch : public Object
+ class SpriteBatch : public Object, public Renderable
{
public:
+
private:
+ static void createDefaultShader();
+
+ //Shaders::Shader
};
diff --git a/src/libjin/graphics/je_texture.cpp b/src/libjin/graphics/je_texture.cpp
index 8aa3f9a..7f02c84 100644
--- a/src/libjin/graphics/je_texture.cpp
+++ b/src/libjin/graphics/je_texture.cpp
@@ -23,7 +23,7 @@ namespace JinEngine
return texture;
}
- /*static*/ Texture* Texture::createTexture(Bitmap* bitmap)
+ Texture* Texture::createTexture(Bitmap* bitmap)
{
Texture* tex = new Texture(bitmap);
return tex;
diff --git a/src/libjin/graphics/particles/je_particle.cpp b/src/libjin/graphics/particles/je_particle.cpp
index 00e593f..fc3dc54 100644
--- a/src/libjin/graphics/particles/je_particle.cpp
+++ b/src/libjin/graphics/particles/je_particle.cpp
@@ -1,3 +1,4 @@
+#include "../../utils/je_log.h"
#include "../../common/je_array.hpp"
#include "../../math/je_math.h"
#include "../../math/je_random.h"
@@ -129,9 +130,9 @@ namespace JinEngine
color = def->colorDef.overTime.value.getColor(t);
// transparency
if (def->transparencyDef.overTime.enable)
- color.a *= def->transparencyDef.overTime.value.getValue(t);
+ color.a = 0xff * def->transparencyDef.overTime.value.getValue(t);
else
- color.a *= def->transparencyDef.transparency.value;
+ color.a = 0xff * def->transparencyDef.transparency.value;
if ((updateFlags & UPDATE_SCALE) != 0)
{
// Lerp scale.
@@ -156,8 +157,7 @@ namespace JinEngine
int n = def->spritesDef.sprites.size();
if (def->spritesDef.mode == SpriteMode::ANIMATED)
spriteIndex = lerp<int>(0, n - 1, t);
- //else
- // spriteIndex = rng.rand(0, n - 1);
+ //jin_log_info("sprite index %d", spriteIndex);
}
life += dt;
alive = life < lifeTime;
diff --git a/src/libjin/graphics/particles/je_particle.h b/src/libjin/graphics/particles/je_particle.h
index bef3e6d..2b5966b 100644
--- a/src/libjin/graphics/particles/je_particle.h
+++ b/src/libjin/graphics/particles/je_particle.h
@@ -155,7 +155,7 @@ namespace JinEngine
/// A single particle contains various properties of particle, such as position, accelaration, color
/// and other attributes changed over time.
///
- class Particle : public IRenderable, public Game::GameObject
+ class Particle : public Renderable, public Game::GameObject
{
public:
enum ParticleUpdateMask
@@ -189,7 +189,7 @@ namespace JinEngine
///
void render();
- //////////////////////////////////////////////////////////////////////////////////////////////////
+ // Methods end.
ParticleDef* def;
diff --git a/src/libjin/graphics/particles/je_particle_system.cpp b/src/libjin/graphics/particles/je_particle_system.cpp
index 2c2f9bb..a6e9460 100644
--- a/src/libjin/graphics/particles/je_particle_system.cpp
+++ b/src/libjin/graphics/particles/je_particle_system.cpp
@@ -1,5 +1,7 @@
#include <stdarg.h>
+#include "../../utils/je_log.h"
+
#include "je_particle_system.h"
namespace JinEngine
@@ -60,6 +62,7 @@ namespace JinEngine
{
Particle* p = new (mParticlePool.GetNextWithoutInitializing()) Particle();
mAliveParticles.push_back(p);
+ jin_log_info("particle count %d", mAliveParticles.size());
return p;
}
@@ -216,16 +219,16 @@ namespace JinEngine
mDef.particleDef.scaleDef.overTime.value.removePoint(i);
}
- void ParticleSystem::setParticleColor(Color color)
+ void ParticleSystem::setParticleColor(Color tint)
{
mDef.particleDef.colorDef.overTime.enable = false;
- mDef.particleDef.colorDef.color = color;
+ mDef.particleDef.colorDef.color = tint;
}
- void ParticleSystem::addParticleColorPoint(Color color, float t)
+ void ParticleSystem::addParticleColorPoint(Color tint, float t)
{
mDef.particleDef.colorDef.overTime.enable = true;
- mDef.particleDef.colorDef.overTime.value.addColor(color, t);
+ mDef.particleDef.colorDef.overTime.value.addColor(tint, t);
}
void ParticleSystem::removeParticleColorPoint(uint i)
diff --git a/src/libjin/graphics/particles/je_particle_system.h b/src/libjin/graphics/particles/je_particle_system.h
index 20f39dc..b3640d4 100644
--- a/src/libjin/graphics/particles/je_particle_system.h
+++ b/src/libjin/graphics/particles/je_particle_system.h
@@ -33,7 +33,7 @@ namespace JinEngine
///
/// Particle emitter, handle all particles it emitts.
///
- class ParticleSystem : public IRenderable, public Game::GameObject
+ class ParticleSystem : public Renderable, public Game::GameObject
{
public:
///
@@ -49,11 +49,26 @@ namespace JinEngine
ParticleSystem(uint maxCount = 64);
///
+ ///
+ ///
+ ParticleSystem(const std::string & config);
+
+ ///
/// Particle system destructor.
///
~ParticleSystem();
///
+ ///
+ ///
+ void setDefinition(const ParticleSystemDef& def);
+
+ ///
+ /// Load definition from config.
+ ///
+ void setDefinition(const std::string& config);
+
+ ///
/// Update particle system and all alive particles.
///
void update(float dt);
@@ -124,8 +139,8 @@ namespace JinEngine
void addParticleScalePoint(float scale, float t);
void removeParticleScalePoint(uint i);
- void setParticleColor(Color color);
- void addParticleColorPoint(Color color, float t);
+ void setParticleColor(Color tint);
+ void addParticleColorPoint(Color tint, float t);
void removeParticleColorPoint(uint i);
void setParticleTransparency(float transparency);
diff --git a/src/libjin/graphics/shaders/je_shader.cpp b/src/libjin/graphics/shaders/je_shader.cpp
index c1abbf0..3748de6 100644
--- a/src/libjin/graphics/shaders/je_shader.cpp
+++ b/src/libjin/graphics/shaders/je_shader.cpp
@@ -52,7 +52,7 @@ namespace JinEngine
//
const int DEFAULT_TEXTURE_UNIT = 0;
- /*static*/ Shader* Shader::CurrentShader = nullptr;
+ Shader* Shader::CurrentShader = nullptr;
Shader* Shader::createShader(const string& program)
{
@@ -134,7 +134,7 @@ if (success == GL_FALSE) \
sendInt(SHADER_MAIN_TEXTURE, DEFAULT_TEXTURE_UNIT);
}
- /*static*/ void Shader::unuse()
+ void Shader::unuse()
{
glUseProgram(0);
CurrentShader = nullptr;
diff --git a/src/libjin/time/je_timer.h b/src/libjin/time/je_timer.h
index 31cd322..f9feebe 100644
--- a/src/libjin/time/je_timer.h
+++ b/src/libjin/time/je_timer.h
@@ -71,7 +71,7 @@ namespace JinEngine
///
///
///
- Handler* every(float dt, TimerCallback callback, void* paramters, FinishCallback finish);
+ Handler* every(float dt, TimerCallback callback, void* paramters = nullptr, FinishCallback finish = nullptr);
///
///
diff --git a/src/lua/common/je_lua.cpp b/src/lua/common/je_lua.cpp
index a08414e..020599d 100644
--- a/src/lua/common/je_lua.cpp
+++ b/src/lua/common/je_lua.cpp
@@ -132,7 +132,7 @@ namespace JinEngine
luax_getobject(L, dep);
if (luax_isnil(L, -1))
{
- luax_pop(L, 3); // Pop nil, dep, reftbl
+ luax_pop(L, 3); // Pop nil, dep, reftbl.
return false;
}
luax_settable(L, -3);
diff --git a/src/lua/common/je_lua.h b/src/lua/common/je_lua.h
index 66647aa..1396970 100644
--- a/src/lua/common/je_lua.h
+++ b/src/lua/common/je_lua.h
@@ -23,7 +23,7 @@ namespace JinEngine
Proxy* luax_newinstance(lua_State* L, const char* type, SharedBase* shared);
///
- ///
+ /// Access lua object by object pointer.
///
int luax_getobject(lua_State* L, SharedBase* shared);