Crashes seem better but now enterring attack state needs to know frame from before.

This commit is contained in:
Nitsud Yarg 2024-06-16 22:08:17 -07:00
parent 87eba39116
commit bc66a65c67
6 changed files with 66 additions and 20 deletions

View File

@ -539,12 +539,14 @@ pre_append_animation = true
script = ExtResource( 5 ) script = ExtResource( 5 )
animation_sequence = [ "step", "run" ] animation_sequence = [ "step", "run" ]
jump_node = NodePath("../jump") jump_node = NodePath("../jump")
attack_node = NodePath("../attack")
[node name="jump" type="Node" parent="movement_state_machine" index="3"] [node name="jump" type="Node" parent="movement_state_machine" index="3"]
script = ExtResource( 8 ) script = ExtResource( 8 )
animation_sequence = [ "jump" ] animation_sequence = [ "jump" ]
idle_node = NodePath("../idle") idle_node = NodePath("../idle")
fall_node = NodePath("../fall") fall_node = NodePath("../fall")
attack_node = NodePath("../attack")
jump_force = 250.0 jump_force = 250.0
[node name="attack" type="Node" parent="movement_state_machine" index="4"] [node name="attack" type="Node" parent="movement_state_machine" index="4"]

View File

@ -3,9 +3,12 @@ extends StateAnimatedActor
export (NodePath) var idle_node export (NodePath) var idle_node
export (NodePath) var fall_node export (NodePath) var fall_node
export (NodePath) var attack_node
onready var idle_state: State = get_node(idle_node) onready var idle_state: State = get_node(idle_node)
onready var fall_state: State = get_node(fall_node) onready var fall_state: State = get_node(fall_node)
onready var attack_state: State = get_node(attack_node)
export var jump_force: float = 200.0 export var jump_force: float = 200.0
@ -19,6 +22,9 @@ func process_physics(delta: float) -> State:
if move_component.velocity.y > 0: if move_component.velocity.y > 0:
return fall_state return fall_state
if move_component.wants_shoot():
return attack_state
# First allow horizontal movement. # First allow horizontal movement.
move_actor_as_desired(delta) move_actor_as_desired(delta)

View File

@ -3,15 +3,20 @@ extends StateAnimatedActor
export (NodePath) var fall_node export (NodePath) var fall_node
export (NodePath) var idle_node export (NodePath) var idle_node
export (NodePath) var jump_node export (NodePath) var jump_node
export (NodePath) var attack_node
onready var fall_state: State = get_node(fall_node) onready var fall_state: State = get_node(fall_node)
onready var idle_state: State = get_node(idle_node) onready var idle_state: State = get_node(idle_node)
onready var jump_state: State = get_node(jump_node) onready var jump_state: State = get_node(jump_node)
onready var attack_state: State = get_node(attack_node)
func process_physics(delta: float) -> State: func process_physics(delta: float) -> State:
if move_component.wants_jump() and parent.is_on_floor(): if move_component.wants_jump() and parent.is_on_floor():
return jump_state return jump_state
if move_component.wants_shoot():
return attack_state
move_actor_as_desired(delta) move_actor_as_desired(delta)
if move_component.velocity.x == 0.0: if move_component.velocity.x == 0.0:

View File

@ -92,7 +92,7 @@ func enter() -> void:
"Animation Suffix": "Animation Suffix":
if animations.frames.has_animation(mod_animation_sequence[animation_index] + modifier_stack_ref[i].animation_name): if animations.frames.has_animation(mod_animation_sequence[animation_index] + modifier_stack_ref[i].animation_name):
animation_suffix = modifier_stack_ref[-1].animation_name animation_suffix = modifier_stack_ref[i].animation_name
else: else:
print("Warning!: Animation suffix that doesn't exist ", print("Warning!: Animation suffix that doesn't exist ",
mod_animation_sequence[animation_index] + modifier_stack_ref[i].animation_name) mod_animation_sequence[animation_index] + modifier_stack_ref[i].animation_name)
@ -126,6 +126,8 @@ func enter() -> void:
# return # return
if mod_animation_sequence.size() > 0: if mod_animation_sequence.size() > 0:
if debug_state:
print("Starting Animation: " , mod_animation_sequence[animation_index] + animation_suffix)
animations.play(mod_animation_sequence[animation_index] + animation_suffix) animations.play(mod_animation_sequence[animation_index] + animation_suffix)
#TODO: maybe check current animatio has this frame #TODO: maybe check current animatio has this frame
animations.frame = enter_frame animations.frame = enter_frame
@ -143,9 +145,10 @@ func process_input(_event: InputEvent) -> State:
func process_frame(_delta: float) -> State: func process_frame(_delta: float) -> State:
#if animation_sequence.size() > 0 and current_animation_sequence != animation_index: #if animation_sequence.size() > 0 and current_animation_sequence != animation_index:
if mod_animation_sequence.size() > current_animation_sequence and current_animation_sequence != animation_index: if mod_animation_sequence.size() > animation_index and current_animation_sequence != animation_index:
if animation_index >= mod_animation_sequence.size(): #TODO: why was I doing this
animation_index = 0 # if animation_index >= mod_animation_sequence.size():
# animation_index = 0
##TODO: Add a safety check here. ##TODO: Add a safety check here.
animations.play(mod_animation_sequence[animation_index] + animation_suffix) animations.play(mod_animation_sequence[animation_index] + animation_suffix)
if debug_state: if debug_state:
@ -217,7 +220,9 @@ func push_animation_state_modifier(modifier: StateModifier):
"Animation Suffix": "Animation Suffix":
if modifier.modifier_type == "Exit Animation": if modifier.modifier_type == "Exit Animation":
# We have to place this one right before maybe? # We have to place this one right before maybe?
modifier_stack_ref.push_back(modifier) # Whoops! Forgot to actually do this
#modifier_stack_ref.push_back(modifier)
modifier_stack_ref.insert(modifier_stack_ref.size() - 1, modifier)
# if last_modifer.animation_name != '': # and if an animation applies # if last_modifer.animation_name != '': # and if an animation applies
# if last_modifer.pre_append_animation == modifier.pre_append_animation: # They're the same type # if last_modifer.pre_append_animation == modifier.pre_append_animation: # They're the same type
# if modifier.pre_append_animation == true and modifier_stack_ref[-1].animation_suffix == true: # if modifier.pre_append_animation == true and modifier_stack_ref[-1].animation_suffix == true:

