From 962bc016a323810760d36d87ca291215ec8d96bd Mon Sep 17 00:00:00 2001 From: ShadesAndGrays Date: Wed, 20 May 2026 19:31:29 +0100 Subject: [PATCH] add health component and FollowTarget Enemy Controller and minor changes --- CharacterController/CharacterController.gd | 6 ++++- .../Enemy/FollowTargetEnemyController.gd | 17 +++++++++++++ .../Enemy/FollowTargetEnemyController.gd.uid | 1 + .../SimpleEnemyController.gd} | 4 +++ .../SimpleEnemyController.gd.uid} | 0 DamageHandling/HealthComponent.gd | 25 +++++++++++++++++++ DamageHandling/HealthComponent.gd.uid | 1 + DamageHandling/hit_box.gd | 3 +-- DamageHandling/hurt_box.gd | 4 +-- 9 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 CharacterController/Enemy/FollowTargetEnemyController.gd create mode 100644 CharacterController/Enemy/FollowTargetEnemyController.gd.uid rename CharacterController/{EnemyController.gd => Enemy/SimpleEnemyController.gd} (88%) rename CharacterController/{EnemyController.gd.uid => Enemy/SimpleEnemyController.gd.uid} (100%) create mode 100644 DamageHandling/HealthComponent.gd create mode 100644 DamageHandling/HealthComponent.gd.uid diff --git a/CharacterController/CharacterController.gd b/CharacterController/CharacterController.gd index c83711d..b4a85f3 100644 --- a/CharacterController/CharacterController.gd +++ b/CharacterController/CharacterController.gd @@ -4,6 +4,9 @@ class_name CharacterController extends Node @export_category("Movement Setting") @export var body: CharacterBody2D @export var move_res:MovementResouce = MovementResouce.new() +@export_group("Flags") +## Will allow body to move an slide on it's own without parent callling +@export var handle_movement:bool = false # @export var SPEED = 500.0 # @export var JUMP_VELOCITY = -900.0 # @export var gravity = 1900 @@ -112,7 +115,8 @@ func _physics_process(delta: float) -> void: # jump_loaded = false # has_released_jump = false # body.velocity.y = JUMP_VELOCITY - # move_and_slide() + if handle_movement: + body.move_and_slide() # func jump(): # jump_loaded = true diff --git a/CharacterController/Enemy/FollowTargetEnemyController.gd b/CharacterController/Enemy/FollowTargetEnemyController.gd new file mode 100644 index 0000000..450395b --- /dev/null +++ b/CharacterController/Enemy/FollowTargetEnemyController.gd @@ -0,0 +1,17 @@ +class_name FollowTargetEnemyController extends SimpleEnemycontroller + +@export var target:Node2D + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + super._ready() + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if target: + direction = sign(target.global_position.x - body.global_position.x ) + else: + direction = 0 + + super._process(delta) diff --git a/CharacterController/Enemy/FollowTargetEnemyController.gd.uid b/CharacterController/Enemy/FollowTargetEnemyController.gd.uid new file mode 100644 index 0000000..1a4fc81 --- /dev/null +++ b/CharacterController/Enemy/FollowTargetEnemyController.gd.uid @@ -0,0 +1 @@ +uid://12f5ubnmfl0v diff --git a/CharacterController/EnemyController.gd b/CharacterController/Enemy/SimpleEnemyController.gd similarity index 88% rename from CharacterController/EnemyController.gd rename to CharacterController/Enemy/SimpleEnemyController.gd index 904f7ba..49b545a 100644 --- a/CharacterController/EnemyController.gd +++ b/CharacterController/Enemy/SimpleEnemyController.gd @@ -4,6 +4,7 @@ class_name SimpleEnemycontroller extends Node @export var body: CharacterBody2D @export var move_res:MovementResouce = MovementResouce.new() @export var direction:float = 0 +@export var handle_movement:bool = false # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -19,3 +20,6 @@ func _process(delta: float) -> void: body.velocity.x = move_toward(body.velocity.x, 0, move_res.speed) if not body.is_on_floor(): body.velocity.y += move_res.gravity * delta + + if handle_movement: + body.move_and_slide() diff --git a/CharacterController/EnemyController.gd.uid b/CharacterController/Enemy/SimpleEnemyController.gd.uid similarity index 100% rename from CharacterController/EnemyController.gd.uid rename to CharacterController/Enemy/SimpleEnemyController.gd.uid diff --git a/DamageHandling/HealthComponent.gd b/DamageHandling/HealthComponent.gd new file mode 100644 index 0000000..1d2b5d1 --- /dev/null +++ b/DamageHandling/HealthComponent.gd @@ -0,0 +1,25 @@ +class_name HealthComponent extends Node + +@export var max_health:float = 100 +var _health = 100 + +signal health_changed(current_health:float) + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + _health = max_health + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta: float) -> void: + pass + +func add_health(amount:float): + _health = max(_health + amount, max_health) + health_changed.emit(_health) + +func subtract_health(amount:float): + _health = max(_health - amount, 0) + health_changed.emit(_health) + +func get_health() -> float: + return _health diff --git a/DamageHandling/HealthComponent.gd.uid b/DamageHandling/HealthComponent.gd.uid new file mode 100644 index 0000000..7634ee4 --- /dev/null +++ b/DamageHandling/HealthComponent.gd.uid @@ -0,0 +1 @@ +uid://o21d85vy2cfs diff --git a/DamageHandling/hit_box.gd b/DamageHandling/hit_box.gd index acbb9d6..0f27f7d 100644 --- a/DamageHandling/hit_box.gd +++ b/DamageHandling/hit_box.gd @@ -1,11 +1,10 @@ class_name HitBox extends Area2D @export var damage:float = 10 -@export_flags("player","enemy") var affect:int = 0 +@export_flags("player","enemy") var damage_type:int = 0 # Called when the node enters the scene tree for the first time. func _ready() -> void: - print(affect) pass # Replace with function body. diff --git a/DamageHandling/hurt_box.gd b/DamageHandling/hurt_box.gd index f257d65..39dbae5 100644 --- a/DamageHandling/hurt_box.gd +++ b/DamageHandling/hurt_box.gd @@ -1,7 +1,7 @@ class_name HurtBox extends Area2D signal damage_recieved(damage:float) -@export_flags("player","enemy") var type +@export_flags("player","enemy") var respond_from # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -13,6 +13,6 @@ func _process(delta: float) -> void: pass func on_damage_receieved(hitbox:HitBox): - if hitbox.affect & type: + if hitbox.damage_type & respond_from: damage_recieved.emit(hitbox.damage) #if type