0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
1 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
2 * Bot
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
3 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
4
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
5 #include "Bot.h"
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
6 #include "Clock.h"
|
9
|
7 #include "VertexTypes.h"
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
8
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
9 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
10 * DirectionAngle
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
11 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
12 const float DirectionAngle[] = {-1.0f * D3DX_PI / 2.0f, -4.0f * D3DX_PI / 2.0f, -3.0f * D3DX_PI / 2.0f, -2.0f * D3DX_PI / 2.0f};
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
13
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
14 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
15 * DirectionStepX
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
16 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
17 const int32 DirectionStepX[] = {0, 1, 0, -1};
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
18
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
19 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
20 * DirectionStepY
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
21 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
22 const int32 DirectionStepY[] = {1, 0, -1, 0};
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
23
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
24 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
25 * Bot
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
26 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
27 Bot::Bot()
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
28 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
29 pEnvironment = 0;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
30 nState = BotState_Idle;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
31 kSize = D3DXVECTOR3(0.55f, 1.00f, 0.55f);
|
9
|
32
|
|
33 pEffect = NULL;
|
|
34 pVertexBuffer = NULL;
|
|
35 pTexture = NULL;
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
36 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
37
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
38 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
39 * Initialize
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
40 */
|
9
|
41 ErrorCode Bot::Initialize(ResourceManager* pResourceManager)
|
|
42 {
|
|
43 ErrorCode eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\Environment.fx", &pEffect);
|
|
44 if(eCode == Error_Success)
|
|
45 {
|
|
46 //eCode = pResourceManager->CreateTextureFromFile("Data\\Textures\\Block02.tga", &pTexture);
|
|
47 if(eCode == Error_Success)
|
|
48 {
|
|
49 eCode = pResourceManager->CreateVertexBuffer(VerticesPerBlock * sizeof(Vertex::Block), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer);
|
|
50 if(eCode == Error_Success)
|
|
51 {
|
|
52 eCode = SetupVertexBuffer();
|
|
53 }
|
|
54 }
|
|
55 }
|
|
56
|
|
57 return eCode;
|
|
58 }
|
|
59
|
|
60 /*
|
|
61 * Terminate
|
|
62 */
|
|
63 void Bot::Terminate()
|
|
64 {
|
|
65 if(pVertexBuffer)
|
|
66 {
|
|
67 pVertexBuffer->Release();
|
|
68 pVertexBuffer = NULL;
|
|
69 }
|
|
70
|
|
71 if(pTexture)
|
|
72 {
|
|
73 pTexture->Release();
|
|
74 pTexture = NULL;
|
|
75 }
|
|
76
|
|
77 if(pEffect)
|
|
78 {
|
|
79 pEffect->Release();
|
|
80 pEffect = NULL;
|
|
81 }
|
|
82 }
|
|
83
|
|
84 /*
|
|
85 * Setup
|
|
86 */
|
|
87 void Bot::Setup(Environment* pInstance)
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
88 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
89 pEnvironment = pInstance;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
90 nState = BotState_Idle;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
91 nColor = D3DCOLOR_XRGB(0, 255, 0);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
92
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
93 kMachine.RemoveAllFunctions();
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
94 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
95
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
96 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
97 * Reset
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
98 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
99 void Bot::Reset()
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
100 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
101 nState = BotState_Idle;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
102 nColor = D3DCOLOR_XRGB(0, 255, 0);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
103
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
104 kMachine.Reset();
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
105 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
106
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
107 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
108 * GetWorldPosition
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
109 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
110 const D3DXVECTOR3 Bot::GetWorldPosition() const
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
111 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
112 const D3DXVECTOR3& kScale = pEnvironment->GetScale();
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
113
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
114 D3DXVECTOR3 kWorldPosition;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
115 kWorldPosition.x = kScale.x * kPosition.X;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
116 kWorldPosition.y = kScale.y * pEnvironment->GetAltitude(kPosition.X, kPosition.Y);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
117 kWorldPosition.z = kScale.z * kPosition.Y;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
118
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
119 if(nState == BotState_Animate)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
120 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
121 if(kSequencer.nSequence == BotSequence_Forward)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
122 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
123 kWorldPosition.x = kScale.x * ((int32)kPosition.X + kSequencer.fTimer * ((int32)kSequencer.kPosition.X - (int32)kPosition.X));
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
124 kWorldPosition.z = kScale.z * ((int32)kPosition.Y + kSequencer.fTimer * ((int32)kSequencer.kPosition.Y - (int32)kPosition.Y));
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
125 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
126 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
127
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
128 if(kSequencer.nSequence == BotSequence_Jump)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
129 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
130 const uint32 nHeightA = pEnvironment->GetAltitude(kPosition.X, kPosition.Y);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
131 const uint32 nHeightB = pEnvironment->GetAltitude(kSequencer.kPosition.X, kSequencer.kPosition.Y);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
132
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
133 const float fDistanceX = kScale.x;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
134 const float fDistanceY = kScale.y * ((float)nHeightB - (float)nHeightA);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
135 const float fHeight = nHeightB > nHeightA ? 2.0f * kScale.y : kScale.y;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
136
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
137 const float fB = (fHeight - 0.25f * fDistanceY) / (-0.25f * fDistanceX + 0.5f * fDistanceX);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
138 const float fA = (fDistanceY - fB * fDistanceX) / (fDistanceX * fDistanceX);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
139 const float fX = kSequencer.fTimer * fDistanceX;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
140
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
141 kWorldPosition.x = kScale.x * ((int32)kPosition.X + kSequencer.fTimer * ((int32)kSequencer.kPosition.X - (int32)kPosition.X));
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
142 kWorldPosition.y = nHeightA * kScale.y + fX * (fA * fX + fB);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
143 kWorldPosition.z = kScale.z * ((int32)kPosition.Y + kSequencer.fTimer * ((int32)kSequencer.kPosition.Y - (int32)kPosition.Y));
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
144 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
145 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
146
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
147 return kWorldPosition;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
148 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
149
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
150 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
151 * GetWorldOrientation
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
152 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
153 const D3DXVECTOR3 Bot::GetWorldOrientation() const
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
154 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
155 D3DXVECTOR3 kWorldOrientation;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
156 kWorldOrientation.x = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
157 kWorldOrientation.y = DirectionAngle[kDirection];
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
158 kWorldOrientation.z = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
159
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
160 if(nState == BotState_Animate)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
161 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
162 if(kSequencer.nSequence == BotSequence_RotateCW || kSequencer.nSequence == BotSequence_RotateCCW)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
163 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
164 kWorldOrientation.y = InterpolateDirection(kDirection, kSequencer.kDirection, kSequencer.fTimer);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
165 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
166 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
167
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
168 return kWorldOrientation;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
169 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
170
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
171 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
172 * AddFunction
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
173 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
174 void Bot::AddFunction(uint32 nFunction, uint32 nSize)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
175 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
176 kMachine.AddFunction((uint8)nFunction, (uint8)nSize * 2);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
177 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
178
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
179 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
180 * Upload
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
181 */
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
182 ErrorCode Bot::Upload(Code* pCode, uint32 nCount)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
183 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
184 ErrorCode eCode = Error_Success;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
185
|
4
|
186 kMachine.Reset();
|
|
187 kMachine.ClearMemory();
|
|
188
|
|
189 kMachine.RemoveAllFunctions();
|
|
190 kMachine.AddFunction(0, (uint8)MainFunctionLength * 2);
|
|
191
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
192 for(uint32 i = 0; i < nCount && eCode == Error_Success; ++i)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
193 {
|
4
|
194 kMachine.AddFunction(i + 1, (uint8)pCode[i].GetSize() * 2);
|
|
195
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
196 uint32 nSize = kMachine.GetFunctionSize(i);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
197 uint8* pData = kMachine.GetFunctionMemory(i);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
198
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
199 eCode = Compile(pCode + i, pData, nSize);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
200 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
201
|
4
|
202 if(eCode == Error_Success)
|
|
203 {
|
|
204 nState = BotState_Evaluate;
|
|
205 }
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
206
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
207 return eCode;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
208 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
209
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
210 /*
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
211 * Update
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
212 */
|
3
|
213 bool Bot::Update(float fElapsed)
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
214 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
215 if(nState == BotState_Evaluate)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
216 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
217 bool bHandled = false;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
218
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
219 kClock.Reset();
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
220
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
221 while(!bHandled && kClock.GetElapsed(false) < fElapsed)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
222 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
223 uint32 nAction = kMachine.Step();
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
224
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
225 if(Action_Forward <= nAction && nAction <= Action_Light)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
226 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
227 if(nAction == Action_Forward)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
228 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
229 if(pEnvironment->IsMovementValid(nAction, kPosition.X, kPosition.Y, kDirection))
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
230 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
231 kSequencer.kPosition.X = (int32)kPosition.X + DirectionStepX[kDirection];
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
232 kSequencer.kPosition.Y = (int32)kPosition.Y + DirectionStepY[kDirection];
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
233 kSequencer.nSequence = BotSequence_Forward;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
234 kSequencer.fTimer = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
235 kSequencer.fSpeed = 1.5f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
236 nState = BotState_Animate;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
237 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
238 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
239 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
240
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
241 if(nAction == Action_RotateCW)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
242 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
243 kSequencer.kDirection = (kDirection + 1) % Direction_Count;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
244 kSequencer.nSequence = BotSequence_RotateCW;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
245 kSequencer.fTimer = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
246 kSequencer.fSpeed = 1.5f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
247 nState = BotState_Animate;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
248 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
249 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
250
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
251 if(nAction == Action_RotateCCW)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
252 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
253 nState = BotState_Animate;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
254 kSequencer.kDirection = (kDirection - 1 + Direction_Count) % Direction_Count;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
255 kSequencer.nSequence = BotSequence_RotateCCW;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
256 kSequencer.fTimer = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
257 kSequencer.fSpeed = 1.5f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
258 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
259 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
260
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
261 if(nAction == Action_Jump)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
262 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
263 if(pEnvironment->IsMovementValid(nAction, kPosition.X, kPosition.Y, kDirection))
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
264 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
265 kSequencer.kPosition.X = (int32)kPosition.X + DirectionStepX[kDirection];
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
266 kSequencer.kPosition.Y = (int32)kPosition.Y + DirectionStepY[kDirection];
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
267 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
268 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
269 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
270 kSequencer.kPosition.X = kPosition.X;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
271 kSequencer.kPosition.Y = kPosition.Y;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
272 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
273
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
274 nState = BotState_Animate;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
275 kSequencer.nSequence = BotSequence_Jump;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
276 kSequencer.fTimer = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
277 kSequencer.fSpeed = 1.5f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
278 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
279 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
280
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
281 if(nAction == Action_Light)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
282 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
283 nState = BotState_Animate;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
284 nColor = D3DCOLOR_XRGB(0, 0, 255);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
285 kSequencer.nSequence = BotSequence_Light;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
286 kSequencer.fTimer = 0.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
287 kSequencer.fSpeed = 3.0f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
288 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
289
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
290 bHandled = true;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
291 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
292 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
293 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
294 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
295
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
296 if(nState == BotState_Animate)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
297 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
298 kSequencer.fTimer += kSequencer.fSpeed * fElapsed;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
299 if(kSequencer.fTimer >= 1.0f)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
300 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
301 if(kSequencer.nSequence == BotSequence_Forward)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
302 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
303 nState = BotState_Pause;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
304 kPosition = kSequencer.kPosition;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
305 kSequencer.fTimer = 0.4f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
306 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
307 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
308
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
309 if(kSequencer.nSequence == BotSequence_RotateCW)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
310 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
311 nState = BotState_Pause;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
312 kDirection = kSequencer.kDirection;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
313 kSequencer.fTimer = 0.4f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
314 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
315 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
316
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
317 if(kSequencer.nSequence == BotSequence_RotateCCW)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
318 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
319 nState = BotState_Pause;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
320 kDirection = kSequencer.kDirection;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
321 kSequencer.fTimer = 0.4f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
322 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
323 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
324
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
325 if(kSequencer.nSequence == BotSequence_Jump)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
326 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
327 nState = BotState_Pause;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
328 kPosition = kSequencer.kPosition;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
329 kSequencer.fTimer = 0.4f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
330 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
331 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
332
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
333 if(kSequencer.nSequence == BotSequence_Light)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
334 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
335 pEnvironment->NotifyAction(kPosition.X, kPosition.Y);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
336
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
337 nState = BotState_Pause;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
338 nColor = D3DCOLOR_XRGB(0, 255, 0);
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
339 kSequencer.fTimer = 0.4f;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
340 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
341 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
342 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
343 else
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
344
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
345 if(nState == BotState_Pause)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
346 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
347 kSequencer.fTimer -= fElapsed;
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
348 if(kSequencer.fTimer <= 0.0f)
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
349 {
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
350 nState = BotState_Evaluate;
|
3
|
351 return true;
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
352 }
|
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
353 }
|
3
|
354
|
|
355 return false;
|
0
koryspansel <koryspansel@bendbroadband.com>
parents:
diff
changeset
|
356 }
|
9
|
357
|
|
358 /*
|
|
359 * Render
|
|
360 */
|
|
361 void Bot::Render(RenderContext& kContext, Camera& kCamera)
|
|
362 {
|
|
363 const D3DXVECTOR3& kPosition = GetWorldPosition();
|
|
364 const D3DXVECTOR3& kOrientation = GetWorldOrientation();
|
|
365
|
|
366 const float fOffsetX = -0.5f * (pEnvironment->GetWidth() * pEnvironment->GetScale().x);
|
|
367 const float fOffsetZ = -0.5f * (pEnvironment->GetHeight() * pEnvironment->GetScale().z);
|
|
368
|
|
369 uint32 nPasses = 0;
|
|
370
|
|
371 kContext.Apply(kCamera, pEffect);
|
|
372
|
|
373 pEffect->SetTechnique(pEffect->GetTechnique(0));
|
|
374 pEffect->Begin(&nPasses, 0);
|
|
375 pEffect->BeginPass(0);
|
|
376
|
|
377 D3DXMATRIX kScale;
|
|
378 D3DXMatrixScaling(&kScale, kSize.x, kSize.y, kSize.z);
|
|
379
|
|
380 D3DXMATRIX kTranslate;
|
|
381 D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x, kPosition.y, fOffsetZ + kPosition.z);
|
|
382
|
|
383 D3DXMATRIX kRotate;
|
|
384 D3DXMatrixRotationY(&kRotate, kOrientation.y);
|
|
385
|
|
386 D3DXMATRIX kTempMatrix;
|
|
387 D3DXMATRIX kWorldMatrix;
|
|
388 D3DXMatrixMultiply(&kWorldMatrix, D3DXMatrixMultiply(&kTempMatrix, &kScale, &kRotate), &kTranslate);
|
|
389
|
|
390 const float fAlpha = ((nColor >> 24) & 0xFF) / 255.0f;
|
|
391 const float fRed = ((nColor >> 16) & 0xFF) / 255.0f;
|
|
392 const float fGreen = ((nColor >> 8 ) & 0xFF) / 255.0f;
|
|
393 const float fBlue = ((nColor >> 0 ) & 0xFF) / 255.0f;
|
|
394
|
|
395 const D3DXVECTOR4 kColorVector(fRed, fGreen, fBlue, fAlpha);
|
|
396
|
|
397 pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix);
|
|
398 pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector);
|
|
399 pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture);
|
|
400 pEffect->CommitChanges();
|
|
401
|
|
402 kContext.DrawTriangles(Vertex::Block::Declaration, pVertexBuffer, sizeof(Vertex::Block), FacesPerCube * TrianglesPerFace);
|
|
403
|
|
404 pEffect->EndPass();
|
|
405 pEffect->End();
|
|
406 }
|
|
407
|
|
408 /*
|
|
409 * Compile
|
|
410 */
|
|
411 ErrorCode Bot::Compile(Code* pInstance, uint8* pData, uint32 nSize)
|
|
412 {
|
|
413 const uint32 nLength = pInstance->GetLength();
|
|
414
|
|
415 for(uint32 i = 0; i < nLength; ++i)
|
|
416 {
|
|
417 const uint32 nAction = pInstance->GetSlot(i);
|
|
418
|
|
419 if(Action_Forward <= nAction && nAction <= Action_Light)
|
|
420 {
|
|
421 if(nSize < 2)
|
|
422 return Error_Fail;
|
|
423
|
|
424 *pData++ = Instruction_Action;
|
|
425 *pData++ = nAction;
|
|
426
|
|
427 nSize -= 2;
|
|
428 }
|
|
429 else
|
|
430
|
|
431 if(Action_FunctionA <= nAction && nAction <= Action_FunctionB)
|
|
432 {
|
|
433 if(nSize < 2)
|
|
434 return Error_Fail;
|
|
435
|
|
436 *pData++ = Instruction_Call;
|
|
437 *pData++ = nAction - Action_FunctionA + 1;
|
|
438
|
|
439 nSize -= 2;
|
|
440 }
|
|
441 }
|
|
442
|
|
443 return Error_Success;
|
|
444 }
|
|
445
|
|
446 /*
|
|
447 * SetupVertexBuffer
|
|
448 */
|
|
449 ErrorCode Bot::SetupVertexBuffer()
|
|
450 {
|
|
451 Vertex::Block* pVertices = NULL;
|
|
452
|
|
453 HRESULT hResult = pVertexBuffer->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD);
|
|
454 if(FAILED(hResult))
|
|
455 {
|
|
456 return Error_Fail;
|
|
457 }
|
|
458
|
|
459 const float fU1 = 0.66f;
|
|
460 const float fV1 = 0.66f;
|
|
461
|
|
462 // front
|
|
463 pVertices[0] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 1.00f);
|
|
464 pVertices[1] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 0.66f);
|
|
465 pVertices[2] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 0.66f);
|
|
466 pVertices[3] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 0.00f, 1.00f);
|
|
467 pVertices[4] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 0.66f);
|
|
468 pVertices[5] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, 0.0f, -1.0f, 1.00f, 1.00f);
|
|
469 // back
|
|
470 pVertices[6] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 1.00f);
|
|
471 pVertices[7] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 0.66f);
|
|
472 pVertices[8] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 0.66f);
|
|
473 pVertices[9] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 0.00f, 1.00f);
|
|
474 pVertices[10] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 0.66f);
|
|
475 pVertices[11] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, 0.0f, +1.0f, 1.00f, 1.00f);
|
|
476 // left
|
|
477 pVertices[12] = Vertex::Block(-0.5f, 0.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 1.00f);
|
|
478 pVertices[13] = Vertex::Block(-0.5f, 1.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 0.66f);
|
|
479 pVertices[14] = Vertex::Block(-0.5f, 1.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 0.66f);
|
|
480 pVertices[15] = Vertex::Block(-0.5f, 0.0f, +0.5f, -1.0f, 0.0f, 0.0f, 0.00f, 1.00f);
|
|
481 pVertices[16] = Vertex::Block(-0.5f, 1.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 0.66f);
|
|
482 pVertices[17] = Vertex::Block(-0.5f, 0.0f, -0.5f, -1.0f, 0.0f, 0.0f, 1.00f, 1.00f);
|
|
483 // right
|
|
484 pVertices[18] = Vertex::Block(+0.5f, 0.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 1.00f);
|
|
485 pVertices[19] = Vertex::Block(+0.5f, 1.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 0.66f);
|
|
486 pVertices[20] = Vertex::Block(+0.5f, 1.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 0.66f);
|
|
487 pVertices[21] = Vertex::Block(+0.5f, 0.0f, -0.5f, +1.0f, 0.0f, 0.0f, 0.00f, 1.00f);
|
|
488 pVertices[22] = Vertex::Block(+0.5f, 1.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 0.66f);
|
|
489 pVertices[23] = Vertex::Block(+0.5f, 0.0f, +0.5f, +1.0f, 0.0f, 0.0f, 1.00f, 1.00f);
|
|
490 // top
|
|
491 pVertices[24] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.66f);
|
|
492 pVertices[25] = Vertex::Block(-0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.00f);
|
|
493 pVertices[26] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.00f);
|
|
494 pVertices[27] = Vertex::Block(-0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 0.00f, 0.66f);
|
|
495 pVertices[28] = Vertex::Block(+0.5f, 1.0f, +0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.00f);
|
|
496 pVertices[29] = Vertex::Block(+0.5f, 1.0f, -0.5f, 0.0f, +1.0f, 0.0f, 1.00f, 0.66f);
|
|
497 // bottom
|
|
498 pVertices[30] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.66f);
|
|
499 pVertices[31] = Vertex::Block(-0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.00f);
|
|
500 pVertices[32] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.00f);
|
|
501 pVertices[33] = Vertex::Block(-0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 0.00f, 0.66f);
|
|
502 pVertices[34] = Vertex::Block(+0.5f, 0.0f, -0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.00f);
|
|
503 pVertices[35] = Vertex::Block(+0.5f, 0.0f, +0.5f, 0.0f, -1.0f, 0.0f, 1.00f, 0.66f);
|
|
504
|
|
505 pVertexBuffer->Unlock();
|
|
506
|
|
507 return Error_Success;
|
|
508 }
|