[Orxonox-commit 5353] r10016 - code/branches/ScriptableController/src/orxonox/controllers
mkronig at orxonox.net
mkronig at orxonox.net
Thu Apr 3 14:19:49 CEST 2014
Author: mkronig
Date: 2014-04-03 14:19:49 +0200 (Thu, 03 Apr 2014)
New Revision: 10016
Modified:
code/branches/ScriptableController/src/orxonox/controllers/ControllerDirector.cc
Log:
Modified: code/branches/ScriptableController/src/orxonox/controllers/ControllerDirector.cc
===================================================================
--- code/branches/ScriptableController/src/orxonox/controllers/ControllerDirector.cc 2014-04-03 11:57:32 UTC (rev 10015)
+++ code/branches/ScriptableController/src/orxonox/controllers/ControllerDirector.cc 2014-04-03 12:19:49 UTC (rev 10016)
@@ -1,26 +1,136 @@
-#include "ControllerDirector.h"
+/*
+First try of a scriptController. Target: An event occurs in the levelTry.oxw file, which is "heard" by an object of the type of this class. It then SHOULD (because it is not working) execute the party function.
+ */
+
+#include "ScriptController.h"
#include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
-#include "worldentities/ControllableEntity.h"
+namespace orxonox
+{
+ RegisterClass(ScriptController);
+ ScriptController::ScriptController(Context* context) : ArtificialController(context)
+ {
+ //Working
+ RegisterObject(ScriptController);
+ orxout()<<"hello universe constructor"<< endl;
+ this->player_=NULL;
+ this->entity_=NULL;
+ this->pTrigger_=NULL;
+ }
-namespace orxonox
-{
+ bool ScriptController::party(bool bTriggered, BaseObject* trigger)
+ {
+ //XMLPortEventSink seems not to execute the party function
+ orxout()<<"hello universe party"<< endl;
+ return true;
+ }
-RegisterClass(ControllerDirector);
+ void ScriptController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+ {
+ SUPER(ScriptController, XMLPort, xmlelement, mode);
- ControllerDirector::ControllerDirector(Context* context) : BaseObject(context)
+
+ XMLPortEventSink(ScriptController, BaseObject, "party", party, xmlelement, mode);
+ // Working
+ orxout()<<"hello universe xmlport"<< endl;
+ }
+
+ void ScriptController::tick(float dt)
{
- RegisterObject(ControllerDirector);
+ //Get controllable entity which is attached to this controller in the XML file.
+ ControllableEntity* entity = this->getControllableEntity();
+ if (!entity)
+ orxout()<<"No controllable entity found"<<endl;
+ return;
+
+
+ SUPER(ScriptController, tick, dt);
}
- ControllerDirector::~ControllerDirector(){}
+
+ void ScriptController::takeControl(Controller * controller, BaseObject * trigger) {
+
+ preparationToTakeControl(trigger);
+ setNewController(controller);
+
+ }
+
+
+ bool ScriptController::preparationToTakeControl(BaseObject * trigger) {
+
+ this->pTrigger_ = orxonox_cast<PlayerTrigger*>(trigger);
+ this->player_ = NULL;
+
+ // Check whether it is a player trigger and extract pawn from it
+ if(pTrigger != NULL)
+ {
+ if(!pTrigger->isForPlayer()) { // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
+ orxout(verbose, context::docking) << "Docking:execute PlayerTrigger was not triggered by a player.." << endl;
+ return false;
+ }
+ player_ = pTrigger->getTriggeringPlayer(); //Get the object which triggered the event.
+ }
+ else
+ {
+ orxout(verbose, context::docking) << "Docking::execute Not a player trigger, can't extract pawn from it.." << endl;
+ return false;
+ }
+
+
+ this->entity_ = this->player_->getControllableEntity();
+ assert(this->entity_);
+
+ }
+
+ void ScriptController::setNewController(Controller * controller) {
+
+
+ orxout(verbose) << "New Controller is going to be set!" << endl;
+
+ this->entity_->setDestroyWhenPlayerLeft(false);
+ this->player_->pauseControl();
+ this->entity_->setController(controller);
+ this->setControllableEntity(this->entity_);
+
-
-
+ }
+
+
+
+
+/* Detaillierte Planung
+Director nimmt event auf und hängt dann einen controller (momentan als erstellt zu betrachten) an objekt, welches event ausgelöst hat.
+
+
+
+ Klassenvariablen
+
+ ...? brauchts überhaupt?
+
+ Variablen (in Funktionen auftretend):
+
+ Playerinfo * player enthält infos über objekt, welches event ausgelöst hat.Relevant für Inputseite des Directors
+
+ Funktion:
+
+ Auf Seite des Inputs des Directors:
+
+ preparationForControlTakeOver(...) Vorbereitende Massnahmen um neuen Controller anzuhängen, z.B. player = pTrigger->getTriggeringPlayer();
+ Orientierung an execute Funktion von Dock.cc
+
+ Auf Outputseite des Directors:
+
+ takeControl(...) Orientierung an DockingController.cc
+
+ tick() Soll von Event ausgelöst werden, wenn z.B. Kamera an Endposition angelangt ist. Danach soll wieder ein
+ menschlicher Spieler die Kontrolle übernehmen (wie? new human controller? Klasse noch angucken!).
+*/
+
+
+
}
More information about the Orxonox-commit
mailing list