* Make every ITask know about the Kernel in which the run.
[matthijs/ABM2.git] / ABM2 / Engine / Kernel.h
1 // Kernel.h: interface for the CKernel class.\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #if !defined(AFX_KERNEL_H__4E822B7D_1078_4F70_BC8F_3BB4F83ED0AF__INCLUDED_)\r
6 #define AFX_KERNEL_H__4E822B7D_1078_4F70_BC8F_3BB4F83ED0AF__INCLUDED_\r
7 \r
8 #if _MSC_VER > 1000\r
9 #pragma once\r
10 #endif // _MSC_VER > 1000\r
11 \r
12 #include "singleton.h"\r
13 #include "SpriteManager.h"\r
14 \r
15 \r
16 class CClient;\r
17 class CServer;\r
18 \r
19 class ITask;\r
20 \r
21 class CKernel : public Singleton<CKernel>\r
22 {\r
23 public:\r
24         CKernel();\r
25         virtual ~CKernel();\r
26 \r
27         int Execute();\r
28 \r
29         bool AddTask(const CMMPointer<ITask> &t);\r
30         void SuspendTask(const CMMPointer<ITask> &t);\r
31         void ResumeTask(const CMMPointer<ITask> &t);\r
32         void RemoveTask(const CMMPointer<ITask> &t);\r
33         void KillAllTasks();\r
34         \r
35         void setSpriteManager(CSpriteManager* sm) {this->sm = sm;}\r
36         CSpriteManager* getSpriteManager() {return this->sm;}\r
37 protected:\r
38         std::list< CMMPointer<ITask> > taskList;\r
39         std::list< CMMPointer<ITask> > pausedTaskList;\r
40         CSpriteManager *sm;\r
41 };\r
42 \r
43 class ITask : public IMMObject\r
44 {\r
45 public:\r
46         /** Keeps a normal pointer to the kernel, to prevent pointer loops */\r
47         ITask(CKernel* kernel){this->kernel = kernel, this->canKill=false;this->priority=5000;}\r
48         virtual bool Start()=0;\r
49         virtual void OnSuspend(){};\r
50         virtual void Update()=0;\r
51         virtual void OnResume(){};\r
52         virtual void Stop()=0;\r
53 \r
54 \r
55 \r
56         bool canKill;\r
57         long priority;\r
58 protected:\r
59         /**\r
60          * Returns a pointer to the current kernel\r
61          */\r
62         CKernel *getKernel() {return this->kernel;}\r
63 private:\r
64         CKernel* kernel;\r
65 };\r
66 \r
67 #endif // !defined(AFX_KERNEL_H__4E822B7D_1078_4F70_BC8F_3BB4F83ED0AF__INCLUDED_)\r