View File

@ -29,23 +29,39 @@ func process_frame(delta: float) -> void:
for i in range(state_modifiers.size()): for i in range(state_modifiers.size()):
# if this modifer is a timer based one # if this modifer is a timer based one
if state_modifiers[i].state_timeout.time_left == 0 and state_modifiers[i].timeout_seconds !=0: if state_modifiers[i].state_timeout.time_left == 0 and state_modifiers[i].timeout_seconds !=0:
# Need to do extra stuff if it's an animation based one # Need to do extra stuff if it's an animation based one
if state_modifiers[i].modifier_type == "Animation Suffix": if state_modifiers[i].modifier_type == "Animation Suffix":
if debug_state_machine:
print("State Modifier Timeout: ", state_modifiers[i].name, " -> ", state_modifiers[i].animation_name)
# Reset animation suffix # Reset animation suffix
current_anim_state.animation_suffix = '' current_anim_state.animation_suffix = ''
# Get the current frame of animation
var current_frame = current_anim_state.animations.frame var current_frame = current_anim_state.animations.frame
# Set the animation index to the current one
current_anim_state.animation_index = current_anim_state.current_animation_sequence current_anim_state.animation_index = current_anim_state.current_animation_sequence
#current_anim_state.current_animation_sequence #current_anim_state.current_animation_sequence
#current_anim_state.animations.play() #current_anim_state.animations.play()
if current_anim_state.animation_sequence.size() >= current_anim_state.current_animation_sequence:
current_anim_state.animations.play( current_anim_state.animations.play(
current_state.animation_sequence[current_anim_state.current_animation_sequence]) current_anim_state.mod_animation_sequence[current_anim_state.animation_index])
# Try to set the current frame to the same as before.
current_anim_state.animations.frames.frames.size() >= current_frame current_anim_state.animations.frames.frames.size() >= current_frame
current_anim_state.animations.frame = current_frame current_anim_state.animations.frame = current_frame
else:
current_anim_state.animations.play( ##TODO:
current_state.animation_sequence[0]) # no longer needed this way maybe. way to overengineer man.
# if current_anim_state.animation_sequence.size() >= current_anim_state.mod_animation_sequence.size():
# print("Change sequence!: ", current_anim_state.mod_animation_sequence)
# print("Origin sequence!: ", current_state.mod_animation_sequence)
# current_anim_state.animations.play(
# current_anim_state.mod_animation_sequence[current_anim_state.animation_index])
# # Try to set the current frame to the same as before.
# current_anim_state.animations.frames.frames.size() >= current_frame
# current_anim_state.animations.frame = current_frame
# else:
# current_anim_state.animations.play(
# current_anim_state.animation_sequence[0])
if debug_state_machine: if debug_state_machine:
@ -71,9 +87,19 @@ func process_frame(delta: float) -> void:
func _on_AnimatedSprite_animation_finished(): func _on_AnimatedSprite_animation_finished():
##TODO:
# It's hard to pop an exit animation off when it's stacked with another kind of animation.
for i in state_modifiers.size(): for i in state_modifiers.size():
if state_modifiers[i].animation_name == current_state.animations.animation: if state_modifiers[i].modifier_type == "Exit Animation":
#print("Time to pop state modifer: ", state_modifiers[i].animation_name, current_state.animation_suffix, " <-> ", current_state.animations.animation + current_state.animation_suffix)
if (state_modifiers[i].animation_name + current_state.animation_suffix) == current_state.animations.animation:
print("Time to pop state modifer: ", state_modifiers[i].animation_name, current_state.animation_suffix, " <-> ", current_state.animations.animation )
print(current_state.mod_animation_sequence)
state_modifiers.pop_at(i) state_modifiers.pop_at(i)
current_state.animation_index += 1
break
# if state_modifiers.empty() == false: # if state_modifiers.empty() == false:
# if state_modifiers[-1].pre_append_animation == true: # if state_modifiers[-1].pre_append_animation == true:
@ -83,6 +109,7 @@ func _on_AnimatedSprite_animation_finished():
if current_state.animations.frames.get_animation_loop( if current_state.animations.frames.get_animation_loop(
current_state.animations.animation) == false: current_state.animations.animation) == false:
if current_state.animation_sequence.size() > 0: if current_state.animation_sequence.size() > 0:
print("<-- next anim.")
current_state.animation_index += 1 current_state.animation_index += 1

View File

@ -48,6 +48,7 @@ func _ready():
if animation_name != '' and modifier_type == "None": if animation_name != '' and modifier_type == "None":
modifier_type = "Replace Animation" modifier_type = "Replace Animation"
state_timeout = Timer.new() state_timeout = Timer.new()
if timeout_seconds > 0:
state_timeout.wait_time = timeout_seconds state_timeout.wait_time = timeout_seconds
state_timeout.one_shot = true state_timeout.one_shot = true
state_timeout.autostart = false state_timeout.autostart = false