Skip to content

Commit 444439b

Browse files
committed
new gifs
custom code patterns funny gifs fence pattern new drizzle(0.2.0.9)
1 parent d9da321 commit 444439b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+307
-92
lines changed

GE.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,13 +562,13 @@ def place(self, pos, render=True, domirror=False):
562562
self.changedata(["GE", x, y, self.layer, 1], [])
563563
elif self.selectedtool in globalsettings["codes"].keys(): # else
564564
if globalsettings["codes"][self.selectedtool] == 1:
565-
self.changedata(["GE", x, y, self.layer, 0], self.placetile + self.state)
565+
self.changedata(["GE", x, y, self.layer, 0], self.reverseslope(self.placetile + self.state) if domirror else (self.placetile + self.state))
566566
if globalsettings["codes"][self.selectedtool] == 0:
567567
if (abs(int(self.placetile))) + self.state not in self.data["GE"][x][y][self.layer][1]:
568568
self.changedata(["GE", x, y, self.layer, 1], [*self.data["GE"][x][y][self.layer][1],
569569
(abs(int(self.placetile))) + self.state])
570570
else:
571-
self.changedata(["GE", x, y, self.layer, 0], self.placetile)
571+
self.changedata(["GE", x, y, self.layer, 0], self.reverseslope(self.placetile) if domirror else self.placetile)
572572
if render:
573573
self.render_geo_area()
574574
self.rfa()

TE.py

Lines changed: 79 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,16 @@ def __init__(self, process):
3939
self.matshow = False
4040

4141
self.items: ItemData = process.renderer.tiles
42-
p = json.load(open(path + "patterns.json", "r"))
42+
self.codes = {}
43+
p: dict = jsonc.load(open(path + "patterns.json", "r"))
4344
if "special" not in self.items.categories:
4445
self.items.append({"name": "special", "color": black, "items": p["patterns"]})
4546
for indx, pattern in enumerate(p["patterns"]):
4647
self.items[-1]["items"][indx]["cat"] = [len(self.items), indx + 1]
48+
49+
# loading code presets
50+
for pat in pattern.get("codenames", []):
51+
self.codes[pat] = open(path2patterns + pat, "r").read()
4752
self.blocks = p["blocks"]
4853
self.brushmode = False
4954
self.squarebrush = False
@@ -58,7 +63,7 @@ def __init__(self, process):
5863

5964
super().__init__(process, "TE", False)
6065
self.drawtiles = True
61-
self.set("materials 0", "Standard")
66+
self.set("materials 0", "Standard", usefavs=True)
6267
self.labels[2].set_text("Default material: " + self.data["TE"]["defaultMaterial"])
6368

6469
self.selector = widgets.Selector(self, self.items, "s1", "tiles.txt")
@@ -147,9 +152,16 @@ def blit(self):
147152
pg.draw.rect(self.surface, canplace if self.tool == 0 else cannotplace, [[cposx - 2, cposy - 2],
148153
[self.tileimage["size"] * self.size + 4,
149154
self.tileimage["size"] * self.size + 4]], 2)
155+
elif self.tileimage["ptype"] == "codepat":
156+
cposxo = int(posoffset.x)
157+
cposyo = int(posoffset.y)
158+
cposx = (cposxo + self.xoffset) * self.size + self.field.rect.x
159+
cposy = (cposyo + self.yoffset) * self.size + self.field.rect.y
160+
pg.draw.rect(self.surface, canplace if self.tool == 0 else cannotplace,
161+
[[cposx - 2, cposy - 2], [self.size + 4, self.size + 4]], 2)
150162
else:
151-
cposxo = int(posoffset.x) - 2
152-
cposyo = int(posoffset.y) - 2
163+
cposxo = int(posoffset.x)
164+
cposyo = int(posoffset.y)
153165
bp = self.getmouse
154166
if self.brushmode:
155167
if self.squarebrush:
@@ -217,7 +229,7 @@ def blit(self):
217229
if block["tp"] == "material" or block["tp"] == "tileHead":
218230
history.append([x, y, block])
219231
pyperclip.copy(str(history))
220-
elif self.tool == 0 and self.tileimage["tp"] == "pattern":
232+
elif self.tileimage["tp"] == "pattern":
221233
self.insertpattern_rect(rect)
222234
self.detecthistory(["TE", "tlMatrix"])
223235
if fg:
@@ -255,11 +267,13 @@ def insertpattern_rect(self, rect):
255267
case "placer4":
256268
for y in range(int(rect.h)):
257269
for x in range(int(rect.w)):
258-
self.pattern_placer4(x + rect.x, y + rect.y)
270+
self.pattern_placer4(x + rect.x, y + rect.y, render=False)
271+
case "codepat":
272+
self.pattern_codepat(rect, True, self.tool == 1)
259273
case _:
260274
return
261275
self.selector.currentcategory, self.selector.currentitem, self.selector.show = savedata
262-
self.set(savedcat, savedtool)
276+
self.set(savedcat, savedtool, usefavs=True)
263277
self.selector.recreate()
264278

