[Orxonox-commit 7519] r12125 - in code/branches/TowerDefense_HS18: data/levels src/modules/towerdefense

michbaum at orxonox.net michbaum at orxonox.net
Wed Nov 28 11:50:56 CET 2018


Author: michbaum
Date: 2018-11-28 11:50:56 +0100 (Wed, 28 Nov 2018)
New Revision: 12125

Modified:
   code/branches/TowerDefense_HS18/data/levels/towerDefense.oxw
   code/branches/TowerDefense_HS18/src/modules/towerdefense/CMakeLists.txt
   code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.cc
   code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.h
   code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefenseEnemy.cc
Log:
Neuer Gegnercontroller und alle noetigen Aenderungen



Modified: code/branches/TowerDefense_HS18/data/levels/towerDefense.oxw
===================================================================
--- code/branches/TowerDefense_HS18/data/levels/towerDefense.oxw	2018-11-28 10:50:16 UTC (rev 12124)
+++ code/branches/TowerDefense_HS18/data/levels/towerDefense.oxw	2018-11-28 10:50:56 UTC (rev 12125)
@@ -22,7 +22,7 @@
 <Template name=selectercameras defaults=0>
   <TowerDefenseSelecter>
     <camerapositions>
-      <CameraPosition position="0,0,1300" lookat="0,0,0" absolute=true drag=true mouselook=true/>
+      <CameraPosition position="0,0,1400" lookat="0,0,0" absolute=true drag=true mouselook=true/>
     </camerapositions>
   </TowerDefenseSelecter>
 </Template>
@@ -300,9 +300,7 @@
       <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
       <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
     </collisionShapes>
-    <controller>
-       <WaypointController accuracy = 50/>
-    </controller>
+    <!-- Hier wurde der Controller entfernt-->
   </TowerDefenseEnemy>
 </Template>
 
@@ -373,9 +371,6 @@
       <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
       <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
     </collisionShapes> 
-    <controller>
-       <WaypointController accuracy = 50/>
-    </controller>
   </TowerDefenseEnemy>
 </Template>
 
@@ -446,9 +441,6 @@
       <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
       <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
     </collisionShapes>
-    <controller>
-       <WaypointController accuracy = 50/>
-    </controller>
   </TowerDefenseEnemy>
 </Template>
 
@@ -500,13 +492,13 @@
             F1F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1
             F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
             F1F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1
-            F1F1F1R2I3I3I3I3L3F1F1F1F1F1F1F1
-            F1F1F1F1F1F1F1F1I2F1F1F1F1F1F1F1
-            F1F1F1F1F1F1F1F1I2F1F1F1F1F1F1F1
-            X1I1I1I1R0F1F1F1I2F1F1F1F1F1F1F1
-            F1F1F1F1I0F1F1F1I2F1F1F1F1F1F1F1
-            F1F1F1F1I0F1F1F1I2F1F1F1F1F1F1F1
-            F1F1F1F1L1I1I1I1L2F1F1F1F1F1F1F1
+            F1F1F1R2I3I3I3I3I3I3I3L3F1F1F1F1
+            F1F1F1F1F1F1F1F1F1F1F1I2F1F1F1F1
+            F1F1F1F1F1F1F1F1F1F1F1I2F1F1F1F1
+            X1I1I1I1R0F1F1F1F1F1F1I2F1F1F1F1
+            F1F1F1F1I0F1F1F1F1F1F1I2F1F1F1F1
+            F1F1F1F1I0F1F1F1F1F1F1I2F1F1F1F1
+            F1F1F1F1L1I1I1I1I1I1I1L2F1F1F1F1
             F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
             F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1
             F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1"

Modified: code/branches/TowerDefense_HS18/src/modules/towerdefense/CMakeLists.txt
===================================================================
--- code/branches/TowerDefense_HS18/src/modules/towerdefense/CMakeLists.txt	2018-11-28 10:50:16 UTC (rev 12124)
+++ code/branches/TowerDefense_HS18/src/modules/towerdefense/CMakeLists.txt	2018-11-28 10:50:56 UTC (rev 12125)
@@ -9,6 +9,7 @@
   TowerDefenseSelecter.cc
   TowerDefenseField.cc
   TDCoordinate.cc
