diff options
Diffstat (limited to 'src/effectmanager.cpp')
-rw-r--r-- | src/effectmanager.cpp | 270 |
1 files changed, 0 insertions, 270 deletions
diff --git a/src/effectmanager.cpp b/src/effectmanager.cpp deleted file mode 100644 index 79886293f..000000000 --- a/src/effectmanager.cpp +++ /dev/null @@ -1,270 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2008 Fate <fate.tmw@googlemail.com> - * Copyright (C) 2008 Chuck Miller <shadowmil@gmail.com> - * Copyright (C) 2011-2017 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 "effectmanager.h" - -#include "configuration.h" -#include "soundmanager.h" - -#include "being/being.h" - -#include "utils/checkutils.h" - -#include "particle/particle.h" - -#include "resources/beingcommon.h" - -#include "debug.h" - -EffectManager *effectManager = nullptr; - -EffectManager::EffectManager() : - mEffects(), - mTimers() -{ - logger->log1("Effects are now loading"); - loadXmlFile(paths.getStringValue("effectsFile"), SkipError_false); - loadXmlFile(paths.getStringValue("effectsPatchFile"), SkipError_true); - loadXmlDir("effectsPatchDir", loadXmlFile); -} - -void EffectManager::loadXmlFile(const std::string &fileName, - const SkipError skipError) -{ - XML::Document doc(fileName, UseVirtFs_true, skipError); - XmlNodeConstPtrConst root = doc.rootNode(); - - if ((root == nullptr) || - !xmlNameEqual(root, "being-effects")) - { - logger->log("Error loading being effects file: " + fileName); - return; - } - - for_each_xml_child_node(node, root) - { - if (xmlNameEqual(node, "include")) - { - const std::string name = XML::getProperty(node, "name", ""); - if (!name.empty()) - loadXmlFile(name, skipError); - continue; - } - else if (xmlNameEqual(node, "effect")) - { - mEffects.push_back(EffectDescription( - XML::getProperty(node, "id", -1), - XML::getProperty(node, "particle", ""), - XML::getProperty(node, "audio", ""), - XML::getProperty(node, "sprite", ""))); - } - } -} - -EffectManager::~EffectManager() -{ -} - -bool EffectManager::triggerDirection(const int id, - Being *const being, - const SpriteDirection::Type &direction) -{ - int rotation; - switch (direction) - { - case SpriteDirection::DOWN: - case SpriteDirection::DOWNRIGHT: - case SpriteDirection::DOWNLEFT: - case SpriteDirection::DEFAULT: - case SpriteDirection::INVALID: - default: - rotation = 0; - break; - case SpriteDirection::LEFT: - rotation = 90; - break; - case SpriteDirection::UP: - case SpriteDirection::UPRIGHT: - case SpriteDirection::UPLEFT: - rotation = 180; - break; - case SpriteDirection::RIGHT: - rotation = 270; - break; - } - - return trigger(id, being, rotation); -} - -bool EffectManager::trigger(const int id, - Being *const being, - const int rotation) -{ - if ((being == nullptr) || (particleEngine == nullptr) || id == -1) - return false; - - BLOCK_START("EffectManager::trigger") - bool rValue = false; - FOR_EACH (STD_VECTOR<EffectDescription>::const_iterator, i, mEffects) - { - const EffectDescription &effect = *i; - if (effect.id == id) - { - rValue = true; - if (!effect.gfx.empty()) - { - Particle *const selfFX = particleEngine->addEffect( - effect.gfx, 0, 0, rotation); - being->controlAutoParticle(selfFX); - } - if (!effect.sfx.empty()) - soundManager.playSfx(effect.sfx); - if (!effect.sprite.empty()) - being->addEffect(effect.sprite); - return rValue; - } - } - reportAlways("Missing effect %d", id); - BLOCK_END("EffectManager::trigger") - return rValue; -} - -Particle *EffectManager::triggerReturn(const int id, - Being *const being, - const int rotation) -{ - if ((being == nullptr) || (particleEngine == nullptr) || id == -1) - return nullptr; - - Particle *rValue = nullptr; - FOR_EACH (STD_VECTOR<EffectDescription>::const_iterator, i, mEffects) - { - const EffectDescription &effect = *i; - if (effect.id == id) - { - if (!effect.gfx.empty()) - { - rValue = particleEngine->addEffect( - effect.gfx, 0, 0, rotation); - being->controlCustomParticle(rValue); - } - if (!effect.sfx.empty()) - soundManager.playSfx(effect.sfx); - if (!effect.sprite.empty()) - being->addEffect(effect.sprite); - return rValue; - } - } - reportAlways("Missing effect %d", id); - return rValue; -} - -bool EffectManager::trigger(const int id, - const int x, const int y, - const time_t endTime, - const int rotation) -{ - if ((particleEngine == nullptr) || id == -1) - return false; - - bool rValue = false; - FOR_EACH (STD_VECTOR<EffectDescription>::const_iterator, i, mEffects) - { - const EffectDescription &effect = *i; - if (effect.id == id) - { - rValue = true; - if (!effect.gfx.empty()) - { - Particle *const particle = particleEngine->addEffect( - effect.gfx, - x, y, - rotation); - if (particle != nullptr) - mTimers.push_back(ParticleTimer(particle, endTime)); - } - if (!effect.sfx.empty()) - soundManager.playSfx(effect.sfx); - return rValue; - } - } - reportAlways("Missing effect %d", id); - return rValue; -} - -void EffectManager::triggerDefault(int effectId, - Being *const being, - const int defaultEffectId) -{ - if (effectId == -1) - effectId = defaultEffectId; - if (effectId == -1) - return; - trigger(effectId, being); -} - -void EffectManager::triggerDefault(int effectId, - const int x, - const int y, - const time_t endTime, - const int defaultEffectId) -{ - if (effectId == -1) - effectId = defaultEffectId; - if (effectId == -1) - return; - trigger(effectId, x, y, endTime); -} - -void EffectManager::logic() -{ - const time_t time = cur_time; - bool found(true); - while (found) - { - found = false; - FOR_EACH (std::list<ParticleTimer>::iterator, it, mTimers) - { - const ParticleTimer &timer = *it; - if (timer.endTime < time) - { - found = true; - Particle *const particle = timer.particle; - if (particle != nullptr) - particle->kill(); - mTimers.erase(it); - break; - } - } - } -} - -void EffectManager::clear() -{ - FOR_EACH (std::list<ParticleTimer>::iterator, it, mTimers) - { - Particle *const particle = (*it).particle; - if (particle != nullptr) - particle->kill(); - } - mTimers.clear(); -} |