Painted into corner.

This commit is contained in:
Nitsud Yarg 2024-06-01 22:27:07 -07:00
parent 8bbc41b8f2
commit 267850a2f6
10 changed files with 158 additions and 24 deletions

View File

@ -131,6 +131,7 @@ script = ExtResource( 1 )
position = Vector2( 8, -8 )
frames = SubResource( 168 )
animation = "idle"
frame = 2
playing = true
flip_h = true
__meta__ = {

View File

@ -1,6 +1,9 @@
[gd_scene load_steps=22 format=2]
[gd_scene load_steps=26 format=2]
[ext_resource path="res://src/templates/Actor/ActorTemplate.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/state_animated_actor.gd" type="Script" id=3]
[ext_resource path="res://src/enemyC/states/idle.gd" type="Script" id=4]
[ext_resource path="res://src/enemyC/states/wander.gd" type="Script" id=5]
[sub_resource type="StreamTexture" id=1]
load_path = "res://.import/botEnemy.png-46efd539a38730ff15fb4ddb087329c6.stex"
@ -105,13 +108,16 @@ animations = [ {
"speed": 10.0
} ]
[sub_resource type="RectangleShape2D" id=21]
extents = Vector2( 9, 3.5 )
[node name="EnemyC" instance=ExtResource( 1 )]
[node name="AnimatedSprite" parent="." index="0"]
position = Vector2( 11, -7 )
frames = SubResource( 20 )
animation = "idle"
frame = 1
frame = 2
__meta__ = {
"_aseprite_wizard_config_": {
"layer": "",
@ -129,7 +135,34 @@ __meta__ = {
position = Vector2( -0.5, -2 )
[node name="idle" parent="movement_state_machine" index="0"]
script = ExtResource( 4 )
timeout_seconds = 2.0
animation_sequence = [ "idle" ]
wander_node = NodePath("../wander")
attack_node = NodePath("../attack")
[node name="fall" parent="movement_state_machine" index="1"]
animation_sequence = [ "idle" ]
[node name="wander" type="Node" parent="movement_state_machine" index="2"]
script = ExtResource( 5 )
timeout_seconds = 2.0
animation_sequence = [ "walk" ]
idle_node = NodePath("../idle")
attack_node = NodePath("../attack")
fall_node = NodePath("../fall")
[node name="attack" type="Node" parent="movement_state_machine" index="3"]
script = ExtResource( 3 )
timeout_seconds = 3.0
animation_sequence = [ "attack" ]
[node name="PlayerDetection" type="RayCast2D" parent="." index="6"]
cast_to = Vector2( 21, 0 )
[node name="Hitbox_Component" type="Area2D" parent="." index="7"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox_Component" index="0"]
modulate = Color( 1, 0.596078, 0.121569, 1 )
position = Vector2( 18, -8.5 )
shape = SubResource( 21 )

View File

@ -3,31 +3,24 @@ extends "res://src/templates/Actor/states/idle.gd"
var debugTimeTracker := 0.0
export (NodePath) var jump_node
export (NodePath) var move_node
export (NodePath) var fire_node
export (NodePath) var wander_node
export (NodePath) var attack_node
onready var jump_state: State = get_node(jump_node)
onready var move_state: State = get_node(move_node)
onready var fire_state: State = get_node(fire_node)
onready var wander_state: State = get_node(wander_node)
onready var attack_state: State = get_node(attack_node)
func enter() -> void:
.enter()
parent.set_hurtbox(true)
parent.velocity.x = 0
state_timeout.start()
func process_input(_event: InputEvent) -> State:
# if get_jump() and parent.is_on_floor():
func process_frame(_delta: float) -> State:# if get_jump() and parent.is_on_floor():
# return jump_state
if move_component.wants_jump() and parent.is_on_floor():
return jump_state
if state_timeout.time_left == 0:
return wander_state
# if move_component.get_movement_direction() != 0.0:
# return move_state
if move_component.wants_shoot():
return fire_state
# move_component.wants_jump()
move_component.get_movement_direction()
@ -46,8 +39,6 @@ func process_physics(delta: float) -> State:
parent.velocity.x = move_component.desired_movement_vector.x * move_speed
parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))
if parent.velocity.x != 0.0:
return move_state
if !parent.is_on_floor():
return fall_state

View File

@ -0,0 +1,58 @@
extends StateAnimatedActor
export (NodePath) var idle_node
export (NodePath) var attack_node
export (NodePath) var fall_node
onready var idle_state: State = get_node(idle_node)
onready var attack_state: State = get_node(attack_node)
onready var fall_state: State = get_node(fall_node)
var flip_flop = false
func enter(state_modifiers: Array = []) -> void:
.enter()
parent.set_hurtbox(true)
state_timeout.start()
if flip_flop:
flip_flop = false
move_component.desired_movement_vector.x = 1.0
else:
flip_flop = true
move_component.desired_movement_vector.x = -1.0
func process_frame(_delta: float) -> State:
# if parent.player_detection.is_colliding():
# return attack_state
if state_timeout.time_left == 0:
return idle_state
# if move_component.wants_jump() and parent.is_on_floor():
# return jump_state
#
# move_component.get_movement_direction()
return null
func process_physics(delta: float) -> State:
parent.velocity.y += gravity * delta
parent.velocity.x = move_component.desired_movement_vector.x * move_speed
parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))
if parent.velocity.x == 0.0:
return idle_state
else:
if parent.velocity.x > 0:
parent.direction.x = 1
elif parent.velocity.x < 0:
parent.direction.x = -1
parent.transform.x.x = parent.direction.x
if !parent.is_on_floor():
return fall_state
return null

View File

@ -2,17 +2,23 @@ class_name MovementComponent
extends Node
onready var desired_movement_vector: Vector2 = Vector2(0,0)
var current_movement_state:String
enum directions {UP, DOWN, LEFT, RIGHT}
func process(delta):
pass
# Return the desired direction of movement for the character
# in the range [-1, 1], where positive values indicate a desire
# to move to the right and negative values to the left.
func get_movement_direction() -> float:
return 0.0
return desired_movement_vector.x
# Return a boolean indicating if the character wants to jump
func wants_jump() -> bool:
return false
# Return a boolean indicating if the character wants to jump
# Return a boolean indicating if the character wants to attack
func wants_shoot() -> bool:
return false

View File

@ -1,6 +1,7 @@
class_name State
extends Node
export var debug_state: bool = false
export var timeout_seconds: float = 0.0
# Declare member variables here. Examples:

View File

@ -40,6 +40,7 @@ var parent: KinematicBody2D
func _ready():
##TODO: this bit me in the butt. Should add a safety or something.
# Only add timout node if timer value was specified.
if(timeout_seconds > 0.0):
state_timeout = Timer.new()
@ -53,7 +54,9 @@ func enter() -> void:
# animations.connect("animation_finished", self, "_on_AnimatedSprite_animation_finished")
# Reset animation suffix in case there isn't one
animation_suffix = ''
print(parent.name, " entering State: ", self.name)
if debug_state:
print(parent.name, " entering State: ", self.name)
move_component.current_movement_state = self.name
#modifier_stack_ref = state_modifiers
if modifier_stack_ref.empty() == false:
if modifier_stack_ref[-1].animation_name != '':
@ -92,8 +95,16 @@ func process_frame(_delta: float) -> State:
return null
func process_physics(_delta: float) -> State:
move_actor_as_desired(_delta)
return null
#func _on_AnimatedSprite_animation_finished():
# if animations.frames.get_animation_loop(animations.animation) == false:
# animation_index += 1
func move_actor_as_desired(delta: float):
parent.velocity.y += gravity * delta
#parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))
parent.velocity.x = move_component.desired_movement_vector.x * move_speed
parent.velocity = parent.move_and_slide(parent.velocity, Vector2(0, -1))

View File

@ -44,6 +44,7 @@ func _physics_process(delta: float) -> void:
#self.scale.x = -1
func _process(delta: float) -> void:
movement_component.process(delta)
movement_state_machine.process_frame(delta)
play_sound_frame(movement_animations.animation , movement_animations.frame)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=16 format=2]
[gd_scene load_steps=17 format=2]
[ext_resource path="res://src/components/Hurtbox_Component.tscn" type="PackedScene" id=1]
[ext_resource path="res://src/state_machine_animated_actor.gd" type="Script" id=2]
@ -6,6 +6,7 @@
[ext_resource path="res://src/templates/Actor/states/idle.gd" type="Script" id=4]
[ext_resource path="res://src/movement_component.gd" type="Script" id=5]
[ext_resource path="res://src/templates/Actor/resources/Smiley.png" type="Texture" id=6]
[ext_resource path="res://src/templates/Actor/states/move.gd" type="Script" id=7]
[ext_resource path="res://src/templates/Actor/ActorTemplate.gd" type="Script" id=12]
[sub_resource type="AtlasTexture" id=76]
@ -49,7 +50,7 @@ script = ExtResource( 12 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
frames = SubResource( 75 )
frame = 2
frame = 4
playing = true
flip_h = true
__meta__ = {
@ -86,6 +87,12 @@ script = ExtResource( 3 )
animation_sequence = [ "default" ]
idle_node = NodePath("../idle")
[node name="move" type="Node" parent="movement_state_machine"]
script = ExtResource( 7 )
animation_sequence = [ "default" ]
fall_node = NodePath("../fall")
idle_node = NodePath("../idle")
[node name="Hurtbox_Component" parent="." instance=ExtResource( 1 )]
[node name="SE_Player" type="AudioStreamPlayer" parent="."]

View File

@ -0,0 +1,25 @@
extends StateAnimatedActor
export (NodePath) var fall_node
export (NodePath) var idle_node
onready var fall_state: State = get_node(fall_node)
onready var idle_state: State = get_node(idle_node)
func process_physics(delta: float) -> State:
move_actor_as_desired(delta)
if parent.velocity.x == 0.0:
return idle_state
else:
if parent.velocity.x > 0:
parent.direction.x = 1
elif parent.velocity.x < 0:
parent.direction.x = -1
parent.transform.x.x = parent.direction.x
if !parent.is_on_floor():
return fall_state
return null