[Orxonox-commit 3870] r8544 - in code/branches/dockingsystem2: data/levels src/modules/docking src/orxonox/infos

sven at orxonox.net sven at orxonox.net
Mon May 23 16:12:28 CEST 2011


Author: sven
Date: 2011-05-23 16:12:27 +0200 (Mon, 23 May 2011)
New Revision: 8544

Modified:
   code/branches/dockingsystem2/data/levels/docking.oxw
   code/branches/dockingsystem2/src/modules/docking/DockingController.cc
   code/branches/dockingsystem2/src/modules/docking/DockingController.h
   code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.cc
   code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.h
   code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc
   code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h
Log:
Spaceships attach now to the dock, fixed DockingController.

Modified: code/branches/dockingsystem2/data/levels/docking.oxw
===================================================================
--- code/branches/dockingsystem2/data/levels/docking.oxw	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/data/levels/docking.oxw	2011-05-23 14:12:27 UTC (rev 8544)
@@ -34,28 +34,9 @@
 
 
 
-    <Dock>
-        <animations>
-            <MoveToDockingTarget target="destroyer" position="10,150,40" />
-        </animations>
-        <effects>
-            <DockToShip target="spaceShip" />
-        </effects>
-        <events>
-            <execute>
-                <EventListener event="dockMe" />
-            </execute>
-        </events>
-        <attached>
-            <DistanceTrigger position="0,0,0" distance="30" target="Pawn" beaconMode="exclude" targetname="bcnSpaceShip" name="dockMe" />
-            <Billboard material="Examples/Flare" colour="1.0, 0, 0" />
-        </attached>
-    </Dock>
-
-
-
       <SpaceShip
-   position               = "-150,-50,-100"
+   position               = "280, 150, 115"
+   orientation            = "0.5, 0.5, 0.5, 0.5"
    hudtemplate            = "spaceshiphud"
    camerapositiontemplate = "spaceshipassffcameras"
    engine                 = "spaceshipassffengine"
@@ -118,6 +99,25 @@
         <DockingTarget name="destroyer" />
 
 
+        <Dock orientation="0.5, 0.5, 0.5, 0.5">
+            <animations>
+                <MoveToDockingTarget target="destroyer" position="10,150,40" />
+            </animations>
+            <effects>
+                <DockToShip target="spaceShip" />
+            </effects>
+            <events>
+                <execute>
+                    <EventListener event="dockMe" />
+                </execute>
+            </events>
+            <attached>
+                <DistanceTrigger position="0,0,0" distance="30" target="Pawn" beaconMode="exclude" targetname="bcnDestroyer" name="dockMe" />
+                <Billboard material="Examples/Flare" colour="1.0, 0, 0" />
+            </attached>
+        </Dock>
+
+
         <TeamSpawnPoint team="1" position="150,0,7" direction="-1,0,0" roll="90" yaw="0" spawnclass="SpaceShip" pawndesign="spaceshipassff" />
         <TeamSpawnPoint team="1" position="0,0,7" lookat="-1,0,0" roll="90"  yaw="0" spawnclass="SpaceShip" pawndesign="spaceshipassff" />
         <TeamSpawnPoint team="1" position="-50,0,7" lookat="-1,0,0" roll="90" yaw="0" spawnclass="SpaceShip" pawndesign="spaceshipassff" />

Modified: code/branches/dockingsystem2/src/modules/docking/DockingController.cc
===================================================================
--- code/branches/dockingsystem2/src/modules/docking/DockingController.cc	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/src/modules/docking/DockingController.cc	2011-05-23 14:12:27 UTC (rev 8544)
@@ -28,6 +28,8 @@
 
 #include "DockingController.h"
 
+#include <cmath>
+
 #include "infos/PlayerInfo.h"
 #include "worldentities/ControllableEntity.h"
 #include "Dock.h"
@@ -48,21 +50,80 @@
 
     void DockingController::tick(float dt)
     {
-        this->moveToTargetPosition();
+        ControllableEntity* entity = this->getControllableEntity();
+        if (!entity)
+            return;
 
+        float distance = (dock->getWorldPosition() - entity->getPosition()).length();
+        Vector2 coord = get2DViewdirection(     // I don't understand this too
+            entity->getPosition(),
+            entity->getOrientation() * WorldEntity::FRONT,
+            entity->getOrientation() * WorldEntity::UP,
+            dock->getWorldPosition()
+        );
+
+        // adjust direction of spaceship
+        if (distance > 10)
+        {
+            entity->rotateYaw(-1.0f * 0.8f * sgn(coord.x) * coord.x*coord.x);
+            entity->rotatePitch(0.8f * sgn(coord.y) * coord.y*coord.y);
+        }
+
+        /*// adjust speed
+        if (distance < 200 && entity->getVelocity().squaredLength() > dock->getVelocity().squaredLength())
+            entity->moveFrontBack(0.2f);
+        else
+            entity->moveFrontBack(0.8f);*/
+
+        entity->moveFrontBack(0.5f * log(distance/10.0f));
+
+        if (distance < 20)
+            this->positionReached();
+
         SUPER(DockingController, tick, dt);
     }
 
