summaryrefslogtreecommitdiff
path: root/godot/scenes/weapons/hands.gd
blob: aac1d5f55845e7dfda54105155859a72a26bd78a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
extends Resource

var player_owner: RigidBody = null
const fist_damage: int = 15
var can_swing: bool = true
var blocking: bool = false

const name: String = "HANDS"

func init(owner):
	player_owner = owner

func deselect() -> bool:
	if can_swing and !blocking:
		return true
	return false

func select() -> void:
	player_owner.rpc("anim_event", {"VMANIMPLAY" : "humanidle"})

func attack1():
	if !can_swing or blocking:
		return
	can_swing = false
	player_owner.rpc("anim_event", {"VMANIMPLAY" : "humanpunch"})
	yield(player_owner.get_tree().create_timer(0.45), "timeout")
	if player_owner.melee_ray.is_colliding():
		var hit = player_owner.melee_ray.get_collider()
		player_owner.rpc("play_weapon_sound", "res://sounds/punch_generic.wav")
		if hit.has_method("damage"):
			hit.rpc("damage", fist_damage, {"type" : "BLUNT", "attacker_net_id" : player_owner.get_network_master(), "attacker_name" : player_owner.name, "weapon_name": "fists"})
		if hit.has_method("net_apply_impulse"):
			hit.rpc("net_apply_impulse", -100*player_owner.melee_ray.global_transform.basis.z)
	yield(player_owner.get_tree().create_timer(0.55), "timeout")
	can_swing = true

func mouse_input(_m1: float, _m3: float, m2: float) -> void:
	if m2 > 0 and !blocking and can_swing:
		blocking = true
		player_owner.rpc("anim_event", {"VMANIMPLAY" : "raise_fists"})
	elif blocking and m2 == 0:
		blocking = false
		player_owner.rpc("anim_event", {"VMANIMPLAY" : "lower_fists"})

func can_pickup() -> bool:
	return !blocking and can_swing