-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathLevel.as
More file actions
203 lines (176 loc) · 6.33 KB
/
Level.as
File metadata and controls
203 lines (176 loc) · 6.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
package {
import flash.geom.Point;
import net.flashpunk.Entity;
import net.flashpunk.graphics.Image;
import flash.utils.ByteArray;
/**
* @author Sebastian Bierman-Lytle
*/
public class Level extends Entity {
public static const IMPASSABLE:int = -1;
public static const PASSABLE:int = -2;
public static const DOOR:int = -3;
public static const DOOR_IMPASSABLE:int = -4;
public static const INFO:int = -5;
protected var mWorld:GameWorld;
protected var mLevelGrid:Array;
public var mLocation:int;
protected var mNPCData:XML;
protected var mStrings:XML;
public function Level(world:GameWorld, loctaion:int) {
mWorld = world;
mLocation = loctaion;
mLevelGrid = new Array();
}
public function getMapImage():Class {
return null;
}
public function getMapXMLData():Class {
return null;
}
public function getCoordinateData(xCoor:int, yCoor:int):int {
return mLevelGrid[xCoor][yCoor];
}
public function changeLocation(doorCoor:Point):Point {
return null;
}
public function playerNeedsToTurnAround(doorCoor:Point):Boolean {
return false;
}
public function openDoorIfNecessary(doorCoor:Point):void {
}
public function getInfoContent(x:int, y:int):String {
return "";
}
private function getXMLData(xml:Class):XML {
var ramData:ByteArray = new xml;
var dataString:String = ramData.readUTFBytes(ramData.length);
return new XML(dataString);
}
public function occupyNewCoordinate(oldCoor:Point, nuCoor:Point, id:int):void {
mLevelGrid[oldCoor.x][oldCoor.y] = Level.PASSABLE;
mLevelGrid[nuCoor.x][nuCoor.y] = id;
}
public function occupyCoordinate(coordinate:Point, id:int):void {
mLevelGrid[coordinate.x][coordinate.y] = id;
}
protected function loadLevelGrid(xml:Class):void {
var mapData:XML = loadXMLData(xml);
var dataElement:XML;
var dataList:XMLList = mapData.grid.element;
for (var i:int = 0; i < int(mapData.width); i++) {
var xArray:Array = new Array();
for (var j:int = 0; j < int(mapData.height); j++) {
xArray.push(0);
}
mLevelGrid.push(xArray);
}
var data:String;
var x:int;
var y:int;
for each (dataElement in dataList) {
x = dataElement.@x;
y = dataElement.@y;
data = dataElement.@type;
if (data == "impassable") mLevelGrid[int(dataElement.@x)][int(dataElement.@y)] = Level.IMPASSABLE;
else if (data == "door") mLevelGrid[int(dataElement.@x)][int(dataElement.@y)] = Level.DOOR;
else if (data == "door-impassable") mLevelGrid[int(dataElement.@x)][int(dataElement.@y)] = Level.DOOR_IMPASSABLE;
else if (data == "info") mLevelGrid[int(dataElement.@x)][int(dataElement.@y)] = Level.INFO;
else mLevelGrid[int(dataElement.@x)][int(dataElement.@y)] = Level.PASSABLE;
}
}
protected function loadXMLData(xml:Class):XML {
var ramData:ByteArray = new xml;
var dataString:String = ramData.readUTFBytes(ramData.length);
return new XML(dataString);
}
public function getNPCDialogue(key:String):String {
var dataElement:XML;
var dataList:XMLList = mStrings.element;
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == key)
return dataElement.@value;
return "No String Found!!";
}
public function getPlayerDialogue(root:String):Array {
var dataElement:XML;
var dataList:XMLList = mStrings.element;
var strings:Array = new Array();
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == root)
strings.push(String(dataElement.@value));
var key:int = int(Math.random() * 5 + 1);
for each (dataElement in dataList)
if (String(dataElement.@ref) == "NPC.0.goodbye" + key){
strings.push(String(dataElement.@value));
return strings;
}
return strings;
}
public function getPlayerResponseType(root:String):String {
var dataElement:XML;
var dataList:XMLList = mStrings.element;
var type:String = "Not Found";
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == root && dataElement.hasOwnProperty("@type"))
type = String(dataElement.@type);
return type;
}
public function getAudioFilename(root:String):String {
var dataElement:XML;
var dataList:XMLList = mStrings.element;
var filename:String = "Not Found";
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == root && dataElement.hasOwnProperty("@file"))
filename = String(dataElement.@file);
return filename;
}
public function getPlayerWordBank(root:String):Array {
var dataElement:XML;
var dataList:XMLList = mStrings.wordbank;
var data:String;
var lastbreak:int = 0;
var wordbank:Array = new Array();
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == root)
data = String(dataElement.@value);
for (var i:int = 0; i < data.length; i++) {
if (data.charAt(i) == "/" && data.charAt(i - 1) == "*") {
wordbank.push(data.substring(lastbreak, i - 1));
lastbreak = i + 1;
}
if (i == data.length - 1) {
wordbank.push(data.substring(lastbreak, data.length));
}
}
return wordbank;
}
public function getPlayerPrompt(root:String):String {
var dataElement:XML;
var dataList:XMLList = mStrings.element;
var prompt:String;
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == root)
prompt = String(dataElement.@value);
return prompt;
}
public function verifyInput(root:String, input:String):Array {
var dataElement:XML;
var dataList:XMLList = mStrings.element;
var output:Array = new Array();
for each (dataElement in dataList)
if (String(dataElement.@ref).slice(0, String(dataElement.@ref).length - 2) == root && String(dataElement.@type == "Result")){
output.push(input == String(dataElement.@answer));
if (input == String(dataElement.@answer)) { output.push(String(dataElement.@right)); }
else { output.push(String(dataElement.@wrong)); }
}
return output;
}
public function getLevelGridWidth():int {
return mLevelGrid.length;
}
public function getLevelGridHeight():int {
return mLevelGrid[0].length;
}
}
}