+    void DockingController::takeControl(bool docking)
+    {
+        this->docking = docking;
+
+        entity = player->getControllableEntity();
+        assert(entity);
+
+        if (docking)
+        {
+            COUT(0) << "DockingController::takeControl Taking over control." << std::endl;
+
+            entity->setDestroyWhenPlayerLeft(false);
+            player->pauseControl();
+            entity->setController(this);
+            this->setControllableEntity(entity);
+        }
+    }
+
     void DockingController::positionReached()
     {
-        // TODO; Give control back to player
-        PlayerInfo* player = this->entity->getPlayer();
-        assert(player);
+        COUT(0) << "DockingController::positionReached() called." << std::endl;
 
+        assert(this->player);
+        assert(this->dock);
+
+        // stop spaceship
+        dock->attach(entity);
+        entity->setVelocity(0, 0, 0);
+        entity->setOrientation(dock->getOrientation());
+
+        // give control back to player
+        player->startControl(entity);
+        this->setActive(false);
+        this->controllableEntity_ = NULL;
+
         if (docking)
             dock->dockingAnimationFinished(player);
-        else
-            dock->undockingAnimationFinished(player);
+        /*else
+            dock->undockingAnimationFinished(player);*/
+
+        this->destroy();
     }
 }
 

Modified: code/branches/dockingsystem2/src/modules/docking/DockingController.h
===================================================================
--- code/branches/dockingsystem2/src/modules/docking/DockingController.h	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/src/modules/docking/DockingController.h	2011-05-23 14:12:27 UTC (rev 8544)
@@ -49,14 +49,17 @@
             void takeControl(bool docking);
 
             void setDock(Dock* dock) { this->dock = dock; }
-            void setEntity(ControllableEntity* entity) { this->entity = entity; }
+            void setPlayer(PlayerInfo* player) { this->player = player; }
 
         protected:
             virtual void positionReached();
 
         private:
+            bool docking;
+
             Dock* dock;
-            bool docking;
+            PlayerInfo* player;
+
             ControllableEntity* entity;
     };
 }

Modified: code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.cc
===================================================================
--- code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.cc	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.cc	2011-05-23 14:12:27 UTC (rev 8544)
@@ -52,13 +52,20 @@
     bool MoveToDockingTarget::docking(PlayerInfo *player)
     {
         assert(parent);
-        parent->dockingAnimationFinished(player);
+
+        DockingController *dockingController = new DockingController(this);
+        dockingController->setDock(parent);
+        dockingController->setPlayer(player);
+        dockingController->takeControl(true);
+
         return true;
     }
 
     bool MoveToDockingTarget::release(PlayerInfo *player)
     {
-        assert(parent);
+        //TODO: Investigate strange things...
+        parent->detach((WorldEntity*)player->getControllableEntity());
+
         parent->undockingAnimationFinished(player);
         return true;
     }

Modified: code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.h
===================================================================
--- code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.h	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/src/modules/docking/MoveToDockingTarget.h	2011-05-23 14:12:27 UTC (rev 8544)
@@ -37,6 +37,7 @@
 
 #include "DockingPrereqs.h"
 #include "DockingAnimation.h"
+#include "DockingController.h"
 #include "Dock.h"
 
 namespace orxonox

Modified: code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc
===================================================================
--- code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.cc	2011-05-23 14:12:27 UTC (rev 8544)
@@ -212,6 +212,18 @@
         this->changedControllableEntity();
     }
 
+    void PlayerInfo::pauseControl()
+    {
+        ControllableEntity* entity = this->controllableEntity_;
+
+        if (!entity)
+            return;
+
+        this->controllableEntity_->getController()->setActive(false);
+        //this->controllableEntity_->getController()->setControllableEntity(NULL);
+        this->controllableEntity_->setController(0);
+    }
+
     void PlayerInfo::stopTemporaryControl()
     {
         ControllableEntity* entity = this->controllableEntity_;

Modified: code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h
===================================================================
--- code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h	2011-05-23 14:01:49 UTC (rev 8543)
+++ code/branches/dockingsystem2/src/orxonox/infos/PlayerInfo.h	2011-05-23 14:12:27 UTC (rev 8544)
@@ -67,6 +67,7 @@
 
             void startControl(ControllableEntity* entity);
             void stopControl();
+            void pauseControl();
             void startTemporaryControl(ControllableEntity* entity);
             void stopTemporaryControl();
 




More information about the Orxonox-commit mailing list