Added health system
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
@abstract
|
||||
class_name AbstractDamage
|
||||
extends Resource
|
||||
|
||||
|
||||
@export_range(1, 250) var value: int = 1
|
||||
|
||||
|
||||
@abstract
|
||||
func shield_damage_multiplier() -> float
|
||||
|
||||
|
||||
@abstract
|
||||
func armor_damage_multiplier() -> float
|
||||
|
||||
|
||||
@abstract
|
||||
func hull_damage_multiplier() -> float
|
||||
@@ -0,0 +1 @@
|
||||
uid://bjurq6dl6trdh
|
||||
@@ -0,0 +1,14 @@
|
||||
class_name EnergyDamage
|
||||
extends AbstractDamage
|
||||
|
||||
|
||||
func shield_damage_multiplier() -> float:
|
||||
return 1.5
|
||||
|
||||
|
||||
func armor_damage_multiplier() -> float:
|
||||
return 0.5
|
||||
|
||||
|
||||
func hull_damage_multiplier() -> float:
|
||||
return 1.0
|
||||
@@ -0,0 +1 @@
|
||||
uid://c27v705giygv4
|
||||
@@ -0,0 +1,14 @@
|
||||
class_name ExplosionDamage
|
||||
extends AbstractDamage
|
||||
|
||||
|
||||
func shield_damage_multiplier() -> float:
|
||||
return 0.75
|
||||
|
||||
|
||||
func armor_damage_multiplier() -> float:
|
||||
return 0.75
|
||||
|
||||
|
||||
func hull_damage_multiplier() -> float:
|
||||
return 1.25
|
||||
@@ -0,0 +1 @@
|
||||
uid://dftb7hg5f06b5
|
||||
@@ -0,0 +1,14 @@
|
||||
class_name KineticDamage
|
||||
extends AbstractDamage
|
||||
|
||||
|
||||
func shield_damage_multiplier() -> float:
|
||||
return 0.5
|
||||
|
||||
|
||||
func armor_damage_multiplier() -> float:
|
||||
return 1.5
|
||||
|
||||
|
||||
func hull_damage_multiplier() -> float:
|
||||
return 1.0
|
||||
@@ -0,0 +1 @@
|
||||
uid://bhqvk5cnjg5mv
|
||||
@@ -0,0 +1,30 @@
|
||||
class_name Health
|
||||
extends Node
|
||||
|
||||
|
||||
signal depleted
|
||||
|
||||
|
||||
@export_range(0, 5000) var max_shield: int = 0
|
||||
@export_range(0, 5000) var max_armor: int = 0
|
||||
@export_range(1, 5000) var max_hull: int = 1
|
||||
|
||||
|
||||
@onready var _shield := max_shield
|
||||
@onready var _armor := max_armor
|
||||
@onready var _hull := max_hull
|
||||
|
||||
|
||||
func apply_damage(damage: AbstractDamage) -> void:
|
||||
if _shield > 0:
|
||||
var damage_value := ceili(damage.value * damage.shield_damage_multiplier())
|
||||
_shield = max(_shield - damage_value, 0)
|
||||
elif _armor > 0:
|
||||
var damage_value := ceili(damage.value * damage.armor_damage_multiplier())
|
||||
_armor = max(_armor - damage_value, 0)
|
||||
else:
|
||||
var damage_value := ceili(damage.value * damage.hull_damage_multiplier())
|
||||
_hull = max(_hull - damage_value, 0)
|
||||
|
||||
if _hull == 0:
|
||||
depleted.emit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://d3g4xbq45qmpr
|
||||
@@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://clkymhkv3cevm"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d3g4xbq45qmpr" path="res://game/health_system/health.gd" id="1_gwdg4"]
|
||||
|
||||
[node name="Health" type="Node"]
|
||||
script = ExtResource("1_gwdg4")
|
||||
Reference in New Issue
Block a user