From b90e0369bfc308b6a805d6139fe01f20955ec821 Mon Sep 17 00:00:00 2001 From: Strieglitz Date: Sun, 23 Feb 2025 22:21:44 +0100 Subject: [PATCH] damage handler wip --- resources/Character.tres | 2 +- resources/PlayerStats.tres | 2 +- scripts/Character.gd | 11 ----- scripts/Enemie.gd | 1 + scripts/Entity.gd | 44 +++++++++++++++++++ scripts/Mech.gd | 28 ++++++++++++ scripts/PlayerCharacter.gd | 33 +++++++++++++- scripts/Weapon.gd | 16 ++++++- .../resources/Character/CharacterResource.gd | 13 ------ .../Character/Equipment/MechParts/MechBase.gd | 10 ----- scripts/resources/Entity/EntityResource.gd | 13 ++++++ .../EntityStats.gd} | 2 +- .../Equipment/EquipmentResource.gd | 3 -- .../Equipment/EquipmentStats.gd | 3 -- .../Equipment/MechParts/Arms.gd | 0 .../Equipment/MechParts/Boots.gd | 0 .../Equipment/MechParts/Hydraulics.gd | 0 .../Equipment/MechParts/MechPartResource.gd | 0 singeltons/DamageHandler.gd | 9 ++++ 19 files changed, 145 insertions(+), 45 deletions(-) delete mode 100644 scripts/Character.gd create mode 100644 scripts/Enemie.gd create mode 100644 scripts/Entity.gd create mode 100644 scripts/Mech.gd delete mode 100644 scripts/resources/Character/CharacterResource.gd delete mode 100644 scripts/resources/Character/Equipment/MechParts/MechBase.gd create mode 100644 scripts/resources/Entity/EntityResource.gd rename scripts/resources/{Character/CharacterStats.gd => Entity/EntityStats.gd} (86%) rename scripts/resources/{Character => }/Equipment/EquipmentResource.gd (86%) rename scripts/resources/{Character => }/Equipment/EquipmentStats.gd (74%) rename scripts/resources/{Character => }/Equipment/MechParts/Arms.gd (100%) rename scripts/resources/{Character => }/Equipment/MechParts/Boots.gd (100%) rename scripts/resources/{Character => }/Equipment/MechParts/Hydraulics.gd (100%) rename scripts/resources/{Character => }/Equipment/MechParts/MechPartResource.gd (100%) create mode 100644 singeltons/DamageHandler.gd diff --git a/resources/Character.tres b/resources/Character.tres index 8f71bcb..8933959 100644 --- a/resources/Character.tres +++ b/resources/Character.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="Character" load_steps=3 format=3 uid="uid://bd1ugbnlm08vv"] -[ext_resource type="Script" path="res://scripts/resources/Character/CharacterResource.gd" id="1_8yb2m"] +[ext_resource type="Script" path="res://scripts/resources/Entity/EntityResource.gd" id="1_8yb2m"] [ext_resource type="Resource" uid="uid://qcjre5wwbrs3" path="res://resources/PlayerStats.tres" id="2_rc7x1"] [resource] diff --git a/resources/PlayerStats.tres b/resources/PlayerStats.tres index 7f28fbb..4f63a7f 100644 --- a/resources/PlayerStats.tres +++ b/resources/PlayerStats.tres @@ -1,7 +1,7 @@ [gd_resource type="Resource" script_class="CharacterStats" load_steps=12 format=3 uid="uid://qcjre5wwbrs3"] [ext_resource type="Script" path="res://scripts/resources/Stats/Armor.gd" id="1_c7135"] -[ext_resource type="Script" path="res://scripts/resources/Character/CharacterStats.gd" id="1_xti0a"] +[ext_resource type="Script" path="res://scripts/resources/Entity/EntityStats.gd" id="1_xti0a"] [ext_resource type="Script" path="res://scripts/resources/Stats/Health.gd" id="2_hsnpy"] [ext_resource type="Script" path="res://scripts/resources/Stats/MaxHealth.gd" id="3_26tso"] [ext_resource type="Script" path="res://scripts/resources/Stats/MovementSpeed.gd" id="4_goc2a"] diff --git a/scripts/Character.gd b/scripts/Character.gd deleted file mode 100644 index c5faaa3..0000000 --- a/scripts/Character.gd +++ /dev/null @@ -1,11 +0,0 @@ -class_name Character extends Node3D - - -var stats: CharacterStats -var equipments: Array[Equipment] - -func init_character(stats: CharacterStats): - self.stats = stats; - -func equip(newEquipment: Equipment)-> void: - equipments.append(newEquipment) diff --git a/scripts/Enemie.gd b/scripts/Enemie.gd new file mode 100644 index 0000000..cb1170c --- /dev/null +++ b/scripts/Enemie.gd @@ -0,0 +1 @@ +class_name Enemie extends Entity diff --git a/scripts/Entity.gd b/scripts/Entity.gd new file mode 100644 index 0000000..c38a410 --- /dev/null +++ b/scripts/Entity.gd @@ -0,0 +1,44 @@ +class_name Entity extends Node3D + + +var stats: EntityStats +var equipments: Array[Equipment] + +func init_entity(stats: EntityStats): + self.stats = stats; + +func equip(newEquipment: Equipment)-> void: + equipments.append(newEquipment) + +func unequip(equipmentToRemove: Equipment)-> void: + equipments.erase(equipmentToRemove) + +func get_max_health()->int: + var max_health = stats.max_health + for equipment in equipments: + max_health += equipment + + return max_health + +func get_health()->int: + return stats.health.value + +func get_armor()->int: + var armor = stats.armor + for equipment in equipments: + armor += equipment.stats.armor + return armor + +func get_Shield()->int: + var shield = stats.shield + for equipment in equipments: + shield += equipment.stats.shield + return shield + + +func get_movement_speed()->int: + var movement_speed = stats.movement_speed + for equipment in equipments: + movement_speed += equipment.stats.movement_speed + return movement_speed + diff --git a/scripts/Mech.gd b/scripts/Mech.gd new file mode 100644 index 0000000..0df29ca --- /dev/null +++ b/scripts/Mech.gd @@ -0,0 +1,28 @@ +extends Node3D + +class_name Mech + +var boots: Boots +var arms: Arms +var hydraulics: Hydraulics + + +func init_mech(boots: Boots, arms: Arms, hydraulics: Hydraulics): + self.boots = boots + self.arms = arms + self.hydraulics= hydraulics + +func get_max_health()-> int: + return boots.equipment_stats.max_health.value+arms.equipment_stats.max_health.value+hydraulics.equipment_stats.max_health.value + +func get_armor()-> int: + return boots.equipment_stats.armor.value+arms.equipment_stats.armor.value+hydraulics.equipment_stats.armor.value + +func get_shield()-> int: + return boots.equipment_stats.shield.value+arms.equipment_stats.shield.value+hydraulics.equipment_stats.shield.value + +func get_damage()-> int: + return boots.equipment_stats.damage.value+arms.equipment_stats.damage.value+hydraulics.equipment_stats.damage.value + +func get_movement_speed()-> int: + return boots.equipment_stats.movementSpeed.value+arms.equipment_stats.movementSpeed.value+hydraulics.equipment_stats.movementSpeed.value diff --git a/scripts/PlayerCharacter.gd b/scripts/PlayerCharacter.gd index eb022be..21b0ef6 100644 --- a/scripts/PlayerCharacter.gd +++ b/scripts/PlayerCharacter.gd @@ -1 +1,32 @@ -class_name PlayerCharacter extends Character +class_name PlayerCharacter extends Entity + +var mech: Mech + +func init_player_character(stats: EntityStats, mech: Mech): + init_entity(stats) + self.mech = mech; + +func get_max_health() -> int: + var max_health = base.get_max_health() + max_health += mech.get_max_health() + return max_health + +func get_armor() -> int: + var armor = stats.armor + armor += mech.get_armor() + for equipment in equipments: + armor += equipment.stats.armor + return armor + +func get_Shield() -> int: + var shield = stats.shield + for equipment in equipments: + shield += equipment.stats.shield + return shield + + +func get_movement_speed() -> int: + var movement_speed = stats.movement_speed + for equipment in equipments: + movement_speed += equipment.stats.movement_speed + return movement_speed diff --git a/scripts/Weapon.gd b/scripts/Weapon.gd index aaa86a2..68f27ec 100644 --- a/scripts/Weapon.gd +++ b/scripts/Weapon.gd @@ -6,6 +6,20 @@ var attachments: Array[Attachment] func init_weapon(stats: WeaponStats): self.stats = stats; - func attach(newAttachment: Attachment)-> void: attachments.append(newAttachment) + +func unattach(attachmentToRemove: Attachment)-> void: + attachments.erase(attachmentToRemove) + +func get_damage()->int: + var damage = stats.damage + for attachment in attachments: + damage += attachment.stats.damage + return damage + +func get_fire_rate()->int: + var fire_rate = stats.fire_rate + for attachment in attachments: + fire_rate += attachment.stats.fire_rate + return fire_rate diff --git a/scripts/resources/Character/CharacterResource.gd b/scripts/resources/Character/CharacterResource.gd deleted file mode 100644 index f08fe42..0000000 --- a/scripts/resources/Character/CharacterResource.gd +++ /dev/null @@ -1,13 +0,0 @@ -extends Resource - -class_name CharacterResource - -@export var character_stats: CharacterStats -@export var character_scene: PackedScene - - -func instantiate(parent: Node3D)->Character: - var character_instance = character_scene.instantiate() as Character - character_instance.init_character(character_stats) - parent.add_child(character_instance) - return character_instance diff --git a/scripts/resources/Character/Equipment/MechParts/MechBase.gd b/scripts/resources/Character/Equipment/MechParts/MechBase.gd deleted file mode 100644 index ec7479f..0000000 --- a/scripts/resources/Character/Equipment/MechParts/MechBase.gd +++ /dev/null @@ -1,10 +0,0 @@ -extends MechPartResource - -class_name MechBase - -@export var boots: Boots -@export var arms: Arms -@export var hydraulics: Hydraulics - -func get_stats()-> EquipmentStats: - return boots.equipment_stats.combine(arms.equipment_stats).combine(hydraulics.equipment_stats) diff --git a/scripts/resources/Entity/EntityResource.gd b/scripts/resources/Entity/EntityResource.gd new file mode 100644 index 0000000..022cdf7 --- /dev/null +++ b/scripts/resources/Entity/EntityResource.gd @@ -0,0 +1,13 @@ +extends Resource + +class_name EntityResource + +@export var entity_stats: entityStats +@export var entity_scene: PackedScene + + +func instantiate(parent: Node3D)->Entity: + var entity_instance = entity_scene.instantiate() as Entity + entity_instance.init_entity(entity_stats) + parent.add_child(entity_instance) + return entity_instance diff --git a/scripts/resources/Character/CharacterStats.gd b/scripts/resources/Entity/EntityStats.gd similarity index 86% rename from scripts/resources/Character/CharacterStats.gd rename to scripts/resources/Entity/EntityStats.gd index daa221a..819d07e 100644 --- a/scripts/resources/Character/CharacterStats.gd +++ b/scripts/resources/Entity/EntityStats.gd @@ -1,6 +1,6 @@ extends Resource -class_name CharacterStats +class_name EntityStats @export var max_health: MaxHealth @export var health: Health diff --git a/scripts/resources/Character/Equipment/EquipmentResource.gd b/scripts/resources/Equipment/EquipmentResource.gd similarity index 86% rename from scripts/resources/Character/Equipment/EquipmentResource.gd rename to scripts/resources/Equipment/EquipmentResource.gd index 1923a18..577d82b 100644 --- a/scripts/resources/Character/Equipment/EquipmentResource.gd +++ b/scripts/resources/Equipment/EquipmentResource.gd @@ -12,6 +12,3 @@ func instantiate(parent: Node3D)->Equipment: equipment_instance.init_Equipment(equipment_stats) parent.add_child(equipment_instance) return equipment_instance - -func get_stats()-> EquipmentStats: - return equipment_stats diff --git a/scripts/resources/Character/Equipment/EquipmentStats.gd b/scripts/resources/Equipment/EquipmentStats.gd similarity index 74% rename from scripts/resources/Character/Equipment/EquipmentStats.gd rename to scripts/resources/Equipment/EquipmentStats.gd index 8df73eb..a65b670 100644 --- a/scripts/resources/Character/Equipment/EquipmentStats.gd +++ b/scripts/resources/Equipment/EquipmentStats.gd @@ -7,6 +7,3 @@ class_name EquipmentStats @export var shield: Shield @export var movementSpeed: MovementSpeed @export var damage: Damage - -func combine (other: EquipmentStats)->EquipmentStats: - return null diff --git a/scripts/resources/Character/Equipment/MechParts/Arms.gd b/scripts/resources/Equipment/MechParts/Arms.gd similarity index 100% rename from scripts/resources/Character/Equipment/MechParts/Arms.gd rename to scripts/resources/Equipment/MechParts/Arms.gd diff --git a/scripts/resources/Character/Equipment/MechParts/Boots.gd b/scripts/resources/Equipment/MechParts/Boots.gd similarity index 100% rename from scripts/resources/Character/Equipment/MechParts/Boots.gd rename to scripts/resources/Equipment/MechParts/Boots.gd diff --git a/scripts/resources/Character/Equipment/MechParts/Hydraulics.gd b/scripts/resources/Equipment/MechParts/Hydraulics.gd similarity index 100% rename from scripts/resources/Character/Equipment/MechParts/Hydraulics.gd rename to scripts/resources/Equipment/MechParts/Hydraulics.gd diff --git a/scripts/resources/Character/Equipment/MechParts/MechPartResource.gd b/scripts/resources/Equipment/MechParts/MechPartResource.gd similarity index 100% rename from scripts/resources/Character/Equipment/MechParts/MechPartResource.gd rename to scripts/resources/Equipment/MechParts/MechPartResource.gd diff --git a/singeltons/DamageHandler.gd b/singeltons/DamageHandler.gd new file mode 100644 index 0000000..4eff30e --- /dev/null +++ b/singeltons/DamageHandler.gd @@ -0,0 +1,9 @@ +extends Node + +class_name DamageHandler + + +func apply_damage(damage_dealer: Entity, damage_receiver: Entity, weapon: Weapon ): + damage_receiver.get_armor() + damage_receiver.get + pass