[Orxonox-commit 6920] r11541 - in code/branches/Asteroid_HS17: data/levels data/levels/templates src/modules/asteroids

vyang at orxonox.net vyang at orxonox.net
Mon Nov 6 16:06:54 CET 2017


Author: vyang
Date: 2017-11-06 16:06:54 +0100 (Mon, 06 Nov 2017)
New Revision: 11541

Added:
   code/branches/Asteroid_HS17/data/levels/templates/spaceshipAsteroids.oxt
Modified:
   code/branches/Asteroid_HS17/data/levels/Asteroid.oxw
   code/branches/Asteroid_HS17/data/levels/Asteroids.oxw
   code/branches/Asteroid_HS17/src/modules/asteroids/Asteroids.cc
   code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsCenterPoint.h
   code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.cc
   code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.h
   code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.cc
   code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.h
Log:
TestLevel Design -> immer noch mit Fehlermeldungen, Asteroiden in der death() Methode von AsteroidsStone spawnen oder im game?

Modified: code/branches/Asteroid_HS17/data/levels/Asteroid.oxw
===================================================================
--- code/branches/Asteroid_HS17/data/levels/Asteroid.oxw	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/data/levels/Asteroid.oxw	2017-11-06 15:06:54 UTC (rev 11541)
@@ -1,5 +1,5 @@
  <LevelInfo
- name = "emptyLevel"
+ name = "AsteroidsTest"
  description = "A level with absolutely nothing in it."
  tags = "test"
  screenshot = "emptylevel.png"
@@ -13,7 +13,7 @@
 ?>
 
 <?lua
-  include("templates/spaceshipEscort.oxt")
+  include("templates/spaceship.oxt")
   include("templates/endurancetest_template.oxt")
 ?>
 
@@ -29,13 +29,8 @@
   >
 
     <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
-    <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort />
+    <SpawnPoint team=0 position="0,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipAsteroids />
 
-    <ModularSpaceShip velocity= "20,0,0" position="0,0,200" lookat= "0,0,0" health="1000" maxhealth="1000" initialhealth="1000">
-      <templates>
-        <Template link=endurance />
-      </templates>
-    </ModularSpaceShip>
     
   </Scene>
 </Level>

Modified: code/branches/Asteroid_HS17/data/levels/Asteroids.oxw
===================================================================
--- code/branches/Asteroid_HS17/data/levels/Asteroids.oxw	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/data/levels/Asteroids.oxw	2017-11-06 15:06:54 UTC (rev 11541)
@@ -1,7 +1,7 @@
 <LevelInfo
  name = "Asteroids"
  description = "Try to prevent asteroids from colliding into your spaceshuttle. Be prepared to dodge all asteroids or destroy them."
- tags = "asteroids, minigame"
+ tags = "minigame"
  screenshot = "emptylevel.png"
 />
 
@@ -14,14 +14,28 @@
 <?lua
   include("templates/spaceshipAssff2.oxt")
   include("templates/spaceshipPirate.oxt")
-  include("templates/spaceshipInvader.oxt")
-  include("templates/enemyInvader.oxt")
+  include("templates/spaceshipAsteroids.oxt")
   include("overlays/InvaderHUD.oxo")
 ?>
 
+<Template name=asteroidsshipcamera defaults=0>
+  <AsteroidsShip>
+    <camerapositions>
+      <CameraPosition position="55,75,200" absolute=true />
+      <!--CameraPosition position="0,50,160" drag=true mouselook=true />
+      <CameraPosition position="0,50,0" pitch=-90 drag=true mouselook=true /-->
+    </camerapositions>
+  </AsteroidsShip>
+</Template>
+
+<Template name=asteroidsship>
+  <AsteroidsShip camerapositiontemplate=asteroidsshipcamera>
+  </AsteroidsShip>
+</Template>
+
 <Level
-  plugins = invader
-  gametype = Invader
+  plugins = asteroids
+  gametype = Asteroids
 >
   <templates>
     <Template link=lodtemplate_default />