+  TowerDefenseController.cc
 )
 
 ORXONOX_ADD_LIBRARY(towerdefense

Modified: code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.cc
===================================================================
--- code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.cc	2018-11-28 10:50:16 UTC (rev 12124)
+++ code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.cc	2018-11-28 10:50:56 UTC (rev 12125)
@@ -75,7 +75,7 @@
 #include "TowerDefenseTower.h"
 #include "TowerDefenseCenterpoint.h"
 #include "worldentities/SpawnPoint.h"
-#include "controllers/WaypointController.h"
+#include "TowerDefenseController.h" //muss ich noch in den richtigen Ordner verschieben
 #include "graphics/Model.h"
 #include "infos/PlayerInfo.h"
 #include "chat/ChatManager.h"
@@ -174,9 +174,12 @@
 
         en1->setTeam(2);
 
-        WaypointController* controller = (WaypointController*)(en1->getXMLController());
+        //Jedem Enemy wird ein eigener Controller uebergeben
+        TowerDefenseController* controller = new TowerDefenseController(this->center_->getContext()); 
+        controller->setControllableEntity(en1);
+        en1->setController(controller);
 
-        if (controller != nullptr && waypoints_.size() > 1)
+        if (waypoints_.size() > 1)
         {
             en1->setPosition(waypoints_.at(0)->getPosition() + offset_);
             en1->setOrientation(Vector3(0,0,10), Degree(0));
@@ -191,7 +194,8 @@
             }
         }
 
-        enemies_.push_back(en1);
+        auto pair = std::make_pair(orxonox::WeakPtr<TowerDefenseEnemy>(en1), controller);
+        enemies_.push_back(pair);
     }
 
 
@@ -290,24 +294,32 @@
                 addTower(selecter->selectedPos_->GetX(), selecter->selectedPos_->GetY());
             }            
         }
+                
         
-        for (std::list<WeakPtr<TowerDefenseEnemy>>::iterator it = enemies_.begin(); it != enemies_.end(); )
+        for (EnemyList::iterator it = enemies_.begin(); it != enemies_.end(); )
         {
-            if (*it == nullptr)
+            WeakPtr<TowerDefenseEnemy> enemy = it->first;
+            TowerDefenseController* ctrl = it->second;
+
+            if (enemy == nullptr)
             {
-                // the enemy was destroyed by a tower - remove it from the list
-                enemies_.erase(it++);
+
+                // the enemy was destroyed by a tower - remove it from the list AND destroy the corresponding controler
+                ctrl->destroy();
+                it = enemies_.erase(it);
                 addCredit(1);
             }
             else
             {
                 //if ships are at the end they get destroyed
-                Vector3 ship = (*it)->getRVWorldPosition();
+                Vector3 ship = enemy->getRVWorldPosition();
                 float distance = ship.distance(endpoint_);
                 if(distance < 40)
                 {
-                    (*it)->destroy();
-                    enemies_.erase(it++);
+                    enemy->getController()->destroy();
+                    enemy->destroy();
+
+                    it = enemies_.erase(it);
                     this->reduceLifes(1);
                     if (this->getLifes() == 0)
                     {
@@ -411,6 +423,7 @@
             return nextCoord;
         }
 
+        //Falls kein anliegender Weg gefunden wurde.
         delete nextCoord;
         return nullptr;
     }

Modified: code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.h
===================================================================
--- code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.h	2018-11-28 10:50:16 UTC (rev 12124)
+++ code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefense.h	2018-11-28 10:50:56 UTC (rev 12125)
@@ -31,6 +31,7 @@
 #define _TowerDefense_H__
 #include "TDCoordinate.h"
 #include "TowerDefenseSelecter.h"
+#include "TowerDefenseController.h"
 #include "towerdefense/TowerDefensePrereqs.h"
 #include "gametypes/TeamDeathmatch.h"
 #include "TowerDefenseEnemy.h"
@@ -39,6 +40,8 @@
 
 namespace orxonox
 {
+    using EnemyList = std::list<std::pair<orxonox::WeakPtr<TowerDefenseEnemy>, TowerDefenseController*>>;
+
     /**
     @brief
     GameType class for TowerDefense. See TowerDefenseReadme.txt for Information.
@@ -85,7 +88,7 @@
         int credit_;
         int waveNumber_;
         int lifes_;
-        std::list<orxonox::WeakPtr<TowerDefenseEnemy>> enemies_;
+        EnemyList enemies_;
         TowerDefenseField* fields_[16][16];
         std::vector<orxonox::WeakPtr<TowerDefenseField>> waypoints_;
         Vector3 endpoint_;

Modified: code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefenseEnemy.cc
===================================================================
--- code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefenseEnemy.cc	2018-11-28 10:50:16 UTC (rev 12124)
+++ code/branches/TowerDefense_HS18/src/modules/towerdefense/TowerDefenseEnemy.cc	2018-11-28 10:50:56 UTC (rev 12125)
@@ -28,7 +28,6 @@
 
     TowerDefenseEnemy::~TowerDefenseEnemy()
     {
-
     }
 
     WeakPtr<TowerDefense> TowerDefenseEnemy::getGame()



More information about the Orxonox-commit mailing list