View difference between Paste ID: J8dC40y7 and q848heGb
SHOW: | | - or go back to the newest paste.
1
os.loadAPI("/tcg/fw")
2
3
cards = {fw.newCard("", "", "noimage")}
4
selectedCard = 1
5
6
function paintimage(card, path, imagebackgroundcolor)
7
	if imagebackgroundcolor then
8
		local file = io.open("/tcg/cards/images/"..path, "w")
9
		if file then
10
			local c = imagebackgroundcolor
11
			for i = 1, fw.imageH do
12
				local line = ""
13
				for q = 1, fw.imageW do
14
					line = line..c
15
				end
16
				file:write(string.sub(line, 1, fw.imageW).."\n")
17
			end
18
			file:close()
19
		end
20
	end
21
22
	shell.run("paint", "/tcg/cards/images/"..path)
23
	card.image = path
24
	return card
25
end
26
27
function editfunc(name)
28
	if not fs.exists("/tcg/cards/scripts/"..name) then
29
		local file = io.open("/tcg/cards/scripts/"..name, "w")
30
		if file then
31
			file:write("--[[\n")
32
			file:write("\"action\" is fired when the card is put down on a deck\n")
33
			file:write("arguments:\n")
34
			file:write("1: the card table\n")
35
			file:write("2: deck on which the card was played\n")
36
			file:write("3: the game table, contains the deck tables\n")
37
			file:write("\n")
38
			file:write("\"update\" is fired when the card is updated\n")
39
			file:write("arguments:\n")
40
			file:write("1: the card table\n")
41
			file:write("2: event\n")
42
			file:write("3: event var 1\n")
43
			file:write("4: event var 2\n")
44
			file:write("5: event var 3\n")
45
			file:write("6: the game table, contains the deck tables\n")
46
			file:write("]]")
47
			file:write("\n")
48
			file:write("function action(self, deck, game)\n")
49
			file:write("end\n")
50
			file:write("\n")
51
			file:write("function update(self, event, var1, var2, var3, game)\n")
52
			file:write("end\n")
53
			file:close()
54
		end
55
	end
56
	shell.run("edit", "/tcg/cards/scripts/"..name)
57
end
58
59
function delcard()
60
	if #cards>1 then
61
		table.remove(cards, selectedCard)
62
		if not cards[selectedCard] then
63
			if cards[selectedCard+1] then
64
				selectedCard = selectedCard+1
65
			else
66
				selectedCard = selectedCard-1
67
			end
68
		end
69
	end
70
end
71
72
function loadCard()
73
	input = fw.text(
74
		"filename",
75
		function(name)
76
			local loaded = fw.loadCard("/saves/"..name)
77
			if loaded then cards[selectedCard] = loaded end
78
		end
79
	)
80
end
81
82
function copycard()
83
	local card = cards[selectedCard]
84
	table.insert(
85
		cards,
86
		fw.newCard(
87
			card.title,
88
			card.description,
89
			card.image
90
		)
91
	)
92
	selectedCard = #cards