265279
def insertpattern_pen(self, xpos, ypos):
@@ -271,15 +285,35 @@ def insertpattern_pen(self, xpos, ypos):
271285
match self.tileimage["ptype"]:
272286
case "placer4":
273287
self.pattern_placer4(xpos, ypos)
288+
case "codepat":
289+
self.pattern_codepat(pg.Rect(xpos, ypos, 1, 1), False, self.tool == 1)
274290
case _:
275291
return
276292
self.selector.currentcategory, self.selector.currentitem, self.selector.show = savedata
277-
self.set(savedcat, savedtool)
293+
self.set(savedcat, savedtool, usefavs=True)
278294
self.tool = stool
279295
self.selector.recreate()
280296

297+
def pattern_codepat(self, rect, userect, destroy):
298+
def normaldestroy(dodestroy):
299+
if dodestroy and userect:
300+
for x in range(int(rect.w)):
301+
for y in range(int(rect.h)):
302+
self.destroy(x + rect.x, y + rect.y)
303+
elif dodestroy and not userect:
304+
self.destroy(rect.x, rect.y)
305+
for codename in self.tileimage["codenames"]:
306+
if self.codes.get(codename) is None:
307+
log_to_load_log(f"Couldn't load script with name {codename}", error=True)
308+
return
309+
try:
310+
savedtile = self.tileimage
311+
exec(self.codes[codename])
312+
except Exception as e:
313+
traceback.print_exc()
314+
print(f"script {codename} failed with error {str(e)}")
281315

282-
def pattern_placer4(self, xpos, ypos, init=True):
316+
def pattern_placer4(self, xpos, ypos, init=True, render=True):
283317
if xpos < 0 or xpos > self.levelwidth or ypos < 0 or ypos > self.levelheight:
284318
return
285319
size = self.tileimage["size"]
@@ -296,16 +330,6 @@ def pattern_placer4(self, xpos, ypos, init=True):
296330
savedata = [self.selector.currentcategory, self.selector.currentitem, self.selector.show]
297331
stool = self.tool
298332

299-
def gettile(xp, yp):
300-
if xp < 0 or xp > self.levelwidth or yp < 0 or yp > self.levelheight:
301-
return None
302-
if self.data.TE_data(xp, yp, self.layer)["tp"] == "tileBody":
303-
a = toarr(self.data.TE_data(xp, yp, self.layer)["data"][0], "point")
304-
return gettile(a[0] - 1, a[1] - 1)
305-
elif self.data.TE_data(xp, yp, self.layer)["tp"] == "tileHead":
306-
return self.items[self.data.TE_data(xp, yp, self.layer)["data"][1]]
307-
return None
308-
309333
def isplaceretile(xp, yp) -> bool:
310334
if xp < 0 or xp > self.levelwidth or yp < 0 or yp > self.levelheight:
311335
return False
@@ -314,13 +338,13 @@ def isplaceretile(xp, yp) -> bool:
314338
return True
315339
elif geotile in geonotcount:
316340
return False
317-
tile = gettile(xp, yp)
341+
tile = self.gettile(xp, yp)
318342
if tile is None:
319343
return False
320344
return tile["nm"] in conf.values() or tile["nm"] in add
321345

322346
if self.tool == 0 or not init:
323-
self.set(tile["category"], tile["nm"], False, False)
347+
self.set(tile["category"], tile["nm"], False)
324348
if not self.test_cols(xpos, ypos):
325349
return
326350

