add boss enemy and refactor
This commit is contained in:
45
scripts/boss.gd
Normal file
45
scripts/boss.gd
Normal file
@@ -0,0 +1,45 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
@export var speed = 60
|
||||
@export var hp = 2
|
||||
|
||||
var direction = 1
|
||||
|
||||
@onready var ray_cast_right: RayCast2D = $RayCastRight
|
||||
@onready var ray_cast_left: RayCast2D = $RayCastLeft
|
||||
@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var hurt_sound: AudioStreamPlayer2D = $Hurt
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _physics_process(delta: float) -> void:
|
||||
# Apply gravity
|
||||
if not is_on_floor():
|
||||
velocity += get_gravity() * delta
|
||||
|
||||
if ray_cast_right.is_colliding():
|
||||
direction = -1
|
||||
animated_sprite.flip_h = true
|
||||
|
||||
if ray_cast_left.is_colliding():
|
||||
direction = 1
|
||||
animated_sprite.flip_h = false
|
||||
|
||||
position.x += direction * speed * delta
|
||||
|
||||
move_and_slide()
|
||||
|
||||
|
||||
func _on_hit_box_hit() -> void:
|
||||
hp -= 1
|
||||
|
||||
if hp <= 0:
|
||||
animated_sprite.play("die")
|
||||
animation_player.play("die")
|
||||
else:
|
||||
hurt_sound.play()
|
||||
animated_sprite.play("hurt")
|
||||
|
||||
|
||||
func _on_animated_sprite_2d_animation_finished() -> void:
|
||||
animated_sprite.play("default")
|
||||
1
scripts/boss.gd.uid
Normal file
1
scripts/boss.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bamgalx75xtf2
|
||||
@@ -1,16 +1,11 @@
|
||||
extends Area2D
|
||||
|
||||
@export var animation_player: AnimationPlayer
|
||||
@export var animation_name: String
|
||||
|
||||
@export var animated_sprite: AnimatedSprite2D
|
||||
@export var animated_sprite_name: String
|
||||
|
||||
@export var player_bounce: int
|
||||
|
||||
signal hit
|
||||
|
||||
func _on_body_entered(player_body: Node2D) -> void:
|
||||
var player_character_body = player_body as CharacterBody2D
|
||||
player_character_body.velocity.y = player_bounce
|
||||
hit.emit()
|
||||
|
||||
animated_sprite.play(animated_sprite_name)
|
||||
animation_player.play(animation_name)
|
||||
|
||||
@@ -4,7 +4,6 @@ extends Area2D
|
||||
@onready var death: AudioStreamPlayer2D = $Death
|
||||
|
||||
func _on_body_entered(player_body: Node2D) -> void:
|
||||
print("You died.")
|
||||
death.play()
|
||||
Engine.time_scale = 0.5
|
||||
player_body.get_node(NodeTypes.COLLISION_SHAPE_2D).queue_free()
|
||||
|
||||
13
scripts/platform.gd
Normal file
13
scripts/platform.gd
Normal file
@@ -0,0 +1,13 @@
|
||||
extends Node2D
|
||||
|
||||
@export_enum("Green", "Yellow") var colour: String
|
||||
@onready var sprite_2d: Sprite2D = $Sprite2D
|
||||
|
||||
const REGION_DICT: Dictionary[String, Vector2] = {
|
||||
"Green": Vector2(16, 0),
|
||||
"Yellow": Vector2(16, 32)
|
||||
}
|
||||
|
||||
func _on_ready() -> void:
|
||||
print(colour)
|
||||
sprite_2d.region_rect.position = REGION_DICT[colour]
|
||||
1
scripts/platform.gd.uid
Normal file
1
scripts/platform.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ymdnbe621mfv
|
||||
@@ -1,12 +1,14 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
@export var speed = 60
|
||||
@export var hp = 1
|
||||
|
||||
var direction = 1
|
||||
|
||||
@onready var ray_cast_right: RayCast2D = $RayCastRight
|
||||
@onready var ray_cast_left: RayCast2D = $RayCastLeft
|
||||
@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _physics_process(delta: float) -> void:
|
||||
@@ -25,3 +27,10 @@ func _physics_process(delta: float) -> void:
|
||||
position.x += direction * speed * delta
|
||||
|
||||
move_and_slide()
|
||||
|
||||
func _on_hit_box_hit() -> void:
|
||||
hp -= 1
|
||||
|
||||
if hp <= 0:
|
||||
animated_sprite.play("die")
|
||||
animation_player.play("die")
|
||||
|
||||
Reference in New Issue
Block a user