@@ -37,38 +51,13 @@
 
     <!-- <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/> -->
     <Light type=directional position="1100, 11000, -7000" lookat="0, 0, 0" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0" />
-    <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=InvaderShip pawndesign=spaceshipinvader />
+    <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=AsteroidsShip pawndesign=asteroidsship />
 
     <DistanceTrigger name="start" position="-200,0,0" target="Pawn" distance=10 stayActive="true" delay=0 />
 
 
-    <InvaderCenterPoint name=invadercenter />
+    <AsteroidsCenterPoint name=asteroidscenter />
     
-    <?lua
-      for i = 1, 300, 1 do
-        j = math.random()
-    ?>
-
-    <MovableEntity
-      position = "<?lua print(math.random()* 40000 + 1000) ?>,-1000,<?lua print(math.random() * 4000 - 2000) ?>"
-      collisionType = dynamic
-      linearDamping = 0.8
-      angularDamping = 0
-      scale = "<?lua print(j * 150)?>"
-      collisiondamage = 0
-      enablecollisiondamage = true
-    >
-      <attached>
-        <Model mass="<?lua print(j * 1000) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh" />
-      </attached>
-      <collisionShapes>
-        <SphereCollisionShape radius="<?lua print(j * 350) ?>" />
-      </collisionShapes>
-    </MovableEntity>
-
-    <?lua
-      end
-    ?>
     
   </Scene>
 </Level>

