Changeset 10622 for code/trunk/src/orxonox/controllers
- Timestamp:
- Oct 4, 2015, 3:45:56 PM (9 years ago)
- Location:
- code/trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/orxonox/controllers/ControllerDirector.cc
r10262 r10622 41 41 { 42 42 SUPER(ControllerDirector, XMLPort, xmlelement, mode); 43 XMLPortParam(ControllerDirector, "scriptname", setScriptName, getScriptName, xmlelement, mode).defaultValues("testscript"); 43 44 44 45 orxout(verbose)<< "ControllerDirector::XMLPort " … … 83 84 else 84 85 return; 85 86 86 87 /* Set up a luastate to use for running the scripts */ 87 88 LuaState * ls = new LuaState(); … … 98 99 * variable "newctrlid" defined, which means it can make use of it. 99 100 */ 100 101 ls->doFile( "testscript.lua");101 std::string scr = this->scriptname_ + ".lua"; 102 ls->doFile(scr); 102 103 103 104 /* Increase the controller ID so we have a different one for -
code/trunk/src/orxonox/controllers/ControllerDirector.h
r10262 r10622 47 47 virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode); 48 48 49 inline void setScriptName(const std::string& name) { this->scriptname_ = name; } 50 inline const std::string& getScriptName() const { return this->scriptname_; } 51 49 52 50 53 /* Take over control of a given object */ … … 55 58 //void setNewController(Controller * controller); 56 59 57 private: 60 protected: 61 std::string scriptname_; 58 62 PlayerInfo* player_; 59 63 ControllableEntity* entity_; -
code/trunk/src/orxonox/controllers/FormationController.cc
r10290 r10622 955 955 bool FormationController::sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype) 956 956 { 957 958 957 959 if (entity1 == entity2) 958 960 return true; … … 984 986 } 985 987 986 Team Deathmatch* tdm = orxonox_cast<TeamDeathmatch*>(gametype);988 TeamGametype* tdm = orxonox_cast<TeamGametype*>(gametype); 987 989 if (tdm) 988 990 { … … 992 994 if (entity2->getPlayer()) 993 995 team2 = tdm->getTeam(entity2->getPlayer()); 994 }995 996 Mission* miss = orxonox_cast<Mission*>(gametype);997 if (miss)998 {999 if (entity1->getPlayer())1000 team1 = miss->getTeam(entity1->getPlayer());1001 1002 if (entity2->getPlayer())1003 team2 = miss->getTeam(entity2->getPlayer());1004 996 } 1005 997 -
code/trunk/src/orxonox/controllers/ScriptController.cc
r10262 r10622 21 21 * 22 22 * Author: 23 * Fabian 'x3n' Landau23 * ... 24 24 * Co-authors: 25 25 * ... 26 26 * 27 27 */ 28 29 /* 30 * Currently available lua commands: 31 * 32 * IMPORTANT: ALL COMMANDS DO REQUIRE 7 PARAMETERS TO BE PROVIDED. FILL UP WITH ZEROES IN UNIMPORTANT PLACES. 33 * 34 * Command | Abbreviation | Parameter 1 | '' 2 | '' 3 | '' 4 | '' 5 | '' 6 | '' 7 35 * 36 * "Move And Look" | mal | GoTo X Coordinate | '' Y '' | '' Z '' | LookAt X Coordinate | '' Y '' | '' Y '' | Duration 37 * "Rotate And Look" | ral | GoTo X Coordinate | '' Y '' | '' Z '' | Axis (1=x, 2=z, 3=z) | - | - | Duration 38 * "Spiral" | spi | GoTo X Coordinate | '' Y '' | '' Z '' | - | - | - | Duration 39 * "Transition Look" | chl | From X Coordinate | '' Y '' | '' Z '' | To X Coordinate | '' Y '' | '' Y '' | Duration 40 * "Idle (Do nothing)" | idle | Duration 41 */ 28 42 29 43 #include "ScriptController.h" … … 32 46 #include "worldentities/ControllableEntity.h" 33 47 #include "core/LuaState.h" 34 #include <cmath> 48 #include "core/LuaState.h" 49 #include "util/Math.h" 35 50 36 51 namespace orxonox … … 66 81 this->eventno = 0; 67 82 83 /* - First "previous event" scheduled at t=0 */ 84 /* - Needed for automatically updating event times */ 85 this->prevEventTime = 0; 68 86 } 69 87 … … 178 196 179 197 /* Get a variable that specifies how far along the trajectory 180 * we are 198 * we are currently. 181 199 */ 182 200 float dl = eventTime / currentEvent.duration; 183 201 184 /* Depending */202 /* Depending on command */ 185 203 /* Do some moving */ 186 204 if( this->processing ) 187 { 188 if( this->currentEvent.fctName == "mal" ) 205 { 206 // Abbreviation for "spiral" (rotation + translation) 207 if (this->currentEvent.fctName == "spi") { 208 209 // Need to know a perpendicular basis to the translation vector: 210 // Given (a, b, c) we chose (b, -a, 0)norm and (0, c, -b)norm 211 // Currently we set a fix rotational radius of 400 212 // TODO: Add an option to adjust radius of spiral movement 213 Vector3 direction = this->currentEvent.v1 - startpos; 214 215 Vector3* ortho1 = new Vector3(direction.y, -direction.x, 0); 216 float absOrtho1 = sqrt(direction.y * direction.y + direction.x * direction.x); 217 *ortho1 = 400 * cos(2 * math::pi * dl) * (*ortho1)/absOrtho1; 218 219 Vector3* ortho2 = new Vector3(0, direction.z, -direction.y); 220 float absOrtho2 = sqrt(direction.y * direction.y + direction.z * direction.z); 221 *ortho2 = 400 * sin(2 * math::pi * dl) * (*ortho2)/absOrtho2; 222 223 this->entity_->setPosition( (1-dl)*startpos + dl * this->currentEvent.v1 + *ortho1 + *ortho2); 224 225 delete ortho1; 226 delete ortho2; 227 } 228 229 // Abbreviation for "rotate and look" 230 if (this->currentEvent.fctName == "ral") 231 { 232 // Specify the axis 233 Vector3* a; 234 switch ((int) currentEvent.d) { 235 case 3: 236 a = new Vector3(this->currentEvent.v1.x + this->currentEvent.e*cos(2*math::pi*dl), 237 this->currentEvent.v1.y + this->currentEvent.e*sin(2*math::pi*dl), 238 this->currentEvent.v1.z); 239 break; 240 case 2: 241 a = new Vector3(this->currentEvent.v1.x + this->currentEvent.e*sin(2*math::pi*dl), 242 this->currentEvent.v1.y, 243 this->currentEvent.v1.z + this->currentEvent.e*cos(2*math::pi*dl)); 244 break; 245 case 1: 246 a = new Vector3(this->currentEvent.v1.x, 247 this->currentEvent.v1.y + this->currentEvent.e*sin(2*math::pi*dl), 248 this->currentEvent.v1.z + this->currentEvent.e*cos(2*math::pi*dl)); 249 break; 250 } 251 252 this->entity_->setPosition(*a); 253 254 /* Look at the specified position */ 255 this->entity_->lookAt(this->currentEvent.v1); 256 } 257 else if( this->currentEvent.fctName == "mal" ) 189 258 { 190 259 /* Set the position to the correct place in the trajectory */ … … 193 262 /* Look at the specified position */ 194 263 this->entity_->lookAt(this->currentEvent.v2); 195 196 /* Update look at position */197 //this->lookAtPosition = this->currentEvent.v2;198 264 } 199 265 else if( this->currentEvent.fctName == "chl" ) … … 224 290 /* Fill the structure with all the provided information */ 225 291 tmp.fctName = instruction; 292 226 293 //tmp.x1 = x1; tmp.y1 = y1; tmp.z1 = z1; 227 294 //tmp.x2 = x2; tmp.y2 = y2; tmp.z2 = z2; 228 295 tmp.v1 = Vector3(x1,y1,z1); 229 296 tmp.v2 = Vector3(x2,y2,z2); 297 298 // the parameters are not required to be vector coordinates! 299 // for convenience they are however stored twice if they have some kind of different meaning 300 tmp.a = x1; 301 tmp.b = y1; 302 tmp.c = z1; 303 tmp.d = x2; 304 tmp.e = y2; 305 tmp.f = z2; 306 230 307 tmp.duration = duration; 231 tmp.eventTime = executionTime; 232 233 orxout(verbose) << tmp.fctName << endl; 308 309 /* This is kind of a hack. If we hit the function idle all we want to do is 310 advance event execution time, not schedule anything */ 311 if (instruction == "idle") { 312 tmp.eventTime = this->prevEventTime; 313 this->prevEventTime += x1; 314 return; 315 } else { 316 tmp.eventTime = this->prevEventTime; 317 this->prevEventTime += duration; 318 } 234 319 235 320 /* Add the created event to the event list */ -
code/trunk/src/orxonox/controllers/ScriptController.h
r10262 r10622 21 21 * 22 22 * Author: 23 * Fabian 'x3n' Landau23 * ... 24 24 * Co-authors: 25 25 * ... … … 45 45 std::string fctName; 46 46 47 /** Final position we want to be at **/ 47 48 Vector3 v1; 49 50 /** Where we are looking **/ 48 51 Vector3 v2; 52 53 /** The parameters are additionally stored as a set of 6 numerical values **/ 54 float a, b, c, d, e, f; 49 55 50 56 /** Time span of the event */ … … 69 75 // LUA interface 70 76 // tolua_begin 71 void eventScheduler(std::string instruction ,72 float x1 , float y1, float z1,73 float x2 , float y2, float z2,74 float duration , float executionTime);77 void eventScheduler(std::string instruction = "", 78 float x1 = 0, float y1 = 0, float z1 = 0, 79 float x2 = 0, float y2 = 0, float z2 = 0, 80 float duration = 0, float executionTime = 0); 75 81 76 82 static ScriptController* getScriptController(); … … 116 122 Vector3 startpos; 117 123 124 /* Time of the previously scheduled event */ 125 float prevEventTime; 126 118 127 /* - Position to look at during that transition */ 119 128 //Vector3 lookAtPosition; -
code/trunk/src/orxonox/controllers/testscript.lua
r10262 r10622 1 print 1 print ('1: Hello World')
Note: See TracChangeset
for help on using the changeset viewer.