93
end
94
95
function newcard()
96
	cards[#cards+1] = fw.newCard("", "", "noimage")
97
	selectedCard=#cards
98
end
99
100
function initelements()
101
	elements = {
102
		title = fw.button(
103
			fw.cardX+1, fw.cardY+1, fw.cardW-2, 1, "title",
104
			"blue", "blue",
105
			change.title,
106
			true
107
		),
108
		description = fw.button(
109
			fw.cardX+1, fw.cardY+fw.cardH-4, fw.imageW, 3, "description",
110
			"blue", "blue",
111
			change.description,
112
			true
113
		),
114
		image = fw.button(
115
			fw.cardX+1, fw.cardY+3, fw.imageW, fw.imageH, "image",
116
			"blue", "blue",
117
			change.image,
118
			true
119
		),
120
		newimage = fw.button(
121
			fw.cardX+1, fw.cardY+3, fw.imageW, fw.imageH, "paint",
122
			"blue", "blue",
123
			change.newimage,
124
			true,
125
			2
126
		),
127
		save = fw.button(
128
			11, fw.winH-2, nil, 2, "save card",
129
			"green", "lime",
130
			function()
131
				fw.saveCard(card, "saves/"..card.title)
132
			end
133
		),
134
		savedeck = fw.button(
135
			11, fw.winH, nil, 1, "save deck",
136
			"lime", "green",
137
			function()
138
				input = fw.text(
139
					"filename",
140
					function(name)
141
						fw.saveCard(cards, "packs/"..name)
142
					end
143
				)
144
			end
145
		),
146
		load = fw.button(
147
			1, fw.winH-2, 9, 1, "load card",
148
			"blue", "lightBlue",
149
			loadCard
150
		),
151
		loaddeck = fw.button(
152
			1, fw.winH-1, 9, 1, "load deck",
153
			"lightBlue", "blue",
154
			function()
155
				input = fw.text(
156
					"filename",
157
					function(name)
158
						loaded = fw.loadCard("packs/"..name)
159
						if loaded then cards = loaded end
160
						selectedCard = math.ceil(#cards/2)
161
					end
162
				)
163
			end
164
		),
165
		whatload = fw.button(
166
			1, fw.winH, 9, 1, "cards",
167
			"cyan", "blue",
168
			function()
169
				term.setBackgroundColor(colors.lightGray)
170
				term.clear()
171
				paintutils.drawFilledBox(1, 1, fw.winW, 3, colors.cyan)
172
				paintutils.drawFilledBox(1, fw.winH-3, fw.winW, fw.winH, colors.cyan)
173
				term.setTextColor(colors.white)
174
				term.setCursorPos(1, 2)
175
				textutils.slowWrite("These Cards are aviable to be loaded in the editor:", 220)
176
				term.setCursorPos(1, 6)
177
				term.setBackgroundColor(colors.lightGray)
178
				textutils.pagedTabulate(fs.list("/tcg/cards/saves"))
179
				term.setTextColor(colors.white)
180
				term.setCursorPos(1, fw.winH-1)
181
				term.setBackgroundColor(colors.cyan)
182
				print("Press any key to get back to the editor!")
183
				os.pullEvent("key")
184
			end
185
		),
186
		delete = fw.button(
187
			23, fw.winH-2, 8, 2, "delete",
188
			"red", "orange",
189
			delcard
190
		),
191
		deletesave = fw.button(
192
			23, fw.winH, 8, 1, "delsave",
193
			"orange", "yellow",
194
			function()
195
				input = fw.text(
196
					"cardname",
197
					function(name)
198
						input2 = fw.text(
199
							"delete"..name.."?!",
200
							function(name)
201
								if name == "yes" or name=="y" or name == "Yes" or name == "ja" then
202
									fs.delete("/tcg/cards/saves/"..name)
203
								end
204
							end
205
						)
206
					end
207
				)
208
				input = input2
209
			end
210
		),
211
		new = fw.button(
212
			32, fw.winH-2, 5, 2, "new",
213
			"gray", "lightGray",
214
			newcard
215
		),
216
		copy = fw.button(
217
			32, fw.winH, 5, 1, "copy",
218
			"lightGray", "gray",
219
			function()
220
				cards[#cards+1] = fw.newCard("", "", "noimage")
221
				selectedCard=#cards
222
			end
223
		),
224
		exit = fw.button(
225
			38, fw.winH-2, nil, 3, "exit",
226
			"yellow", "orange",
227
			function()
228
				os.unloadAPI(fw)
229
				fw.exit()
230
			end
231
		),
232
		script = fw.button(
233
			45, fw.winH-2, nil, 3, "script",
234
			"white", "lightGray",
235
			function()
236
				if not card.script then
237
					input = fw.text(
238
						"filename",
239
						function(name)
240
							card.script = name
241
							editfunc(name)
242
						end
243
					)
244
				else
245
					editfunc(card.script)
246
				end
247
			end
248
		),
249
		right = fw.button(
250
			fw.cardX+fw.cardW+1, fw.cardY, fw.sideCards*fw.cardW, 12, ">",
251
			"blue", "blue",
252
			function()
253
					if cards[selectedCard+1] then
254
						selectedCard = selectedCard+1
255
					end
256
			end,
257
			true
258
		),
259
		left = fw.button(
260
			fw.cardX-fw.sideCards*fw.cardW-fw.cardW+5, fw.cardY, fw.sideCards*fw.cardW+5, 12, "<",
261
			"blue", "blue",
262
			function()
263
				if cards[selectedCard-1] then
264
					selectedCard = selectedCard-1
265
				end
266
			end,
267
			true
268
		),
269
		help = fw.button(
270
			fw.winW-1, 2, 2, 2, "??",
271
			"green", "lime",
272
			function()
273
				if fs.exists("/tcg/editor/manual") then
274
					local id = multishell.launch({}, "/tcg/editor/manual")
275
					multishell.setFocus(id)
276
				end
277
			end
278
		)
279
	}
280
end
281
282
change = {
283
	title = function()
284
		input = fw.text(
285
			"insert title",
286
			function(name)
287
				card.title = name
288
			end,
289
			card.title
290
		)
291
	end,
292
	description = function()
293
		input = fw.text(
294
			"insert description",
295
			function(name)
296
				card.description = name
297
			end,
298
			card.description
299
		)
300
	end,
301
	image = function()
302
		input = fw.text(
303
			"insert filename",
304
			function(name)
305
				if fs.exists("/tcg/cards/images/"..name) and #name>0 then
306
					card.image = name
307
					cardimage = paintutils.loadImage(card.image)
308
				end
309
			end,
310
			card.image
311
		)
312
	end,
313
	newimage = function(name)
314
		if card.image == "noimage" then
315
			input = fw.text(
316
				"image name",
317
				function(name)
318
					paintpath = name
319
					if #paintpath>0 then
320
						if fs.exists("/tcg/cards/images/"..paintpath) then
321
							card = paintimage(card, paintpath)
322
						else
323
							input2 = fw.text(
324
								"color code",
325
								function(col)
326
									card = paintimage(card, paintpath, col)
327
								end
328
							)
329
						end
330
					end
331
				end
332
			)
333
		else
334
			paintimage(card, card.image)
335
		end
336
	end
337
}
338
339
while true do
340
	--draw stuff
341
	fw.winW, fw.winH = term.getSize()
342
	initelements()
343
	local textinput = {inp = input, inp2 = input2}
344
	card = cards[selectedCard]
345
	fw.draw(elements, "black")
346
	term.setBackgroundColor(colors.gray)
347
	paintutils.drawLine(1, 1, fw.winW, 1)
348
	term.setTextColor(colors.white)
349
	term.setCursorPos(1, 1)
350
	print("Editing '"..card.title.."', card number: "..selectedCard)
351
352
	for i = -4, 0 do
353
		if cards[selectedCard+i] then
354
			fw.drawCard(fw.cardX+5*i, fw.cardY-1*i/2, cards[selectedCard+i])
355
		end
356
	end
357
	for i = -4, 0 do
358
		if cards[selectedCard-i] then
359
			fw.drawCard(fw.cardX-5*i, fw.cardY-1*i/2, cards[selectedCard-i])
360
		end
361
	end
362
	fw.drawCard(fw.cardX, fw.cardY, card)
363
364
	term.setCursorPos(fw.winW-15, 1)
365
	term.blit("0123456789abcdef", "8ea91da87b297517", "0123456789abcdef")
366
367
	fw.draw(textinput)
368
369
	--update fw
370
	local event, var1, var2, var3 = os.pullEventRaw()
371
	if event == "key" and input.title == "" then
372
		if var1 == keys.right then
373
			if selectedCard~=#cards then selectedCard=selectedCard+1 end
374
		elseif var1 == keys.left then
375
			if selectedCard~=1 then selectedCard=selectedCard-1 end
376
		elseif var1 == keys.up then
377
			change.title()
378
		elseif var1 == keys.down then
379
			change.description()
380
		elseif var1 == keys.s then
381
			fw.saveCard(card, "saves/"..card.title)
382
		elseif var1 == keys.backspace or var1 == keys.d or var1 == keys.delete then
383
			delcard()
384
		elseif var1 == keys.c then
385
			copycard()
386
		elseif var1 == keys.l then
387
			loadCard()
388
		elseif var1 == keys.e then
389
			fw.exit()
390
		elseif var1 == keys.n then
391
			newcard()
392
		end
393
	end
394
	fw.update(textinput, event, var1, var2, var3)
395
	fw.update(elements, event, var1, var2, var3)
396
	if not textinput.inp then
397
		input = fw.button(1, 1, 1, 1, "", nil, nil, nil, true)
398
	end
399
	if not textinput.inp2 then
400
		input2 = fw.button(1, 1, 1, 1, "", nil, nil, nil, true)
401
	end
402
end