From ab9efe5a95df9816e4c5ce8833f1a0f583587b71 Mon Sep 17 00:00:00 2001 From: Henrique Santiago Date: Sun, 18 Dec 2011 21:44:49 -0200 Subject: [PATCH] particles test --- modules/outfit.frag | 2 +- modules/particle.otpa | 92 ++++++++++++++++++---- src/framework/application.cpp | 3 - src/framework/graphics/particle.cpp | 4 +- src/framework/graphics/particleemitter.cpp | 3 +- src/otclient/net/protocolgameparse.cpp | 2 +- src/otclient/ui/uigame.cpp | 2 + 7 files changed, 84 insertions(+), 24 deletions(-) diff --git a/modules/outfit.frag b/modules/outfit.frag index e1df99fa..b9eefb1a 100644 --- a/modules/outfit.frag +++ b/modules/outfit.frag @@ -45,5 +45,5 @@ void main() } sum = sin(ticks/500.0)*sum; - gl_FragColor = pixel * color * opacity + sum; + gl_FragColor = pixel * color * opacity; } diff --git a/modules/particle.otpa b/modules/particle.otpa index 19bbb4a2..31380474 100644 --- a/modules/particle.otpa +++ b/modules/particle.otpa @@ -1,27 +1,87 @@ ParticleSystem - AttractionAffector + + // Fire + Emitter + position: 295 180 + duration: 0.5 + burstRate: 0.0166 + burstCount: 6 delay: 0 - duration: 999 + + particle-min-duration: 0.3 + particle-max-duration: 0.5 + + particle-position-radius: 0 + + particle-min-velocity: 200 + particle-max-velocity: 240 + particle-min-velocity-angle: -5 + particle-max-velocity-angle: 10 + + particle-acceleration: 0 + + particle-start-size: 8 8 + particle-final-size: 64 64 + + particle-colors: #ff8c00ff #e6660080 #1e1e1e00 + particle-colors-stops: 0 0.15 0.3 + + particle-texture: circle2.png + + + // Fire ball + Emitter position: 200 200 - acceleration: 64 - velocity-reduction-percent: 0 + duration: 0.7 + burstRate: 0.0166 + burstCount: 3 + delay: 0 + + particle-min-duration: 0.5 + particle-max-duration: 0.9 + particle-position-radius: 0 + + particle-min-velocity: 80 + particle-max-velocity: 110 + particle-min-velocity-angle: -30 + particle-max-velocity-angle: 30 + + particle-acceleration: 0 + + particle-start-size: 16 16 + particle-final-size: 64 64 + + particle-colors: #19191980 #0f0f0f80 #00000000 + particle-colors-stops: 0 0.45 0.9 + + particle-texture: circle2.png + + // Smoke Emitter - position: 200 264 - duration: 2 - burstRate: 3 - burstCount: 1 + position: 200 200 + duration: 0.1 + burstRate: 0.0166 + burstCount: 3 delay: 0 - particle-ignore-physics-after: 999 + particle-min-duration: 0.1 + particle-max-duration: 0.45 - particle-duration: 12 particle-position-radius: 0 - particle-velocity: 32 - particle-velocity-angle: 0 + + particle-min-velocity: 60 + particle-max-velocity: 80 + particle-min-velocity-angle: -5 + particle-max-velocity-angle: 10 + particle-acceleration: 0 - particle-start-size: 4 4 - particle-final-size: 48 48 - particle-colors: #00ff00ff #ff0000ff #0000ffff #00ff00ff #00ff0000 - particle-colors-stops: 3 6 9 12 + + particle-start-size: 8 8 + particle-final-size: 64 64 + + particle-colors: #555555ff #55555580 #55555500 + particle-colors-stops: 0 0.225 0.45 + particle-texture: circle2.png + diff --git a/src/framework/application.cpp b/src/framework/application.cpp index aff7363f..464a5f85 100644 --- a/src/framework/application.cpp +++ b/src/framework/application.cpp @@ -111,11 +111,8 @@ void Application::init(const std::vector& args, int appFlags) if(m_appFlags & Fw::AppEnableModules) g_modules.discoverModulesPath(); - - g_particleManager.load("particle.otpa"); } - void Application::terminate() { // hide the window because there is no render anymore diff --git a/src/framework/graphics/particle.cpp b/src/framework/graphics/particle.cpp index 525b6f5a..405e57c0 100644 --- a/src/framework/graphics/particle.cpp +++ b/src/framework/graphics/particle.cpp @@ -49,9 +49,9 @@ void Particle::render() if(!m_texture) g_painter.drawFilledRect(m_rect); else { - //g_painter.setCompositionMode(Painter::CompositionMode_AdditiveSource); + g_painter.setCompositionMode(Painter::CompositionMode_AdditiveSource); g_painter.drawTexturedRect(m_rect, m_texture); - //g_painter.setCompositionMode(Painter::CompositionMode_SourceOver); + g_painter.setCompositionMode(Painter::CompositionMode_SourceOver); } } diff --git a/src/framework/graphics/particleemitter.cpp b/src/framework/graphics/particleemitter.cpp index 41431971..d51c4d9a 100644 --- a/src/framework/graphics/particleemitter.cpp +++ b/src/framework/graphics/particleemitter.cpp @@ -163,7 +163,8 @@ bool ParticleEmitter::load(const OTMLNodePtr& node) if(m_pColors.empty()) m_pColors.push_back(Color(255, 255, 255, 128)); - m_pColorsStops.insert(m_pColorsStops.begin(), 0); + if(m_pColorsStops.empty()) + m_pColorsStops.push_back(0); if(m_pColors.size() != m_pColorsStops.size()) { logError("particle colors must be equal to colorstops-1"); diff --git a/src/otclient/net/protocolgameparse.cpp b/src/otclient/net/protocolgameparse.cpp index aac6a603..e9df141d 100644 --- a/src/otclient/net/protocolgameparse.cpp +++ b/src/otclient/net/protocolgameparse.cpp @@ -530,7 +530,7 @@ void ProtocolGame::parseMagicEffect(InputMessage& msg) tile->addEffect(effect); // TODO: check if particles effect exists, if not, play standard sprite effect. - g_particleManager.load("particle.otpa"); + //g_particleManager.load("particle.otpa"); } void ProtocolGame::parseAnimatedText(InputMessage& msg) diff --git a/src/otclient/ui/uigame.cpp b/src/otclient/ui/uigame.cpp index 2f84cc78..9832582b 100644 --- a/src/otclient/ui/uigame.cpp +++ b/src/otclient/ui/uigame.cpp @@ -23,6 +23,7 @@ #include "uigame.h" #include #include +#include bool UIGame::onKeyPress(uchar keyCode, std::string keyText, int keyboardModifiers) { @@ -82,6 +83,7 @@ bool UIGame::onKeyPress(uchar keyCode, std::string keyText, int keyboardModifier return true; } else if(keyCode == Fw::KeyRight || keyCode == Fw::KeyNumpad6) { g_game.turn(Otc::East); + g_particleManager.load("particle.otpa"); return true; } else if(keyCode == Fw::KeyDown || keyCode == Fw::KeyNumpad2) { g_game.turn(Otc::South);