Index: code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc
===================================================================
--- code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc	(revision 11581)
+++ code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc	(revision 11586)
@@ -44,13 +44,6 @@
 
 KNACKPUNKTE:
-o Collision Shape-Problem (Funktioniert nur, wenn im Konstruktor) -> Mit Factory-Methode oder so basteln. 
 o Maximale Hitpunkte = 200?
-
-o Neue Asteroiden generieren -> Absturz
---> Kollidiert sofort mit irgendetwas, death() wird mehrfach aufgerufen. 
---> Funktioniert der Test in den hit()-Methoden?
---> Welcher Aufruf loest die death()-Methode auf?
-
-
+o komische Startgeschwindigkeit der initialisierten Asteroiden. Fliegen davon. 
 
 OFFEN: 
@@ -61,4 +54,6 @@
 HANDBUCH:
 o im Level-File includes/pickups.oxi importieren. 
+o Bei der XML-Variante wird beim ersten Aufruf der Tick-Methode ein neuer Asteroid generiert, 
+  damit die Groesse der Collision Shape korrekt initialisiert wird. 
 
 Anpassungen Pickup-Zeug: 
@@ -73,4 +68,8 @@
 o Error-Nachricht: Einfach Argumente leer lassen. 
 o Pickups: setMaxSpawned funktioniert nicht -> Bastelloesung: Auf 2 statt eins setzen, erstes wird wohl direkt zerstoert. 
+
+o Groessenabhaengige Collison shape: Umweg ueber zweiten Konstruktor. 
+o Absturz beim Asteroidengenerieren: Health war auf 0 gesetzt! Wurde nur bei der xml-Variante definiert. 
+
 */
 
@@ -115,6 +114,27 @@
     RegisterClass(AsteroidMinable);
 
-    AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context)
-    {
+
+    // This constructor is for XML access only.
+    AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context){
+
+        // Da auch noetig? Wegen set in XML-Code?
+        RegisterObject(AsteroidMinable);
+
+        this->context = context;
+        this->initialised = false;
+
+        //Noetig, damit nicht sofort zerstoert?
+        this->setCollisionType(WorldEntity::CollisionType::Dynamic);
+
+        // Old from Pawn
+        this->registerVariables();
+
+        orxout() << "AsteroidMining:: Pseudo-Konstruktor passiert!" << endl;
+
+    }
+
+    // Call this one from other C-files. Takes arguments. 
+    AsteroidMinable::AsteroidMinable(Context* c, float size, Vector3 position) : Pawn(c){
+
         RegisterObject(AsteroidMinable);
 
@@ -123,7 +143,5 @@
         this->setRadarObjectShape(RadarViewable::Shape::Dot);
         this->setCollisionType(WorldEntity::CollisionType::Dynamic);
-        this->bAlive_ = true;
-
-        this->bVulnerable_ = true;
+
         this->enableCollisionCallback();
 
@@ -131,36 +149,16 @@
         this->generateSmaller = true; 
         //this->setHealth(50);
-        this->size = 10; // customSize
-        this->context = context;
-        this->initialised = false;
+        this->size = size; // customSize
+        this->health_ = 5*size;// capped at 200 in pawn or smth?
+        //this->setHealth(health_); // Confusing, delete one of these
+        this->context = c;
         //this->roll = rand()*5; //etwas Drehung. richtige Variable
-//this = new AsteroidMinable()
-
-
-
-        // DELETE if other stuff works! (wrong size etc.)
-        SphereCollisionShape* cs = new SphereCollisionShape(this->context);
-        cs->setRadius((this->size)*2); //OFFEN: Feinabstimmung der Radien 
-        this->attachCollisionShape(cs); 
-
-
-
-
-        // Old from Pawn
-        this->registerVariables();
-
-        orxout() << "AsteroidMining:: Konstruktor passiert!" << endl;
-
-    }
-
-    AsteroidMinable::~AsteroidMinable()
-    {
-
-    }
-
-    void AsteroidMinable::putStuff(){
-
-        // Add Model
-        //<Model position="0,-40,40" yaw="90" pitch="-90" roll="0" scale="4" mesh="ast6.mesh" />
+
+        // Fliegt davon, irgendwieso. Dies scheint auch nicht zu nuetzen. 
+        this->setVelocity(0, 0, 0);
+
+
+
+        // Add Model    //<Model position="0,-40,40" yaw="90" pitch="-90" roll="0" scale="4" mesh="ast6.mesh" />
         Model* hull = new Model(this->context);
         // random one of the 6 shapes
@@ -176,8 +174,23 @@
         this->attachCollisionShape(cs); 
 
+        // Old from Pawn
+        this->registerVariables();
 
         this->initialised=true; 
 
-        orxout() << "AsteroidMining:: Initialisierung abgeschlosssssen." << endl;
+        orxout() << "AsteroidMining:: Initialisierung Zweitkonstruktor abgeschlosssssen." << endl;
+
+    }
+
+    AsteroidMinable::~AsteroidMinable(){
+
+    }
+
+    void AsteroidMinable::putStuff(){
+
+        // Just create a new asteroid to avoid Collision shape scale problems etc. 
+        AsteroidMinable* reborn = new AsteroidMinable(this->context, this->size, this->getPosition());
+        reborn->toggleShattering(true); // mainly here to avoid 'unused' warning. 
+        this->~AsteroidMinable(); // seems dangerous. Necessary for efficiency? 
 
     }
@@ -230,6 +243,4 @@
     void AsteroidMinable::setSize(float s){
         this->size = s;
-        this->health_ = 5*s;// capped at 200 in pawn or smth?
-        this->setHealth(health_);
     }
 
@@ -237,4 +248,9 @@
         return this->size;
     }
+
+    void AsteroidMinable::toggleShattering(bool b){
+        this->generateSmaller = b;
+    }
+
 
     void AsteroidMinable::death() //ueberschreiben
@@ -335,8 +351,18 @@
 
         //Spawn this child  Game crashes!
-        AsteroidMinable* child = new AsteroidMinable(this->context);
+        //AsteroidMinable* child = new AsteroidMinable(this->context);
+        AsteroidMinable* child = new AsteroidMinable(this->context, extra+1, this->getPosition() + Vector3(num*5, 0, 0));
         // if(!(child == nullptr)){//Errorgebastel
 
         // Position zu spaet gesetzt? Tick nicht atomar -> falsche Groesse evtl?
+
+        // child->setSize(extra + 1);
+                
+        //     //OFFEN:Kollision der Kinder verhindern
+        //     //Relativ zu Elternteil automatisch?
+        //     //Typ position:rand()*Vektoriwas?
+        //     //pawn->getWorldPosition() + Vector3(30,0,-30);
+        // child->setPosition(this->getPosition() + Vector3(num*5, 0, 0));
+        // //child->setPosition(Vector3(0,0,0));
 
         if(child == nullptr){
@@ -344,12 +370,5 @@
         }
 
-        child->setSize(extra + 1);
-                
-            //OFFEN:Kollision der Kinder verhindern
-            //Relativ zu Elternteil automatisch?
-            //Typ position:rand()*Vektoriwas?
-            //pawn->getWorldPosition() + Vector3(30,0,-30);
-        child->setPosition(this->getPosition() + Vector3(num*5, 0, 0));
-        //child->setPosition(Vector3(0,0,0));
+
 
         //orxout() << "Done: Creating new Asteroid" << endl;
