summaryrefslogtreecommitdiff
path: root/src/particle/particlelist.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-05-18 20:03:06 +0300
committerAndrei Karas <akaras@inbox.ru>2014-05-18 20:03:06 +0300
commitc8e22bbb7cc1531b09b994e06a58fd8c4664b7bb (patch)
treee8d4180c64aada75021673c4b6ef97c7aeedbeeb /src/particle/particlelist.cpp
parent7da95c7f4da447876458a0b1a17736b9a2865844 (diff)
downloadplus-c8e22bbb7cc1531b09b994e06a58fd8c4664b7bb.tar.gz
plus-c8e22bbb7cc1531b09b994e06a58fd8c4664b7bb.tar.bz2
plus-c8e22bbb7cc1531b09b994e06a58fd8c4664b7bb.tar.xz
plus-c8e22bbb7cc1531b09b994e06a58fd8c4664b7bb.zip
Move particlelist into separate file.
Diffstat (limited to 'src/particle/particlelist.cpp')
-rw-r--r--src/particle/particlelist.cpp96
1 files changed, 96 insertions, 0 deletions
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;
+ }
+ }
+}