/* 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 "ai_engine.h" #include "debug.h" #include "npcs/npc_test.h" #include "player.h" #include "playable.h" #include "state.h" AIEngine* AIEngine::singletonRef = NULL; void AIEngine::tick(float dt) { std::map::iterator it; std::vector* enemyList=new std::vector; for (it=teams.begin(); it!= teams.end(); it++ ) { //add player to enemys (player belongs to team 0) if(it->first!=0){ Player* pl = State::getPlayer(); if( pl!=NULL && pl->getPlayable()!=NULL ) enemyList->push_back(pl->getPlayable()); } //find other enemys for this team for(ObjectList::const_iterator npc = NPC2::objectList().begin(); npc != NPC2::objectList().end(); ++npc) if((*npc)->getTeam() != it->first)enemyList->push_back(*npc); //process the team it->second->setEnemyList(enemyList); it->second->process(dt); enemyList->clear(); } delete enemyList; } void AIEngine::addAI(int teamNumber, int swarmNumber, WorldEntity* npc, float maxSpeed, float attackDistance) { std::pair::iterator,bool> p; AITeam* newTeam=new AITeam(); p=teams.insert(std::make_pair(teamNumber,newTeam)); if(!p.second)delete newTeam; p.first->second->addAI(swarmNumber, npc, maxSpeed, attackDistance); } void AIEngine::removeAI(int teamNumber, int swarmNumber, WorldEntity* npc) { std::map::iterator it = teams.find(teamNumber); if(it==teams.end())return; it->second->removeAI(swarmNumber,npc); if(it->second->getTeamSize()==0){ delete it->second; teams.erase(it); } }