summaryrefslogtreecommitdiff
path: root/src/particleemitter.h
diff options
context:
space:
mode:
authorPhilipp Sehmisch <tmw@crushnet.org>2007-05-04 13:09:25 +0000
committerPhilipp Sehmisch <tmw@crushnet.org>2007-05-04 13:09:25 +0000
commit00fb4bde7974a20aacfc1c52e48fff2faee2d385 (patch)
tree2097ef003495d7e6b4a8cf697ad7896039aac113 /src/particleemitter.h
parentb3376bfe4e26591e1dc1066d8f2270baf4f9f759 (diff)
downloadmana-client-00fb4bde7974a20aacfc1c52e48fff2faee2d385.tar.gz
mana-client-00fb4bde7974a20aacfc1c52e48fff2faee2d385.tar.bz2
mana-client-00fb4bde7974a20aacfc1c52e48fff2faee2d385.tar.xz
mana-client-00fb4bde7974a20aacfc1c52e48fff2faee2d385.zip
Merged particle engine into main eAthena branch.
Diffstat (limited to 'src/particleemitter.h')
-rw-r--r--src/particleemitter.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/particleemitter.h b/src/particleemitter.h
new file mode 100644
index 00000000..dcc7069b
--- /dev/null
+++ b/src/particleemitter.h
@@ -0,0 +1,108 @@
+/*
+ * The Mana World
+ * Copyright 2006 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef _PARTICLEEMITTER_H
+#define _PARTICLEEMITTER_H
+
+#include <list>
+
+#include "utils/xml.h"
+#include "utils/minmax.h"
+
+#include "resources/animation.h"
+
+class Map;
+class Particle;
+
+/**
+ * Every Particle can have one or more particle emitters that create new
+ * particles when they are updated
+ */
+class ParticleEmitter
+{
+ public:
+
+ ParticleEmitter(xmlNodePtr emitterNode, Particle *target, Map *map);
+
+ /**
+ * Spawns new particles
+ * @return: a list of created particles
+ */
+ std::list<Particle *> createParticles();
+
+ /**
+ * Sets the target of the particles that are created
+ */
+ void
+ setTarget(Particle *target)
+ { mParticleTarget = target; };
+
+ private:
+ template <typename T> MinMax<T> readMinMax(xmlNodePtr propertyNode, T def);
+
+ /**
+ * initial position of particles:
+ */
+ MinMax<float> mParticlePosX, mParticlePosY, mParticlePosZ;
+
+ /**
+ * initial vector of particles:
+ */
+ MinMax<float> mParticleAngleHorizontal, mParticleAngleVertical;
+
+ /**
+ * Initial velocity of particles
+ */
+ MinMax<float> mParticlePower;
+
+ /**
+ * vector changing of particles:
+ */
+ MinMax<float> mParticleGravity;
+ MinMax<int> mParticleRandomnes;
+ MinMax<float> mParticleBounce;
+
+ /**
+ * Properties of targeting particles:
+ */
+ Particle *mParticleTarget;
+ MinMax<float> mParticleAcceleration;
+ MinMax<float> mParticleDieDistance;
+ MinMax<float> mParticleMomentum;
+
+ /**
+ * Behavior over time of the particles:
+ */
+ MinMax<int> mParticleLifetime;
+ MinMax<int> mParticleFadeOut;
+ MinMax<int> mParticleFadeIn;
+
+ Map *mMap; /**< Map the particles are supposed to spawn on */
+
+ MinMax<int> mOutput; /**< Number of particles spawned per update */
+
+ std::string mParticleImage; /**< Filename of particle image */
+ Animation mParticleAnimation; /**< Filename of particle animation file */
+
+ std::list<ParticleEmitter> mParticleChildEmitters; /** List of emitters the spawned particles are equipped with */
+};
+#endif