Mercurial > LightClone
annotate LightClone/Source/Program.cpp @ 53:8cefb65577cc
Clean up world states
author | koryspansel |
---|---|
date | Fri, 30 Sep 2011 15:23:16 -0700 |
parents | 2caa7c7e2cb5 |
children | 95677f648a2c |
rev | line source |
---|---|
36 | 1 /* |
2 * Program | |
3 */ | |
4 | |
5 #include "Program.h" | |
6 | |
7 /* | |
8 * Program | |
9 */ | |
10 Program::Program() | |
11 { | |
12 } | |
13 | |
14 /* | |
37
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
15 * Initialize |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
16 */ |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
17 ErrorCode Program::Initialize() |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
18 { |
38 | 19 return Clear(), Error_Success; |
37
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
20 } |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
21 |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
22 /* |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
23 * Terminate |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
24 */ |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
25 void Program::Terminate() |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
26 { |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
27 } |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
28 |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
29 /* |
38 | 30 * SetAction |
31 */ | |
32 void Program::SetAction(uint32 nFunction, uint32 nIndex, uint32 nAction) | |
33 { | |
34 if(nFunction < FunctionCount && nIndex < Function::MaximumInstructionCount) | |
35 { | |
36 kFunction[nFunction].nInstruction[nIndex] = nAction; | |
37 } | |
38 } | |
39 | |
40 /* | |
37
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
41 * Clear |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
42 */ |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
43 void Program::Clear() |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
44 { |
38 | 45 for(uint32 i = 0; i < FunctionCount; ++i) |
46 { | |
47 for(uint32 j = 0; j < Function::MaximumInstructionCount; ++j) | |
48 { | |
49 kFunction[i].nInstruction[j] = Action_Default; | |
50 } | |
51 } | |
37
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
52 } |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
53 |
58a16d529d95
Refactoring code and adding events for drag and drop
koryspansel <koryspansel@bendbroadband.com>
parents:
36
diff
changeset
|
54 /* |
36 | 55 * Upload |
56 */ | |
38 | 57 ErrorCode Program::Upload(VirtualMachine& kMachine) const |
36 | 58 { |
59 ErrorCode eCode = Error_Success; | |
60 | |
61 kMachine.Reset(); | |
62 kMachine.ClearMemory(); | |
53 | 63 //kMachine.RemoveAllFunctions(); |
36 | 64 |
53 | 65 //uint32 nSize = kMachine.GetMemorySize(); |
66 //uint8* pData = kMachine.GetMemoryPointer(); | |
36 | 67 |
53 | 68 //for(uint32 i = 0; i < FunctionCount && eCode == Error_Success; ++i) |
69 //{ | |
70 // eCode = Compile(i, pData, nSize); | |
71 //} | |
36 | 72 |
73 return eCode; | |
74 } | |
75 | |
76 /* | |
77 * Compile | |
78 */ | |
38 | 79 ErrorCode Program::Compile(uint32 nIndex, uint8* pData, uint32 nSize) const |
36 | 80 { |
53 | 81 ErrorCode eCode = Error_Success; |
82 | |
83 for(uint32 i = 0; i < Function::MaximumInstructionCount && eCode == Error_Success; ++i) | |
36 | 84 { |
53 | 85 // encode user-defined actions |
86 eCode = EncodeAction(kFunction[nIndex].nInstruction[i], pData, nSize); | |
87 } | |
36 | 88 |
53 | 89 if(eCode == Error_Success) |
90 { | |
91 if(nSize > 0) | |
92 { | |
93 // add implicit return statement | |
94 *pData++ = Instruction_End; | |
95 } | |
96 else | |
36 | 97 { |
53 | 98 eCode = Error_Fail; |
99 } | |
100 } | |
101 | |
102 return eCode; | |
103 } | |
36 | 104 |
53 | 105 /* |
106 * EncodeAction | |
107 */ | |
108 ErrorCode Program::EncodeAction(uint32 nAction, uint8*& pData, uint32& nSize) const | |
109 { | |
110 if(Action_Forward <= nAction && nAction <= Action_Light) | |
111 { | |
112 if(nSize >= 2) | |
113 { | |
36 | 114 *pData++ = Instruction_Action; |
115 *pData++ = nAction; | |
116 | |
53 | 117 return nSize -= 2, Error_Success; |
36 | 118 } |
53 | 119 } |
120 else | |
36 | 121 |
53 | 122 if(Action_FunctionA <= nAction && nAction <= Action_FunctionB) |
123 { | |
124 if(nSize >= 2) | |
36 | 125 { |
126 *pData++ = Instruction_Call; | |
127 *pData++ = nAction - Action_FunctionA + 1; | |
128 | |
53 | 129 return nSize -= 2, Error_Success; |
130 } | |
131 } | |
132 else | |
133 | |
134 { | |
135 if(nSize >= 1) | |
136 { | |
137 *pData++ = Instruction_None; | |
138 | |
139 return nSize -= 1, Error_Success; | |
36 | 140 } |
141 } | |
142 | |
53 | 143 return Error_Fail; |
36 | 144 } |