damage slow down

This commit is contained in:
Rendo 2025-12-11 22:07:53 +05:00
commit 96f92757b5
9 changed files with 47 additions and 18 deletions

View file

@ -217,3 +217,4 @@ script = ExtResource("3_qy2xc")
[connection signal="value_changed" from="Lobby/HBoxContainer/HostMenu/BuyTime/BuyTimeBox" to="Lobby/HBoxContainer/HostMenu" method="_on_buy_time_box_value_changed"] [connection signal="value_changed" from="Lobby/HBoxContainer/HostMenu/BuyTime/BuyTimeBox" to="Lobby/HBoxContainer/HostMenu" method="_on_buy_time_box_value_changed"]
[connection signal="value_changed" from="Lobby/HBoxContainer/HostMenu/RoundAmount/RoundBox" to="Lobby/HBoxContainer/HostMenu" method="_on_round_box_value_changed"] [connection signal="value_changed" from="Lobby/HBoxContainer/HostMenu/RoundAmount/RoundBox" to="Lobby/HBoxContainer/HostMenu" method="_on_round_box_value_changed"]
[connection signal="value_changed" from="Lobby/HBoxContainer/HostMenu/TeamSwitchAmount/TeamSwitchBox" to="Lobby/HBoxContainer/HostMenu" method="_on_team_switch_box_value_changed"] [connection signal="value_changed" from="Lobby/HBoxContainer/HostMenu/TeamSwitchAmount/TeamSwitchBox" to="Lobby/HBoxContainer/HostMenu" method="_on_team_switch_box_value_changed"]
[connection signal="update_ip" from="Lobby/HBoxContainer/HostMenu/ForwardPortButton" to="Lobby/HBoxContainer/HostMenu/PublicIP" method="on_update_ip"]

View file

@ -1,8 +1,4 @@
extends Label extends Label
func _ready() -> void:
Lobby.update_ip.connect(on_update_ip)
func on_update_ip(to: StringName): func on_update_ip(to: StringName):
text = to text = to

View file

@ -9,8 +9,6 @@ signal lobby_joined
signal lobby_closed signal lobby_closed
signal update_teams_state signal update_teams_state
signal update_ip(StringName)
var in_lobby: bool = false var in_lobby: bool = false
var attack_team: Array[int] = [] var attack_team: Array[int] = []

View file

@ -1,5 +1,6 @@
extends Button extends Button
signal update_ip(StringName)
func _pressed() -> void: func _pressed() -> void:
var upnp = UPNP.new() var upnp = UPNP.new()
@ -7,18 +8,18 @@ func _pressed() -> void:
var discover_error = upnp.discover() var discover_error = upnp.discover()
if discover_error != UPNP.UPNPResult.UPNP_RESULT_SUCCESS: if discover_error != UPNP.UPNPResult.UPNP_RESULT_SUCCESS:
Lobby.update_ip.emit("Discover error: " + str(discover_error as UPNP.UPNPResult)) update_ip.emit("Discover error: " + str(discover_error as UPNP.UPNPResult))
return return
var error_udp = upnp.add_port_mapping(Lobby.PORT) var error_udp = upnp.add_port_mapping(Lobby.PORT)
if error_udp != UPNP.UPNPResult.UPNP_RESULT_SUCCESS: if error_udp != UPNP.UPNPResult.UPNP_RESULT_SUCCESS:
Lobby.update_ip.emit("UDP forward error: " + str(error_udp as UPNP.UPNPResult)) update_ip.emit("UDP forward error: " + str(error_udp as UPNP.UPNPResult))
return return
var error_tcp = upnp.add_port_mapping(Lobby.PORT,0,"","TCP") var error_tcp = upnp.add_port_mapping(Lobby.PORT,0,"","TCP")
if error_tcp != UPNP.UPNPResult.UPNP_RESULT_SUCCESS: if error_tcp != UPNP.UPNPResult.UPNP_RESULT_SUCCESS:
Lobby.update_ip.emit("TCP forward error: " + str(error_tcp as UPNP.UPNPResult)) update_ip.emit("TCP forward error: " + str(error_tcp as UPNP.UPNPResult))
return return
Lobby.update_ip.emit(upnp.query_external_address()) Lobby.update_ip.emit(upnp.query_external_address())

View file

