Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/scriptimprovements/src/world_entities/script_triggers/script_trigger.cc @ 10608

Last change on this file since 10608 was 10607, checked in by snellen, 17 years ago

Introduced new scripttrigger: space trigger

File size: 8.0 KB
RevLine 
[8711]1/*
2   orxonox - the future of 3D-vertical-scrollers
[8408]3
[8711]4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11### File Specific:
12   main-programmer: Silvan Nellen
13   co-programmer: ...
14*/
15
[9006]16
[8171]17#include "script_trigger.h"
[8202]18#include "script.h"
[8171]19
[8239]20#include "state.h"
[9869]21#include "debug.h"
22ObjectListDefinition(ScriptTrigger);
[8408]23
[10607]24// CREATE_SCRIPTABLE_CLASS(ScriptTrigger,
25//             // Coordinates
26//                      addMethod("setAbsCoor", Executor3<PNode, lua_State*,float,float,float>(&PNode::setAbsCoor))
27//                          ->addMethod("getAbsCoorX", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorX))
28//                          ->addMethod("getAbsCoorY", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorY))
29//                          ->addMethod("getAbsCoorZ", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorZ))
30//             //Properties
31//                          ->addMethod("setName", Executor1<BaseObject, lua_State*, const std::string&>(&BaseObject::setName))
32//                          ->addMethod("setTarget", Executor1<ScriptTrigger, lua_State*, const std::string&>(&ScriptTrigger::setTarget))
33//                          ->addMethod("setTriggerParent", Executor1<ScriptTrigger, lua_State*, const std::string&>(&ScriptTrigger::setTriggerParent))
34//                          ->addMethod("setTriggerRemains", Executor1<ScriptTrigger, lua_State*, bool>(&ScriptTrigger::setTriggerRemains))
35//                          ->addMethod("setActiveOnCreation", Executor1<ScriptTrigger, lua_State*, bool>(&ScriptTrigger::setActiveOnCreation))
36//                          ->addMethod("setInvert", Executor1<ScriptTrigger, lua_State*, bool>(&ScriptTrigger::setInvert))
37//                          ->addMethod("setRadius", Executor1<ScriptTrigger, lua_State*, float>(&ScriptTrigger::setRadius))
38//                          ->addMethod("setScript", Executor1<ScriptTrigger, lua_State*, const std::string&>(&ScriptTrigger::setScript))
39//                          ->addMethod("setFunction", Executor1<ScriptTrigger, lua_State*, const std::string&>(&ScriptTrigger::setFunction))
40//                          ->addMethod("setDebugDraw", Executor1<ScriptTrigger, lua_State*, bool>(&ScriptTrigger::setDebugDraw))
41//                          ->addMethod("setAddToScript", Executor1<ScriptTrigger, lua_State*, bool>(&ScriptTrigger::setAddToScript))
42//              );
[8408]43
[8783]44
[8408]45/**
46 * Constructs a new ScriptTrigger.
47 * @param root the xml element to load the parameters from.
48 *
49 */
[8202]50ScriptTrigger::ScriptTrigger(const TiXmlElement* root)
[9869]51{
52  this->registerObject(this, ScriptTrigger::_objectList);
[8408]53  this->toList(OM_COMMON);
54
[8711]55  returnCount = 1;
[8894]56  scriptFinished = false;
[8408]57  doDebugDraw = false;
[10607]58
[8202]59  scriptCalled = false;
[8211]60  scriptIsOk = false;
[10565]61  executionStopped = false; // true when something goes wrong and the trigger has to be stopped
[8783]62  addToScript = false;
[9298]63  this->activeOnCreation = false;
[9406]64
[10607]65
[8783]66  if(root != NULL)
67  {
[9406]68
[9006]69    loadParams(root);
[9406]70
[9006]71    if(addToScript && scriptIsOk)
72    {
73      script->addObject( "ScriptTrigger", this->getName());
74    }
[9406]75
[8783]76  }
[9406]77
[8171]78}
79
[8408]80/**
81 * Deletes the ScriptTrigger.
[9406]82 *
[8408]83 */
[8171]84ScriptTrigger::~ScriptTrigger()
85{
86
87}
88
[8408]89/**
90 * Reads the values from the tml element and sets them.
91 * @param root the xml element to load the parameters from.
92 *
93 */
[8171]94void ScriptTrigger::loadParams(const TiXmlElement* root)
95{
[8783]96
[9006]97  WorldEntity ::loadParams(root);
[8211]98
[9006]99  LoadParam(root, "file", this, ScriptTrigger, setScript)
100      .describe("the fileName of the script, that should be triggered by this script trigger")
101      .defaultValues("");
102  LoadParam(root, "function", this, ScriptTrigger, setFunction)
103      .describe("the function of the script, that should be triggered by this script trigger")
104      .defaultValues("");
105  LoadParam(root, "abs-coor", this, ScriptTrigger, setAbsCoor)
106      .describe("where this script trigger should be located")
107      .defaultValues("");
108  LoadParam(root, "delay", this, ScriptTrigger, setDelay)
109      .describe("the delay after which the funtion sould be triggered")
110      .defaultValues(0);
111  LoadParam(root, "triggerparent", this, ScriptTrigger, setTriggerParent)
112      .describe("The name of the parent as it is in the *.oxw file")
113      .defaultValues("");
114  LoadParam(root, "debugdraw", this, ScriptTrigger, setDebugDraw)
115      .describe("")
[9110]116      .defaultValues(false);
[9006]117  LoadParam(root, "addtoscript", this, ScriptTrigger, setAddToScript)
118      .describe("True if this scripttrigger should be aviable in the script")
[9110]119      .defaultValues(false);
[8171]120}
121
122
[8408]123/**
124 * Sets the parent of the trigger.
[10607]125 * @param parent The parent.
[8408]126 */
[8205]127void ScriptTrigger::setTriggerParent(const std::string& parent)
128{
[9869]129  WorldEntity* parentEntity = WorldEntity::objectList().getObject(parent);
[8211]130
[8205]131  if (parentEntity != NULL)
132  {
[9869]133    this->setParent(parentEntity);
[8207]134    this->setParentMode(PNODE_MOVEMENT);
[8205]135  }
136  else
137  {
[10381]138    PRINTF(2)("ERROR SCRTIPTTRIGGER : Parent %s for %s::%s does not Exist\n", parent.c_str(), this->getClassCName(), this->getCName());
[8205]139  }
140}
141
[8171]142void ScriptTrigger::tick(float timestep)
143{
[8408]144
[8171]145}
146
147
[8711]148void ScriptTrigger::executeAction(float timestep)
[8171]149{
[10565]150  if(executionStopped && scriptIsOk) // If the script has been loaded correctly but something is wrong with the settings of the trigger
151  {
152   PRINT(1)("ERROR SCRTIPTTRIGGER: Something went wrong while executing %s in %s . Execution stopped! \n", functionName.c_str(), script->getFileName().c_str());
153   return;
154  }
155
[9006]156  if(scriptIsOk)
157  {
[8711]158       //testScriptingFramework();
[9006]159    if(!(script->selectFunction(this->functionName,returnCount)) )
[10564]160     {
[10381]161      PRINT(1)("ERROR SCRTIPTTRIGGER : Selection of %s in %s failed.\n",functionName.c_str(), script->getFileName().c_str());
[10565]162      executionStopped = true; //Since the triggersettings won't change on runtime, it makes no sense to call the function again.
[10564]163      return;
164     }
[9406]165
[10564]166    if (! (script->pushParam( timestep, this->functionName)) )
[10565]167     {
168      executionStopped = true; //Since the triggersettings won't change on runtime, it makes no sense to call the function again.
[10564]169      return;
[10565]170     }
[9006]171    if( !(script->executeFunction()) )
[10564]172     {
[10381]173      PRINT(1)("ERROR SCRTIPTTRIGGER : Execution of %s in %s failed.\n",functionName.c_str(), script->getFileName().c_str());
[10565]174      executionStopped = true; //Since the triggersettings won't change on runtime, it makes no sense to call the function again.
[10564]175      return;
176     }
[9006]177    scriptFinished = script->getReturnedBool();
178  }
[10381]179  else
180  printf("ERROR SCRTIPTTRIGGER : Script could not be executed !\n");
[9406]181
182
[8171]183}
[8211]184
185
186void ScriptTrigger::setScript(const std::string& file)
187{
[8239]188  ScriptManager* scriptManager = State::getScriptManager();
189  if (scriptManager != NULL)
190  {
[8408]191
[8239]192    script = scriptManager->getScriptByFile(file);
193    if(script != NULL)
[8408]194    {
[8239]195      scriptIsOk = true;
[8408]196    }
[10381]197    else
198    printf("ERROR SCRTIPTTRIGGER : Could not find the wrapperobject of %s , the script won't be executed ! \n", file.c_str());
[8239]199  }
[8214]200}
[8243]201
[8711]202/*
[8243]203 void ScriptTrigger::testScriptingFramework()
[9006]204{
[8243]205   std::string file("lunartest2.lua");
[8408]206   //get script
[8246]207   Script* script = State::getScriptManager()->getScriptByFile(file);
[8243]208   printf("-------------------------- top of the stack:%i\n",lua_gettop(script->getLuaState()));
209
210      //execute a function
211   printf("----------- main -----------\n");
212   std::string main("main");
213   if( script->selectFunction(main,3))
214     printf("function %s selected\n",main.c_str());
215
216   script->pushParam(3.14159,main);
[8408]217   printf("-------------------------- top of the stack:%i\n",lua_gettop(script->getLuaState()));
[8243]218   script->executeFunction();
219
[8408]220   int ret = script->getReturnedInt();
221   printf("main returned %i\n",ret);
[8243]222
223   if(script->getReturnedBool())
224     printf("main returned true\n");
225   else
226     printf("main returned false\n");
227
[8408]228   float retf = script->getReturnedFloat();
229   printf("main returned %f\n",retf);
[8243]230
[9406]231
[8408]232   printf("-------------------------- top of the stack:%i\n",lua_gettop(script->getLuaState()));
[8243]233      //execute a 2nd function
234   printf("----------- test -----------\n");
235   std::string test("test");
236   if( script->selectFunction(test,0))
237     printf("function %s selected\n",test.c_str());
238
239   script->executeFunction();
240
241
242      //if(argc>1) lua_dofile(script.getLuaState(), argv[1]);
243   printf("-------------------------- top of the stack:%i\n",lua_gettop(script->getLuaState()));
244
[8711]245}*/
Note: See TracBrowser for help on using the repository browser.