00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __SCRIPTMANAGER_H__
00017 #define __SCRIPTMANAGER_H__
00018
00019
00020 #include "../dependencies.h"
00021 #include "scriptstring.h"
00022
00023 #include "Script.h"
00024
00025
00026 class Script;
00027
00028
00029
00032 class ScriptManager
00033 {
00034 friend class Script;
00035
00036 public:
00037
00038
00040 ScriptManager();
00042 ~ScriptManager();
00043
00045 void init();
00047 void clear();
00048
00049
00052 void refAdd();
00055 void refRelease();
00056
00057
00060 asIScriptEngine* getEngine() const;
00061
00065 bool addScript(Script *script);
00066
00071 bool addScriptSection(const std::string &name, const std::string §ion);
00072
00076 Script* createScript(const std::string &name);
00080 Script* createScriptFromFile(const std::string &fileName);
00081
00084 Script* getScript(const u32 id);
00087 Script* getScript(const std::string &name);
00088
00090 void removeAllScripts();
00092 void removeAllScriptSections();
00096 bool removeScript(Script *script);
00100 bool removeScript(const u32 id);
00104 bool removeScript(const std::string &name);
00107 bool removeScriptSection(const std::string &name);
00108
00109 private:
00110
00111
00112 void addScriptSectionsToScript(Script *script);
00113
00114
00115 asIScriptEngine *pEngine;
00116
00117 std::vector<Script*> mScripts;
00118 std::map<std::string, std::string> mScriptSections;
00119 };
00120
00121
00122
00124 extern void bindScriptManager(asIScriptEngine *engine);
00125
00126
00127
00129 extern void MessageCallback(const asSMessageInfo *msg, void *param);
00130
00133 template<typename A, typename B>
00134 B* asRefCast(A* a)
00135 {
00136
00137 if( !a ) return 0;
00138
00139
00140 B* b = dynamic_cast<B*>(a);
00141 if( b == 0 )
00142 {
00143
00144 a->refRelease();
00145 }
00146 return b;
00147 }
00148
00149
00150 #endif