Added: code/branches/Asteroid_HS17/data/levels/templates/spaceshipAsteroids.oxt
===================================================================
--- code/branches/Asteroid_HS17/data/levels/templates/spaceshipAsteroids.oxt	                        (rev 0)
+++ code/branches/Asteroid_HS17/data/levels/templates/spaceshipAsteroids.oxt	2017-11-06 15:06:54 UTC (rev 11541)
@@ -0,0 +1,129 @@
+<Template name=spaceshipescort>
+  <SpaceShip
+   hudtemplate            = spaceshiphud
+   camerapositiontemplate = spaceshipescortcameras
+   spawnparticlesource    = "Orxonox/fairytwirl"
+   spawnparticleduration  = 3
+   explosionchunks        = 10
+
+   health            = 80
+   maxhealth         = 200
+   initialhealth     = 80
+
+   shieldhealth        = 35
+   initialshieldhealth = 35
+   maxshieldhealth     = 60
+   shieldabsorption    = 0.9
+   shieldrechargerate  = 1
+   shieldrechargewaittime = 1
+
+   primaryThrust     = 150
+   auxilaryThrust    = 30
+   rotationThrust    = 50
+
+   lift = 1;
+   stallSpeed = 220;
+
+   boostPower            = 20
+   boostPowerRate        = 1
+   boostRate             = 5
+   boostCooldownDuration = 10
+
+   shakeFrequency = 15
+   shakeAmplitude = 6
+
+   collisionType     = "dynamic"
+   mass              = 80
+   linearDamping     = 0.7
+   angularDamping    = 0.9999999
+  >
+    <engines>
+      <MultiStateEngine position=" 7.6, 0, 6" template=spaceshipescortengine />
+      <MultiStateEngine position="-7.6, 0, 0" template=spaceshipescortengine />
+    </engines>
+    <attached>
+      <Model position="0,0,0" yaw=90 pitch=0 roll=0 scale=4 mesh="escortShip.mesh" />
+      <Model position="0,0,0" yaw=180 pitch=90 roll=0 scale=4 mesh="escortWeapon.mesh" />
+<!--Model mesh="cube.mesh" mass=10 position="0,0,3" scale3D="10,4,8" />
+<Model mesh="cube.mesh" mass=10 position="12.6,-2,3" scale3D="2.8,2.8,11" />
+<Model mesh="cube.mesh" mass=10 position="-12.6,-2,3" scale3D="2.8,2.8,11" />
+<Model mesh="cube.mesh" mass=10 position="0,0,-12" scale3D="4,4,7" /-->
+    </attached>
+    <collisionShapes>
+      <BoxCollisionShape position="0    ,0 ,  3" halfExtents="10,   4,8" />
+      <BoxCollisionShape position="12.6 ,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="-12.6,-2,  3" halfExtents="2.8,2.8,11"/>
+      <BoxCollisionShape position="0,     0,-12" halfExtents="4  , 4 ,7" />
+    </collisionShapes>
+    <explosion>
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_flash2" effect2="orxonox/explosion_flame2" />
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_shockwave2" effect2="orxonox/explosion_sparks2" />
+      <ExplosionPart minspeed=0 maxspeed=0 effect1="orxonox/explosion_streak2" effect2="orxonox/explosion_afterglow" />
+
+      <ExplosionPart mesh="explosionparts/escort_part_1.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_2.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_3.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_4.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_5.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+      <ExplosionPart mesh="explosionparts/escort_part_6.mesh" effect1="Orxonox/fire4" effect2="Orxonox/smoke6" />
+    </explosion>
+<?lua
+  include("../includes/weaponSettingsEscort.oxi")
+?>
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipescortcameras defaults=0>
+  <SpaceShip>
+    <camerapositions>
+      <CameraPosition position="0,150,0" pitch=-90 absolute=true />
+      <CameraPosition position="0,50,160" drag=true mouselook=true />
+      <CameraPosition position="0,40,125" drag=true mouselook=true />
+      <CameraPosition position="0,30, 90" drag=true mouselook=true />
+    </camerapositions>
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipescortengine baseclass=MultiStateEngine>
+  <MultiStateEngine
+   boostfactor    = 2.2
+
+   speedfront     = 200
+   speedback      =  70
+   speedleftright =  70
+   speedupdown    =  70
+
+   defEngineSndNormal = "sounds/Engine_low.ogg"
+   defEngineSndBoost = "sounds/Engine_high.ogg"
+
+   accelerationfront     = 700
+   accelerationbrake     = 700
+   accelerationback      =  125
+   accelerationleftright =  125
+   accelerationupdown    =  125
+  >
+    <EffectContainer condition="idle">
+      <WorldSound mainstate="activity" source="sounds/Engine_idle.ogg" looping=1 active=false/>
+       />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, -2, 14" colour="0.2, 0.5, 0.65, 1.0" width=150 length=15 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=2 turnofftime=1 material="Flares/ThrusterFlare1" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, -2, 14" colour="0.2, 0.5, 0.65, 1.0" width=15 length=15 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=2 turnofftime=1 material="Flares/ThrusterFlare1" />
+    </EffectContainer>
+    <EffectContainer condition="not idle">
+      <FadingBillboard mainstate=activity active=false scale=0.09 position="12, -2, 13" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.09 position="-12, -2, 13" colour="0.2, 1.0, 0.65, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+    </EffectContainer>
+    <EffectContainer condition="normal or brake">
+
+    </EffectContainer>
+    <EffectContainer condition="normal or boost">
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, -2, 14" colour="0.2, 1.0, 0.65, 1.0" width=5 length=1500 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, -2, 14" colour="0.2, 1.0, 0.65, 1.0" width=15 length=1500 lifetime=2 elements=1 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+    </EffectContainer>
+
+    <EffectContainer condition="boost">
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position=" 12, 0, 10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+      <Backlight mainstate=activity active=false scale=0.33 name=bltest position="-12, 0, 10" colour="0.6, 0.8, 0.75, 0.7" width=25 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+    </EffectContainer>
+
+  </MultiStateEngine>
+</Template>

Modified: code/branches/Asteroid_HS17/src/modules/asteroids/Asteroids.cc
===================================================================
--- code/branches/Asteroid_HS17/src/modules/asteroids/Asteroids.cc	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/src/modules/asteroids/Asteroids.cc	2017-11-06 15:06:54 UTC (rev 11541)
@@ -68,10 +68,9 @@
     }
 
     //spawnt durch den Timer Asteroiden, denk dran, dass falls ein Asteroid stirbt er in 2 teile geteilt wird