@@ -330,7 +354,7 @@ def isplaceretile(xp, yp) -> bool:
330354
connectioncode += "W" if isplaceretile(xpos - size, ypos) else ""
331355

332356
tile = self.items[conf[connectioncode]]
333-
self.set(tile["category"], tile["nm"], False, False)
357+
self.set(tile["category"], tile["nm"], render)
334358
self.tileimage["image"] = pg.transform.scale(self.tileimage["image"],
335359
[self.tileimage["image"].get_width() / spritesize * self.size,
336360
self.tileimage["image"].get_height() / spritesize * self.size])
@@ -339,30 +363,28 @@ def isplaceretile(xp, yp) -> bool:
339363
for yp in range(size // tile["size"][1]):
340364
self.place(xpos + xp, ypos + yp, True)
341365
else:
342-
self.place(xpos, ypos, True)
366+
self.place(xpos, ypos, render)
343367
elif self.tool == 1:
344-
self.destroy(xpos, ypos, destroycolor=gray)
368+
self.destroy(xpos, ypos, render, destroycolor=gray)
345369
if init:
346370
for i in col4:
347371
if isplaceretile(xpos + i[0] * size, ypos + i[1] * size):
348372
if not allequal:
349373
for xp in range(size):
350374
for yp in range(size):
351-
self.destroy(xpos + i[0] * size + xp, ypos + i[1] * size + yp, destroycolor=darkgray)
375+
self.destroy(xpos + i[0] * size + xp, ypos + i[1] * size + yp, render, destroycolor=darkgray)
352376
else:
353-
self.destroy(xpos + i[0] * size, ypos + i[1] * size, destroycolor=darkgray)
377+
self.destroy(xpos + i[0] * size, ypos + i[1] * size, render, destroycolor=darkgray)
354378
self.selector.currentcategory, self.selector.currentitem, self.selector.show = savedata
355-
self.set(savedcat, savedtool, False)
379+
self.set(savedcat, savedtool, False, usefavs=True)
356380
self.tool = stool
357381
self.selector.recreate()
358382
self.pattern_placer4(xpos + i[0] * size, ypos + i[1] * size, False)
359383
self.selector.currentcategory, self.selector.currentitem, self.selector.show = savedata
360-
self.set(savedcat, savedtool, False)
384+
self.set(savedcat, savedtool, False, usefavs=True)
361385
self.tool = stool
362386
self.selector.recreate()
363387

364-
365-
366388
def pattern_randchance(self, rect):
367389
existingblocks = []
368390
for k, v in self.tileimage["randconf"].items():
@@ -373,30 +395,30 @@ def pattern_randchance(self, rect):
373395
for y in range(int(rect.h)):
374396
for x in range(int(rect.w)):
375397
selecteditem = existingblocks[random.choices([i for i in range(len(existingblocks))], [i[2] for i in existingblocks])[0]][0]
376-
self.set(selecteditem["category"], selecteditem["nm"], False, False)
398+
self.set(selecteditem["category"], selecteditem["nm"], False)
377399
self.place(x + rect.x, y + rect.y)
378400

379401
def pattern_patternbox(self, rect):
380402
saved = self.tileimage
381403
for y in range(int(rect.h)):
382404
for x in range(int(rect.w)):
383405
if x == 0 and y == 0:
384-
self.set(self.blocks["cat"], self.blocks["NW"], False, False)
406+
self.set(self.blocks["cat"], self.blocks["NW"], False)
385407
elif x == rect.w - 1 and y == 0:
386-
self.set(self.blocks["cat"], self.blocks["NE"], False, False)
408+
self.set(self.blocks["cat"], self.blocks["NE"], False)
387409
elif x == 0 and y == rect.h - 1:
388-
self.set(self.blocks["cat"], self.blocks["SW"], False, False)
410+
self.set(self.blocks["cat"], self.blocks["SW"], False)
389411
elif x == rect.w - 1 and y == rect.h - 1:
390-
self.set(self.blocks["cat"], self.blocks["SE"], False, False)
412+
self.set(self.blocks["cat"], self.blocks["SE"], False)
391413

392414
elif x == 0:
393-
self.set(self.blocks["cat"], self.blocks["W"], False, False)
415+
self.set(self.blocks["cat"], self.blocks["W"], False)
394416
elif y == 0:
395-
self.set(self.blocks["cat"], self.blocks["N"], False, False)
417+
self.set(self.blocks["cat"], self.blocks["N"], False)
396418
elif x == rect.w - 1:
397-
self.set(self.blocks["cat"], self.blocks["E"], False, False)
419+
self.set(self.blocks["cat"], self.blocks["E"], False)
398420
elif y == rect.h - 1:
399-
self.set(self.blocks["cat"], self.blocks["S"], False, False)
421+
self.set(self.blocks["cat"], self.blocks["S"], False)
400422
else:
401423
continue
402424
self.place(x + rect.x, y + rect.y)
@@ -419,9 +441,19 @@ def pattern_patternbox(self, rect):
419441
n = 0
420442
if len(ch["tiles"]) > 1:
421443
n = x % len(ch["tiles"]) - 1
422-
self.set(saved["patcat"], saved["prefix"] + ch["tiles"][n], render=False)
444+
self.set(saved["patcat"], saved["prefix"] + ch["tiles"][n], render=False, usefavs=True)
423445
self.place(x + rect.x, y + rect.y)
424446

447+
def gettile(self, xp, yp):
448+
if xp < 0 or xp > self.levelwidth or yp < 0 or yp > self.levelheight:
449+
return None
450+
if self.data.TE_data(xp, yp, self.layer)["tp"] == "tileBody":
451+
a = toarr(self.data.TE_data(xp, yp, self.layer)["data"][0], "point")
452+
return self.gettile(a[0] - 1, a[1] - 1)
453+
elif self.data.TE_data(xp, yp, self.layer)["tp"] == "tileHead":
454+
return self.items[self.data.TE_data(xp, yp, self.layer)["data"][1]]
455+
return None
456+
425457
def togglebrush(self):
426458
self.squarebrush = not self.squarebrush
427459

@@ -478,7 +510,7 @@ def pastedata(self):
478510
else:
479511
name = data["data"][1]
480512
cat = self.items[name]["category"]
481-
self.set(cat, name, False)
513+
self.set(cat, name, False, usefavs=True)
482514
# w, h = self.tileimage["size"]
483515
# px = blockx - int((w * .5) + .5) - 1
484516
# py = blocky - int((h * .5) + .5) - 1
@@ -548,12 +580,12 @@ def showfavs(self):
548580
self.selector.favourites()
549581

550582
def selectorset(self, buttondata):
551-
self.set(buttondata["category"], buttondata["nm"])
583+
self.set(buttondata["category"], buttondata["nm"], usefavs=True)
552584

553585
def addtofavs(self):
554586
self.selector.addtofavs()
555587

556-
def set(self, cat, name, render=True, usefavs=True):
588+
def set(self, cat, name, render=True, usefavs=False, dorecaption=True):
557589
self.tool = 0
558590
if usefavs and hasattr(self, "selector") and self.selector.show == "favs":
559591
i = self.selector._favourites[cat, name]
@@ -573,7 +605,7 @@ def set(self, cat, name, render=True, usefavs=True):
573605
self.tileimage["image"].set_colorkey(white)
574606
else:
575607
self.tileimage = self.tileimage2.copy()
576-
if render:
608+
if render and dorecaption:
577609
self.recaption()
578610
return
579611

@@ -765,7 +797,7 @@ def findtile(self):
765797
return
766798
item = self.items[name]
767799
self.selector.setbyname(name)
768-
self.set(item["category"], name)
800+
self.set(item["category"], name, usefavs=True)
769801

770802
def copytile(self):
771803
posoffset = self.posoffset
@@ -780,7 +812,7 @@ def copytile(self):
780812
name = tile["data"]
781813
tile = self.items[name]
782814
if tile is not None:
783-
self.set(tile["category"], tile["nm"])
815+
self.set(tile["category"], tile["nm"], usefavs=True)
784816
return
785817
case "tileBody":
786818
pos = toarr(tile["data"][0], "point")
@@ -791,7 +823,7 @@ def copytile(self):
791823
if tile["tp"] == "tileHead":
792824
tile = self.items[tile["data"][1]]
793825
if tile is not None:
794-
self.set(tile["category"], tile["nm"])
826+
self.set(tile["category"], tile["nm"], usefavs=True)
795827
return
796828
print("couldn't find tile")
797829

0 commit comments

Comments
 (0)