diff --git a/server/entities/characters/player.gd b/server/entities/characters/player.gd index cb9a8fb615801e17a816012732f159e3ccf0413f..5991e6c1aed0888bd5f1e33cb8ec87f59d387dd1 100644 --- a/server/entities/characters/player.gd +++ b/server/entities/characters/player.gd @@ -50,29 +50,33 @@ var idleTime:float = 0 # Stun when hitted + prevent spam # Primary attack parameters onready var primaryHitArea:Area = $primaryHitArea -var primaryAttackDmg:int = 30 +var primaryAttackDmg:float = 15.0 var primaryAttackDist:float = 1.2 var primaryAttackDuration:float = 0.4 +var primaryAttackDirection:Vector3 = Vector3(3,1,0) +var primaryAttackStrength:float = 1.5 # Secondary attack parameters onready var secondaryHitArea:Area = $secondaryHitArea -var secondaryAttackDmg:int = 15 +var secondaryAttackDmg:float = 5.0 var secondaryAttackDist:float = 1.2 var secondaryAttackDuration:float = 0.2 +var secondaryAttackDirection:Vector3 = Vector3(1,5,0) +var secondaryAttackStrength:float = 0.8 # Health points related values -var hp:int = 0 +var hp:float = 0.0 ######## FUNCTIONS ######## # called by the engine -func _physics_process(delta): +func _physics_process(delta:float): processMovement(delta) broadcastMovement() # Called from the game script to update the vars -func getPlayerInputs(movementInput, jumpInput, jumpId, sprintInput, attackTypeInput): +func getPlayerInputs(movementInput:int, jumpInput:bool, jumpId:int, sprintInput:bool, attackTypeInput:int): motion = 0 # Prevent the player from moving when attacking if isAttacking: @@ -94,7 +98,7 @@ func getPlayerInputs(movementInput, jumpInput, jumpId, sprintInput, attackTypeIn processAttack(attackTypeInput) -func processMovement(delta): +func processMovement(delta:float): # Set the side faced by the character if motion > 0: bodyRotation = 1 @@ -162,7 +166,7 @@ func broadcastMovement(): # Check and trigger the type of attack requested -func processAttack(attackType): +func processAttack(attackType:int): # Turn off the other attacks input for the time being isAttacking = true @@ -207,9 +211,9 @@ func secondaryAttack(): # Called when detected by an attack's hitbox -func hurt(damages:int, sourceId:int, force:Vector3): +func hurt(damages:int, sourceId:int, direction:Vector3, strength:float): hp += damages - vel += Vector3(force.x*hp/2,force.y,force.z) + vel += strength*hp*direction lastStrikerId = sourceId rpc_unreliable_id(ownId, "hurt", hp) @@ -221,20 +225,22 @@ func die(): ######## SIGNALS ######## # Primary hit has landed on something -func _on_primaryHitArea_body_entered(body): - var force = Vector3(bodyRotation, 8, 0) +func _on_primaryHitArea_body_entered(body:Node): + var direction:Vector3 = primaryAttackDirection.normalized() + direction.x*=bodyRotation if int(body.name)==ownId: return print("body named " + body.name + " hit: primary") - body.hurt(primaryAttackDmg, ownId, force) + body.hurt(primaryAttackDmg, ownId, direction, primaryAttackStrength) # Secondary hit has landed on something -func _on_secondaryHitArea_body_entered(body): - var force = Vector3(bodyRotation, 0, 0) +func _on_secondaryHitArea_body_entered(body:Node): + var direction:Vector3 = secondaryAttackDirection.normalized() + direction.x*=bodyRotation if int(body.name)==ownId: return print("body named " + body.name + " hit: secondary") - body.hurt(secondaryAttackDmg, ownId, force) + body.hurt(secondaryAttackDmg, ownId, direction, secondaryAttackStrength)