fixed up some damage number bugs
This commit is contained in:
@@ -1,16 +1,7 @@
|
||||
class_name Affector
|
||||
extends Node
|
||||
|
||||
var damage_particle_scene: PackedScene = preload("res://Scenes/damage_particle.tscn")
|
||||
|
||||
|
||||
@warning_ignore("unused_parameter")
|
||||
func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:
|
||||
pass
|
||||
|
||||
|
||||
func spawn_damage_indicator(damage: int, pos: Vector3) -> void:
|
||||
var marker: Sprite3D = damage_particle_scene.instantiate()
|
||||
get_tree().root.add_child(marker)
|
||||
marker.set_number(damage)
|
||||
marker.position = pos
|
||||
|
||||
@@ -11,10 +11,6 @@ func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:
|
||||
#print(shapecast.get_collider(i))
|
||||
if targets.has(enemy):
|
||||
enemy.apply_effect(effect)
|
||||
if Data.preferences.display_tower_damage_indicators and effect.damage > 0:
|
||||
spawn_damage_indicator(effect.damage, enemy.d_n.global_position)
|
||||
else:
|
||||
for enemy: EnemyController in targets:
|
||||
enemy.apply_effect(effect)
|
||||
if Data.preferences.display_tower_damage_indicators and effect.damage > 0:
|
||||
spawn_damage_indicator(effect.damage, enemy.d_n.global_position)
|
||||
|
||||
@@ -5,5 +5,3 @@ extends Affector
|
||||
func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:
|
||||
for enemy: EnemyController in targets:
|
||||
enemy.apply_effect(effect)
|
||||
if Data.preferences.display_tower_damage_indicators and effect.damage > 0:
|
||||
spawn_damage_indicator(effect.damage, enemy.d_n.global_position)
|
||||
|
||||
@@ -9,6 +9,8 @@ var next_node: FlowNode :
|
||||
return next_node
|
||||
set(value):
|
||||
next_node = value
|
||||
if next_node == null:
|
||||
return
|
||||
var found_point: bool = false
|
||||
while !found_point:
|
||||
#TODO: make deterministic random
|
||||
@@ -44,9 +46,11 @@ func walk(delta: float) -> void:
|
||||
var distance_travelled: float = (speed * clampf(speed, 0.0, 1.0)) * delta
|
||||
distance_remaining -= distance_travelled
|
||||
character.global_position = character.global_position.move_toward(next_pos, distance_travelled)
|
||||
character.look_at(next_pos)
|
||||
if character.global_position.distance_to(next_pos) <= 0.05:
|
||||
var distance_to_next_pos: float = character.global_position.distance_to(next_pos)
|
||||
if distance_to_next_pos <= 0.05:
|
||||
next_node = next_node.best_path
|
||||
else:
|
||||
character.look_at(next_pos)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
|
||||
@@ -35,15 +35,15 @@ func explode() -> void:
|
||||
|
||||
func hit(target: CharacterBody3D) -> void:
|
||||
target.apply_effect(effect)
|
||||
if owner_id == 0:
|
||||
if Data.preferences.display_tower_damage_indicators:
|
||||
spawn_damage_indicator(target.d_n.global_position)
|
||||
if owner_id == multiplayer.get_unique_id():
|
||||
if Data.preferences.display_self_damage_indicators:
|
||||
spawn_damage_indicator(target.d_n.global_position)
|
||||
if owner_id != 0 and owner_id != multiplayer.get_unique_id():
|
||||
if Data.preferences.display_party_damage_indicators:
|
||||
spawn_damage_indicator(target.d_n.global_position)
|
||||
#if owner_id == 0:
|
||||
#if Data.preferences.display_tower_damage_indicators:
|
||||
#spawn_damage_indicator(target.d_n.global_position)
|
||||
#if owner_id == multiplayer.get_unique_id():
|
||||
#if Data.preferences.display_self_damage_indicators:
|
||||
#spawn_damage_indicator(target.d_n.global_position)
|
||||
#if owner_id != 0 and owner_id != multiplayer.get_unique_id():
|
||||
#if Data.preferences.display_party_damage_indicators:
|
||||
#spawn_damage_indicator(target.d_n.global_position)
|
||||
|
||||
|
||||
@rpc("reliable")
|
||||
|
||||
@@ -3,9 +3,8 @@ extends RigidBody3D
|
||||
|
||||
@export var collision_shape: CollisionShape3D
|
||||
|
||||
var damage_particle_scene: PackedScene = preload("res://Scenes/damage_particle.tscn")
|
||||
var owner_id: int = 0 #should be left unchanged by towers, 1 for host, peer_id on peers
|
||||
var direction: Vector3= Vector3.FORWARD
|
||||
var direction: Vector3 = Vector3.FORWARD
|
||||
var force: float = 2.0
|
||||
var damage: float = 0.0
|
||||
var lifetime: float = 10.0
|
||||
@@ -21,14 +20,6 @@ func _process(delta: float) -> void:
|
||||
time_alive += delta
|
||||
|
||||
|
||||
func spawn_damage_indicator(pos: Vector3) -> void:
|
||||
if effect.damage > 0:
|
||||
var marker: Node3D = damage_particle_scene.instantiate()
|
||||
get_tree().root.add_child(marker)
|
||||
marker.set_number(effect.damage)
|
||||
marker.position = pos
|
||||
|
||||
|
||||
func _on_body_entered(_body: Node) -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
@@ -3,4 +3,4 @@ extends StatusEffect
|
||||
|
||||
|
||||
func proc(affected: EnemyController, stacks: int, _existing_effects: Dictionary) -> void:
|
||||
affected.health.take_damage(int(stats.potency * stacks))
|
||||
affected.take_damage(int(stats.potency * stacks), Data.DamageIndicationType.STATUS)
|
||||
|
||||
@@ -19,23 +19,17 @@ func shoot() -> void:
|
||||
super.shoot()
|
||||
if raycast.is_colliding():
|
||||
var target: CharacterBody3D = raycast.get_collider()
|
||||
if target != null:
|
||||
var target_hitbox: CollisionShape3D = target.shape_owner_get_owner(raycast.get_collider_shape())
|
||||
if target_hitbox is Hitbox:
|
||||
hit(target, target_hitbox)
|
||||
if Data.preferences.display_self_damage_indicators:
|
||||
spawn_damage_indicator(raycast.get_collision_point())
|
||||
networked_hit.rpc(get_tree().root.get_path_to(target), get_tree().root.get_path_to(target_hitbox))
|
||||
if target != null and target is EnemyController:
|
||||
var hitbox: Hitbox = target.shape_owner_get_owner(raycast.get_collider_shape())
|
||||
hit(hitbox, raycast.get_collision_point())
|
||||
networked_hit.rpc(get_tree().root.get_path_to(hitbox), raycast.get_collision_point())
|
||||
|
||||
|
||||
func hit(_target: CharacterBody3D, target_hitbox: Hitbox) -> void:
|
||||
target_hitbox.damage(damage)
|
||||
func hit(hitbox: Hitbox, hit_pos: Vector3) -> void:
|
||||
hitbox.damage(damage, Data.DamageIndicationType.PLAYER, hit_pos)
|
||||
|
||||
|
||||
@rpc("reliable")
|
||||
func networked_hit(target_path: String, target_hitbox_path: String) -> void:
|
||||
var target: CharacterBody3D = get_tree().root.get_node(target_path)
|
||||
var target_hitbox: Hitbox = get_tree().root.get_node(target_hitbox_path) as Hitbox
|
||||
hit(target, target_hitbox)
|
||||
if Data.preferences.display_party_damage_indicators:
|
||||
spawn_damage_indicator(target.d_n.global_position)
|
||||
func networked_hit(hitbox_path: String, hit_pos: Vector3) -> void:
|
||||
var hitbox: Hitbox = get_tree().root.get_node(hitbox_path) as Hitbox
|
||||
hitbox.damage(damage, Data.DamageIndicationType.OTHER_PLAYER, hit_pos)
|
||||
|
||||
@@ -30,8 +30,6 @@ func shoot() -> void:
|
||||
var target_hitbox: Hitbox = target.shape_owner_get_owner(shapecast.get_collider_shape(index))
|
||||
if target_hitbox is Hitbox:
|
||||
hit(target, target_hitbox)
|
||||
if Data.preferences.display_self_damage_indicators:
|
||||
spawn_damage_indicator(target.d_n.global_position)
|
||||
networked_hit.rpc(get_tree().root.get_path_to(target), get_tree().root.get_path_to(target_hitbox))
|
||||
|
||||
|
||||
@@ -51,5 +49,3 @@ func networked_hit(target_path: String, target_hitbox_path: String) -> void:
|
||||
var target: CharacterBody3D = get_tree().root.get_node(target_path) as CharacterBody3D
|
||||
var target_hitbox: Hitbox = get_tree().root.get_node(target_hitbox_path) as Hitbox
|
||||
hit(target, target_hitbox)
|
||||
if Data.preferences.display_party_damage_indicators:
|
||||
spawn_damage_indicator(target.d_n.global_position)
|
||||
|
||||
@@ -4,9 +4,9 @@ extends HitscanWeapon
|
||||
@export var status_stats: StatusStats
|
||||
|
||||
|
||||
func hit(target: CharacterBody3D, target_hitbox: Hitbox) -> void:
|
||||
super.hit(target, target_hitbox)
|
||||
target.status_manager.add_effect(build_status_object())
|
||||
func hit(hitbox: Hitbox, hit_pos: Vector3) -> void:
|
||||
super.hit(hitbox, hit_pos)
|
||||
hitbox.add_effect(build_status_object())
|
||||
|
||||
|
||||
func build_status_object() -> StatusEffect:
|
||||
|
||||
@@ -9,7 +9,6 @@ signal energy_recharged(energy: int, type: Data.EnergyType)
|
||||
@export var audio_player: AudioStreamPlayer3D
|
||||
@export var recharge_timer: Timer
|
||||
|
||||
var damage_particle_scene: PackedScene = preload("res://Scenes/damage_particle.tscn")
|
||||
var hero: Hero
|
||||
var trigger_held: bool = false
|
||||
var second_trigger_held: bool = false
|
||||
@@ -86,14 +85,6 @@ func release_second_trigger() -> void:
|
||||
second_trigger_held = false
|
||||
|
||||
|
||||
func spawn_damage_indicator(pos: Vector3) -> void:
|
||||
if damage > 0:
|
||||
var marker: Node3D = damage_particle_scene.instantiate()
|
||||
get_tree().root.add_child(marker)
|
||||
marker.set_number(damage)
|
||||
marker.position = pos
|
||||
|
||||
|
||||
func shoot() -> void:
|
||||
animator.play("shoot")
|
||||
audio_player.play()
|
||||
|
||||
@@ -6,6 +6,7 @@ var time_alive: float = 0.0
|
||||
var movement_speed: float = 1.0
|
||||
var movement_vector: Vector3
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var theta: float = deg_to_rad(40)
|
||||
var z: float = randf_range(cos(theta), 1)
|
||||
@@ -13,10 +14,15 @@ func _ready() -> void:
|
||||
var vector: Vector3 = Vector3(sqrt(1 - pow(z, 2)) * cos(phi), z, sqrt(1 - pow(z, 2)) * sin(phi))
|
||||
movement_vector = vector.normalized()
|
||||
|
||||
|
||||
func set_number(num: int) -> void:
|
||||
label.text = str(num)
|
||||
|
||||
|
||||
func set_color(color: Color) -> void:
|
||||
label.modulate = color
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
time_alive += delta
|
||||
position += movement_vector * movement_speed * delta
|
||||
|
||||
@@ -12,6 +12,7 @@ var save_data: SaveData
|
||||
var keymap_data: KeymapData
|
||||
|
||||
const DEFAULT_SERVER_PORT: int = 58008
|
||||
enum DamageIndicationType {PLAYER = 0, TOWER = 1, OTHER_PLAYER = 2, STATUS = 3}
|
||||
enum EnergyType {UNDEFINED = 0, DISCRETE = 1, CONTINUOUS = 2}
|
||||
enum TargetType {UNDEFINED = 0, LAND = 1, AIR = 2, BOTH = 3}
|
||||
enum EnemyType {UNDEFINED = 0, LAND = 1, AIR = 2}
|
||||
|
||||
@@ -173,6 +173,7 @@ func spawn_enemy_wave() -> void:
|
||||
level.flow_field.calculate()
|
||||
for spawn: EnemySpawner in level.enemy_spawns:
|
||||
#spawn.path.disable_visualization()
|
||||
spawn.visible = false
|
||||
spawn.spawn_wave()
|
||||
wave_started.emit(wave)
|
||||
|
||||
@@ -247,7 +248,7 @@ func end_wave() -> void:
|
||||
connected_players_nodes[peer_id].currency += ceili(pot / connected_players_nodes.size())
|
||||
connected_players_nodes[peer_id].unready_self()
|
||||
for spawn: EnemySpawner in level.enemy_spawns:
|
||||
spawn.path.enable_visualization()
|
||||
spawn.visible = true
|
||||
#level.a_star_graph_3d.enable_non_path_tower_frames()
|
||||
level.enable_non_path_tower_frames()
|
||||
if is_multiplayer_authority():
|
||||
|
||||
@@ -4,7 +4,6 @@ extends Node
|
||||
signal health_depleted
|
||||
signal health_changed(health: int)
|
||||
|
||||
@export var damage_particle_scene: PackedScene
|
||||
@export var max_health: int = 10
|
||||
|
||||
var current_health: int
|
||||
|
||||
@@ -3,8 +3,13 @@ extends CollisionShape3D
|
||||
|
||||
@export var critical_zone: bool = false
|
||||
|
||||
signal took_damage(amount: int)
|
||||
signal took_damage(amount: int, damage_type: Data.DamageIndicationType, pos: Vector3)
|
||||
signal recieved_effect(effect: StatusEffect)
|
||||
|
||||
|
||||
func damage(amount: int) -> void:
|
||||
took_damage.emit(amount * 1.5 if critical_zone else amount)
|
||||
func damage(amount: int, damage_type: Data.DamageIndicationType = Data.DamageIndicationType.PLAYER, pos: Vector3 = global_position) -> void:
|
||||
took_damage.emit(roundi(amount * 1.5) if critical_zone else amount, damage_type, pos)
|
||||
|
||||
|
||||
func apply_effect(effect: StatusEffect) -> void:
|
||||
recieved_effect.emit(effect)
|
||||
|
||||
Reference in New Issue
Block a user