/* orxonox - the future of 3D-vertical-scrollers Copyright (C) 2004 orx 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, or (at your option) any later version. ### File Specific: main-programmer: Thomas Fahrni co-programmer: */ #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_AI #include "swarm_attack.h" #include "ai_module.h" #include "attack_module.h" void SwarmAttack::initialize() { std::map::iterator it; //load correct ai-module.. for (it= members.begin(); it!= members.end(); it++ ){ changeAIModule(it, new AttackModule()); } } void SwarmAttack::process(float dt) { WorldEntity* taskRelObject = NULL; if ( taskRelObjectName != "" ) { taskRelObject = dynamic_cast(WorldEntity::objectList().getBaseObject( taskRelObjectName )); std::map::iterator it; Vector sideL=taskRelPos.cross(Vector(0,1,0)).getNormalized(); Vector sideR=sideL*-1; Vector posL=Vector(0,0,0); Vector posR=Vector(0,0,0); //tell positions to swarm-members... float radius; Vector objectPos=taskRelObject->getAbsCoor(); for (it=members.begin(); it!= members.end(); it++ ){ radius=it->second->getNPCRadius(); posR=posR+sideR*radius*1.5; it->second->setDestination(objectPos+taskRelPos+posR); it->second->setDestinationMovement(Vector(0,0,0)); it->second->setTarget(taskRelObject); it->second->process(dt); posR=posR+sideR*radius*1.5; it++; if(it==members.end())break; radius=it->second->getNPCRadius(); posL=posL+sideL*radius*1.5; it->second->setDestination(objectPos+taskRelPos+posL); it->second->setDestinationMovement(Vector(0,0,0)); it->second->setTarget(taskRelObject); it->second->process(dt); posL=posL+sideL*radius*1.5; } //check time.. taskMaxTime-=dt; if(taskMaxTime<0)taskComplete=true; } }