-    Asteroids::spawnStone(){
-        if(getPlayer() == nullptr){
-            return;
-        }
+    void Asteroids::spawnStone()
+    {
+        if(getPlayer() == nullptr) return;
 
         AsteroidsStone* newStone;
         newStone = new AsteroidsStone(this->center_->getContext());
@@ -79,31 +78,6 @@
         newStone->setAsteroidsPlayer(player);
     }
 
-        void Invader::spawnEnemy()
-    {
-        if (getPlayer() == nullptr)
-            return;
-
-        for (int i = 0; i < (3*log10(static_cast<double>(level)) + 1); i++)
-        {
-            InvaderEnemy* newPawn;
-            if (rand() % 42/(1 + level*level) == 0)
-            {
-                newPawn = new InvaderEnemyShooter(this->center_->getContext());
-                newPawn->addTemplate("enemyinvadershooter");
-            }
-            else
-            {
-                newPawn = new InvaderEnemy(this->center_->getContext());
-                newPawn->addTemplate("enemyinvader");
-            }
-            newPawn->setInvaderPlayer(player);
-            newPawn->level = level;
-            // spawn enemy at random points in front of player.
-            newPawn->setPosition(player->getPosition() + Vector3(500.f + 100 * i, 0, float(rand())/RAND_MAX * 400 - 200));
-        }
-    }
-
     /**
     @brief
         Destructor. Cleans up, if initialized.
@@ -154,7 +128,8 @@
     void Asteroids::costLife()
     {
         lives = 0;
-    };
+    }
+
     void Asteroids::start()
     {
         if (this->center_ == nullptr) // There needs to be a AsteroidsCenterpoint, i.e. the area the game takes place. If no centerpoint was specified, an error is thrown and the level is exited.

Modified: code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsCenterPoint.h
===================================================================
--- code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsCenterPoint.h	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsCenterPoint.h	2017-11-06 15:06:54 UTC (rev 11541)
@@ -59,6 +59,12 @@
             Vector2 getFieldDimension() const
                 { return Vector2(this->width_, this->height_); }
 
+            float getFieldWidth() const
+            {return this->width_;}
+
+            float getFieldHeight() const
+            {return this->height_;}
+            
         private:
             void checkGametype();
             //Spielfeld liegt in x-z Ebene, x ist LeftRight(Horizontale), z ist UpDown (Vertikale)

Modified: code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.cc
===================================================================
--- code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.cc	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.cc	2017-11-06 15:06:54 UTC (rev 11541)
@@ -17,21 +17,27 @@
     AsteroidsShip::AsteroidsShip(Context* context) : SpaceShip(context)
     {
         RegisterObject(AsteroidsShip);
-        /*radius = 20;
-        x = getPosition().x;
-        y = getPosition().y;
-        dx = 3.0f;
-        dy = 3.0f;
-        angle= 0.0f;*/
 
-        speed = 830;
+        angle= 0.0f;
+
+
+
         isFireing = false;
-        damping = 10;
+        damping = 0.90;
 
         lastTimeFront = 0;
         lastTimeLeft = 0;
         lastTime = 0;
 
+        height = this->getGame()->center_->getFieldHeight();
+        width = this->getGame()->center_->getFieldWidth();
+
+        force.x =0;
+        force.y =0;
+
+        velocity.x = 0;
+        velocity.y = 0;
+
     }
 
     //Destructor
