summaryrefslogtreecommitdiff
path: root/src/particle
diff options
context:
space:
mode:
Diffstat (limited to 'src/particle')
-rw-r--r--src/particle/particlecontainer.cpp71
-rw-r--r--src/particle/particlecontainer.h31
-rw-r--r--src/particle/particlelist.cpp96
-rw-r--r--src/particle/particlelist.h65
4 files changed, 161 insertions, 102 deletions
diff --git a/src/particle/particlecontainer.cpp b/src/particle/particlecontainer.cpp
index 52179bce8..68e0c9d6c 100644
--- a/src/particle/particlecontainer.cpp
+++ b/src/particle/particlecontainer.cpp
@@ -27,9 +27,6 @@
#include "debug.h"
-typedef std::list<Particle *>::iterator ParticleListIter;
-typedef std::list<Particle *>::const_iterator ParticleListCIter;
-
ParticleContainer::ParticleContainer(ParticleContainer *const parent,
const bool delParent):
mNext(parent),
@@ -58,74 +55,6 @@ void ParticleContainer::moveTo(const float x, const float y)
mNext->moveTo(x, y);
}
-// -- particle list ----------------------------------------
-
-ParticleList::ParticleList(ParticleContainer *const parent,
- const bool delParent) :
- ParticleContainer(parent, delParent),
- mElements()
-{}
-
-ParticleList::~ParticleList()
-{}
-
-void ParticleList::addLocally(Particle *const particle)
-{
- if (particle)
- {
- // The effect may not die without the beings permission or we segfault
- particle->disableAutoDelete();
- mElements.push_back(particle);
- }
-}
-
-void ParticleList::removeLocally(const Particle *const particle)
-{
- for (std::list<Particle *>::iterator it = mElements.begin();
- it != mElements.end(); )
- {
- Particle *const p = *it;
- if (p == particle)
- {
- p->kill();
- it = mElements.erase(it);
- }
- else
- {
- ++it;
- }
- }
-}
-
-void ParticleList::clearLocally()
-{
- FOR_EACH (ParticleListCIter, it, mElements)
- (*it)->kill();
-
- mElements.clear();
-}
-
-void ParticleList::moveTo(const float x, const float y)
-{
- ParticleContainer::moveTo(x, y);
-
- for (std::list<Particle *>::iterator it = mElements.begin();
- it != mElements.end(); )
- {
- Particle *const p = *it;
- p->moveTo(x, y);
- if (p->isExtinct())
- {
- p->kill();
- it = mElements.erase(it);
- }
- else
- {
- ++it;
- }
- }
-}
-
// -- particle vector ----------------------------------------
ParticleVector::ParticleVector(ParticleContainer *const parent,
diff --git a/src/particle/particlecontainer.h b/src/particle/particlecontainer.h
index c3b49dde0..81037ce3a 100644
--- a/src/particle/particlecontainer.h
+++ b/src/particle/particlecontainer.h
@@ -73,37 +73,6 @@ protected:
};
/**
- * Linked list of particle effects.
- */
-class ParticleList final : public ParticleContainer
-{
-public:
- explicit ParticleList(ParticleContainer *const parent = nullptr,
- const bool delParent = true);
-
- A_DELETE_COPY(ParticleList)
-
- ~ParticleList();
-
- /**
- * Takes control of and adds a particle
- */
- void addLocally(Particle *const particle);
-
- /**
- * `kills' and removes a particle
- */
- void removeLocally(const Particle *const particle);
-
- void clearLocally() override final;
-
- void moveTo(const float x, const float y) override final;
-
-protected:
- std::list<Particle *> mElements; /**< Contained particle effects */
-};
-
-/**
* Particle container with indexing facilities
*/
class ParticleVector final : public ParticleContainer
diff --git a/src/particle/particlelist.cpp b/src/particle/particlelist.cpp
new file mode 100644
index 000000000..3bf1ae32b
--- /dev/null
+++ b/src/particle/particlelist.cpp
@@ -0,0 +1,96 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2008-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2014 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "particle/particlelist.h"
+
+#include "particle/particle.h"
+
+#include "debug.h"
+
+typedef std::list<Particle *>::iterator ParticleListIter;
+typedef std::list<Particle *>::const_iterator ParticleListCIter;
+
+ParticleList::ParticleList(ParticleContainer *const parent,
+ const bool delParent) :
+ ParticleContainer(parent, delParent),
+ mElements()
+{}
+
+ParticleList::~ParticleList()
+{}
+
+void ParticleList::addLocally(Particle *const particle)
+{
+ if (particle)
+ {
+ // The effect may not die without the beings permission or we segfault
+ particle->disableAutoDelete();
+ mElements.push_back(particle);
+ }
+}
+
+void ParticleList::removeLocally(const Particle *const particle)
+{
+ for (std::list<Particle *>::iterator it = mElements.begin();
+ it != mElements.end(); )
+ {
+ Particle *const p = *it;
+ if (p == particle)
+ {
+ p->kill();
+ it = mElements.erase(it);
+ }
+ else
+ {
+ ++it;
+ }
+ }
+}
+
+void ParticleList::clearLocally()
+{
+ FOR_EACH (ParticleListCIter, it, mElements)
+ (*it)->kill();
+
+ mElements.clear();
+}
+
+void ParticleList::moveTo(const float x, const float y)
+{
+ ParticleContainer::moveTo(x, y);
+
+ for (std::list<Particle *>::iterator it = mElements.begin();
+ it != mElements.end(); )
+ {
+ Particle *const p = *it;
+ p->moveTo(x, y);
+ if (p->isExtinct())
+ {
+ p->kill();
+ it = mElements.erase(it);
+ }
+ else
+ {
+ ++it;
+ }
+ }
+}
diff --git a/src/particle/particlelist.h b/src/particle/particlelist.h
new file mode 100644
index 000000000..e1e5634cb
--- /dev/null
+++ b/src/particle/particlelist.h
@@ -0,0 +1,65 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2008-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2014 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef PARTICLE_PARTICLELIST_H
+#define PARTICLE_PARTICLELIST_H
+
+#include "particle/particlecontainer.h"
+
+#include <list>
+
+#include "localconsts.h"
+
+class Particle;
+
+/**
+ * Linked list of particle effects.
+ */
+class ParticleList final : public ParticleContainer
+{
+ public:
+ explicit ParticleList(ParticleContainer *const parent = nullptr,
+ const bool delParent = true);
+
+ A_DELETE_COPY(ParticleList)
+
+ ~ParticleList();
+
+ /**
+ * Takes control of and adds a particle
+ */
+ void addLocally(Particle *const particle);
+
+ /**
+ * `kills' and removes a particle
+ */
+ void removeLocally(const Particle *const particle);
+
+ void clearLocally() override final;
+
+ void moveTo(const float x, const float y) override final;
+
+ protected:
+ std::list<Particle *> mElements; /**< Contained particle effects */
+};
+
+#endif // PARTICLE_PARTICLELIST_H