Changeset 11586
- Timestamp:
- Nov 21, 2017, 1:07:17 PM (7 years ago)
- Location:
- code/branches/AsteroidMining_HS17/src/modules/asteroidmining
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc
r11581 r11586 44 44 45 45 KNACKPUNKTE: 46 o Collision Shape-Problem (Funktioniert nur, wenn im Konstruktor) -> Mit Factory-Methode oder so basteln.47 46 o Maximale Hitpunkte = 200? 48 49 o Neue Asteroiden generieren -> Absturz 50 --> Kollidiert sofort mit irgendetwas, death() wird mehrfach aufgerufen. 51 --> Funktioniert der Test in den hit()-Methoden? 52 --> Welcher Aufruf loest die death()-Methode auf? 53 54 47 o komische Startgeschwindigkeit der initialisierten Asteroiden. Fliegen davon. 55 48 56 49 OFFEN: … … 61 54 HANDBUCH: 62 55 o im Level-File includes/pickups.oxi importieren. 56 o Bei der XML-Variante wird beim ersten Aufruf der Tick-Methode ein neuer Asteroid generiert, 57 damit die Groesse der Collision Shape korrekt initialisiert wird. 63 58 64 59 Anpassungen Pickup-Zeug: … … 73 68 o Error-Nachricht: Einfach Argumente leer lassen. 74 69 o Pickups: setMaxSpawned funktioniert nicht -> Bastelloesung: Auf 2 statt eins setzen, erstes wird wohl direkt zerstoert. 70 71 o Groessenabhaengige Collison shape: Umweg ueber zweiten Konstruktor. 72 o Absturz beim Asteroidengenerieren: Health war auf 0 gesetzt! Wurde nur bei der xml-Variante definiert. 73 75 74 */ 76 75 … … 115 114 RegisterClass(AsteroidMinable); 116 115 117 AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context) 118 { 116 117 // This constructor is for XML access only. 118 AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context){ 119 120 // Da auch noetig? Wegen set in XML-Code? 121 RegisterObject(AsteroidMinable); 122 123 this->context = context; 124 this->initialised = false; 125 126 //Noetig, damit nicht sofort zerstoert? 127 this->setCollisionType(WorldEntity::CollisionType::Dynamic); 128 129 // Old from Pawn 130 this->registerVariables(); 131 132 orxout() << "AsteroidMining:: Pseudo-Konstruktor passiert!" << endl; 133 134 } 135 136 // Call this one from other C-files. Takes arguments. 137 AsteroidMinable::AsteroidMinable(Context* c, float size, Vector3 position) : Pawn(c){ 138 119 139 RegisterObject(AsteroidMinable); 120 140 … … 123 143 this->setRadarObjectShape(RadarViewable::Shape::Dot); 124 144 this->setCollisionType(WorldEntity::CollisionType::Dynamic); 125 this->bAlive_ = true; 126 127 this->bVulnerable_ = true; 145 128 146 this->enableCollisionCallback(); 129 147 … … 131 149 this->generateSmaller = true; 132 150 //this->setHealth(50); 133 this->size = 10; // customSize 134 this->context = context; 135 this->initialised = false; 151 this->size = size; // customSize 152 this->health_ = 5*size;// capped at 200 in pawn or smth? 153 //this->setHealth(health_); // Confusing, delete one of these 154 this->context = c; 136 155 //this->roll = rand()*5; //etwas Drehung. richtige Variable 137 //this = new AsteroidMinable() 138 139 140 141 // DELETE if other stuff works! (wrong size etc.) 142 SphereCollisionShape* cs = new SphereCollisionShape(this->context); 143 cs->setRadius((this->size)*2); //OFFEN: Feinabstimmung der Radien 144 this->attachCollisionShape(cs); 145 146 147 148 149 // Old from Pawn 150 this->registerVariables(); 151 152 orxout() << "AsteroidMining:: Konstruktor passiert!" << endl; 153 154 } 155 156 AsteroidMinable::~AsteroidMinable() 157 { 158 159 } 160 161 void AsteroidMinable::putStuff(){ 162 163 // Add Model 164 //<Model position="0,-40,40" yaw="90" pitch="-90" roll="0" scale="4" mesh="ast6.mesh" /> 156 157 // Fliegt davon, irgendwieso. Dies scheint auch nicht zu nuetzen. 158 this->setVelocity(0, 0, 0); 159 160 161 162 // Add Model //<Model position="0,-40,40" yaw="90" pitch="-90" roll="0" scale="4" mesh="ast6.mesh" /> 165 163 Model* hull = new Model(this->context); 166 164 // random one of the 6 shapes … … 176 174 this->attachCollisionShape(cs); 177 175 176 // Old from Pawn 177 this->registerVariables(); 178 178 179 179 this->initialised=true; 180 180 181 orxout() << "AsteroidMining:: Initialisierung abgeschlosssssen." << endl; 181 orxout() << "AsteroidMining:: Initialisierung Zweitkonstruktor abgeschlosssssen." << endl; 182 183 } 184 185 AsteroidMinable::~AsteroidMinable(){ 186 187 } 188 189 void AsteroidMinable::putStuff(){ 190 191 // Just create a new asteroid to avoid Collision shape scale problems etc. 192 AsteroidMinable* reborn = new AsteroidMinable(this->context, this->size, this->getPosition()); 193 reborn->toggleShattering(true); // mainly here to avoid 'unused' warning. 194 this->~AsteroidMinable(); // seems dangerous. Necessary for efficiency? 182 195 183 196 } … … 230 243 void AsteroidMinable::setSize(float s){ 231 244 this->size = s; 232 this->health_ = 5*s;// capped at 200 in pawn or smth?233 this->setHealth(health_);234 245 } 235 246 … … 237 248 return this->size; 238 249 } 250 251 void AsteroidMinable::toggleShattering(bool b){ 252 this->generateSmaller = b; 253 } 254 239 255 240 256 void AsteroidMinable::death() //ueberschreiben … … 335 351 336 352 //Spawn this child Game crashes! 337 AsteroidMinable* child = new AsteroidMinable(this->context); 353 //AsteroidMinable* child = new AsteroidMinable(this->context); 354 AsteroidMinable* child = new AsteroidMinable(this->context, extra+1, this->getPosition() + Vector3(num*5, 0, 0)); 338 355 // if(!(child == nullptr)){//Errorgebastel 339 356 340 357 // Position zu spaet gesetzt? Tick nicht atomar -> falsche Groesse evtl? 358 359 // child->setSize(extra + 1); 360 361 // //OFFEN:Kollision der Kinder verhindern 362 // //Relativ zu Elternteil automatisch? 363 // //Typ position:rand()*Vektoriwas? 364 // //pawn->getWorldPosition() + Vector3(30,0,-30); 365 // child->setPosition(this->getPosition() + Vector3(num*5, 0, 0)); 366 // //child->setPosition(Vector3(0,0,0)); 341 367 342 368 if(child == nullptr){ … … 344 370 } 345 371 346 child->setSize(extra + 1); 347 348 //OFFEN:Kollision der Kinder verhindern 349 //Relativ zu Elternteil automatisch? 350 //Typ position:rand()*Vektoriwas? 351 //pawn->getWorldPosition() + Vector3(30,0,-30); 352 child->setPosition(this->getPosition() + Vector3(num*5, 0, 0)); 353 //child->setPosition(Vector3(0,0,0)); 372 354 373 355 374 //orxout() << "Done: Creating new Asteroid" << endl; -
code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.h
r11581 r11586 50 50 51 51 public: 52 AsteroidMinable(Context* context); 52 AsteroidMinable(Context* context);// This constructor is for XML access only! 53 AsteroidMinable(Context* c, float size, Vector3 position);// Call this Constructor from other C-files. 54 53 55 virtual ~AsteroidMinable(); 54 56 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); … … 64 66 virtual void setSize(float f); 65 67 virtual float getSize(); 68 69 virtual void toggleShattering(bool b); 66 70 67 71
Note: See TracChangeset
for help on using the changeset viewer.