ai_instance.hpp

Go to the documentation of this file.
00001 /* $Id$ */
00002 
00003 /*
00004  * This file is part of OpenTTD.
00005  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
00006  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00007  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
00008  */
00009 
00012 #ifndef AI_INSTANCE_HPP
00013 #define AI_INSTANCE_HPP
00014 
00015 #include <squirrel.h>
00016 
00020 typedef void (AISuspendCallbackProc)(class AIInstance *instance);
00021 
00025 class AI_VMSuspend {
00026 public:
00027   AI_VMSuspend(int time, AISuspendCallbackProc *callback) :
00028     time(time),
00029     callback(callback)
00030   {}
00031 
00036   int GetSuspendTime() { return time; }
00037 
00042   AISuspendCallbackProc *GetSuspendCallback() { return callback; }
00043 
00044 private:
00045   int time;                        
00046   AISuspendCallbackProc *callback; 
00047 };
00048 
00052 class AI_FatalError {
00053 public:
00054   AI_FatalError(const char *msg) :
00055     msg(msg)
00056   {}
00057 
00058   const char *GetErrorMessage() { return msg; }
00059 
00060 private:
00061   const char *msg;
00062 };
00063 
00065 class AIInstance {
00066 public:
00067   friend class AIObject;
00068   AIInstance(class AIInfo *info);
00069   ~AIInstance();
00070 
00075   void Continue();
00076 
00080   void GameLoop();
00081 
00085   void CollectGarbage() const;
00086 
00090   static class AIStorage *GetStorage();
00091 
00095   static void DoCommandReturn(AIInstance *instance);
00096 
00100   static void DoCommandReturnVehicleID(AIInstance *instance);
00101 
00105   static void DoCommandReturnSignID(AIInstance *instance);
00106 
00110   static void DoCommandReturnGroupID(AIInstance *instance);
00111 
00115   class AIController *GetController() { return controller; }
00116 
00120   inline bool IsDead() const { return this->is_dead; }
00121 
00125   void Save();
00126 
00130   static void SaveEmpty();
00131 
00137   void Load(int version);
00138 
00143   bool CallLoad();
00144 
00148   static void LoadEmpty();
00149 
00156   void Suspend();
00157 private:
00158   class AIController *controller;  
00159   class AIStorage *storage;        
00160   class Squirrel *engine;          
00161   SQObject *instance;              
00162 
00163   bool is_started;                 
00164   bool is_dead;                    
00165   bool is_save_data_on_stack;      
00166   int suspend;                     
00167   AISuspendCallbackProc *callback; 
00168 
00172   void RegisterAPI();
00173 
00177   bool LoadCompatibilityScripts(const char *api_version);
00178 
00182   void Died();
00183 
00194   static bool SaveObject(HSQUIRRELVM vm, SQInteger index, int max_depth, bool test);
00195 
00200   static bool LoadObjects(HSQUIRRELVM vm);
00201 };
00202 
00203 #endif /* AI_INSTANCE_HPP */

Generated on Thu Apr 14 00:48:10 2011 for OpenTTD by  doxygen 1.6.1