[Orxonox-commit 6965] r11586 - code/branches/AsteroidMining_HS17/src/modules/asteroidmining
remartin at orxonox.net
remartin at orxonox.net
Tue Nov 21 13:07:17 CET 2017
Author: remartin
Date: 2017-11-21 13:07:17 +0100 (Tue, 21 Nov 2017)
New Revision: 11586
Modified:
code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc
code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.h
Log:
Major breakthrough: Variable Collision shape works, error in spawnChildren() found (health...). Smaller problems remain (Weird initial velocity, correct health setting).
Modified: code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc
===================================================================
--- code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc 2017-11-20 16:32:43 UTC (rev 11585)
+++ code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.cc 2017-11-21 12:07:17 UTC (rev 11586)
@@ -43,16 +43,9 @@
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
KNACKPUNKTE:
-o Collision Shape-Problem (Funktioniert nur, wenn im Konstruktor) -> Mit Factory-Methode oder so basteln.
o Maximale Hitpunkte = 200?
+o komische Startgeschwindigkeit der initialisierten Asteroiden. Fliegen davon.
-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?
-
-
-
OFFEN:
o Add custom pickup 'resources'. Weird template stuff -> Problems setting 'size' and other properties? setNumber of Resources.
o Explosion parts
@@ -60,6 +53,8 @@
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:
o Pickup.h: Zugriffsänderung createSpawner
@@ -72,6 +67,10 @@
o Dynamische Definition -> putStuff-Methode, Werte noch nicht durchgesickert.
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.
+
*/
@@ -114,54 +113,53 @@
{
RegisterClass(AsteroidMinable);
- AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context)
- {
- RegisterObject(AsteroidMinable);
- // Old stuff from pawn
- this->setRadarObjectColour(ColourValue(1.0f, 1.0f, 0.0f, 1.0f));
- this->setRadarObjectShape(RadarViewable::Shape::Dot);
- this->setCollisionType(WorldEntity::CollisionType::Dynamic);
- this->bAlive_ = true;
+ // This constructor is for XML access only.
+ AsteroidMinable::AsteroidMinable(Context* context) : Pawn(context){
- this->bVulnerable_ = true;
- this->enableCollisionCallback();
+ // Da auch noetig? Wegen set in XML-Code?
+ RegisterObject(AsteroidMinable);
- // Default Values
- this->generateSmaller = true;
- //this->setHealth(50);
- this->size = 10; // customSize
this->context = context;
this->initialised = false;
- //this->roll = rand()*5; //etwas Drehung. richtige Variable
-//this = new AsteroidMinable()
+ //Noetig, damit nicht sofort zerstoert?
+ this->setCollisionType(WorldEntity::CollisionType::Dynamic);
+ // Old from Pawn
+ this->registerVariables();
- // 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);
+ 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);
- // Old from Pawn
- this->registerVariables();
+ // Old stuff from pawn
+ this->setRadarObjectColour(ColourValue(1.0f, 1.0f, 0.0f, 1.0f));
+ this->setRadarObjectShape(RadarViewable::Shape::Dot);
+ this->setCollisionType(WorldEntity::CollisionType::Dynamic);
- orxout() << "AsteroidMining:: Konstruktor passiert!" << endl;
+ this->enableCollisionCallback();
- }
+ // Default Values
+ this->generateSmaller = true;
+ //this->setHealth(50);
+ 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
- AsteroidMinable::~AsteroidMinable()
- {
+ // Fliegt davon, irgendwieso. Dies scheint auch nicht zu nuetzen.
+ this->setVelocity(0, 0, 0);
- }
- void AsteroidMinable::putStuff(){
- // Add Model
- //<Model position="0,-40,40" yaw="90" pitch="-90" roll="0" scale="4" mesh="ast6.mesh" />
+ // 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
char meshThingy[] = "";
@@ -175,13 +173,28 @@
cs->setRadius((this->size)*2); //OFFEN: Feinabstimmung der Radien. 2.5 in AsteroidField.lua
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?
+
+ }
+
void AsteroidMinable::XMLPort(Element& xmlelement, XMLPort::Mode mode)
{
SUPER(AsteroidMinable, XMLPort, xmlelement, mode);
@@ -229,8 +242,6 @@
void AsteroidMinable::setSize(float s){
this->size = s;
- this->health_ = 5*s;// capped at 200 in pawn or smth?
- this->setHealth(health_);
}
float AsteroidMinable::getSize(){
@@ -237,6 +248,11 @@
return this->size;
}
+ void AsteroidMinable::toggleShattering(bool b){
+ this->generateSmaller = b;
+ }
+
+
void AsteroidMinable::death() //ueberschreiben
{
@@ -334,24 +350,27 @@
//orxout() << "AsteroidMining::spawnChildren(): Inside for-loop." << endl;
//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){
orxout(internal_error, context::pickups) << "Weird, can't create new AsteroidMinable." << endl;
}
- 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;
// }
Modified: code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.h
===================================================================
--- code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.h 2017-11-20 16:32:43 UTC (rev 11585)
+++ code/branches/AsteroidMining_HS17/src/modules/asteroidmining/AsteroidMinable.h 2017-11-21 12:07:17 UTC (rev 11586)
@@ -49,7 +49,9 @@
{ // tolua_export
public:
- AsteroidMinable(Context* context);
+ AsteroidMinable(Context* context);// This constructor is for XML access only!
+ AsteroidMinable(Context* c, float size, Vector3 position);// Call this Constructor from other C-files.
+
virtual ~AsteroidMinable();
virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
@@ -64,10 +66,12 @@
virtual void setSize(float f);
virtual float getSize();
+ virtual void toggleShattering(bool b);
+
protected:
// Da neue Argumente reinstellen
//float asteroidVersion; // Bodenstrich-Konvention?,
More information about the Orxonox-commit
mailing list