[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