From 5d227713979bad7c5fb90f8c08f5a56735a981f8 Mon Sep 17 00:00:00 2001
From: Canopteks <thomas.duhamel@protonmail.com>
Date: Fri, 6 Mar 2020 22:58:44 +0100
Subject: [PATCH] clean and smooth throws

---
 server/entities/characters/player.gd | 36 ++++++++++++++++------------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/server/entities/characters/player.gd b/server/entities/characters/player.gd
index cb9a8fb..5991e6c 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)
-- 
GitLab