Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 28, 2018, 11:50:56 AM (5 years ago)
Author:
michbaum
Message:

Neuer Gegnercontroller und alle noetigen Aenderungen

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.cc

    r11716 r12125  
    7676#include "TowerDefenseCenterpoint.h"
    7777#include "worldentities/SpawnPoint.h"
    78 #include "controllers/WaypointController.h"
     78#include "TowerDefenseController.h" //muss ich noch in den richtigen Ordner verschieben
    7979#include "graphics/Model.h"
    8080#include "infos/PlayerInfo.h"
     
    175175        en1->setTeam(2);
    176176
    177         WaypointController* controller = (WaypointController*)(en1->getXMLController());
    178 
    179         if (controller != nullptr && waypoints_.size() > 1)
     177        //Jedem Enemy wird ein eigener Controller uebergeben
     178        TowerDefenseController* controller = new TowerDefenseController(this->center_->getContext());
     179        controller->setControllableEntity(en1);
     180        en1->setController(controller);
     181
     182        if (waypoints_.size() > 1)
    180183        {
    181184            en1->setPosition(waypoints_.at(0)->getPosition() + offset_);
     
    192195        }
    193196
    194         enemies_.push_back(en1);
     197        auto pair = std::make_pair(orxonox::WeakPtr<TowerDefenseEnemy>(en1), controller);
     198        enemies_.push_back(pair);
    195199    }
    196200
     
    291295            }           
    292296        }
     297               
    293298       
    294         for (std::list<WeakPtr<TowerDefenseEnemy>>::iterator it = enemies_.begin(); it != enemies_.end(); )
    295         {
    296             if (*it == nullptr)
    297             {
    298                 // the enemy was destroyed by a tower - remove it from the list
    299                 enemies_.erase(it++);
     299        for (EnemyList::iterator it = enemies_.begin(); it != enemies_.end(); )
     300        {
     301            WeakPtr<TowerDefenseEnemy> enemy = it->first;
     302            TowerDefenseController* ctrl = it->second;
     303
     304            if (enemy == nullptr)
     305            {
     306
     307                // the enemy was destroyed by a tower - remove it from the list AND destroy the corresponding controler
     308                ctrl->destroy();
     309                it = enemies_.erase(it);
    300310                addCredit(1);
    301311            }
     
    303313            {
    304314                //if ships are at the end they get destroyed
    305                 Vector3 ship = (*it)->getRVWorldPosition();
     315                Vector3 ship = enemy->getRVWorldPosition();
    306316                float distance = ship.distance(endpoint_);
    307317                if(distance < 40)
    308318                {
    309                     (*it)->destroy();
    310                     enemies_.erase(it++);
     319                    enemy->getController()->destroy();
     320                    enemy->destroy();
     321
     322                    it = enemies_.erase(it);
    311323                    this->reduceLifes(1);
    312324                    if (this->getLifes() == 0)
     
    412424        }
    413425
     426        //Falls kein anliegender Weg gefunden wurde.
    414427        delete nextCoord;
    415428        return nullptr;
Note: See TracChangeset for help on using the changeset viewer.