From 7a83dd658067dd0d073247860ba670e343c84807 Mon Sep 17 00:00:00 2001 From: LoafyLemon Date: Tue, 21 Feb 2023 22:10:39 +0000 Subject: [PATCH] Chibi place method * Implemented place method * Added ability to set temporary poses for single statements * Simplified CDS calls * Removed redundant code and comments --- game/scripts/doll/chibi.rpy | 102 +++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 37 deletions(-) diff --git a/game/scripts/doll/chibi.rpy b/game/scripts/doll/chibi.rpy index e3602a72..993d4b37 100644 --- a/game/scripts/doll/chibi.rpy +++ b/game/scripts/doll/chibi.rpy @@ -1,23 +1,22 @@ init 5 python: class DollChibi(renpy.Displayable): - def __init__(self, name, pose=None, layer="screens", zorder=12, zoom=0.28, *args, **properties): + def __init__(self, name, layer="screens", zorder=12, zoom=0.28, **properties): super().__init__(**properties) self.name = name self.tag = name + "_chibi" - self.pose = pose + self.pose = None + self.walk = "walk" self.idle = "stand" self.layer = layer self.zorder = zorder self.zoom = zoom - self.pos = (0,0) self.xzoom = 1 self.char = eval(name) self.poses = {} - self.animation = None # Animation self.anim_frames = None @@ -36,7 +35,7 @@ init 5 python: self.atl_pause = False self.atl_at_list = [] - def register_pose(self, pose, frames, size): + def register(self, pose, frames, size): self.poses[pose] = (frames, size) print(f"Registered \"{pose}\" pose for {self.name}") @@ -121,34 +120,6 @@ init 5 python: return rv - # # Animation Renderer - # t = st % self.anim_interval_total - - # trans = self.anim_trans - # interval = self.anim_interval - - # # Trigger event after animation time elapses - # if st > self.atl_time_total: - # renpy.timeout(0) - - # for curr_image, prev_image in zip(self.anim_sprites, self.anim_prev_sprites): - # if t < interval: - # if not renpy.game.less_updates: - # renpy.redraw(self, interval - t) - - # if trans and st >= interval: - # curr_image = trans(old_widget=prev_image, new_widget=curr_image) - - # im = renpy.render(curr_image, width, height, t, at) - # width, height = im.get_size() - # rv = renpy.Render(width, height) - # rv.blit(im, (0, 0)) - - # return rv - # else: - # t = t - interval - # return rv - def event(self, ev, x, y, st): # Determine pose change if show time exceeds animation time. # Looping animations ignore this check because they are rebuilt every loop. @@ -178,7 +149,39 @@ init 5 python: self.pose = pose self.update() - def move(self, path, speed=1.0, pause=True, loop=False, warper="linear", at_list=[], pose="walk", repeat=None, wrap=True, reverse=True): + def place(self, pos=None, speed=1.0, pause=True, at_list=[], pose=None, xzoom=None): + self.set_pose(pose or self.idle) + + self.atl_time = 0 + self.atl_time_total = 0 + self.atl_partial = None + self.atl_looping = False + self.atl_pause = False + self.atl_at_list = [] + + frames = self.anim_frames + if frames > 1: + interval = (self.anim_speed / self.anim_fps) / speed + interval_total = (frames * interval) + + self.anim_interval = interval + self.anim_interval_total = interval_total + + xzoom = xzoom or (-1 if (pos > self.pos) else 1) + + self.pos = pos or self.pos + self.xzoom = xzoom + + transform = Transform(pos=pos, zoom=self.zoom, xzoom=xzoom, anchor=(0.5, 1.0)) + + self.show(transform, at_list, self.layer, self.zorder) + + if pause: + renpy.pause(None) + + return + + def move(self, path, speed=1.0, pause=True, loop=False, warper="linear", at_list=[], pose=None, repeat=None, wrap=True, reverse=True): """Makes chibi move""" self.atl_looping = loop @@ -204,7 +207,7 @@ init 5 python: # Wrap pathing back to starting position path.append(path[0]) - self.set_pose(pose) + self.set_pose(pose or self.walk) # Note: Warper names and their count can change over time, # so it's easier to just evaluate the input. @@ -260,6 +263,9 @@ init 5 python: return (distances, times) def stop(self): + if not self.atl_partial: + return + # Freezes the animation path, _, _, _ = self.atl_partial.args pos = path[-1] @@ -357,8 +363,8 @@ default cho_chibi_new = DollChibi(name="cho", doll=cho) default ton_chibi_new = DollChibi(name="tonks", doll=tonks) label chibitest: - chibi tonks register_pose ("stand", 1, (600, 800)) - chibi tonks register_pose ("walk", 8, (600, 800)) + chibi tonks register ("stand", 1, (600, 800)) + chibi tonks register ("walk", 8, (600, 800)) "Rollback block" $ renpy.block_rollback() @@ -376,3 +382,25 @@ label chibitest: hide tonks_main jump main_room_menu + +label chibitest2: + chibi tonks register ("stand", 1, (600, 800)) + chibi tonks register ("walk", 8, (600, 800)) + "Rollback block" + $ renpy.block_rollback() + + "pos 1" + chibi tonks place (pos=(300,300)) + "pos 2" + chibi tonks place (pos=(400,300)) + "pos 3" + chibi tonks place (pos=(400,400)) + "pos 4" + chibi tonks place (pos=(200,400)) + "pos 5" + chibi tonks place (pos=(600,400)) + "End" + hide tonks_chibi + hide tonks_main + + jump main_room_menu