Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions objects/actors/Actor.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ extends RigidBody2D
class_name Actor

@export var _speed = 300.0
@export var _maxHealth: int = 100
@export var _currentHealth: float = _maxHealth
@export var _maxHealth: float = 100
@export var _currentHealth: float = 100
@export var isAlive: bool = true

@onready var animated_sprite = %AnimatedSprite
Expand Down
17 changes: 6 additions & 11 deletions objects/actors/mob/Mob.gd
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
class_name Mob
extends Actor

@onready var healthbar = $HealthBar
@onready var animationPlayer = %AnimationPlayer

var targeted_players: Array[Player]

func _ready():
healthbar.init(_currentHealth)

func _on_hit():
animationPlayer.play("Hit")
healthbar.value = _currentHealth

func _on_death():
animationPlayer.play("Death")
super._on_death()
set_physics_process(false)
_disable_collision()

func _disable_collision() -> void:
collision_layer = 0
collision_mask = 0
52 changes: 52 additions & 0 deletions objects/actors/mob/boss/Boss.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
class_name Boss extends Mob

@export var players_node: Node

@onready var states: States = $States
@onready var follow: Follow = $States/Follow
@onready var death: Death = $States/Death

@onready var health_bar: HealthBar = %HealthBar

var players: Array[Player] = []

func _ready():
health_bar.init(_currentHealth)

for node in players_node.get_children():
if node is Player:
_add_player(node)

players_node.child_entered_tree.connect(_on_player_added)

func get_targeted_player() -> Player:
if players == null: return null
if players.is_empty(): return null

players.sort_custom(_sort_by_distance)
return players[0]

func _sort_by_distance(a: Node2D, b: Node2D) -> bool:
var distance_to_a = a.global_position.distance_to(self.global_position)
var distance_to_b = b.global_position.distance_to(self.global_position)
return (distance_to_a < distance_to_b)

func _update_animation() -> void:
if states.current_state == follow:
super._update_animation()

func _on_hit():
super._on_hit()
health_bar.value = _currentHealth

func _on_death() -> void:
super._on_death()
states.change_state(death)

func _on_player_added(node: Node) -> void:
if node is Player:
_add_player(node)

func _add_player(player: Player) -> void:
players.push_back(player)
prints("Boss knows players:", players)
Loading