Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef SCRIPT_INSTANCE_HPP
00013 #define SCRIPT_INSTANCE_HPP
00014
00015 #include <squirrel.h>
00016 #include "script_suspend.hpp"
00017
00018 #include "../command_type.h"
00019 #include "../company_type.h"
00020 #include "../fileio_type.h"
00021
00022 static const uint SQUIRREL_MAX_DEPTH = 25;
00023
00025 class ScriptInstance {
00026 public:
00027 friend class ScriptObject;
00028 friend class ScriptController;
00029
00033 ScriptInstance(const char *APIName);
00034 virtual ~ScriptInstance();
00035
00042 void Initialize(const char *main_script, const char *instance_name, CompanyID company);
00043
00049 virtual int GetSetting(const char *name) = 0;
00050
00057 virtual class ScriptInfo *FindLibrary(const char *library, int version) = 0;
00058
00063 void Continue();
00064
00068 void GameLoop();
00069
00073 void CollectGarbage() const;
00074
00078 class ScriptStorage *GetStorage();
00079
00083 void *GetLogPointer();
00084
00088 static void DoCommandReturn(ScriptInstance *instance);
00089
00093 static void DoCommandReturnVehicleID(ScriptInstance *instance);
00094
00098 static void DoCommandReturnSignID(ScriptInstance *instance);
00099
00103 static void DoCommandReturnGroupID(ScriptInstance *instance);
00104
00108 static void DoCommandReturnGoalID(ScriptInstance *instance);
00109
00113 class ScriptController *GetController() { return controller; }
00114
00118 inline bool IsDead() const { return this->is_dead; }
00119
00123 void Save();
00124
00128 static void SaveEmpty();
00129
00135 void Load(int version);
00136
00140 static void LoadEmpty();
00141
00148 void Suspend();
00149
00155 SQInteger GetOpsTillSuspend();
00156
00164 void DoCommandCallback(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2);
00165
00170 void InsertEvent(class ScriptEvent *event);
00171
00176 bool IsSleeping() { return this->suspend != 0; }
00177
00178 protected:
00179 class Squirrel *engine;
00180 const char *versionAPI;
00181
00185 virtual void RegisterAPI();
00186
00193 bool LoadCompatibilityScripts(const char *api_version, Subdirectory dir);
00194
00198 virtual void Died();
00199
00203 virtual CommandCallback *GetDoCommandCallback() = 0;
00204
00208 virtual void LoadDummyScript() = 0;
00209
00210 private:
00211 class ScriptController *controller;
00212 class ScriptStorage *storage;
00213 SQObject *instance;
00214
00215 bool is_started;
00216 bool is_dead;
00217 bool is_save_data_on_stack;
00218 int suspend;
00219 Script_SuspendCallbackProc *callback;
00220
00225 bool CallLoad();
00226
00237 static bool SaveObject(HSQUIRRELVM vm, SQInteger index, int max_depth, bool test);
00238
00243 static bool LoadObjects(HSQUIRRELVM vm);
00244 };
00245
00246 #endif