@ -333,16 +333,21 @@ func shoot(id:int , limb_damage: int, torso_damage: int,head_damage: int, distan
var hit_player: Player = collision["collider"] var hit_player: Player = collision["collider"]
var shape_object: CollisionShape3D = hit_player.shape_owner_get_owner(collision["shape"]) var shape_object: CollisionShape3D = hit_player.shape_owner_get_owner(collision["shape"])
var reduction: float = 0 var reduction: float = 0
var damage: int = 0
match shape_object.get_groups()[0]:
"Head":
damage = head_damage
"Limb":
damage = limb_damage
_:
damage = torso_damage
if damage_reduction_curve != null: if damage_reduction_curve != null:
var distance_to_hit = (player_camera.global_position - collision["position"]).length()/distance var distance_to_hit = (player_camera.global_position - collision["position"]).length()/distance
reduction = damage_reduction_curve.sample(distance_to_hit) reduction = damage_reduction_curve.sample(distance_to_hit)
match shape_object.get_groups()[0]:
"Head": hit_player.take_damage(int(float(damage) * reduction))
hit_player.take_damage(head_damage*reduction)
"Limb":
hit_player.take_damage(limb_damage*reduction)
_:
hit_player.take_damage(torso_damage*reduction)

View file

@ -8748,6 +8748,7 @@ script = ExtResource("28_xqgvn")
player = NodePath("..") player = NodePath("..")
player_input = NodePath("../PlayerInput") player_input = NodePath("../PlayerInput")
jump_velocity = 12.0 jump_velocity = 12.0
max_speed_debuff = 75.0
[node name="WeaponSystem" type="Node" parent="." node_paths=PackedStringArray("animation_player", "camera", "player", "player_input")] [node name="WeaponSystem" type="Node" parent="." node_paths=PackedStringArray("animation_player", "camera", "player", "player_input")]
unique_name_in_owner = true unique_name_in_owner = true
@ -8802,6 +8803,7 @@ script = ExtResource("37_3lpnn")
replication_config = SubResource("SceneReplicationConfig_5amik") replication_config = SubResource("SceneReplicationConfig_5amik")
script = ExtResource("38_2cl6u") script = ExtResource("38_2cl6u")
[connection signal="damaged" from="." to="PlayerMovement" method="apply_speed_debuff"]
[connection signal="died" from="." to="molikman_ingame/PlayerBasedVisibility" method="reverse_if_own"] [connection signal="died" from="." to="molikman_ingame/PlayerBasedVisibility" method="reverse_if_own"]
[connection signal="died" from="." to="Camera3D" method="disable"] [connection signal="died" from="." to="Camera3D" method="disable"]
[connection signal="died" from="." to="Camera3D/molikman_hands/PlayerBasedVisibility" method="reverse_if_own"] [connection signal="died" from="." to="Camera3D/molikman_hands/PlayerBasedVisibility" method="reverse_if_own"]

View file

@ -13,6 +13,7 @@ class_name Player
var passived: bool = false var passived: bool = false
signal health_changed(to: int) signal health_changed(to: int)
signal damaged
signal died signal died
const MAX_HP = 100 const MAX_HP = 100
@ -58,3 +59,4 @@ func depassive() -> void:
func take_damage(damage: int): func take_damage(damage: int):
hp -= damage hp -= damage
damaged.emit()

View file

@ -2,12 +2,19 @@ extends Node
class_name PlayerMovement class_name PlayerMovement
const XZ_PLANE = Vector3.RIGHT + Vector3.BACK
@export var player: Player @export var player: Player
@export var player_input: PlayerInput @export var player_input: PlayerInput
@export var jump_velocity: float @export var jump_velocity: float
@export_range(0,100,1,"suffix:%") var max_speed_debuff: float
@export var debuff_time: float = 0.5
var disabled: bool var disabled: bool
var speed_debuff: float
var debuff_tween: Tween
func disable() -> void: func disable() -> void:
disabled = true disabled = true
@ -21,11 +28,26 @@ func process_movement(max_speed: float,acceleration: float,deceleration: float,d
var input_dir := player_input.direction var input_dir := player_input.direction
var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction: if direction:
player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta,-max_speed*abs(direction.x),max_speed*abs(direction.x)) var computed_mult : float = (1.-speed_debuff/100.)
player.velocity.z = clamp(player.velocity.z + direction.z * acceleration * delta,-max_speed*abs(direction.z),max_speed*abs(direction.z)) player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta * computed_mult,-max_speed*abs(direction.x),max_speed*abs(direction.x))
player.velocity.z = clamp(player.velocity.z + direction.z * acceleration * delta * computed_mult,-max_speed*abs(direction.z),max_speed*abs(direction.z))
else: else:
player.velocity.x = move_toward(player.velocity.x, 0, deceleration*delta) player.velocity.x = move_toward(player.velocity.x, 0, deceleration*delta)
player.velocity.z = move_toward(player.velocity.z, 0, deceleration*delta) player.velocity.z = move_toward(player.velocity.z, 0, deceleration*delta)
func jump() -> void: func jump() -> void:
player.velocity.y = jump_velocity player.velocity.y = jump_velocity
func apply_speed_debuff():
if debuff_tween:
debuff_tween.kill()
speed_debuff = max_speed_debuff
var xz_velocity: Vector3 = player.velocity * XZ_PLANE
var new_velocity = xz_velocity * (1.-max_speed_debuff/100.)
player.velocity = Vector3(new_velocity.x,player.velocity.y,new_velocity.z)
debuff_tween = create_tween().set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_SINE)
debuff_tween.tween_property(self,"speed_debuff",0,debuff_time)

View file

@ -150,6 +150,8 @@ func remote_ammo_update(ammo: int, remaining_ammo: int):
ammo_updated.emit(ammo,remaining_ammo) ammo_updated.emit(ammo,remaining_ammo)
func notify_slots_updated(): func notify_slots_updated():
if not is_multiplayer_authority():
return
var display_slots: Dictionary[StringName,StringName] = {} var display_slots: Dictionary[StringName,StringName] = {}
for key in slots.keys(): for key in slots.keys():
if slots[key] == null: if slots[key] == null: