Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/script_engine/src/lib/script_engine/script_class.h @ 8393

Last change on this file since 8393 was 8393, checked in by bensch, 18 years ago

orxonox/trunk: scriptMethod much better implemented

File size: 1.6 KB
RevLine 
[4838]1/*!
[8202]2 * @file script_class.h
[4838]3 * @brief Definition of ...
[3245]4*/
[1853]5
[8202]6#ifndef _SCRIPT_CLASS_H
7#define _SCRIPT_CLASS_H
[1853]8
[3543]9#include "base_object.h"
[1853]10
[8193]11#include "script.h"
12#include "lunar.h"
[8393]13#include "script_method.h"
[8193]14
[8393]15
[8193]16/**
17 * Creates a factory to a Loadable Class.
18 * this should be used at the beginning of all the Classes that should be loadable (in the cc-file)
19 */
[8393]20#define CREATE_SCRIPTABLE_CLASS(CLASS_NAME, CLASS_ID, SCRIPT_METHODS) \
21    tScriptable<CLASS_NAME> global_##CLASS_NAME##_ScriptableClass(#CLASS_NAME, CLASS_ID, new SCRIPT_METHODS)
[2036]22
[8193]23
24
[3955]25//! A class for ...
[8202]26class ScriptClass : protected BaseObject
[8193]27{
[1853]28
[8390]29public:
30  virtual ~ScriptClass();
[1853]31
[8390]32  bool operator==(const std::string& name) { return (this->getName() == name); }
33  bool operator==(ClassID classID) { return (this->classID == classID); }
[3245]34
[8390]35  virtual void registerClass(Script* script) = 0;
36  virtual int insertObject(Script* L, BaseObject* obj, bool gc=false) = 0;
[8250]37
[8390]38protected:
[8393]39  ScriptClass(const std::string& name, ClassID classID, ScriptMethod* scriptMethods);
[8250]40
[8390]41private:
42  ClassID             classID;
[8393]43  ScriptMethod*       scriptMethods;
[1853]44};
45
[8193]46
47
48
49template <class T>
[8202]50class tScriptable : public ScriptClass
[8193]51{
[8390]52public:
[8393]53  tScriptable(const std::string& name, ClassID classID, ScriptMethod* scriptMethods)
54      : ScriptClass(name, classID, scriptMethods)
[8390]55  { }
[8193]56
[8390]57  virtual void registerClass(Script* script)
58  {
59    Lunar<T>::Register(script);
60  }
61  virtual int insertObject(Script* L, BaseObject* obj, bool gc=false)
62  {
63    return Lunar<T>::insertObject(L, dynamic_cast<T*>(obj), obj->getName(), gc);
64  }
65};
[8193]66
67
[8202]68#endif /* _SCRIPT_CLASS_H */
Note: See TracBrowser for help on using the repository browser.