Skip to content

Commit 7feb0ef

Browse files
make certain elements able to be clicked through
I created a complicated system to allow you to click objects under a radius or line. It should come in handy in modding.
1 parent da4826a commit 7feb0ef

File tree

1 file changed

+55
-17
lines changed

1 file changed

+55
-17
lines changed

src/main.py

+55-17
Original file line numberDiff line numberDiff line change
@@ -807,7 +807,7 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
807807
pos[1],
808808
anchor = 'c',
809809
image = obj.background_PhotoImage,
810-
tags = ('object', 'background', id)
810+
tags = ('object', 'background', id),
811811
)
812812

813813
if len(obj._foreground) > 0:
@@ -828,15 +828,17 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
828828
logging.debug(f'radius: {radius}')
829829
radius_canvas_size = self.toLevelCanvasCoord(radius)
830830
if radius_canvas_size > 0:
831-
self.level_canvas.create_circle(
831+
r_id = self.level_canvas.create_circle(
832832
pos[0],
833833
pos[1],
834834
radius_canvas_size,
835835
fill = '',
836836
outline = 'red',
837837
width = self.OBJECT_MULTIPLIER,
838-
tags = ('radius', property, id)
838+
tags = ('passthrough', 'part', 'radius', property, id),
839839
)
840+
841+
logging.debug(f'radius tags: {self.level_canvas.gettags(r_id)}')
840842

841843
if (obj == self.selectedObject or self.settings.get('view.path', True)) and obj.Type is not None:
842844
path_points = obj.Type.get_properties('PathPos#')
@@ -885,7 +887,7 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
885887
3,
886888
fill = color,
887889
outline = '',
888-
tags = ('path', 'pathPoint', id),
890+
tags = ('part', 'path', property, 'pathPoint', id),
889891
)
890892

891893
self.level_canvas.tag_bind(
@@ -895,20 +897,22 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
895897
)
896898

897899
if is_closed:
898-
self.level_canvas.create_polygon(
900+
line = self.level_canvas.create_polygon(
899901
path_canvas_points,
900902
fill = '',
901903
outline = 'black',
902904
width = 2,
903-
tags = ('path', 'pathLine', id),
905+
tags = ('passthrough', 'part', 'path', property, 'pathLine', id),
904906
)
905907
else:
906-
self.level_canvas.create_line(
908+
line = self.level_canvas.create_line(
907909
path_canvas_points,
908910
fill = 'black',
909911
width = 2,
910-
tags = ('path', 'pathLine', id),
912+
tags = ('passthrough', 'part', 'path', property, 'pathLine', id),
911913
)
914+
915+
# self.level_canvas.tag_bind(line, '<Button-1>', self.onLevelClick)
912916

913917
# logging.info(f"id: {id}")
914918
# logging.info(f"pos: {pos}\n")
@@ -917,27 +921,60 @@ def updateObject(self, obj : wmwpy.classes.Object | None):
917921

918922
self.bindObject(f'object&&{id}', obj)
919923

924+
920925
self.updateSelectionRectangle()
921926
self.updateLevelScroll()
927+
922928

923929
def onLevelClick(self, event : tk.Event):
924930
logging.debug('level')
925931

932+
if self.level == None:
933+
return
934+
926935
mouse = (self.level_canvas.canvasx(event.x), self.level_canvas.canvasy(event.y))
927936

928937
objects = self.level_canvas.find_overlapping(*mouse, *mouse)
929938
logging.debug(f'under mouse: {objects}')
930939
length = len(objects)
931940

932-
tags = [self.level_canvas.gettags(id) for id in objects]
933-
logging.debug(f'tags: {tags}')
941+
for id in reversed(objects):
942+
tags = self.level_canvas.gettags(id)
943+
if tags[0] in ['selection', 'level']:
944+
continue
945+
946+
obj_tag = -1
947+
if not tags[obj_tag].startswith('object-'):
948+
logging.debug(f'tag not obj: {tags}')
949+
obj_tag = -2
950+
951+
if tags[obj_tag].startswith('object-'):
952+
obj = self.level.getObjectById(tags[obj_tag][7::])
953+
if obj == None:
954+
continue
955+
else:
956+
logging.debug(f'obj name: {obj.name}')
957+
else:
958+
continue
959+
960+
if tags[0] == 'passthrough':
961+
continue
962+
elif tags[0] == 'object':
963+
logging.debug(f'selecting obj: {obj.name}')
964+
self.selectObject(obj)
965+
return
966+
elif tags[0] == 'part':
967+
self.selectPart(
968+
obj,
969+
tags[1],
970+
id,
971+
tags[2],
972+
)
973+
return
934974

935-
if length <= 1:
936-
if length == 1:
937-
if objects[0] != self.level_images['background']:
938-
return
975+
self.selectObject(None)
976+
939977

940-
self.selectObject(None)
941978

942979
def onLevelMove(self, event: tk.Event):
943980
if self.selectedPart:
@@ -1815,6 +1852,8 @@ def updateLevel(self):
18151852
self.updateLevelScroll()
18161853
self.level_canvas.xview_moveto(0.23)
18171854
self.level_canvas.yview_moveto(0.2)
1855+
1856+
self.level_canvas.tag_bind('passthrough', '<Button-1>', self.onLevelClick)
18181857

18191858
def redrawLevel(self):
18201859
self.level_canvas.delete('object')
@@ -2242,9 +2281,8 @@ def loadLevel(self, xml : str, image : str):
22422281

22432282
if isinstance(self.level, wmwpy.classes.Level):
22442283
self.level_canvas.delete('object')
2245-
self.level_canvas.delete('radius')
2284+
self.level_canvas.delete('part')
22462285
self.level_canvas.delete('selection')
2247-
self.level_canvas.delete('path')
22482286

22492287
self.resetProperties()
22502288
self.resetObjectSelector()

0 commit comments

Comments
 (0)