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
204
205
206
207
|
' Particle Pinch
'
' Copyright 2005 Ian Cowburn
'
' $Id$
'
Strict
Import noddybox.vector
Import noddybox.bitmapfont
Import noddybox.simplegui
Import "types.bmx"
Import "level.bmx"
Import "game.bmx"
Function LevelDesigner()
DoDesigner()
End Function
Private
' **** Globals
'
Type Designer
Const TEXTX:Int=100
Global init:Int=False
Global levelset:TLevelSet
Global level:TLevel
Global levelsetfname:String
Global done:Int
Global levelindex:Int
Global gui:TGUIHandler
Global fname_txt:TText
Global fname_load:TButton
Global fname_save:TButton
Global setname_txt:TText
Global levname_txt:TText
Global levadd_but:TButton
Global levins_but:TButton
Global levdel_but:TButton
Global levinv_check:TCheckbox
Global levnum:TNumberInt
Global hide_check:TCheckbox
Global validbut:TButton
Global helpbut:TButton
Global quitbut:TButton
Global mdialog:TGUIHandler
Global md_panel:TPanel
Global md_friendly:TCheckbox
Global md_invert:TCheckbox
Global md_mass:TText
Global md_ok:TButton
Global md_cancel:TButton
Global pdialog:TGUIHandler
Global pd_panel:TPanel
Global pd_gap:TNumberInt
Global pd_vx:TText
Global pd_vy:TText
Global pd_ok:TButton
Global pd_cancel:TButton
Function Initialise()
If Not init
Local l:TLabel
TGUIFont.font = GameGFX.guifont
levelset = New TLevelSet
level = New TLevel
levelsetfname = "Default.ppinch"
levelindex = 0
gui = TGUIHandler.Create()
TLabel.Create(gui,0,0,"File")
fname_txt = TText.Create(gui,TEXTX,0,"",32)
fname_load = TButton.Create(gui,fname_txt.x+fname_txt.w+10,0,50,12,"Load",LoadCallback)
fname_save = TButton.Create(gui,fname_load.x+fname_load.w+10,0,50,fname_load.h,"Save",SaveCallback)
TLabel.Create(gui,0,10,"Levelset name")
setname_txt = TText.Create(gui,TEXTX,10,"",32)
TLabel.Create(gui,0,20,"Level name")
levname_txt = TText.Create(gui,TEXTX,20,"",32)
levadd_but = TButton.Create(gui,levname_txt.x+levname_txt.w+10,levname_txt.y,50,12,"Add",AddLevelCallback)
levins_but = TButton.Create(gui,levadd_but.x+levadd_but.w+10,levname_txt.y,50,12,"Insert",InsertLevelCallback)
levdel_but = TButton.Create(gui,levins_but.x+levins_but.w+10,levname_txt.y,50,12,"Delete",DeleteLevelCallback)
levinv_check = TCheckbox.Create(gui,0,35,"Invert placed masses",InvertPlacedCallback)
l=TLabel.Create(gui,levinv_check.w+50,35,"Level:")
levnum = TNumberInt.Create(gui,l.x+l.w+10,35,LevelNumberCallback)
levnum.value=0
levnum.minval=0
levnum.maxval=0
hide_check = TCheckbox.Create(gui,750,0,"Hide",HideCallback)
validbut = TButton.Create(gui,650,570,49,29,"Check",CheckCallback)
helpbut = TButton.Create(gui,700,570,49,29,"Test",TestCallback)
quitbut = TButton.Create(gui,750,570,49,29,"Quit",QuitCallback)
levelset.level.AddLast(level)
init=True
EndIf
done = False
fname_txt.text = levelsetfname
setname_txt.text = levelset.name
levname_txt.text = level.name
End Function
End Type
' **** Main Loop
'
Function DoDesigner()
Designer.Initialise()
Designer.done=False
While Not Designer.done
Cls
Designer.gui.EventLoop()
SetColor(255,255,255)
DrawImage(GameGFX.pointer,MouseX(),MouseY())
Flip
FlushMem
Wend
End Function
' **** Utils
'
Function LoadLevel()
End Function
Function SaveLevel()
End Function
' **** Callbacks
'
Function HideCallback(w:TWidget)
Local c:TCheckbox=TCheckbox(w)
Designer.gui.SetEnable(Not c.checked)
c.enabled=True
End Function
Function QuitCallback(w:TWidget)
Designer.done=GUIYesNo("Quit back to the|main menu of Particle Pinch?",GameGFX.pointer)
End Function
Function TestCallback(w:TWidget)
End Function
Function CheckCallback(w:TWidget)
End Function
Function LoadCallback(w:TWidget)
Try
Local load:TLevelSet=TLevelSet.Load(Designer.fname_txt.text)
Designer.levelset=load
Catch e:TLevelException
GUINotify("Failed to load '" + Designer.fname_txt.text + "'||"+e.message,GameGFX.pointer)
EndTry
End Function
Function SaveCallback(w:TWidget)
If Not Designer.levelset.Save(Designer.fname_txt.text)
GUINotify("Failed to save '" + Designer.fname_txt.text + "'",GameGFX.pointer)
EndIf
End Function
Function InvertPlacedCallback(w:TWidget)
Local c:TCheckbox=TCheckbox(w)
Designer.level.invmass=c.checked
End Function
Function LevelNumberCallback(w:TWidget)
Local c:TNumberInt=TNumberInt(w)
SaveLevel()
Designer.levelindex=c.value
LoadLevel()
End Function
Function AddLevelCallback(w:TWidget)
End Function
Function InsertLevelCallback(w:TWidget)
End Function
Function DeleteLevelCallback(w:TWidget)
If Designer.levelset.level.Count()<2
GUINotify("Must have at least one level!",GameGFX.pointer)
Return
EndIf
If GUIYesNo("Delete this level:|"+Designer.levname_txt.text,GameGFX.pointer)
EndIf
End Function
|