added so you can choose race when starting the game.
This commit is contained in:
@@ -3,16 +3,16 @@ extends Node2D
|
||||
# Sword Slash - Swings around player and deals damage
|
||||
|
||||
@export var damage: float = 20.0
|
||||
@export var swing_speed: float = 720.0 # Degrees per second
|
||||
@export var swing_radius: float = 40.0 # Distance from player center (closer swing)
|
||||
@export var lifetime: float = 0.3 # How long the slash lasts
|
||||
@export var swing_speed: float = 720.0 # Degrees per second
|
||||
@export var swing_radius: float = 40.0 # Distance from player center (closer swing)
|
||||
@export var lifetime: float = 0.3 # How long the slash lasts
|
||||
|
||||
var swing_angle: float = 0.0 # Current angle
|
||||
var swing_start_angle: float = 0.0 # Starting angle
|
||||
var swing_arc: float = 180.0 # Total arc to swing (180 degrees)
|
||||
var swing_angle: float = 0.0 # Current angle
|
||||
var swing_start_angle: float = 0.0 # Starting angle
|
||||
var swing_arc: float = 180.0 # Total arc to swing (180 degrees)
|
||||
var elapsed_time: float = 0.0
|
||||
var player_owner: Node = null
|
||||
var hit_targets = {} # Track what we've already hit (Dictionary for O(1) lookup)
|
||||
var hit_targets = {} # Track what we've already hit (Dictionary for O(1) lookup)
|
||||
|
||||
@onready var sprite = $Sprite2D
|
||||
@onready var hit_area = $Area2D
|
||||
@@ -29,7 +29,7 @@ func setup(start_angle: float, owner_player: Node, arc_direction: float = 1.0):
|
||||
swing_start_angle = start_angle
|
||||
swing_angle = start_angle
|
||||
player_owner = owner_player
|
||||
swing_arc = 180.0 * arc_direction # Positive or negative arc
|
||||
swing_arc = 180.0 * arc_direction # Positive or negative arc
|
||||
rotation = deg_to_rad(swing_start_angle)
|
||||
|
||||
func _physics_process(delta):
|
||||
@@ -64,13 +64,24 @@ func _on_body_entered(body):
|
||||
# Add to hit_targets IMMEDIATELY to prevent multiple hits (mark as hit before processing)
|
||||
hit_targets[body] = true
|
||||
|
||||
# Deal damage to players
|
||||
# Friendly fire: only skip when owner is also a player. Enemies can hit players.
|
||||
if body.is_in_group("player") and body.has_method("take_damage"):
|
||||
body.take_damage(damage, global_position)
|
||||
print("Sword hit player: ", body.name, " for ", damage, " damage!")
|
||||
|
||||
if player_owner and player_owner.is_in_group("player"):
|
||||
return # Owner is player → pass through, no damage
|
||||
# Owner is enemy → deal damage to player
|
||||
var attacker_pos = player_owner.global_position if player_owner and is_instance_valid(player_owner) else global_position
|
||||
var player_peer_id = body.get_multiplayer_authority()
|
||||
if player_peer_id != 0:
|
||||
if multiplayer.get_unique_id() == player_peer_id:
|
||||
body.rpc_take_damage(damage, attacker_pos, false, false)
|
||||
else:
|
||||
body.rpc_take_damage.rpc_id(player_peer_id, damage, attacker_pos, false, false)
|
||||
else:
|
||||
body.rpc_take_damage.rpc(damage, attacker_pos, false, false)
|
||||
return
|
||||
|
||||
# Deal damage to boxes or other damageable objects
|
||||
elif "health" in body:
|
||||
if "health" in body:
|
||||
# Boxes have health property
|
||||
body.health -= damage
|
||||
if body.health <= 0 and body.has_method("_break_into_pieces"):
|
||||
|
||||
Reference in New Issue
Block a user