summaryrefslogtreecommitdiff
path: root/designer.bmx
blob: b6f12de16a1fbdce18d3c3a75b612dc34bedd567 (plain)
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