#include "..\e2daction.h" e2d::Spawn::Spawn() { } e2d::Spawn::Spawn(const std::vector& actions) { this->add(actions); } e2d::Spawn::~Spawn() { for (const auto& action : _actions) { GC::getInstance()->safeRelease(action); } } void e2d::Spawn::_init() { Action::_init(); if (_target) { for (const auto& action : _actions) { action->_target = _target; action->_init(); } } } void e2d::Spawn::_update() { Action::_update(); size_t doneNum = 0; for (const auto& action : _actions) { if (action->_isDone()) { ++doneNum; } else { action->_update(); } } if (doneNum == _actions.size()) { this->stop(); } } void e2d::Spawn::reset() { Action::reset(); for (const auto& action : _actions) { action->reset(); } } void e2d::Spawn::_resetTime() { for (const auto& action : _actions) { action->_resetTime(); } } void e2d::Spawn::add(Action * action) { if (action) { _actions.push_back(action); action->retain(); } } void e2d::Spawn::add(const std::vector& actions) { for (const auto &action : actions) { this->add(action); } } e2d::Spawn * e2d::Spawn::clone() const { auto spawn = new (e2d::autorelease) Spawn(); for (const auto& action : _actions) { if (action) { spawn->add(action->clone()); } } return spawn; } e2d::Spawn * e2d::Spawn::reverse() const { auto spawn = new (e2d::autorelease) Spawn(); if (spawn && !_actions.empty()) { std::vector newActions(_actions.size()); for (auto iter = _actions.crbegin(), iterCrend = _actions.crend(); iter != iterCrend; ++iter) { newActions.push_back((*iter)->reverse()); } spawn->add(newActions); } return spawn; }