Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 7656 in orxonox.OLD for branches/script_engine/src


Ignore:
Timestamp:
May 17, 2006, 8:36:25 PM (19 years ago)
Author:
bensch
Message:

lua-scripts added (this is temporary)

Location:
branches/script_engine/src/lib/script_engine
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • branches/script_engine/src/lib/script_engine/main.cc

    r7653 r7656  
    3838  //if() TODO: check if strObjName isn't "this"
    3939  if (virtualMachine.isOk ())
    40      {
    41        /*create object table*/
    42       // Create a reference to the "object" table and set a name for the reference. Each reference is unique
    43 
    44       lua_newtable (state);
    45       int  objRef = luaL_ref (state, LUA_REGISTRYINDEX);
    46       lua_rawgeti (state, LUA_REGISTRYINDEX, objRef);
    47       lua_setglobal (state, strObjName.c_str());
    48 
    49 
    50       // Save the "object" table to index 0 of the "object" table
    51       LuaRestoreStack rs(virtualMachine);
    52       lua_rawgeti (state, LUA_REGISTRYINDEX, objRef);
    53       lua_pushlightuserdata (state, scriptable);
    54       lua_rawseti (state, -2, 0);
    55 
    56 
    57 
    58       return objRef;
    59      }
     40  {
     41    /*create object table*/
     42    // Create a reference to the "object" table and set a name for the reference. Each reference is unique
     43
     44    lua_newtable (state);
     45    int  objRef = luaL_ref (state, LUA_REGISTRYINDEX);
     46    lua_rawgeti (state, LUA_REGISTRYINDEX, objRef);
     47    lua_setglobal (state, strObjName.c_str());
     48
     49
     50    // Save the "object" table to index 0 of the "object" table
     51    LuaRestoreStack rs(virtualMachine);
     52    lua_rawgeti (state, LUA_REGISTRYINDEX, objRef);
     53    lua_pushlightuserdata (state, scriptable);
     54    lua_rawseti (state, -2, 0);
     55
     56
     57
     58    return objRef;
     59  }
    6060
    6161}
     
    7676
    7777int addFunctionToScriptable(int scriptableRef, const std::string& strFuncName, LuaScript& luaScript)
    78   {
    79     lua_State *state = (lua_State *) (luaScript.getVirtualMachine());
    80     LuaVirtualMachine& vm = luaScript.getVirtualMachine();
    81     int iMethodIdx = -1;
    82 
    83     if (vm.isOk ())
     78{
     79  lua_State *state = (lua_State *) (luaScript.getVirtualMachine());
     80  LuaVirtualMachine& vm = luaScript.getVirtualMachine();
     81  int iMethodIdx = -1;
     82
     83  if (vm.isOk ())
     84  {
     85    /* Add function */
     86    LuaRestoreStack rs (vm);
     87    iMethodIdx = 0;
     88    lua_rawgeti (state, LUA_REGISTRYINDEX, scriptableRef);
     89    lua_pushstring (state, strFuncName.c_str());
     90    lua_pushnumber (state, (lua_Number) iMethodIdx);
     91    lua_pushcclosure (state, luaCallback, 1);
     92    lua_settable (state, -3);
     93  }
     94
     95  return iMethodIdx;
     96}
     97
     98class objectOne : public Scriptable
     99{
     100public:
     101  objectOne () : Scriptable ()
     102  {
     103  }
     104
     105  int scriptCalling (LuaVirtualMachine& vm, std::string functionName)
     106  {
     107    //switch (iFunctionNumber) //- methodBase) uncomment this when methodBase gets correclty set in the Scriptable class
     108    if(functionName.compare("printNameOne")==0)
    84109    {
    85      /* Add function */
    86      LuaRestoreStack rs (vm);
    87      iMethodIdx = 0;
    88      lua_rawgeti (state, LUA_REGISTRYINDEX, scriptableRef);
    89      lua_pushstring (state, strFuncName.c_str());
    90      lua_pushnumber (state, (lua_Number) iMethodIdx);
    91      lua_pushcclosure (state, luaCallback, 1);
    92      lua_settable (state, -3);
     110      //case 0:
     111      return printNameOne (vm);
    93112    }
    94113
    95     return iMethodIdx;
    96   }
    97 
    98 class objectOne : public Scriptable
    99 {
    100   public:
    101     objectOne () : Scriptable ()
     114    return 0;
     115  }
     116
     117
     118  int printNameOne(LuaVirtualMachine& vm)
     119  {
     120    std::cout<<"Hi I'm Object 1 !"<<std::endl;
     121    return 0;
     122  }
     123
     124  void handleReturns (LuaVirtualMachine& vm, const std::string& strFunc)
     125  {
     126  }
     127
     128}
     129;
     130
     131class objectTwo : public Scriptable
     132{
     133public:
     134  objectTwo () : Scriptable ()
     135  {
     136    registerFunction(std::string("printNameTwo"));
     137    // registerFunction(std::string("printHello"));
     138
     139  }
     140
     141  int scriptCalling (LuaVirtualMachine& vm, std::string functionName)
     142  {
     143    //switch (iFunctionNumber) //- m_iMethodBase) //TODO:find a way to determine the function number somehow: this works just incidentally
     144    if(functionName.compare("printNameTwo")==0)
    102145    {
    103 
     146      //case 0:
     147
     148      return printNameTwo (vm);
    104149    }
    105150
    106     int scriptCalling (LuaVirtualMachine& vm, std::string functionName)
     151    return 0;
     152  }
     153
     154
     155  int printNameTwo(LuaVirtualMachine& vm)
     156  {
     157    std::cout<<"Hi I'm Object 2 !\n"<<std::endl;
     158    return 0;
     159  }
     160
     161  int printHello(LuaVirtualMachine& vm)
     162  {
     163    std::cout<<"Nice to meet you!\n"<<std::endl;
     164    return 0;
     165  }
     166
     167  void handleReturns (LuaVirtualMachine& vm, const std::string& strFunc)
     168  {
     169  }
     170
     171}
     172;
     173
     174
     175
     176
     177class CMyScript : public LuaScript
     178{
     179public:
     180  CMyScript () : LuaScript ()
     181  {
     182    // m_iMethodBase = registerFunction ("hello1");
     183    //registerFunction ("hello2");
     184    //registerFunction ("hello3");
     185  }
     186
     187  int scriptCalling (LuaVirtualMachine& vm, int iFunctionNumber)
     188  {
     189    /*switch (iFunctionNumber - m_iMethodBase)
    107190    {
    108       //switch (iFunctionNumber) //- methodBase) uncomment this when methodBase gets correclty set in the Scriptable class
    109       if(functionName.compare("printNameOne")==0)
    110       {
    111         //case 0:
    112           return printNameOne (vm);
    113       }
    114 
    115       return 0;
     191      case 0:
     192        return Hello1 (vm);
     193      case 1:
     194        return Hello2 (vm);
     195      case 2:
     196        return Hello3 (vm);
    116197    }
    117198
    118 
    119     int printNameOne(LuaVirtualMachine& vm)
     199    return 0;*/
     200  }
     201
     202  int Hello1 (LuaVirtualMachine& vm)
     203  {
     204    printf ("Hellow (1)\n");
     205    return 0;
     206  }
     207
     208  int Hello2 (LuaVirtualMachine& vm)
     209  {
     210    lua_State *state = (lua_State *) vm;
     211
     212    int iNumber = (int) lua_tonumber (state, -2);
     213    int iNumber2 = (int) lua_tonumber (state, -1);
     214    printf ("Hellow (2) -> %d\n", iNumber);
     215    printf ("Second argument was %d\n",iNumber2);
     216    return 0;
     217  }
     218
     219  int Hello3 (LuaVirtualMachine& vm)
     220  {
     221    lua_State *state = (lua_State *) vm;
     222
     223    int iNumber = (int) lua_tonumber (state, -1);
     224    printf ("Hello (3) -> %d\n", iNumber);
     225    lua_pushnumber (state, iNumber + 2);
     226    return 1;
     227  }
     228
     229
     230  void handleReturns (LuaVirtualMachine& vm, const std::string& strFunc)
     231  {
     232    if (strcmp (strFunc.c_str(), "divideMe") == 0)
    120233    {
    121     std::cout<<"Hi I'm Object 1 !"<<std::endl;
    122     return 0;
     234      // frames returns an answer of the stack
     235      lua_State *state = (lua_State *) vm;
     236      int itop = lua_gettop (state);
     237      int iType = lua_type (state, -1);
     238      const char *s = lua_typename (state, iType);
     239      double fFrameCount = lua_tonumber (state, -1);
     240
     241      printf ("frame count = %f\n", fFrameCount);
    123242    }
    124 
    125     void handleReturns (LuaVirtualMachine& vm, const std::string& strFunc)
    126   {
    127 
    128   }
    129 
    130 };
    131 
    132 class objectTwo : public Scriptable
    133 {
    134   public:
    135     objectTwo () : Scriptable ()
    136     {
    137       registerFunction(std::string("printNameTwo"));
    138      // registerFunction(std::string("printHello"));
    139 
    140     }
    141 
    142     int scriptCalling (LuaVirtualMachine& vm, std::string functionName)
    143     {
    144       //switch (iFunctionNumber) //- m_iMethodBase) //TODO:find a way to determine the function number somehow: this works just incidentally
    145       if(functionName.compare("printNameTwo")==0)
    146       {
    147         //case 0:
    148 
    149           return printNameTwo (vm);
    150       }
    151 
    152       return 0;
    153     }
    154 
    155 
    156     int printNameTwo(LuaVirtualMachine& vm)
    157     {
    158       std::cout<<"Hi I'm Object 2 !\n"<<std::endl;
    159       return 0;
    160     }
    161 
    162     int printHello(LuaVirtualMachine& vm)
    163     {
    164       std::cout<<"Nice to meet you!\n"<<std::endl;
    165       return 0;
    166     }
    167 
    168     void handleReturns (LuaVirtualMachine& vm, const std::string& strFunc)
    169     {
    170 
    171     }
    172 
    173 };
    174 
    175 
    176 
    177 
    178 class CMyScript : public LuaScript
    179 {
    180   public:
    181     CMyScript () : LuaScript ()
    182     {
    183      // m_iMethodBase = registerFunction ("hello1");
    184       //registerFunction ("hello2");
    185       //registerFunction ("hello3");
    186     }
    187 
    188     int scriptCalling (LuaVirtualMachine& vm, int iFunctionNumber)
    189     {
    190       /*switch (iFunctionNumber - m_iMethodBase)
    191       {
    192         case 0:
    193           return Hello1 (vm);
    194         case 1:
    195           return Hello2 (vm);
    196         case 2:
    197           return Hello3 (vm);
    198       }
    199 
    200       return 0;*/
    201     }
    202 
    203     int Hello1 (LuaVirtualMachine& vm)
    204     {
    205       printf ("Hellow (1)\n");
    206       return 0;
    207     }
    208 
    209     int Hello2 (LuaVirtualMachine& vm)
    210     {
    211       lua_State *state = (lua_State *) vm;
    212 
    213       int iNumber = (int) lua_tonumber (state, -2);
    214       int iNumber2 = (int) lua_tonumber (state, -1);
    215       printf ("Hellow (2) -> %d\n", iNumber);
    216       printf ("Second argument was %d\n",iNumber2);
    217       return 0;
    218     }
    219 
    220     int Hello3 (LuaVirtualMachine& vm)
    221     {
    222       lua_State *state = (lua_State *) vm;
    223 
    224       int iNumber = (int) lua_tonumber (state, -1);
    225       printf ("Hello (3) -> %d\n", iNumber);
    226       lua_pushnumber (state, iNumber + 2);
    227       return 1;
    228     }
    229 
    230 
    231     void handleReturns (LuaVirtualMachine& vm, const std::string& strFunc)
    232     {
    233       if (strcmp (strFunc.c_str(), "divideMe") == 0)
    234       {
    235          // frames returns an answer of the stack
    236         lua_State *state = (lua_State *) vm;
    237         int itop = lua_gettop (state);
    238         int iType = lua_type (state, -1);
    239         const char *s = lua_typename (state, iType);
    240         double fFrameCount = lua_tonumber (state, -1);
    241 
    242         printf ("frame count = %f\n", fFrameCount);
    243       }
    244     }
    245 
    246   protected:
    247     int m_iMethodBase;
     243  }
     244
     245protected:
     246  int m_iMethodBase;
    248247};
    249248
     
    252251{
    253252
    254   std::cout << "lua-testing environment\n" << std::endl;
     253  std::cout << "== lua-testing environment ==\n" << std::endl;
    255254
    256255
     
    264263  //addObjectToScript(&ob1, "obOne", ms, "printNameOne");
    265264  int obTwoRef = ms.addScriptableToScript(&ob2, "object");
    266  // ms.addFunctionToScriptable("printNameTwo",obTwoRef,-1);
     265  // ms.addFunctionToScriptable("printNameTwo",obTwoRef,-1);
    267266
    268267  ms.compileFile ("luascript1.lua");
Note: See TracChangeset for help on using the changeset viewer.