tilemap layer, state machine, scenemanager update, animations for player

This commit is contained in:
OddlyTimbot committed 2025-08-18 21:07:59 -04:00
1 parent b6d588fcfe
commit ae6159a9f0
14 files changed
+465 -15

No files matched your search

+6 -1
View File
@@ -1,6 +1,6 @@
extends Node2D
signal playerDamage
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
@@ -13,6 +13,11 @@ func _process(delta: float) -> void:
func _on_trigger(effect: Variant, body: Variant) -> void:
print("GC sees trigger "+effect)
match effect:
"player_hurt":
if body is Player:
print("hurt the player")
playerDamage.emit()
if not body is Player:
body.queue_free()
+59 -4
View File
@@ -4,13 +4,19 @@ class_name Player extends CharacterBody2D
@onready var left_cast: RayCast2D = $LeftCast
@onready var right_spawn: Node2D = $RightSpawn
@onready var left_spawn: Node2D = $LeftSpawn
@onready var jump_buffer_timer: Timer = $JumpBufferTimer
@onready var player_graphic: AnimatedSprite2D = $PlayerGraphic
const SPEED = 300.0
const JUMP_VELOCITY = -400.0
@export var acceleration:int = 5
var upJump:bool = false
var direction
enum FaceDirection{LEFT, RIGHT}
var facing:FaceDirection = FaceDirection.RIGHT
enum State{IDLE, RUN,JUMP,FALLING}
var current_state:State = State.IDLE
var pushTarget
var pushEnabled := false
@@ -19,26 +25,69 @@ func _physics_process(delta: float) -> void:
# Add the gravity.
handle_input()
handle_movement(delta)
handle_states()
handle_animation()
move_and_slide()
handle_collisions()
func handle_states() -> void:
match current_state:
State.IDLE when velocity.x !=0:
current_state = State.RUN
State.RUN:
if velocity.x == 0:
current_state = State.IDLE
#player steps off ledge
if not is_on_floor() && velocity.y > 0:
current_state = State.FALLING
State.FALLING when is_on_floor():
if velocity.x == 0:
current_state = State.IDLE
else:
current_state = State.RUN
State.JUMP when velocity.y >0:
current_state = State.FALLING
func handle_animation() -> void:
match current_state:
State.IDLE:
player_graphic.play("idle")
State.RUN:
player_graphic.play("run")
State.FALLING:
player_graphic.play("fall")
State.JUMP:
if upJump:
player_graphic.play("jump")
func handle_movement(delta:float) -> void:
if direction:
velocity.x = direction * SPEED
if direction == 0:
#not moving
velocity.x = move_toward(velocity.x,0, acceleration)
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.x = move_toward(velocity.x, SPEED * direction, acceleration)
if not is_on_floor():
velocity += get_gravity() * delta
if is_on_floor() && jump_buffer_timer.time_left >0:
velocity.y = JUMP_VELOCITY
jump_buffer_timer.stop()
current_state = State.JUMP
upJump = true
func handle_input():
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
#velocity.y = JUMP_VELOCITY
jump_buffer_timer.start()
direction = Input.get_axis("ui_left", "ui_right")
if direction < 0:
facing = FaceDirection.LEFT
player_graphic.flip_h = true
if direction > 0:
facing = FaceDirection.RIGHT
player_graphic.flip_h = false
if Input.is_action_just_pressed("shove") && pushEnabled:
var shoveDirection:int
match facing:
@@ -76,3 +125,9 @@ func handle_collisions():
if not right_cast.is_colliding() && not left_cast.is_colliding():
pushEnabled = false
func _on_animation_finished() -> void:
match current_state:
State.JUMP:
upJump = false
+5 -1
View File
@@ -3,10 +3,14 @@ var bulletArray =[]
var totalAllowedBullets = 7
var bullet = preload("res://scenes/bullet.tscn")
@onready var game: Node2D = $".."
@onready var triggers: Node2D = $"../triggers"
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
if triggers:
for obj in triggers.get_children():
if obj is Trigger:
obj.areaTriggerSignal.connect(game._on_trigger)
# Called every frame. 'delta' is the elapsed time since the previous frame.
+1 -1
View File
@@ -1,4 +1,4 @@
extends Area2D
class_name Trigger extends Area2D
@export var effect := "destroy"