Skip to content

Commit

Permalink
Add combined shield + hull damage
Browse files Browse the repository at this point in the history
  • Loading branch information
jspahrsummers committed Jun 25, 2024
1 parent 90ce65a commit b18521a
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 10 deletions.
2 changes: 1 addition & 1 deletion gui/hull_bar.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ func _on_ship_hull_changed(ship: Ship) -> void:
if player == null:
return

assert(player.ship_def.hull > 0, "Ship definition should not have 0 hull")
assert(player.ship_def.hull >= CombatSystem.MIN_HULL_VALUE, "Ship definition should not have 0 hull")
self.max_value = player.ship_def.hull
self.value = player.hull
2 changes: 1 addition & 1 deletion gui/shield_bar.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ func _on_ship_shield_changed(ship: Ship) -> void:
if player == null:
return

self.max_value = player.ship_def.shield if player.ship_def.shield > 0.01 else 1.0
self.max_value = player.ship_def.shield if player.ship_def.shield >= CombatSystem.MIN_SHIELD_VALUE else 1.0
self.value = player.shield
6 changes: 6 additions & 0 deletions ships/frigate03/frigate03.tres
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@
[resource]
script = ExtResource("1_6jqep")
hull = 100.0
shield = 100.0
thrust = 0.0
torque = 0.0
fire_interval_msec = 0
fire_force = 0.0
hyperspace_arrival_radius = 0.0
27 changes: 21 additions & 6 deletions ships/ship.gd
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,33 @@ var last_fired_msec: int = 0

func _ready() -> void:
self.hull = self.ship_def.hull
assert(self.hull >= CombatSystem.MIN_HULL_VALUE, "Hull must be greater than 0")

self.shield = self.ship_def.shield
CombatSystem.notify_ship_hull_changed(self)
CombatSystem.notify_ship_shield_changed(self)

func damage(dmg: float) -> void:
# TODO: Add shields
func damage(dmg: Dictionary) -> void:
var hull_dmg: float = dmg.get("hull", 0.0)
var shield_dmg: float = dmg.get("shield", 0.0)
var apply_hull_dmg_pct := 1.0

self.hull -= dmg
CombatSystem.notify_ship_hull_changed(self)
if self.shield >= CombatSystem.MIN_SHIELD_VALUE:
assert(self.hull >= CombatSystem.MIN_HULL_VALUE, "Hull must be greater than 0 if shield is up")

var actual_shield_dmg := minf(self.shield, shield_dmg)
self.shield -= actual_shield_dmg
CombatSystem.notify_ship_shield_changed(self)

# Reduce hull damage proportionally to the shield damage applied
apply_hull_dmg_pct -= actual_shield_dmg / shield_dmg

if self.shield < CombatSystem.MIN_SHIELD_VALUE:
self.hull -= hull_dmg * apply_hull_dmg_pct
CombatSystem.notify_ship_hull_changed(self)

if self.hull <= 0:
self.queue_free()
if self.hull < CombatSystem.MIN_HULL_VALUE:
self.queue_free()

func fire() -> void:
var now := Time.get_ticks_msec()
Expand Down
3 changes: 3 additions & 0 deletions systems/combat_system.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ extends Node
signal ship_hull_changed(ship: Ship)
signal ship_shield_changed(ship: Ship)

const MIN_SHIELD_VALUE = 0.001
const MIN_HULL_VALUE = 0.001

func notify_ship_hull_changed(ship: Ship) -> void:
self.emit_signal("ship_hull_changed", ship)

Expand Down
8 changes: 6 additions & 2 deletions weapons/blaster/blaster.gd
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
extends RigidBody3D

@export var lifetime_msec: int = 2000
@export var damage: float = 60
@export var damage_shield: float = 80
@export var damage_hull: float = 40

var spawn_time_msec: int

Expand All @@ -15,6 +16,9 @@ func _process(_delta: float) -> void:
func _on_body_entered(body: Node) -> void:
if body is Ship:
var ship: Ship = body
ship.damage(self.damage)
ship.damage({
"shield": damage_shield,
"hull": damage_hull
})

self.queue_free()

0 comments on commit b18521a

Please sign in to comment.