Mercurial > LightClone
annotate LightClone/Source/Mediator.cpp @ 71:bc8afcf7e1ec
Refactor world into game screen
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Tue, 11 Oct 2011 13:20:43 -0700 |
parents | ffaeccdc105e |
children | 0574e2cf8bac |
rev | line source |
---|---|
0 | 1 /* |
2 * Mediator | |
3 */ | |
4 | |
5 #include "Mediator.h" | |
8 | 6 #include "VertexTypes.h" |
7 | |
8 #pragma warning(disable:4355) | |
0 | 9 |
10 /* | |
11 * fUpdatePeriod | |
12 */ | |
13 static const float fUpdatePeriod = 1.0f / 60.0f; | |
14 | |
15 /* | |
16 * Mediator | |
17 */ | |
9 | 18 Mediator::Mediator() : kWindow(this) |
0 | 19 { |
9 | 20 pGraphicsDevice = NULL; |
70 | 21 |
22 kScreenManager.Register("Main", &kMainScreen); | |
23 kScreenManager.Register("Help", &kHelpScreen); | |
24 kScreenManager.Register("Game", &kGameScreen); | |
25 kScreenManager.Register("Pause", &kPauseScreen); | |
0 | 26 } |
27 | |
28 /* | |
29 * Run | |
30 */ | |
31 ErrorCode Mediator::Run() | |
32 { | |
33 ErrorCode eCode = Initialize(); | |
34 if(eCode == Error_Success) | |
35 { | |
57
dc1f4a668d50
Fix issues with VM refactor
koryspansel <koryspansel@bendbroadband.com>
parents:
49
diff
changeset
|
36 float fAccumulator = fUpdatePeriod; |
0 | 37 |
38 kClock.Reset(); | |
39 | |
71
bc8afcf7e1ec
Refactor world into game screen
koryspansel <koryspansel@bendbroadband.com>
parents:
70
diff
changeset
|
40 while(kScreenManager.IsActive()) |
0 | 41 { |
42 ProcessMessages(); | |
43 | |
7
31373c5bd1b9
Start on World refactor
koryspansel <koryspansel@bendbroadband.com>
parents:
0
diff
changeset
|
44 fAccumulator += Min(kClock.GetElapsed(), fUpdatePeriod); |
0 | 45 while(fAccumulator >= fUpdatePeriod) |
46 { | |
47 Update(fUpdatePeriod); | |
48 fAccumulator -= fUpdatePeriod; | |
49 } | |
50 | |
7
31373c5bd1b9
Start on World refactor
koryspansel <koryspansel@bendbroadband.com>
parents:
0
diff
changeset
|
51 //if(updated) |
31373c5bd1b9
Start on World refactor
koryspansel <koryspansel@bendbroadband.com>
parents:
0
diff
changeset
|
52 { |
31373c5bd1b9
Start on World refactor
koryspansel <koryspansel@bendbroadband.com>
parents:
0
diff
changeset
|
53 Render(); |
31373c5bd1b9
Start on World refactor
koryspansel <koryspansel@bendbroadband.com>
parents:
0
diff
changeset
|
54 } |
0 | 55 } |
56 | |
57 Terminate(); | |
58 } | |
59 | |
60 return eCode; | |
61 } | |
62 | |
63 /* | |
8 | 64 * OnMessage |
65 */ | |
66 int32 Mediator::OnMessage(Window* pInstance, uint32 nMessage, WPARAM wParam, LPARAM lParam) | |
67 { | |
68 if(nMessage == WM_CLOSE) | |
69 { | |
70 pInstance->Terminate(); | |
71 return 0; | |
72 } | |
73 else | |
74 | |
75 if(nMessage == WM_DESTROY) | |
76 { | |
77 PostQuitMessage(0); | |
78 return 0; | |
79 } | |
80 | |
81 return DefWindowProc(pInstance->GetHandle(), nMessage, wParam, lParam); | |
82 } | |
83 | |
84 /* | |
0 | 85 * Initialize |
86 */ | |
87 ErrorCode Mediator::Initialize() | |
88 { | |
48 | 89 InitializeTrace(TraceFlag_Debug | TraceFlag_File); |
90 | |
8 | 91 ErrorCode eCode = kWindow.Initialize(); |
63 | 92 if(eCode != Error_Success) |
93 { | |
94 TRACE("Error: Failed to initialize window\n"); | |
95 | |
96 Terminate(); | |
97 return eCode; | |
98 } | |
99 | |
100 eCode = GraphicsDevice::Create(kWindow.GetHandle(), ScreenSizeX, ScreenSizeY, &pGraphicsDevice); | |
101 if(eCode != Error_Success) | |
8 | 102 { |
63 | 103 TRACE("Error: Failed to initialize graphics device\n"); |
104 | |
105 Terminate(); | |
106 return eCode; | |
107 } | |
108 | |
109 eCode = kContext.Initialize(pGraphicsDevice); | |
110 if(eCode != Error_Success) | |
111 { | |
112 TRACE("Error: Failed to initialize render context\n"); | |
8 | 113 |
63 | 114 Terminate(); |
115 return eCode; | |
116 } | |
49 | 117 |
63 | 118 eCode = kResourceManager.Initialize(pGraphicsDevice); |
119 if(eCode != Error_Success) | |
120 { | |
121 TRACE("Error: Failed to initialize resource manager\n"); | |
122 | |
123 Terminate(); | |
124 return eCode; | |
125 } | |
8 | 126 |
63 | 127 eCode = kInputManager.Initialize(kWindow.GetHandle()); |
128 if(eCode != Error_Success) | |
129 { | |
130 TRACE("Error: Failed to initialize input manager\n"); | |
131 | |
132 Terminate(); | |
133 return eCode; | |
134 } | |
49 | 135 |
63 | 136 eCode = kServiceProvider.AddService("ResourceManager", &kResourceManager); |
137 if(eCode != Error_Success) | |
138 { | |
139 TRACE("Error: Failed to add resource manager service\n"); | |
140 | |
141 Terminate(); | |
142 return eCode; | |
143 } | |
8 | 144 |
63 | 145 eCode = kServiceProvider.AddService("InputManager", &kInputManager); |
146 if(eCode != Error_Success) | |
147 { | |
148 TRACE("Error: Failed to add input manager service\n"); | |
49 | 149 |
63 | 150 Terminate(); |
151 return eCode; | |
70 | 152 } |
64
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
153 |
70 | 154 eCode = kScreenManager.Initialize(&kServiceProvider); |
64
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
155 if(eCode != Error_Success) |
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
156 { |
70 | 157 TRACE("Error: Failed to initialize screen manager\n"); |
64
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
158 |
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
159 Terminate(); |
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
160 return eCode; |
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
161 } |
3507bd831c7f
Hook up ServiceProvider
koryspansel <koryspansel@bendbroadband.com>
parents:
63
diff
changeset
|
162 |
71
bc8afcf7e1ec
Refactor world into game screen
koryspansel <koryspansel@bendbroadband.com>
parents:
70
diff
changeset
|
163 kScreenManager.Push("Game"); |
bc8afcf7e1ec
Refactor world into game screen
koryspansel <koryspansel@bendbroadband.com>
parents:
70
diff
changeset
|
164 |
0 | 165 return eCode; |
166 } | |
167 | |
168 /* | |
169 * Terminate | |
170 */ | |
171 void Mediator::Terminate() | |
172 { | |
70 | 173 kScreenManager.Terminate(); |
8 | 174 kInputManager.Terminate(); |
175 kResourceManager.Terminate(); | |
9 | 176 kContext.Terminate(); |
8 | 177 |
178 GraphicsDevice::Destroy(pGraphicsDevice); | |
48 | 179 |
180 TerminateTrace(); | |
0 | 181 } |
182 | |
183 /* | |
184 * Update | |
185 */ | |
186 void Mediator::Update(float fElapsed) | |
187 { | |
71
bc8afcf7e1ec
Refactor world into game screen
koryspansel <koryspansel@bendbroadband.com>
parents:
70
diff
changeset
|
188 kScreenManager.Update(fElapsed); |
0 | 189 } |
190 | |
191 /* | |
192 * Render | |
193 */ | |
194 void Mediator::Render() | |
195 { | |
70 | 196 const uint32 nColor = D3DCOLOR_XRGB(32, 32, 32); |
197 | |
198 kContext.Begin(nColor); | |
199 kScreenManager.Render(kContext); | |
200 kContext.End(); | |
0 | 201 } |
202 | |
203 /* | |
204 * ProcessMessages | |
205 */ | |
206 void Mediator::ProcessMessages() | |
207 { | |
208 MSG kMessage; | |
209 | |
210 while(PeekMessage(&kMessage, NULL, 0, 0, PM_REMOVE)) | |
211 { | |
212 if(kMessage.message == WM_QUIT) | |
213 { | |
71
bc8afcf7e1ec
Refactor world into game screen
koryspansel <koryspansel@bendbroadband.com>
parents:
70
diff
changeset
|
214 kScreenManager.Set(NULL); |
0 | 215 break; |
216 } | |
217 | |
218 TranslateMessage(&kMessage); | |
219 DispatchMessage(&kMessage); | |
220 } | |
8 | 221 } |