From cb65c3a2665c14a4b40b61ad5506d0b05feb3b35 Mon Sep 17 00:00:00 2001 From: Strieglitz Date: Sun, 9 Mar 2025 23:56:19 +0100 Subject: [PATCH] first version of enitites damageables weapons item and effects workflow --- project.godot | 5 ++ resources/Character.tres | 8 --- resources/Hp.tres | 7 -- resources/PlayerStats.tres | 12 ++-- scripts/Attachment.gd | 7 -- scripts/{ => Entites}/Enemie.gd | 0 scripts/Entites/Entity.gd | 70 +++++++++++++++++++ scripts/Entites/PlayerCharacter.gd | 19 +++++ scripts/Entity.gd | 44 ------------ scripts/Equipment.gd | 7 -- scripts/Items/Attachment.gd | 16 +++++ scripts/Items/Equipment.gd | 22 ++++++ scripts/Items/Mech/Arms.gd | 1 + scripts/Items/Mech/Boots.gd | 1 + scripts/Items/Mech/Hydraulics.gd | 1 + scripts/Items/Mech/Mech.gd | 28 ++++++++ scripts/{ => Items}/Weapon.gd | 12 +++- scripts/Mech.gd | 28 -------- scripts/PlayerCharacter.gd | 32 --------- scripts/resources/Effects/Effect.gd | 2 +- scripts/resources/Effects/HealEffect.gd | 6 ++ scripts/resources/Effects/RefillHpEffect.gd | 4 -- scripts/resources/Entity/EntityResource.gd | 2 +- scripts/resources/Entity/EntityStats.gd | 11 +-- scripts/resources/Equipment/EquipmentStats.gd | 10 +-- .../MechParts/{Arms.gd => ArmsResource.gd} | 2 +- .../MechParts/{Boots.gd => BootsResource.gd} | 2 +- .../Equipment/MechParts/Hydraulics.gd | 3 - .../Equipment/MechParts/HydraulicsResource.gd | 3 + .../Stats/{Armor.gd => ArmorStat.gd} | 2 +- .../Stats/{Damage.gd => DamageStat.gd} | 2 +- .../resources/Stats/Effects/HitEffectsStat.gd | 13 ++++ .../Stats/{FireRate.gd => FireRateStat.gd} | 2 +- .../Stats/{Health.gd => HealthStat.gd} | 2 +- .../Stats/{MaxHealth.gd => MaxHealthStat.gd} | 2 +- scripts/resources/Stats/MaxShieldStat.gd | 13 ++++ ...{MovementSpeed.gd => MovementSpeedStat.gd} | 2 +- .../Stats/{Shield.gd => ShieldStat.gd} | 2 +- .../Weapons/Attachments/AttachmentStats.gd | 5 +- scripts/resources/Weapons/WeaponStats.gd | 5 +- singeltons/DamageHandler.gd | 25 +++++-- singeltons/MathUtils.gd | 3 + 42 files changed, 263 insertions(+), 180 deletions(-) delete mode 100644 resources/Character.tres delete mode 100644 resources/Hp.tres delete mode 100644 scripts/Attachment.gd rename scripts/{ => Entites}/Enemie.gd (100%) create mode 100644 scripts/Entites/Entity.gd create mode 100644 scripts/Entites/PlayerCharacter.gd delete mode 100644 scripts/Entity.gd delete mode 100644 scripts/Equipment.gd create mode 100644 scripts/Items/Attachment.gd create mode 100644 scripts/Items/Equipment.gd create mode 100644 scripts/Items/Mech/Arms.gd create mode 100644 scripts/Items/Mech/Boots.gd create mode 100644 scripts/Items/Mech/Hydraulics.gd create mode 100644 scripts/Items/Mech/Mech.gd rename scripts/{ => Items}/Weapon.gd (63%) delete mode 100644 scripts/Mech.gd delete mode 100644 scripts/PlayerCharacter.gd create mode 100644 scripts/resources/Effects/HealEffect.gd delete mode 100644 scripts/resources/Effects/RefillHpEffect.gd rename scripts/resources/Equipment/MechParts/{Arms.gd => ArmsResource.gd} (52%) rename scripts/resources/Equipment/MechParts/{Boots.gd => BootsResource.gd} (50%) delete mode 100644 scripts/resources/Equipment/MechParts/Hydraulics.gd create mode 100644 scripts/resources/Equipment/MechParts/HydraulicsResource.gd rename scripts/resources/Stats/{Armor.gd => ArmorStat.gd} (90%) rename scripts/resources/Stats/{Damage.gd => DamageStat.gd} (90%) create mode 100644 scripts/resources/Stats/Effects/HitEffectsStat.gd rename scripts/resources/Stats/{FireRate.gd => FireRateStat.gd} (89%) rename scripts/resources/Stats/{Health.gd => HealthStat.gd} (90%) rename scripts/resources/Stats/{MaxHealth.gd => MaxHealthStat.gd} (89%) create mode 100644 scripts/resources/Stats/MaxShieldStat.gd rename scripts/resources/Stats/{MovementSpeed.gd => MovementSpeedStat.gd} (87%) rename scripts/resources/Stats/{Shield.gd => ShieldStat.gd} (90%) create mode 100644 singeltons/MathUtils.gd diff --git a/project.godot b/project.godot index 912855b..3540ebb 100644 --- a/project.godot +++ b/project.godot @@ -28,6 +28,11 @@ run/main_scene="res://scenes/debug_level.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://icon.svg" +[autoload] + +MathUtils="*res://singeltons/MathUtils.gd" +DamageHandler="*res://singeltons/DamageHandler.gd" + [display] window/size/viewport_width=1920 diff --git a/resources/Character.tres b/resources/Character.tres deleted file mode 100644 index 8933959..0000000 --- a/resources/Character.tres +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="Resource" script_class="Character" load_steps=3 format=3 uid="uid://bd1ugbnlm08vv"] - -[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] -script = ExtResource("1_8yb2m") -stats = ExtResource("2_rc7x1") diff --git a/resources/Hp.tres b/resources/Hp.tres deleted file mode 100644 index 9fd8d8a..0000000 --- a/resources/Hp.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="Resource" script_class="Health" load_steps=2 format=3 uid="uid://c3gf5mi1u151m"] - -[ext_resource type="Script" path="res://scripts/resources/Stats/Health.gd" id="1_yqlcl"] - -[resource] -script = ExtResource("1_yqlcl") -_value = 0 diff --git a/resources/PlayerStats.tres b/resources/PlayerStats.tres index 4f63a7f..e006ae7 100644 --- a/resources/PlayerStats.tres +++ b/resources/PlayerStats.tres @@ -1,11 +1,11 @@ -[gd_resource type="Resource" script_class="CharacterStats" load_steps=12 format=3 uid="uid://qcjre5wwbrs3"] +[gd_resource type="Resource" script_class="EntityStats" 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/Stats/ArmorStat.gd" id="1_c7135"] [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"] -[ext_resource type="Script" path="res://scripts/resources/Stats/Shield.gd" id="6_rncik"] +[ext_resource type="Script" path="res://scripts/resources/Stats/HealthStat.gd" id="2_hsnpy"] +[ext_resource type="Script" path="res://scripts/resources/Stats/MaxHealthStat.gd" id="3_26tso"] +[ext_resource type="Script" path="res://scripts/resources/Stats/MovementSpeedStat.gd" id="4_goc2a"] +[ext_resource type="Script" path="res://scripts/resources/Stats/ShieldStat.gd" id="6_rncik"] [sub_resource type="Resource" id="Resource_vbm44"] script = ExtResource("1_c7135") diff --git a/scripts/Attachment.gd b/scripts/Attachment.gd deleted file mode 100644 index 8fa0057..0000000 --- a/scripts/Attachment.gd +++ /dev/null @@ -1,7 +0,0 @@ -class_name Attachment extends Node3D - - -var stats: AttachmentStats - -func init_attachment(stats: AttachmentStats): - self.stats = stats; diff --git a/scripts/Enemie.gd b/scripts/Entites/Enemie.gd similarity index 100% rename from scripts/Enemie.gd rename to scripts/Entites/Enemie.gd diff --git a/scripts/Entites/Entity.gd b/scripts/Entites/Entity.gd new file mode 100644 index 0000000..51e4454 --- /dev/null +++ b/scripts/Entites/Entity.gd @@ -0,0 +1,70 @@ +class_name Entity extends Node3D + + +var stats: EntityStats +var equipments: Array[Equipment] +signal died_event(entity: Entity) + +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_health()->int: + return stats.health.value + +func get_shield()->int: + return stats.shield.value + +func reduce_shield(damage: int): + stats.shield.value -= damage + if stats.shield.value <= 0: + stats.shield.value = 0 + +func increase_health(additional_health: int): + stats.health.value += additional_health + if stats.health.value > get_max_health(): + stats.health.value = get_max_health() + +func reduce_health(damage: int): + stats.health.value -= damage + if stats.health.value <= 0: + died() + +func died(): + died_event.emit(self) + +func get_max_health()->int: + var max_health = stats.max_health + for equipment in equipments: + max_health += equipment.get_max_health() + return max_health + +func get_armor()->int: + var armor = stats.armor + for equipment in equipments: + armor += equipment.get_armor() + return armor + +func get_max_Shield()->int: + var shield = stats.shield + for equipment in equipments: + shield += equipment.get_max_shield() + return shield + +func get_movement_speed()->int: + var movement_speed = stats.movement_speed + for equipment in equipments: + movement_speed += equipment.get_evement_speed() + return movement_speed + +func get_damage()->int: + var damage = 0 + for equipment in equipments: + damage += equipment.get_damage() + return damage diff --git a/scripts/Entites/PlayerCharacter.gd b/scripts/Entites/PlayerCharacter.gd new file mode 100644 index 0000000..7dbdc09 --- /dev/null +++ b/scripts/Entites/PlayerCharacter.gd @@ -0,0 +1,19 @@ +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: + return super() + mech.get_max_health() + +func get_armor() -> int: + return super() + mech.get_armor() + +func get_max_Shield() -> int: + return super() + mech.get_shield() + +func get_movement_speed() -> int: + return super() + mech.get_movement_speed() diff --git a/scripts/Entity.gd b/scripts/Entity.gd deleted file mode 100644 index c38a410..0000000 --- a/scripts/Entity.gd +++ /dev/null @@ -1,44 +0,0 @@ -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/Equipment.gd b/scripts/Equipment.gd deleted file mode 100644 index 6d5bdfd..0000000 --- a/scripts/Equipment.gd +++ /dev/null @@ -1,7 +0,0 @@ -class_name Equipment extends Node3D - - -var stats: EquipmentStats - -func init_equipment(stats: EquipmentStats): - self.stats = stats; diff --git a/scripts/Items/Attachment.gd b/scripts/Items/Attachment.gd new file mode 100644 index 0000000..83e6caa --- /dev/null +++ b/scripts/Items/Attachment.gd @@ -0,0 +1,16 @@ +class_name Attachment extends Node3D + + +var stats: AttachmentStats + +func init_attachment(stats: AttachmentStats): + self.stats = stats + +func get_damage()->int: + return stats.damage.value + +func get_fire_rate()->int: + return stats.fire_rate.value + +func get_hit_effects()-> Array[Effect]: + return stats.hit_effects.value diff --git a/scripts/Items/Equipment.gd b/scripts/Items/Equipment.gd new file mode 100644 index 0000000..dc54e33 --- /dev/null +++ b/scripts/Items/Equipment.gd @@ -0,0 +1,22 @@ +class_name Equipment extends Node3D + + +var stats: EquipmentStats + +func init_equipment(stats: EquipmentStats): + self.stats = stats; + +func get_armor()-> int: + return stats.armor.value + +func get_max_health()-> int: + return stats.max_health.value + +func get_max_shield()-> int: + return stats.max_shield.value + +func get_evement_speed()-> int: + return stats.movementSpeed.value + +func get_damage()-> int: + return stats.damage.value diff --git a/scripts/Items/Mech/Arms.gd b/scripts/Items/Mech/Arms.gd new file mode 100644 index 0000000..2cab151 --- /dev/null +++ b/scripts/Items/Mech/Arms.gd @@ -0,0 +1 @@ +class_name Arms extends Equipment diff --git a/scripts/Items/Mech/Boots.gd b/scripts/Items/Mech/Boots.gd new file mode 100644 index 0000000..85d4874 --- /dev/null +++ b/scripts/Items/Mech/Boots.gd @@ -0,0 +1 @@ +class_name Boots extends Equipment diff --git a/scripts/Items/Mech/Hydraulics.gd b/scripts/Items/Mech/Hydraulics.gd new file mode 100644 index 0000000..6ddc3d8 --- /dev/null +++ b/scripts/Items/Mech/Hydraulics.gd @@ -0,0 +1 @@ +class_name Hydraulics extends Equipment diff --git a/scripts/Items/Mech/Mech.gd b/scripts/Items/Mech/Mech.gd new file mode 100644 index 0000000..120ea8e --- /dev/null +++ b/scripts/Items/Mech/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.get_max_health() +arms.get_max_health()+hydraulics.get_max_health() + +func get_armor()-> int: + return boots.get_armor()+arms.get_armor()+hydraulics.get_armor() + +func get_max_shield()-> int: + return boots.get_max_shield()+arms.get_max_shield()+hydraulics.get_max_shield() + +func get_damage()-> int: + return boots.get_damage()+arms.get_damage()+hydraulics.get_damage() + +func get_movement_speed()-> int: + return boots.get_evement_speed()+arms.get_evement_speed()+hydraulics.get_evement_speed() diff --git a/scripts/Weapon.gd b/scripts/Items/Weapon.gd similarity index 63% rename from scripts/Weapon.gd rename to scripts/Items/Weapon.gd index 68f27ec..142c958 100644 --- a/scripts/Weapon.gd +++ b/scripts/Items/Weapon.gd @@ -15,11 +15,19 @@ func unattach(attachmentToRemove: Attachment)-> void: func get_damage()->int: var damage = stats.damage for attachment in attachments: - damage += attachment.stats.damage + damage += attachment.get_damage() return damage func get_fire_rate()->int: var fire_rate = stats.fire_rate for attachment in attachments: - fire_rate += attachment.stats.fire_rate + fire_rate += attachment.get_fire_rate() return fire_rate + +func get_hit_effects()-> Array[Effect]: + var hit_effects = [] + hit_effects.append_array(stats.hit_effects.value) + for attachment in attachments: + hit_effects.append_array(attachment.get_hit_effects()) + return hit_effects + diff --git a/scripts/Mech.gd b/scripts/Mech.gd deleted file mode 100644 index 0df29ca..0000000 --- a/scripts/Mech.gd +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index 21b0ef6..0000000 --- a/scripts/PlayerCharacter.gd +++ /dev/null @@ -1,32 +0,0 @@ -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/resources/Effects/Effect.gd b/scripts/resources/Effects/Effect.gd index 6864411..e20dcdc 100644 --- a/scripts/resources/Effects/Effect.gd +++ b/scripts/resources/Effects/Effect.gd @@ -2,5 +2,5 @@ extends Resource class_name Effect -func apply_effect (character: Character)-> void: +func apply_effect (orign_entity: Entity, target_entity: Entity)-> void: assert(false) diff --git a/scripts/resources/Effects/HealEffect.gd b/scripts/resources/Effects/HealEffect.gd new file mode 100644 index 0000000..9a895fe --- /dev/null +++ b/scripts/resources/Effects/HealEffect.gd @@ -0,0 +1,6 @@ +class_name HealEffect extends Effect + +@export var heal_amount: int + +func apply_effect (orign_entity: Entity, target_entity: Entity)-> void: + target_entity.increase_health(heal_amount) diff --git a/scripts/resources/Effects/RefillHpEffect.gd b/scripts/resources/Effects/RefillHpEffect.gd deleted file mode 100644 index 91eb748..0000000 --- a/scripts/resources/Effects/RefillHpEffect.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends Effect - -func apply_effect (character: Character)-> void: - character.stats.health.value = character.stats.max_health.value diff --git a/scripts/resources/Entity/EntityResource.gd b/scripts/resources/Entity/EntityResource.gd index 022cdf7..f6bedde 100644 --- a/scripts/resources/Entity/EntityResource.gd +++ b/scripts/resources/Entity/EntityResource.gd @@ -2,7 +2,7 @@ extends Resource class_name EntityResource -@export var entity_stats: entityStats +@export var entity_stats: EntityStats @export var entity_scene: PackedScene diff --git a/scripts/resources/Entity/EntityStats.gd b/scripts/resources/Entity/EntityStats.gd index 819d07e..7702801 100644 --- a/scripts/resources/Entity/EntityStats.gd +++ b/scripts/resources/Entity/EntityStats.gd @@ -2,8 +2,9 @@ extends Resource class_name EntityStats -@export var max_health: MaxHealth -@export var health: Health -@export var armor: Armor -@export var shield: Shield -@export var movementSpeed: MovementSpeed +@export var max_health: MaxHealthStat +@export var health: HealthStat +@export var armor: ArmorStat +@export var shield: ShieldStat +@export var max_shield: MaxShieldStat +@export var movementSpeed: MovementSpeedStat diff --git a/scripts/resources/Equipment/EquipmentStats.gd b/scripts/resources/Equipment/EquipmentStats.gd index a65b670..f3f0d8a 100644 --- a/scripts/resources/Equipment/EquipmentStats.gd +++ b/scripts/resources/Equipment/EquipmentStats.gd @@ -2,8 +2,8 @@ extends Resource class_name EquipmentStats -@export var max_health: MaxHealth -@export var armor: Armor -@export var shield: Shield -@export var movementSpeed: MovementSpeed -@export var damage: Damage +@export var max_health: MaxHealthStat +@export var armor: ArmorStat +@export var max_shield: MaxShieldStat +@export var movementSpeed: MovementSpeedStat +@export var damage: DamageStat diff --git a/scripts/resources/Equipment/MechParts/Arms.gd b/scripts/resources/Equipment/MechParts/ArmsResource.gd similarity index 52% rename from scripts/resources/Equipment/MechParts/Arms.gd rename to scripts/resources/Equipment/MechParts/ArmsResource.gd index 1010283..596f127 100644 --- a/scripts/resources/Equipment/MechParts/Arms.gd +++ b/scripts/resources/Equipment/MechParts/ArmsResource.gd @@ -1,3 +1,3 @@ extends MechPartResource -class_name Arms +class_name ArmsResource diff --git a/scripts/resources/Equipment/MechParts/Boots.gd b/scripts/resources/Equipment/MechParts/BootsResource.gd similarity index 50% rename from scripts/resources/Equipment/MechParts/Boots.gd rename to scripts/resources/Equipment/MechParts/BootsResource.gd index 1c0b007..3d7ec04 100644 --- a/scripts/resources/Equipment/MechParts/Boots.gd +++ b/scripts/resources/Equipment/MechParts/BootsResource.gd @@ -1,3 +1,3 @@ extends MechPartResource -class_name Boots +class_name BootsResource diff --git a/scripts/resources/Equipment/MechParts/Hydraulics.gd b/scripts/resources/Equipment/MechParts/Hydraulics.gd deleted file mode 100644 index a29158c..0000000 --- a/scripts/resources/Equipment/MechParts/Hydraulics.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends MechPartResource - -class_name Hydraulics diff --git a/scripts/resources/Equipment/MechParts/HydraulicsResource.gd b/scripts/resources/Equipment/MechParts/HydraulicsResource.gd new file mode 100644 index 0000000..10d9618 --- /dev/null +++ b/scripts/resources/Equipment/MechParts/HydraulicsResource.gd @@ -0,0 +1,3 @@ +extends MechPartResource + +class_name HydraulicsResource diff --git a/scripts/resources/Stats/Armor.gd b/scripts/resources/Stats/ArmorStat.gd similarity index 90% rename from scripts/resources/Stats/Armor.gd rename to scripts/resources/Stats/ArmorStat.gd index 13ee0d2..be4a43a 100644 --- a/scripts/resources/Stats/Armor.gd +++ b/scripts/resources/Stats/ArmorStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name Armor +class_name ArmorStat signal value_changed_signal(currentArmor: int) diff --git a/scripts/resources/Stats/Damage.gd b/scripts/resources/Stats/DamageStat.gd similarity index 90% rename from scripts/resources/Stats/Damage.gd rename to scripts/resources/Stats/DamageStat.gd index f4fcf10..387510d 100644 --- a/scripts/resources/Stats/Damage.gd +++ b/scripts/resources/Stats/DamageStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name Damage +class_name DamageStat signal value_changed_signal(currentDamage: int) diff --git a/scripts/resources/Stats/Effects/HitEffectsStat.gd b/scripts/resources/Stats/Effects/HitEffectsStat.gd new file mode 100644 index 0000000..0ddec00 --- /dev/null +++ b/scripts/resources/Stats/Effects/HitEffectsStat.gd @@ -0,0 +1,13 @@ +extends Resource + +class_name HitEffectStat + +signal value_changed_signal(effects: Array[Effect]) + +@export var _value: Array[Effect] +var value: Array[Effect]: + get: + return _value + set(new_value): + value = new_value; + value_changed_signal.emit(_value) diff --git a/scripts/resources/Stats/FireRate.gd b/scripts/resources/Stats/FireRateStat.gd similarity index 89% rename from scripts/resources/Stats/FireRate.gd rename to scripts/resources/Stats/FireRateStat.gd index 89ff0c3..e5b11b0 100644 --- a/scripts/resources/Stats/FireRate.gd +++ b/scripts/resources/Stats/FireRateStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name FireRate +class_name FireRateStat signal value_changed_signal(currentFireRate: int) diff --git a/scripts/resources/Stats/Health.gd b/scripts/resources/Stats/HealthStat.gd similarity index 90% rename from scripts/resources/Stats/Health.gd rename to scripts/resources/Stats/HealthStat.gd index 4802849..3d7313e 100644 --- a/scripts/resources/Stats/Health.gd +++ b/scripts/resources/Stats/HealthStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name Health +class_name HealthStat signal value_changed_signal(currentHealth: int) diff --git a/scripts/resources/Stats/MaxHealth.gd b/scripts/resources/Stats/MaxHealthStat.gd similarity index 89% rename from scripts/resources/Stats/MaxHealth.gd rename to scripts/resources/Stats/MaxHealthStat.gd index 4c487c9..568e6f7 100644 --- a/scripts/resources/Stats/MaxHealth.gd +++ b/scripts/resources/Stats/MaxHealthStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name MaxHealth +class_name MaxHealthStat signal value_changed_signal(currentMaxHealth: int) diff --git a/scripts/resources/Stats/MaxShieldStat.gd b/scripts/resources/Stats/MaxShieldStat.gd new file mode 100644 index 0000000..74fc1a4 --- /dev/null +++ b/scripts/resources/Stats/MaxShieldStat.gd @@ -0,0 +1,13 @@ +extends Resource + +class_name MaxShieldStat + +signal value_changed_signal(currentMaxShield: int) + +@export var _value: int +var value: int: + get: + return _value + set(new_value): + value = new_value; + value_changed_signal.emit(_value) diff --git a/scripts/resources/Stats/MovementSpeed.gd b/scripts/resources/Stats/MovementSpeedStat.gd similarity index 87% rename from scripts/resources/Stats/MovementSpeed.gd rename to scripts/resources/Stats/MovementSpeedStat.gd index 34bedfa..9c59140 100644 --- a/scripts/resources/Stats/MovementSpeed.gd +++ b/scripts/resources/Stats/MovementSpeedStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name MovementSpeed +class_name MovementSpeedStat signal value_changed_signal(currentMovementSpeed: int) diff --git a/scripts/resources/Stats/Shield.gd b/scripts/resources/Stats/ShieldStat.gd similarity index 90% rename from scripts/resources/Stats/Shield.gd rename to scripts/resources/Stats/ShieldStat.gd index 00a0feb..dcf9a8a 100644 --- a/scripts/resources/Stats/Shield.gd +++ b/scripts/resources/Stats/ShieldStat.gd @@ -1,6 +1,6 @@ extends Resource -class_name Shield +class_name ShieldStat signal value_changed_signal(currentShield: int) diff --git a/scripts/resources/Weapons/Attachments/AttachmentStats.gd b/scripts/resources/Weapons/Attachments/AttachmentStats.gd index f038a1e..121616f 100644 --- a/scripts/resources/Weapons/Attachments/AttachmentStats.gd +++ b/scripts/resources/Weapons/Attachments/AttachmentStats.gd @@ -2,5 +2,6 @@ extends Resource class_name AttachmentStats -@export var damage: Damage -@export var fire_rate: FireRate +@export var damage: DamageStat +@export var fire_rate: FireRateStat +@export var hit_effects: HitEffectStat diff --git a/scripts/resources/Weapons/WeaponStats.gd b/scripts/resources/Weapons/WeaponStats.gd index 109409e..c7e7795 100644 --- a/scripts/resources/Weapons/WeaponStats.gd +++ b/scripts/resources/Weapons/WeaponStats.gd @@ -3,5 +3,6 @@ extends Resource class_name WeaponStats -@export var damage: Damage -@export var fire_rate: FireRate +@export var damage: DamageStat +@export var fire_rate: FireRateStat +@export var hit_effects: HitEffectStat diff --git a/singeltons/DamageHandler.gd b/singeltons/DamageHandler.gd index 4eff30e..3d9c01c 100644 --- a/singeltons/DamageHandler.gd +++ b/singeltons/DamageHandler.gd @@ -1,9 +1,20 @@ -extends Node - -class_name DamageHandler - +extends Object func apply_damage(damage_dealer: Entity, damage_receiver: Entity, weapon: Weapon ): - damage_receiver.get_armor() - damage_receiver.get - pass + var damage = weapon.get_damage() + damage_dealer.get_damage() + var armor = damage_receiver.get_armor() + var damage_percent = 90*( pow(MathUtils.e, 0.03*armor)) + + var damage_after_armor = damage * damage_percent + if damage_after_armor < 1 : + damage_after_armor = 1 + + var shield = damage_receiver.get_shield() + if shield > 0: + damage_receiver.reduce_shield(damage_after_armor) + else: + damage_receiver.reduce_health(damage_after_armor) + + for effect in weapon.get_hit_effects(): + effect.apply_effect(damage_dealer,damage_receiver) + diff --git a/singeltons/MathUtils.gd b/singeltons/MathUtils.gd new file mode 100644 index 0000000..b264afd --- /dev/null +++ b/singeltons/MathUtils.gd @@ -0,0 +1,3 @@ +extends Object + +var e = 2.718281828459045235360287471352