From 9d8c7cb2b34908518ad51c9bf666de9d6163a181 Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 24 Jan 2022 12:34:30 +0100 Subject: [PATCH] Try to fix animation node --- setup.py | 4 ++-- uplogic/animation/action.py | 2 ++ uplogic/nodes/actions/playaction.py | 16 +++++++++++++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index ec28498..b0922c3 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ def read_file(name): return f.read() -version = 'v1.4.6.1' +version = 'v1.4.6.2' shortdesc = "Uplogic utility for UPBGE." longdesc = '\n\n'.join([read_file(name) for name in [ 'README.md', @@ -30,7 +30,7 @@ def read_file(name): author='Leopold Auersperg-Castell', author_email='lauersperg@gmx.at', url='https://github.com/UPBGE/uplogic', - download_url='https://github.com/UPBGE/uplogic/archive/refs/tags/v1.4.6.1.tar.gz', + download_url='https://github.com/UPBGE/uplogic/archive/refs/tags/v1.4.6.2.tar.gz', license='GPLv2', packages=[ 'uplogic', diff --git a/uplogic/animation/action.py b/uplogic/animation/action.py index fc3caf4..7773791 100644 --- a/uplogic/animation/action.py +++ b/uplogic/animation/action.py @@ -44,6 +44,7 @@ def __init__( self._locked = False self._speed = speed self._frozen_speed = 0 + self.finished = False self.keep = keep self._layer_weight = layer_weight act_system = 'default' @@ -224,6 +225,7 @@ def unpause(self): self.speed = self._frozen_speed def stop(self): + self.finished = True self.on_finish() self.game_object.stopAction(self.layer) diff --git a/uplogic/nodes/actions/playaction.py b/uplogic/nodes/actions/playaction.py index bd4c94a..8feaeca 100644 --- a/uplogic/nodes/actions/playaction.py +++ b/uplogic/nodes/actions/playaction.py @@ -6,7 +6,7 @@ from uplogic.events import receive from uplogic.nodes import ULActionNode from uplogic.nodes import ULOutSocket -from uplogic.utils import STATUS_WAITING +from uplogic.utils import STATUS_INVALID, STATUS_WAITING from uplogic.utils import is_invalid from uplogic.utils import is_waiting from uplogic.utils import not_met @@ -31,10 +31,12 @@ def __init__(self): self.old_speed = None self.blendin = None self.blend_mode = None + self.in_use = False self._started = False self._running = False self._finished = False self._action = None + self.action_evt = None self.act_system = self.get_act_system() self.STARTED = ULOutSocket(self, self._get_started) self.FINISHED = ULOutSocket(self, self._get_finished) @@ -77,14 +79,21 @@ def evaluate(self): layer = self.get_input(self.layer) game_object = self.get_input(self.game_object) play_mode = self.get_input(self.play_mode) + self.action_evt = receive(self._action) if not_met(condition): self._set_ready() if has_action: action.speed = speed action.layer_weight = layer_weight + if self._action.finished: + self._action = None + self.in_use = False if play_mode > 2: self._action.remove() self._action = None + self.in_use = False + return + if self.in_use: return layer_action = self.act_system.get_layer(game_object, layer) if layer_action is not self._action: @@ -92,14 +101,13 @@ def evaluate(self): action_name = self.get_input(self.action_name) if has_action and action.name == action_name: return - if has_action and not action.is_playing: + if has_action and action.finished: self._action = None start_frame = self.get_input(self.start_frame) end_frame = self.get_input(self.end_frame) priority = self.get_input(self.priority) blendin = self.get_input(self.blendin) blend_mode = self.get_input(self.blend_mode) - self.action_evt = receive(self._action) self._set_ready() if is_invalid(game_object): return @@ -126,6 +134,7 @@ def evaluate(self): speed = 0.01 if is_invalid(game_object): # can't play self._action = None + self.in_use = False self._action = ULAction( game_object, @@ -140,3 +149,4 @@ def evaluate(self): layer_weight, blend_mode ) + self.in_use = True