@@ -46,69 +52,40 @@
     //update coordinates and velocity
     void AsteroidsShip::tick(float dt)
     {
-        /*Movement computation
+        //Movement computation beachte Beschleunigung?
         Vector3 pos = getPosition();
 
-        dx *= damping;
-        dy *= damping;
-
-        float speed = sqrt(dx*dx+ dy*dy);
+        float speed = sqrt(velocity.x*velocity.x+ velocity.y*velocity.y);
         if(speed > maxspeed)
         {
-            dx *= maxspeed/speed;
-            dy *= mayspeed/speed;
+            velocity.x *= maxspeed/speed;
+            velocity.y *= mayspeed/speed;
         }
 
-        x += dx;
-        y += dy;
+        pos.x += velocity.x*dt;
+        pos.y += velocity.y*dt;
 
-        if(x>W) x=0;
-        if(x<0) x=W;
-        if(y>H) y=0;
-        if(y<0) y=H;
-        setPosition(x,y,0);
 
-        //roll? muss sich das Raumschiff drehen?
-        setOrientation(angle, x, y, 0);
+        //haelt ship innerhalb des Kamerafensters
+        if(x>width) x=0;
+        if(x<0) x=width;
+        if(y>height) y=0;
+        if(y<0) y=height);
 
+
         //Schiessen wenn geschossen wurde
         // shoot!
+/*
         if (isFireing)
             ControllableEntity::fire(0);
-        
-        //Leben verloren */
-        Vector3 pos = getPosition();
+        */
 
-        //Movement calculation
-        lastTimeFront += dt * damping;
-        lastTimeLeft += dt * damping;
-        lastTime += dt;
-
-        velocity.x = interpolate(clamp(lastTimeLeft, 0.0f, 1.0f), desiredVelocity.x, 0.0f);
-        velocity.y = interpolate(clamp(lastTimeFront, 0.0f, 1.0f), desiredVelocity.y, 0.0f);
-
         //Execute movement
         if (this->hasLocalController())
         {
-            float dist_y = velocity.y * dt;
-            //float dist_x = velocity.x * dt;
-            if(dist_y + posforeward > -42*3 && dist_y + posforeward < 42*6)
-                posforeward += dist_y;
-            else
-            {
-                velocity.y = 0;
-                // restart if game ended
-/*
-                if (getGame())
-                    if (getGame()->bEndGame)
-                    {
-                        getGame()->start();
-                        return;
-                    }*/
-            }
+            force.x += 1;
+            force.y += 1;
 
-            pos += Vector3(1000 + velocity.y, 0, velocity.x) * dt;
-
         }
 
 
@@ -117,8 +94,8 @@
         Camera* camera = this->getCamera();
         if (camera != nullptr)
         {
-            // camera->setPosition(Vector3(-pos.z, -posforeward, 0));
-            camera->setOrientation(Vector3::UNIT_Z, Degree(0));
+            camera->setPosition(Vector3(0,cameradistance, 0));
+            camera->setOrientation(Vector3::UNIT_Z, Degree(90));
         }
 
 
@@ -129,23 +106,27 @@
             pos.y = 0;
         }
 
+        velocity.x *= damping;
+        velocity.y *= damping;
+
         setPosition(pos);
         setOrientation(Vector3::UNIT_Y, Degree(270));
 
         SUPER(AsteroidsShip, tick, dt);
+
     }
 
     void AsteroidsShip::moveFrontBack(const Vector2& value)
     {
-
-
+        velocity.x += 1;
     } 
 
-    void AsteroidsShip::moveFrontBack(const Vector2& value)
+    void AsteroidsShip::moveUpDown(const Vector2& value)
     {
+        velocity.y +=1;
 
     }
-    void AsteroidsShip::moveFrontBack(const Vector2& value)
+    void AsteroidsShip::moveFrontLeftRight(const Vector2& value)
     {
 
     }

Modified: code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.h
===================================================================
--- code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.h	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsShip.h	2017-11-06 15:06:54 UTC (rev 11541)
@@ -71,13 +71,18 @@
             bool bShowLevel;
             int lives;
             float angle, radius;
-            float speed, damping, posforeward;
+            float damping, posforeward;
             bool isFireing;
