[Orxonox-commit 6899] r11520 - in code/branches/AsteroidMining_HS17: data/levels src/orxonox/worldentities/pawns

remartin at orxonox.net remartin at orxonox.net
Mon Oct 30 16:12:04 CET 2017


Author: remartin
Date: 2017-10-30 16:12:04 +0100 (Mon, 30 Oct 2017)
New Revision: 11520

Modified:
   code/branches/AsteroidMining_HS17/data/levels/AsteroidFarming.oxw
   code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.cc
   code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.h
Log:
Added spawning of pickup and smaller asteroids, doesn't work yet.

Modified: code/branches/AsteroidMining_HS17/data/levels/AsteroidFarming.oxw
===================================================================
--- code/branches/AsteroidMining_HS17/data/levels/AsteroidFarming.oxw	2017-10-30 15:06:11 UTC (rev 11519)
+++ code/branches/AsteroidMining_HS17/data/levels/AsteroidFarming.oxw	2017-10-30 15:12:04 UTC (rev 11520)
@@ -75,6 +75,7 @@
         <events>
           <visibility>
             <EventListener event="flying4" />
+
           </visibility>
         </events>
         <attached>
@@ -83,9 +84,13 @@
         <collisionShapes>
             <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
         </collisionShapes>
-
     </Pawn>
 
+
+    <!-----AsteroidMinable --->
+
+    <AsteroidMinable size=5 position="0,-500,0" />
+
     
 
 

Modified: code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.cc
===================================================================
--- code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.cc	2017-10-30 15:06:11 UTC (rev 11519)
+++ code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.cc	2017-10-30 15:12:04 UTC (rev 11520)
@@ -65,6 +65,9 @@
 #include "core/object/ObjectListIterator.h"
 
 #include "controllers/FormationController.h"
+#include "pickup/items/HealthPickup.h"
+#include "pickup/PickupSpawner.h"
+#include "pickup/Pickup.h"
 
 namespace orxonox
 {
@@ -73,22 +76,16 @@
     AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context)
     {
         RegisterObject(AsteroidMinable);
+        this->setRadarObjectColour(ColourValue(1.0f, 1.0f, 0.0f, 1.0f));
+        this->setRadarObjectShape(RadarViewable::Shape::Dot);
 
-        this->bAlive_ = true;
-        this->bVulnerable_ = true;
+        this->size = 5;
+        this->context = context;
 
-        this->health_ = 0;
-        this->maxHealth_ = 0;
-        this->initialHealth_ = 0;
 
-        this->damageMultiplier_ = 1;
 
-        this->spawnparticleduration_ = 3.0f;
+        //      <Model position="0,-40,40" yaw="90" pitch="-90" roll="0" scale="4" mesh="ast6.mesh" />
 
-        this->aimPosition_ = Vector3::ZERO;
-
-        this->setRadarObjectColour(ColourValue::Yellow);
-        this->setRadarObjectShape(RadarViewable::Shape::Dot);
  
     }
 
@@ -100,6 +97,9 @@
     void AsteroidMinable::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
         SUPER(AsteroidMinable, XMLPort, xmlelement, mode);
+        //        XMLPortParam(PickupSpawner, "pickup", setPickupTemplateName, getPickupTemplateName, xmlelement, mode);
+        XMLPortParam(AsteroidMinable, "size", setSize,getSize, xmlelement, mode);
+
     }
 
     void AsteroidMinable::XMLEventPort(Element& xmlelement, XMLPort::Mode mode)
@@ -106,7 +106,7 @@
     {
         SUPER(AsteroidMinable, XMLEventPort, xmlelement, mode);
 
-        XMLPortEventState(AsteroidMinable, BaseObject, "vulnerability", setVulnerable, xmlelement, mode);
+        //XMLPortEventState(AsteroidMinable, BaseObject, "vulnerability", setVulnerable, xmlelement, mode);
     }
 
     void AsteroidMinable::registerVariables()
@@ -123,9 +123,35 @@
 
     }
 
+    void AsteroidMinable::setSize(float s){
+        this->size = s;
+        this->health_ = 200*s;
+    }
+
+    float AsteroidMinable::getSize(){
+        return this->size;
+    }
+
     void AsteroidMinable::death() //ueberschreiben
     {
         this->setHealth(1);
+
+
+
+        // Spawn Pickup
+        HealthPickup* hP = new HealthPickup(context);
+        //OFFEN: Add custom pickup 'resources' 
+        PickupSpawner* thingy = new PickupSpawner(context);
+        thingy->createDroppedPickup(context, hP, nullptr, 10);
+//    /*static*/ PickupSpawner* PickupSpawner::createDroppedPickup(Context* context, Pickupable* pickup, PickupCarrier* carrier, float triggerDistance)
+   
+
+
+
+        this->spawnChildren();
+
+
+
         if (this->getGametype() && this->getGametype()->allowPawnDeath(this, this->lastHitOriginator_))
         {
             // Set bAlive_ to false and wait for destroyLater() to do the destruction
@@ -137,10 +163,41 @@
         }
     }
 
+
+void AsteroidMinable::spawnChildren(){
+    // Spawn smaller Children
+    int massRem = this->size-1; //some mass is lost
+    int num = round(massRem*rand()); // random number of children
+    massRem = massRem-num;
+    int extra = 0;
+    for(int fisch=num; fisch>=1; fisch++){
+        // to distribute remaining mass
+        if(fisch==1){ 
+            extra = massRem;
+        }else{
+            extra = round(massRem*rand());
+            massRem = massRem-extra;
+        }
+        //Spawn this child
+        AsteroidMinable* child = new AsteroidMinable(context);
+        child->setSize(extra + 1);
+            
+        //OFFEN:Kollision der Kinder verhindern
+        //Relativ zu Elternteil automatisch?
+        //Typ position:rand()*Vektoriwas?
+        child->setPosition(this->getCarrierPosition());
+    }
 }
 
 
 
+
+}
+
+
+
+
+
 /*
     void DronePickup::changedUsed(void)
     {

Modified: code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.h
===================================================================
--- code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.h	2017-10-30 15:06:11 UTC (rev 11519)
+++ code/branches/AsteroidMining_HS17/src/orxonox/worldentities/pawns/AsteroidMinable.h	2017-10-30 15:12:04 UTC (rev 11520)
@@ -52,17 +52,30 @@
             AsteroidMinable(Context* context);
             virtual ~AsteroidMinable();
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
+            virtual void setSize(float f);
+            virtual float getSize();
+
+
         protected:
             // Da neue Argumente reinstellen
             float asteroidVersion; // Bodenstrich-Konvention?, 
             // Wert zwischen 1 und 6 (Spezialdinger?), die Mesh-Form
-            float asteroidSize;
+            float size;
             bool generateSmaller;
+            virtual void death();
 
+
+
         private:
+            void registerVariables();
+            virtual void spawnChildren();
 
+            Context* context;
 
+
     }; // tolua_export
 } // tolua_export
 



More information about the Orxonox-commit mailing list