[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