Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ScriptableController/src/orxonox/controllers/ControllerDirector.cc @ 10024

Last change on this file since 10024 was 10024, checked in by mkronig, 10 years ago

changes on controllerDirector project

File size: 4.0 KB
Line 
1/*
2First try of a ControllerDirector. 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.
3 */
4
5#include "ControllerDirector.h"
6#include "core/CoreIncludes.h"
7
8//#include "network/NetworkFunction.h"
9
10#include "infos/HumanPlayer.h"
11#include "interfaces/PlayerTrigger.h"
12#include "worldentities/pawns/Pawn.h"
13
14namespace orxonox
15{
16    RegisterClass(ControllerDirector);
17
18    ControllerDirector::ControllerDirector(Context* context) : ArtificialController(context)
19    {
20        //Working
21        RegisterObject(ControllerDirector);
22        orxout()<<"hello universe constructor"<< endl;
23
24           this->player_=NULL;
25           this->entity_=NULL;
26           this->pTrigger_=NULL;
27    }
28
29    bool ControllerDirector::party(bool bTriggered, BaseObject* trigger)
30       {
31           //XMLPortEventSink seems not to execute the party function
32           orxout()<<"hello universe party"<< endl;
33           return true;
34       }
35
36
37    void ControllerDirector::XMLPort(Element& xmlelement, XMLPort::Mode mode)
38    {
39        SUPER(ControllerDirector, XMLPort, xmlelement, mode);
40
41       
42        orxout()<<"hello universe xmlport"<< endl;
43    }
44
45    void ControllerDirector::XMLEventPort(Element& xmlelement, XMLPort::Mode mode)
46    {
47        SUPER(ControllerDirector, XMLEventPort, xmlelement, mode);
48
49        XMLPortEventSink(ControllerDirector, BaseObject, "party", party, xmlelement, mode);
50
51    }
52
53
54
55   /* void ControllerDirector::tick(float dt)
56    {
57
58        //Get controllable entity which is attached to this controller in the XML file.
59        ControllableEntity* entity = this->getControllableEntity();
60        if (!entity)
61            orxout()<<"No controllable entity found"<<endl;
62            return;
63
64       
65
66        SUPER(ControllerDirector, tick, dt);
67    }
68
69    */
70
71    void ControllerDirector::takeControl(Controller * controller, BaseObject * trigger) {
72
73        preparationToTakeControl(trigger);
74        setNewController(controller);
75
76    } 
77
78       
79    bool ControllerDirector::preparationToTakeControl(BaseObject * trigger) {
80
81            this->pTrigger_ = orxonox_cast<PlayerTrigger*>(trigger);
82        this->player_ = NULL;
83
84        orxout() << "Preparation to take Control!" << endl; 
85        // Check whether it is a player trigger and extract pawn from it
86        if(this->pTrigger_ != NULL)
87        {
88           
89            player_ = this->pTrigger_->getTriggeringPlayer();  //Get the object which triggered the event.
90        }
91        else
92        {
93            orxout() << "ControllerDirector::preparationToTakeControl Not a player trigger, can't extract pawn from it.." << endl;
94            return false;
95        }
96
97       
98        this->entity_ = this->player_->getControllableEntity();
99        assert(this->entity_);
100
101    return true;
102
103    }
104
105    void ControllerDirector::setNewController(Controller * controller) {
106
107
108        orxout() << "New Controller is going to be set!" << endl;
109
110        this->entity_->setDestroyWhenPlayerLeft(false);
111        this->player_->pauseControl();
112        this->entity_->setController(controller);
113        this->setControllableEntity(this->entity_);
114
115    }
116       
117   
118
119}
120
121/* Detaillierte Planung
122Director nimmt event auf und hängt dann einen controller (momentan als erstellt zu betrachten) an objekt, welches event ausgelöst hat.
123
124
125
126        Klassenvariablen
127
128                ...? brauchts überhaupt?
129
130        Variablen (in Funktionen auftretend):
131
132                Playerinfo * player             enthält infos über objekt, welches event ausgelöst hat.Relevant für Inputseite des Directors
133
134        Funktion:
135
136                Auf Seite des Inputs des Directors:
137
138                        preparationForControlTakeOver(...)      Vorbereitende Massnahmen um neuen Controller anzuhängen, z.B. player = pTrigger->getTriggeringPlayer();
139                                                                Orientierung an execute Funktion von Dock.cc
140       
141                Auf Outputseite des Directors:
142
143                        takeControl(...)                        Orientierung an DockingController.cc
144
145                        tick()                                  Soll von Event ausgelöst werden, wenn z.B. Kamera an Endposition angelangt ist. Danach soll wieder ein
146                                                                menschlicher Spieler die Kontrolle übernehmen (wie? new human controller? Klasse noch angucken!).
147*/
148
149
150
Note: See TracBrowser for help on using the repository browser.