Wheelmenu, Bug fixes
* Implement disabled state for wheelmenu buttons * Simplify wheelmenu definitions * Fix bogus warning for doll elements during stale displayable evaluation (cache)
This commit is contained in:
parent
e8a2873fd7
commit
1d3a12f0f6
@ -106,7 +106,7 @@ init -1 python:
|
||||
try:
|
||||
os.unlink(syspath)
|
||||
except FileNotFoundError:
|
||||
print(f"Warning! Cached file {syspath} not found")
|
||||
print(f"Warning! Cannot remove non-existent cached file: {syspath}")
|
||||
except PermissionError:
|
||||
print(f"Warning! Permission denied to remove cached file: {syspath}")
|
||||
except Exception as e:
|
||||
|
@ -83,6 +83,14 @@ init python:
|
||||
except AttributeError:
|
||||
renpy.store.states.dolls = {name}
|
||||
|
||||
# TODO: Experiment with cache for full dolls, maybe for android?
|
||||
def is_stale(self):
|
||||
curr_hash = self.generate_hash()
|
||||
# if (stale := curr_hash != self._hash):
|
||||
# self.remove_disk_cache(self._hash)
|
||||
self._hash = curr_hash
|
||||
return stale
|
||||
|
||||
def generate_hash(self):
|
||||
clothes_hash = str([x[0]._hash for x in self.states.values() if istype(x[0], (DollCloth, DollClothDynamic, DollMakeup)) and x[2]])
|
||||
salt = str( [self.name, self.pose, str(self.body._hash), str(self.face._hash), str(self.cum._hash), clothes_hash] )
|
||||
|
@ -13,26 +13,18 @@ init python in wheelmenu:
|
||||
for i in range(num_buttons)]
|
||||
return positions
|
||||
|
||||
def button(displayable, action, condition, state=None, **kwargs):
|
||||
def button(displayable, action, condition, disabled, **kwargs):
|
||||
"""
|
||||
displayable - Ren'Py displayable
|
||||
action - Ren'Py screen action
|
||||
condition - Boolean
|
||||
state -
|
||||
None - No change
|
||||
"hidden" - Hidden if condition==False
|
||||
"disabled" - Disabled if condition==False
|
||||
disabled - Boolean
|
||||
"""
|
||||
|
||||
if state == "hidden":
|
||||
return None
|
||||
elif state == "disabled":
|
||||
return renpy.store.Button(displayable, action=action, style="wheelmenu_disabled_button", **kwargs)
|
||||
|
||||
if condition:
|
||||
if action is None or disabled:
|
||||
return renpy.store.Button(renpy.store.Transform(displayable, matrixcolor=renpy.store.SaturationMatrix(0)*renpy.store.BrightnessMatrix(-0.25)*renpy.store.OpacityMatrix(0.5)), action=action, style="wheelmenu_disabled_button", **kwargs)
|
||||
return renpy.store.Button(displayable, action=action, style="wheelmenu_button", **kwargs)
|
||||
elif action is None:
|
||||
return renpy.store.Button(displayable, action=action, style="wheelmenu_disabled_button", **kwargs)
|
||||
else:
|
||||
return None
|
||||
|
||||
@ -41,19 +33,23 @@ init python:
|
||||
# Proxy function; We cannot evaluate in a named store without side effects.
|
||||
|
||||
buttons = []
|
||||
for name, (displayable, action, condition) in elements.items():
|
||||
condition = eval(condition)
|
||||
for name, (displayable, action, *tail) in elements.items():
|
||||
if tail:
|
||||
condition = eval(tail[0])
|
||||
disabled = eval(tail[1]) if len(tail) > 1 else False
|
||||
else:
|
||||
condition = True
|
||||
disabled = False
|
||||
|
||||
if not condition:
|
||||
if not condition and disabled:
|
||||
continue
|
||||
|
||||
buttons.append(wheelmenu.button(displayable, action, condition, tooltip=name))
|
||||
buttons.append(wheelmenu.button(displayable, action, condition, disabled, tooltip=name))
|
||||
|
||||
if not buttons:
|
||||
return None
|
||||
|
||||
positions = wheelmenu.pos(len(buttons))
|
||||
return tuple(zip(buttons, positions)) # Nonhashable types cannot be used in a screen, so we use a tuple instead.
|
||||
return None if not buttons else tuple(zip(buttons, wheelmenu.pos(len(buttons)))) # Nonhashable types cannot be used in a screen, so we use a tuple instead.
|
||||
|
||||
config.per_frame_screens.append("wheelmenu")
|
||||
|
||||
@ -101,8 +97,8 @@ style wheelmenu_button is empty:
|
||||
anchor (0.5, 0.5)
|
||||
|
||||
style wheelmenu_disabled_button is wheelmenu_button:
|
||||
background "#ffffff80"
|
||||
foreground "#ff00ff"
|
||||
background Transform("wheelmenu_button", xysize=(48,48), matrixcolor=BrightnessMatrix(0.2))
|
||||
hover_background At(Transform("wheelmenu_button_opaque", xysize=(48,48), matrixcolor=BrightnessMatrix(0.2)), wheelmenu_hover_anim)
|
||||
xysize (48, 48)
|
||||
anchor (0.5, 0.5)
|
||||
|
||||
|
@ -7,9 +7,9 @@ default cupboard_OBJ = RoomObject(
|
||||
pos=(260, 280),
|
||||
idle="cupboard_idle",
|
||||
action={
|
||||
"Open Inventory": (Text("🎒", align=(0.5, 0.5)), Jump("inventory"), "True"),
|
||||
"Rummage": (Text("🖐️", align=(0.5, 0.5)), Jump("cupboard"), "True"),
|
||||
"Calendar": (Text("📆", align=(0.5, 0.5)), Jump("calendar"), "True"),
|
||||
"Open Inventory": (Text("🎒", align=(0.5, 0.5)), Jump("inventory")),
|
||||
"Rummage": (Text("🖐️", align=(0.5, 0.5)), Jump("cupboard")),
|
||||
"Calendar": (Text("📆", align=(0.5, 0.5)), Jump("calendar")),
|
||||
},
|
||||
tooltip="Cupboard"
|
||||
)
|
||||
@ -21,8 +21,8 @@ default phoenix_OBJ = RoomObject(
|
||||
focus_mask="phoenix_idle",
|
||||
background="phoenix_feather",
|
||||
action={
|
||||
"Feed": (Text("🍔", align=(0.5, 0.5)), Jump("phoenix_feed"), "True"),
|
||||
"Pet": (Text("🖐️", align=(0.5, 0.5)), Jump("phoenix_pet"), "True")
|
||||
"Feed": (Text("🍔", align=(0.5, 0.5)), Jump("phoenix_feed")),
|
||||
"Pet": (Text("🖐️", align=(0.5, 0.5)), Jump("phoenix_pet"))
|
||||
},
|
||||
tooltip="Phoenix"
|
||||
)
|
||||
@ -33,14 +33,14 @@ default door_OBJ = RoomObject(
|
||||
idle="door_idle",
|
||||
focus_mask="door_hover",
|
||||
action={
|
||||
"Summon Snape": (Transform("wheelmenu_snape", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.sna.busy", None, Jump("summon_snape")), "states.sna.unlocked"),
|
||||
"Summon Tonks": (Transform("wheelmenu_tonks", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.ton.busy", None, Jump("summon_tonks")), "states.ton.unlocked"),
|
||||
"Summon Hermione": (Transform("wheelmenu_hermione", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.her.busy", None, Jump("summon_hermione")), "states.her.unlocked"),
|
||||
"Summon Cho": (Transform("wheelmenu_cho", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.cho.busy", None, Jump("summon_cho")), "states.cho.unlocked"),
|
||||
"Summon Luna": (Transform("wheelmenu_luna", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.lun.busy", None, Jump("summon_luna")), "states.lun.unlocked"),
|
||||
"Summon Astoria": (Transform("wheelmenu_astoria", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.ast.busy", None, Jump("summon_astoria")), "states.ast.unlocked"),
|
||||
"Summon Susan": (Transform("wheelmenu_susan", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.sus.busy", None, Jump("summon_susan")), "states.sus.unlocked"),
|
||||
"Exit": (Text("🚪", align=(0.5, 0.5)), IfExpr("states.map.unlocked", Jump("map"), Jump("door")), "True"),
|
||||
"Summon Snape": (Transform("wheelmenu_snape", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.sna.busy", None, Jump("summon_snape")), "states.sna.unlocked", "states.sna.busy"),
|
||||
"Summon Tonks": (Transform("wheelmenu_tonks", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.ton.busy", None, Jump("summon_tonks")), "states.ton.unlocked", "states.ton.busy"),
|
||||
"Summon Hermione": (Transform("wheelmenu_hermione", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.her.busy", None, Jump("summon_hermione")), "states.her.unlocked", "states.her.busy"),
|
||||
"Summon Cho": (Transform("wheelmenu_cho", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.cho.busy", None, Jump("summon_cho")), "states.cho.unlocked", "states.cho.busy"),
|
||||
"Summon Luna": (Transform("wheelmenu_luna", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.lun.busy", None, Jump("summon_luna")), "states.lun.unlocked", "states.lun.busy"),
|
||||
"Summon Astoria": (Transform("wheelmenu_astoria", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.ast.busy", None, Jump("summon_astoria")), "states.ast.unlocked", "states.ast.busy"),
|
||||
"Summon Susan": (Transform("wheelmenu_susan", align=(0.5, 0.5), xysize=(32, 32)), IfExpr("states.sus.busy", None, Jump("summon_susan")), "states.sus.unlocked", "states.sus.busy"),
|
||||
"Exit": (Text("🚪", align=(0.5, 0.5)), IfExpr("states.map.unlocked", Jump("map"), Jump("door"))),
|
||||
},
|
||||
tooltip="Door"
|
||||
)
|
||||
@ -54,12 +54,12 @@ default desk_OBJ = RoomObject(
|
||||
hover="ch_gen sit_behind_desk_hover",
|
||||
focus_mask="ch_gen sit_behind_desk",
|
||||
action={
|
||||
"Sleep": (Text("💤", align=(0.5, 0.5)), IfExpr("states.env.daytime", Jump("night_start"), Jump("day_start")), "True"),
|
||||
"Jerk Off": (Text("🍆", align=(0.5, 0.5)), Jump("jerk_off"), "True"),
|
||||
"Sleep": (Text("💤", align=(0.5, 0.5)), IfExpr("states.env.daytime", Jump("night_start"), Jump("day_start"))),
|
||||
"Jerk Off": (Text("🍆", align=(0.5, 0.5)), Jump("jerk_off")),
|
||||
"Do Paperwork": (Text("📝", align=(0.5, 0.5)), Jump("paperwork"), "states.paperwork_unlocked"),
|
||||
"Open Deck Builder": (Text("🃏", align=(0.5, 0.5)), Jump("deck_builder"), "states.cardgame.unlocked"),
|
||||
"Open Cheats Menu": (Text("🕹️", align=(0.5, 0.5)), Jump("cheats"), "states.env.cheats"),
|
||||
"Open Achievements Menu": (Text("⭐", align=(0.5, 0.5)), Jump("achievements"), "True"),
|
||||
"Open Achievements Menu": (Text("⭐", align=(0.5, 0.5)), Jump("achievements")),
|
||||
},
|
||||
hovered=Show(
|
||||
"gui_tooltip",
|
||||
|
Loading…
Reference in New Issue
Block a user