Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 9869 in orxonox.OLD for trunk/src/lib/script_engine


Ignore:
Timestamp:
Oct 3, 2006, 12:19:30 AM (18 years ago)
Author:
bensch
Message:

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

Location:
trunk/src/lib/script_engine
Files:
10 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/script_engine/Makefile.am

    r8711 r9869  
    1616                script_manager.cc \
    1717                script_class.cc \
    18                 script_method.cc
    19                
     18                script_method.cc \
     19                executor_lua_state.cc
     20
    2021AM_CPPFLAGS= @LUA_INCLUDES@
    2122
     
    2526                script_manager.h \
    2627                script_class.h \
    27                 script_method.h
     28                script_method.h \
     29                executor_lua_state.h
    2830
    2931
  • trunk/src/lib/script_engine/lunar.h

    r8408 r9869  
    1616  userdataType;
    1717public:
    18   typedef Executor* mfp;
     18  typedef Executor<lua_State*>* mfp;
    1919  typedef struct { const char *name; mfp mfunc; }
    2020  RegType;
     
    184184    lua_remove(L, 1);  // remove self so member function args start at index 1
    185185    // get member function from upvalue
    186     Executor *l = static_cast<Executor*>(lua_touserdata(L, lua_upvalueindex(1)));
    187     int value;
    188     (*l)(obj, value, L);  // call member function
    189     return value;
     186    mfp l = static_cast<mfp>(lua_touserdata(L, lua_upvalueindex(1)));
     187    (*l)(obj, L);  // call member function
     188    return l->hasRetVal()? 1 : 0;
    190189  }
    191190
  • trunk/src/lib/script_engine/script.cc

    r9298 r9869  
    1818#include "luaincl.h"
    1919#include "debug.h"
    20 #include "util/loading/resource_manager.h"
    21 
     20
     21#include "loading/resource_manager.h"
    2222#include "loading/load_param.h"
    2323#include "parser/tinyxml/tinyxml.h"
    2424
    25 #include "class_list.h"
    26 CREATE_SCRIPTABLE_CLASS(Script, CL_SCRIPT,
    27                     addMethod("addObject", ExecutorLua2<Script,const std::string&, const std::string& >(&Script::addObject))
    28                     ->addMethod("registerClass", ExecutorLua1<Script,const std::string&>(&Script::registerClass))
    29                     ->addMethod("selectFunction", ExecutorLua2ret<Script, bool, const std::string&, int >(&Script::selectFunction))
    30                     ->addMethod("executeFunction", ExecutorLua0ret<Script,bool >(&Script::executeFunction))
     25ObjectListDefinition(Script);
     26
     27CREATE_SCRIPTABLE_CLASS(Script,
     28                    addMethod("addObject", Executor2<Script, lua_State*,const std::string&, const std::string& >(&Script::addObject))
     29                    ->addMethod("registerClass", Executor1<Script, lua_State*,const std::string&>(&Script::registerClass))
     30                    ->addMethod("selectFunction", Executor2ret<Script, lua_State*, bool, const std::string&, int >(&Script::selectFunction))
     31                    ->addMethod("executeFunction", Executor0ret<Script, lua_State*,bool >(&Script::executeFunction))
    3132                     );
     33
    3234
    3335Script::Script(const TiXmlElement* root)
    3436{
    35   this->setClassID(CL_SCRIPT, "Script");
     37  this->registerObject(this, Script::_objectList);
    3638
    3739  returnCount = argumentCount = 0;
     
    5254Script::Script(const std::string& filename)
    5355{
    54   this->setClassID(CL_SCRIPT, "Script");
     56  this->registerObject(this, Script::_objectList);
    5557
    5658  returnCount = argumentCount = 0;
     
    6466  luaopen_math(luaState);
    6567  luaopen_debug(luaState);
    66  
     68
    6769  this->loadFile(filename);
    6870
     
    98100bool Script::loadFile(const std::string& filename)
    99101 {
    100    std::string filedest(ResourceManager::getInstance()->getDataDir());
    101    filedest += "scripts/" + filename;
    102    
     102   std::string filedest(Resources::ResourceManager::getInstance()->mainGlobalPath().name());
     103   filedest += "/scripts/" + filename;
     104
    103105   this->addThisScript();
    104106   this->registerStandartClasses();
    105    
     107
    106108   if(currentFile.length() != 0)
    107109   {
     
    142144   //printf(("Script %s: I am about to add %s of class %s\n",this->getName(),objectName.c_str(),className.c_str());
    143145
    144    BaseObject* scriptClass = ClassList::getObject(className, CL_SCRIPT_CLASS);
     146   ScriptClass* scriptClass = ScriptClass::objectList().getObject(className);
    145147  // printf(("The script class for %s is at %p \n",className.c_str(),scriptClass);
    146148   WorldObject tmpObj;
     
    150152     if( !classIsRegistered(className) )
    151153     {
    152      static_cast<ScriptClass*>(scriptClass)->registerClass(this);
    153      }
    154 
    155      BaseObject* object = ClassList::getObject(objectName, className);
     154       scriptClass->registerClass(this);
     155     }
     156
     157     BaseObject* object = ObjectListBase::getBaseObject(className, objectName);
    156158    // printf(("%s is at %p \n",objectName.c_str(),object);
    157159     if (object != NULL && !objectIsAdded(objectName))
    158160     {
    159         static_cast<ScriptClass*>(scriptClass)->insertObject(this, object, false);
     161        scriptClass->insertObject(this, object, false);
    160162        tmpObj.name = objectName;
    161163        registeredObjects.push_back(tmpObj);
     
    169171 bool Script::executeFile()
    170172 {
    171    PRINT(2)("WARNING: script.executeFile is not implemented yet\n");
     173   PRINTF(2)("script.executeFile is not implemented yet\n");
    172174   /*if(currentFile.length() != 0)
    173175   {
     
    214216    if(error != 0)
    215217    {
    216       printf("SCRIPT %s : ERROR: Failed to execute function %s: \n",currentFile.c_str(),currentFunction.c_str());
     218      PRINTF(1)("Script '%s' : Failed to execute function '%s': \n",currentFile.c_str(),currentFunction.c_str());
    217219     reportError(error);
    218220     //clean up
     
    229231   }
    230232   else
    231      printf("SCRIPT %s : ERROR: no function selected.\n",currentFile.c_str());
     233     PRINTF(1)("SCRIPT '%s' : no function selected.\n",currentFile.c_str());
    232234
    233235   return false;
     
    295297       lua_remove(luaState,-1*returnCount);
    296298       returnCount--;
    297        
     299
    298300     }
    299301   }
     
    352354void Script::addThisScript()
    353355{
    354   BaseObject* scriptClass = ClassList::getObject("Script", CL_SCRIPT_CLASS);
    355    if (scriptClass != NULL)
    356    {
    357      static_cast<ScriptClass*>(scriptClass)->registerClass(this);
    358      static_cast<ScriptClass*>(scriptClass)->insertObject(this, this,"thisscript", false);
     356  ScriptClass* scriptClass = ScriptClass::objectList().getObject("Script");
     357
     358  if (scriptClass != NULL)
     359   {
     360     scriptClass->registerClass(this);
     361     scriptClass->insertObject(this, this,"thisscript", false);
    359362   }
    360363}
     
    375378 {
    376379   bool success = false;
    377    
     380
    378381   //this->registerClass(std::string("Vector"));
    379382    this->registerClass("ScriptTrigger");
     
    382385   return success;
    383386 }
    384  
    385  
     387
     388
    386389 void Script::registerClass( const std::string& className)
    387390 {
    388    BaseObject* scriptClass = ClassList::getObject(className, CL_SCRIPT_CLASS);
     391   ScriptClass* scriptClass = ScriptClass::objectList().getObject(className);
    389392   //printf(("The script class for %s is at %p \n",className.c_str(),scriptClass);
     393
    390394   WorldObject tmpObj;
    391395   if (scriptClass != NULL)
     
    400404     }
    401405   }
    402  
     406
    403407 }
    404408
  • trunk/src/lib/script_engine/script.h

    r9298 r9869  
    2222class Script : public BaseObject
    2323{
     24  ObjectListDeclaration(Script);
    2425  public:
    2526    Script(const TiXmlElement* root = NULL);
     
    3334    bool loadFile(const std::string& filename);
    3435    void addObject( const std::string& className,const std::string& objectName);
    35     void registerClass(const std::string& className);                           //!< Register a class but dont add any instances 
     36    void registerClass(const std::string& className);                           //!< Register a class but dont add any instances
    3637
    3738    /// QUERRYING
  • trunk/src/lib/script_engine/script_class.cc

    r8711 r9869  
    1919#include <cassert>
    2020
     21ObjectListDefinition(ScriptClass);
    2122/**
    2223 * @brief standard constructor
    2324 * @todo this constructor is not jet implemented - do it
    2425*/
    25 ScriptClass::ScriptClass(const std::string& name, ClassID classID, ScriptMethod* scriptMethods)
    26     : BaseObject(name)
     26ScriptClass::ScriptClass(const std::string& name, const ClassID& classID, ScriptMethod* scriptMethods)
     27    : BaseObject(name), _classID(classID)
    2728{
    2829  assert(scriptMethods != NULL);
    29   this->setClassID(CL_SCRIPT_CLASS, "ScriptClass");
     30  this->registerObject(this, ScriptClass::_objectList);
    3031
    3132  this->_classID = classID;
  • trunk/src/lib/script_engine/script_class.h

    r9003 r9869  
    1818 * this should be used at the beginning of all the Classes that should be loadable (in the cc-file)
    1919 */
    20 #define CREATE_SCRIPTABLE_CLASS(CLASS_NAME, CLASS_ID, SCRIPT_METHODS) \
    21     tScriptClass<CLASS_NAME> global_##CLASS_NAME##_ScriptableClass(#CLASS_NAME, CLASS_ID, (new ScriptMethod)->SCRIPT_METHODS)
     20#define CREATE_SCRIPTABLE_CLASS(CLASS_NAME, SCRIPT_METHODS) \
     21    tScriptClass<CLASS_NAME> global_##CLASS_NAME##_ScriptableClass(#CLASS_NAME, CLASS_NAME::staticClassID(), (new ScriptMethod)->SCRIPT_METHODS)
    2222
    2323
    2424//! A class for ...
    25 class ScriptClass : protected BaseObject
     25class ScriptClass : public BaseObject
    2626{
     27  ObjectListDeclaration(ScriptClass);
    2728
    2829public:
    2930  virtual ~ScriptClass();
    3031
    31   bool operator==(const std::string& name) { return (this->getName() == name); }
    32   bool operator==(ClassID classID) { return (this->_classID == classID); }
    33 
    3432  virtual void registerClass(Script* script) = 0;
    3533  virtual int insertObject(Script* L, BaseObject* obj, bool gc=false) = 0;
    36   virtual int insertObject(Script* L, BaseObject* obj, const std::string& name, bool gc=false) = 0; 
     34  virtual int insertObject(Script* L, BaseObject* obj, const std::string& name, bool gc=false) = 0;
    3735
    3836  const ScriptMethod* scriptMethods() const { return this->_scriptMethods; }
    3937
    4038protected:
    41   ScriptClass(const std::string& name, ClassID classID, ScriptMethod* scriptMethods);
     39  ScriptClass(const std::string& name, const ClassID& classID, ScriptMethod* scriptMethods);
    4240
    4341private:
  • trunk/src/lib/script_engine/script_manager.cc

    r9003 r9869  
    2424#include "lunar.h"
    2525
    26 #include "class_list.h"
    27 
    2826#include "script.h"
    2927#include "script_trigger.h"
    3028#include "luaincl.h"
    31 #include "loading/load_param.h"
    32 #include "parser/tinyxml/tinyxml.h"
     29#include "loading/load_param_xml.h"
    3330
    3431
     
    3734{
    3835  this->setName("ScriptManager");
    39   this->scripts = NULL;
    40   this->triggers = NULL;
    4136
    4237  if (root != NULL)
     
    6257
    6358  // fill the scripts and triggers (doing that on runtime is very slow!)
    64   getTriggers();
    65   getScripts();
    6659}
    6760
     
    7164{
    7265  //Delete all scripts as they aren't deleted automatically
    73   if(this->getScripts())
    74     while(!scripts->empty())
    75       delete scripts->front();
     66  while(!Script::objectList().empty())
     67    delete Script::objectList().front();
    7668  //Delete all triggers
    77   if(this->getTriggers())
    78     while(!triggers->empty())
    79       delete triggers->front();
    80  
     69  while(!ScriptTrigger::objectList().empty())
     70    delete ScriptTrigger::objectList().front();
     71
    8172}
    8273
     
    10596Script* ScriptManager::getScriptByFile(const std::string& file)
    10697{
    107   if(getScripts())
    108     for(std::list<BaseObject*>::const_iterator it = scripts->begin(); it != scripts->end(); it++ )
    109     {
    110       if( (dynamic_cast<Script*>(*it))->getFileName().compare(file) == 0)
    111       {
    112         return dynamic_cast<Script*>(*it);
    113       }
    114     }
     98  for (ObjectList<Script>::const_iterator it = Script::objectList().begin();
     99       it != Script::objectList().end();
     100       ++it)
     101    if( ((*it))->getFileName().compare(file) == 0)
     102      return (*it);
    115103
    116104  return NULL;
    117105
    118106}
    119 
    120 
    121 bool ScriptManager::getScripts()
    122 {
    123   return (this->scripts != NULL || (this->scripts = ClassList::getList(CL_SCRIPT)) != NULL);
    124 }
    125 
    126 bool ScriptManager::getTriggers()
    127 {
    128   return (this->triggers != NULL || (this->triggers = ClassList::getList(CL_SCRIPT_TRIGGER)) != NULL);
    129 }
    130 
    131 
    132 
  • trunk/src/lib/script_engine/script_manager.h

    r8894 r9869  
    3434   void  createTriggers(const TiXmlElement* triggers);
    3535
    36    bool getTriggers();
    37    bool getScripts();
    38 
    3936   static ScriptManager*             singletonRef;   //!< Reference to this class
    40 
    41    const std::list<BaseObject*>*     triggers;       //!< A list of all the triggers in the world
    42 
    43    const std::list<BaseObject*>*     scripts;        //!< A list of all the scripts in the world
    44 
    45 
    4637};
    4738#endif
  • trunk/src/lib/script_engine/script_method.cc

    r8711 r9869  
    2525{ }
    2626
    27 ScriptMethod* ScriptMethod::addMethod(const std::string& methodName, const Executor& executor)
     27ScriptMethod* ScriptMethod::addMethod(const std::string& methodName, const Executor<lua_State*>& executor)
    2828{
    2929  this->methods.push_back(ScriptMethod::Method(methodName, executor));
     
    3232}
    3333
    34 ScriptMethod::Method::Method(const std::string& name, const Executor& executor)
     34ScriptMethod::Method::Method(const std::string& name, const Executor<lua_State*>& executor)
    3535{
    3636  this->name = name;
  • trunk/src/lib/script_engine/script_method.h

    r8711 r9869  
    99#include <vector>
    1010
    11 #include "executor/executor_lua.h"
    12 
     11#include "executor_lua_state.h"
     12#include "executor/executor_member.h"
    1313
    1414class ScriptMethod
     
    1818  ~ScriptMethod();
    1919
    20   ScriptMethod* addMethod(const std::string& methodName, const Executor& executor);
     20  ScriptMethod* addMethod(const std::string& methodName, const Executor<lua_State*>& executor);
    2121
    2222  unsigned int size() const { return methods.size(); };
    2323
    2424  const std::string& name(unsigned int methodNumber) const { return methods[methodNumber].name; };
    25   const Executor* executor(unsigned int methodNumber) const { return methods[methodNumber].executor; };
     25  const Executor<lua_State*>* executor(unsigned int methodNumber) const { return methods[methodNumber].executor; };
    2626
    2727
     
    2929  struct Method
    3030  {
    31     Method(const std::string& name, const Executor& executor);
    32     std::string    name;
    33     Executor*      executor;
     31    Method(const std::string& name, const Executor<lua_State*>& executor);
     32    std::string             name;
     33    Executor<lua_State*>*   executor;
    3434  };
    3535
Note: See TracChangeset for help on using the changeset viewer.