+            float dx, dy;
+            const float maxspeed = 500;
+            const float cameradistance = 100;
 
             //Nachschauen wie gross das Spielfeld ist!
-            float H = 1000;
-            float W = 1000;
+            float height;
+            float width;
 
+
+
         protected:
             virtual void death() override;
 
@@ -87,11 +92,11 @@
             WeakPtr<WorldEntity> lastEntity;
             Camera* camera;
             float lastTimeFront, lastTimeLeft, lastTime;
-            struct Velocity
+            struct Vector
             {
                 float x;
                 float y;
-            } velocity, desiredVelocity;
+            }force, velocity
             
     };
 }

Modified: code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.cc
===================================================================
--- code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.cc	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.cc	2017-11-06 15:06:54 UTC (rev 11541)
@@ -38,6 +38,7 @@
 #include <cmath>
 #include "util/Math.h"
 
+
 namespace orxonox
 {
     RegisterClass(AsteroidsStone);
@@ -46,27 +47,47 @@
     {
         RegisterObject(AsteroidsStone);
 
-
-
         maxspeed = 50.0f;
-        //Random Spawn? pos= random?
+        //Random Spawn? pos= random? -> spawn durch timer in der Asteroids Klasse
         this->setPosition(rnd(0, fieldWidth_), rnd(0, fieldHeigth_), 0);
-		if(r){
-			this.r = r*0.5;
-		}else{
-			this.r = rnd(15, 50);
-		}
 
 		//random Geschwindigkeit und Richtung
 		velocity.x = rnd(0, maxspeed);
 		velocity.y = rnd(0, maxspeed);
+        this->context = context;
     }
+
+    void Asteroids::death()
+    {
+        if(this->size == 1){
+            Pawn::death();
+        }else if(this->size == 2){
+            Pawn::death();
+
+            //Wie mache ich das ? Eigentlich in der game Klasse? sonst zeigt der Pointer auf einen falschen Bereich
+
+            for(int i = 0; i<2; i++)
+            {
+                AsteroidsStone* newStone;
+                newStone = new AsteroidsStone(this->context);
+                newStone->addTemplate("asteroidsstone");
+                newStone->setAsteroidsPlayer(player);
+            }
+
+        }
+    }
+
+
 //Bis hier geschrieben
     void AsteroidsStone::tick(float dt)
     {
     	Vector3 pos = this->getPosition();
     	pos.x += velocity.x*dt;
-    	pos.y += velocity.y*dt;
+    	pos.z += velocity.y*dt;
+
+        if(pos.y != 0){
+            pos.y=0;
+        }
         setPosition(pos);
         SUPER(AsteroidsStone, tick, dt);
     }

Modified: code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.h
===================================================================
--- code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.h	2017-11-06 15:05:15 UTC (rev 11540)
+++ code/branches/Asteroid_HS17/src/modules/asteroids/AsteroidsStone.h	2017-11-06 15:06:54 UTC (rev 11541)
@@ -37,6 +37,7 @@
 #include "asteroids/AsteroidsPrereqs.h"
 
 #include "worldentities/Pawn.h"
+#include "core/object/Context.h"
 
 namespace orxonox
 {
@@ -46,18 +47,25 @@
             AsteroidsStone(Context* context);
             virtual void tick(float dt) override;
 
-            //Radius of the asteroid
-            float r;
+            //Es gibt 3 Groessen von Meteroiden gross, mittel, klein, gross ->2 mittleren, mittel -> 2 kleinen, kleine-> verschwinden
+            int size;
             int level;
             virtual void setAsteroidsPlayer(AsteroidsShip* player){this->player = player;}
 
+
         protected:
 
+            virtual void death() override;
+
+
             //herausfinden->ueber Kamera Einstellung wie bei Pong?
             float fieldWidth_=500;
             float fieldHeight_=700;
             Vector2 velocity;
             float maxspeed;
+
+        private:
+            Context* context;
     };
 }
 



More information about the Orxonox-commit mailing list