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
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
1 /*
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
2 * Program
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
3 */
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
4
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
5 #include "Program.h"
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
6
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
7 /*
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
8 * Program
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
9 */
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
10 Program::Program()
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
11 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
12 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
13
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
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
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
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
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
30 * SetAction
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
31 */
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
32 void Program::SetAction(uint32 nFunction, uint32 nIndex, uint32 nAction)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
33 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
34 if(nFunction < FunctionCount && nIndex < Function::MaximumInstructionCount)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
35 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
36 kFunction[nFunction].nInstruction[nIndex] = nAction;
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
37 }
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
38 }
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
39
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
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
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
45 for(uint32 i = 0; i < FunctionCount; ++i)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
46 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
47 for(uint32 j = 0; j < Function::MaximumInstructionCount; ++j)
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
48 {
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
49 kFunction[i].nInstruction[j] = Action_Default;
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
50 }
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
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
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
55 * Upload
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
56 */
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
57 ErrorCode Program::Upload(VirtualMachine& kMachine) const
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
58 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
59 ErrorCode eCode = Error_Success;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
60
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
61 kMachine.Reset();
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
62 kMachine.ClearMemory();
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
63 //kMachine.RemoveAllFunctions();
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
64
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
65 //uint32 nSize = kMachine.GetMemorySize();
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
66 //uint8* pData = kMachine.GetMemoryPointer();
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
67
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
68 //for(uint32 i = 0; i < FunctionCount && eCode == Error_Success; ++i)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
69 //{
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
70 // eCode = Compile(i, pData, nSize);
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
71 //}
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
72
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
73 return eCode;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
74 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
75
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
76 /*
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
77 * Compile
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
78 */
38
2caa7c7e2cb5 Refactored program; Added dialog
koryspansel
parents: 37
diff changeset
79 ErrorCode Program::Compile(uint32 nIndex, uint8* pData, uint32 nSize) const
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
80 {
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
81 ErrorCode eCode = Error_Success;
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
82
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
83 for(uint32 i = 0; i < Function::MaximumInstructionCount && eCode == Error_Success; ++i)
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
84 {
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
85 // encode user-defined actions
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
86 eCode = EncodeAction(kFunction[nIndex].nInstruction[i], pData, nSize);
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
87 }
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
88
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
89 if(eCode == Error_Success)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
90 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
91 if(nSize > 0)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
92 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
93 // add implicit return statement
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
94 *pData++ = Instruction_End;
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
95 }
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
96 else
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
97 {
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
98 eCode = Error_Fail;
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
99 }
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
100 }
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
101
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
102 return eCode;
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
103 }
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
104
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
105 /*
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
106 * EncodeAction
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
107 */
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
108 ErrorCode Program::EncodeAction(uint32 nAction, uint8*& pData, uint32& nSize) const
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
109 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
110 if(Action_Forward <= nAction && nAction <= Action_Light)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
111 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
112 if(nSize >= 2)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
113 {
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
114 *pData++ = Instruction_Action;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
115 *pData++ = nAction;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
116
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
117 return nSize -= 2, Error_Success;
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
118 }
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
119 }
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
120 else
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
121
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
122 if(Action_FunctionA <= nAction && nAction <= Action_FunctionB)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
123 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
124 if(nSize >= 2)
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
125 {
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
126 *pData++ = Instruction_Call;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
127 *pData++ = nAction - Action_FunctionA + 1;
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
128
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
129 return nSize -= 2, Error_Success;
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
130 }
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
131 }
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
132 else
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
133
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
134 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
135 if(nSize >= 1)
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
136 {
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
137 *pData++ = Instruction_None;
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
138
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
139 return nSize -= 1, Error_Success;
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
140 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
141 }
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
142
53
8cefb65577cc Clean up world states
koryspansel
parents: 38
diff changeset
143 return Error_Fail;
36
b60cbf3fa894 Refactoring 'Code' & VM logic
koryspansel
parents:
diff changeset
144 }