Rev 14 | Rev 17 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | daniel-mar | 1 | unit ComLevelReader; |
2 | |||
3 | interface |
||
4 | |||
5 | type |
||
6 | TEnemyType = ( |
||
7 | etUnknown, |
||
8 | etEnemyAttacker, |
||
9 | etEnemyAttacker2, |
||
10 | etEnemyAttacker3, |
||
11 | etEnemyMeteor, |
||
12 | etEnemyUFO, |
||
13 | etEnemyUFO2, |
||
14 | etEnemyBoss |
||
15 | ); |
||
16 | |||
17 | TEnemyAdvent = record |
||
18 | enemyType: TEnemyType; |
||
19 | x: integer; |
||
20 | y: integer; |
||
21 | lifes: integer; |
||
22 | end; |
||
23 | |||
24 | TLevelData = class(TObject) |
||
25 | public |
||
26 | LevelEditorLength: integer; |
||
27 | EnemyAdventTable: array of TEnemyAdvent; |
||
28 | procedure Clear; |
||
29 | procedure Load(filename: string); |
||
30 | procedure Save(filename: string); |
||
31 | end; |
||
32 | |||
33 | implementation |
||
34 | |||
35 | uses |
||
36 | SysUtils, Classes; |
||
37 | |||
38 | { TLevelData } |
||
39 | |||
40 | procedure TLevelData.Clear; |
||
41 | begin |
||
42 | SetLength(EnemyAdventTable, 0); |
||
43 | LevelEditorLength := 0; |
||
44 | end; |
||
45 | |||
46 | procedure TLevelData.Load(filename: string); |
||
47 | var |
||
15 | daniel-mar | 48 | sl: TStringList; |
14 | daniel-mar | 49 | curline: integer; |
50 | ergebniss: string; |
||
51 | e: TEnemyAdvent; |
||
52 | begin |
||
15 | daniel-mar | 53 | sl := TStringList.Create; |
14 | daniel-mar | 54 | try |
15 | daniel-mar | 55 | sl.LoadFromFile(filename); |
14 | daniel-mar | 56 | curline := 0; |
57 | |||
15 | daniel-mar | 58 | ergebniss := sl.Strings[curline]; Inc(curline); |
14 | daniel-mar | 59 | if ergebniss = '; SpaceMission 1.0' then |
60 | begin |
||
15 | daniel-mar | 61 | ergebniss := sl.Strings[curline]; Inc(curline); |
62 | if ergebniss <> '; LEV-File' then |
||
63 | begin |
||
64 | raise Exception.Create('Dies ist keine SpaceMission Level-Datei'); |
||
65 | end; |
||
14 | daniel-mar | 66 | |
15 | daniel-mar | 67 | ergebniss := sl.Strings[curline]; Inc(curline); |
14 | daniel-mar | 68 | LevelEditorLength := StrToInt(ergebniss); |
69 | |||
15 | daniel-mar | 70 | while curline < sl.Count do |
14 | daniel-mar | 71 | begin |
15 | daniel-mar | 72 | ergebniss := sl.Strings[curline]; Inc(curline); |
14 | daniel-mar | 73 | e.enemyType := TEnemyType(strtoint(ergebniss)); |
15 | daniel-mar | 74 | ergebniss := sl.Strings[curline]; Inc(curline); |
14 | daniel-mar | 75 | e.x := strtoint(ergebniss); |
15 | daniel-mar | 76 | ergebniss := sl.Strings[curline]; Inc(curline); |
14 | daniel-mar | 77 | e.y := strtoint(ergebniss); |
15 | daniel-mar | 78 | ergebniss := sl.Strings[curline]; Inc(curline); |
14 | daniel-mar | 79 | e.lifes := strtoint(ergebniss); |
80 | |||
81 | SetLength(EnemyAdventTable, Length(EnemyAdventTable)+1); |
||
82 | EnemyAdventTable[Length(EnemyAdventTable)-1] := e; |
||
83 | end; |
||
84 | end |
||
85 | else |
||
86 | begin |
||
87 | // TODO: Support 0.2, 0.3, 0.4 |
||
88 | raise Exception.CreateFmt('Level-Format "%s" nicht unterstützt', [Copy(ergebniss, 3, Length(ergebniss)-2)]); |
||
89 | end; |
||
90 | finally |
||
15 | daniel-mar | 91 | FreeAndNil(sl); |
14 | daniel-mar | 92 | end; |
93 | end; |
||
94 | |||
95 | procedure TLevelData.Save(filename: string); |
||
15 | daniel-mar | 96 | var |
97 | sl: TStringList; |
||
98 | i: integer; |
||
14 | daniel-mar | 99 | begin |
15 | daniel-mar | 100 | sl := TStringList.Create; |
101 | try |
||
102 | sl.Add('; SpaceMission 1.0'); |
||
103 | sl.Add('; LEV-File'); |
||
104 | sl.Add(IntToStr(LevelEditorLength)); |
||
105 | for i := 0 to Length(EnemyAdventTable)-1 do |
||
106 | begin |
||
107 | sl.Add(IntToStr(Ord(EnemyAdventTable[i].enemyType))); |
||
108 | sl.Add(IntToStr(EnemyAdventTable[i].x)); |
||
109 | sl.Add(IntToStr(EnemyAdventTable[i].y)); |
||
110 | sl.Add(IntToStr(EnemyAdventTable[i].lifes)); |
||
111 | end; |
||
112 | sl.SaveToFile(filename); |
||
113 | finally |
||
114 | FreeAndNil(sl); |
||
115 | end; |
||
14 | daniel-mar | 116 | end; |
117 | |||
118 | end. |