Avoid using screens for chibis

Not exactly sure what to do with the screens for saves compat tbh, should be fine either way and maybe removing the definitions will work
This commit is contained in:
Gouvernathor 2024-04-03 01:33:13 +02:00
parent 00eda2aae5
commit c0bc1cd69f

View File

@ -1,5 +1,4 @@
# Screens left for saves compat
# Screen used by chibi class (each chibi object derives its own uniquely tagged screen from this one)
screen chibi(chibi_object): screen chibi(chibi_object):
zorder chibi_object.zorder zorder chibi_object.zorder
sensitive False sensitive False
@ -35,6 +34,21 @@ label chibi_emote(emote, name):
default chibi_moves = {} default chibi_moves = {}
init -1 python: init -1 python:
def chibi_displayable(chibi_object):
return At(Fixed(*chibi_object.displayables(), fit_first=True), chibi_object.transform)
def chibi_emote_displayable(emote, chibi_object):
if chibi_object.flip:
xzoom = -1
else:
xzoom = 1
if chibi_object.tag in ("genie", "snape"):
offset = (int(75*ChibiRoom.get().scale), int(-200*ChibiRoom.get().scale))
else:
offset = (int(50*ChibiRoom.get().scale), int(-170*ChibiRoom.get().scale))
# TODO: test in which order the transforms should be put
return At(f"emo_{emote}", emote_effect, Transform(anchor=(.5, 1.), pos=chibi_object.pos, zoom=ChibiRoom.get().scale, xzoom=xzoom, offset=offset))
def update_chibi(name): def update_chibi(name):
"""Update the chibi object for a given character.""" """Update the chibi object for a given character."""
# TODO: Remove once chibi is ready. # TODO: Remove once chibi is ready.
@ -136,37 +150,25 @@ init -1 python:
self.special = None self.special = None
self.transform = None self.transform = None
# Define a screen for the chibi self.screen_tag = screen_tag = f"{tag}_chibi"
self.screen_tag = f"{tag}_chibi" config.tag_layer[screen_tag] = "master"
renpy.define_screen(self.screen_tag, Chibi._screen, tag=self.screen_tag, zorder="chibi_object.zorder")
# Define a screen for the chibi emote self.emote_tag = emote_tag = f"{tag}_chibi_emote"
self.emote_tag = f"{tag}_chibi_emote" config.tag_layer[emote_tag] = "master"
renpy.define_screen(self.emote_tag, Chibi._emote_screen, tag=self.emote_tag, zorder="chibi_object.zorder")
@staticmethod
def _screen(chibi_object, **kwargs):
# Emulate a Ren'py `use` statement to derive a chibi screen from the generic one
renpy.use_screen("chibi", chibi_object, _name=kwargs["_name"], _scope=kwargs["_scope"])
@staticmethod
def _emote_screen(emote, chibi_object, **kwargs):
# Emulate a Ren'py `use` statement to derive a chibi_emote screen from the generic one
renpy.use_screen("chibi_emote", emote, chibi_object, _name=kwargs["_name"], _scope=kwargs["_scope"])
def show(self): def show(self):
renpy.show_screen(self.screen_tag, chibi_object=self) renpy.show(self.screen_tag, zorder=self.zorder, what=chibi_displayable(self))
def hide(self): def hide(self):
renpy.hide_screen(self.screen_tag) renpy.hide(self.screen_tag)
renpy.hide_screen(self.emote_tag) renpy.hide(self.emote_tag)
def emote(self, emote=None): def emote(self, emote=None):
if renpy.get_screen(self.emote_tag): if renpy.showing(self.emote_tag):
renpy.hide_screen(self.emote_tag) renpy.hide(self.emote_tag)
renpy.pause(0.2) # Pause for duration of emote_effect renpy.pause(0.2) # Pause for duration of emote_effect
if emote: if emote:
renpy.show_screen(self.emote_tag, emote=emote, chibi_object=self) renpy.show(self.emote_tag, zorder=self.zorder, what=chibi_emote_displayable(emote, self))
def update(self): def update(self):
self.clear() self.clear()