summaryrefslogtreecommitdiff
path: root/godot/scenes/weapons/pistol.gd
blob: 6792b33bd0225e75e7822f033987b94f02d895ae (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
extends Resource

var player_owner: RigidBody = null
const bullet_damage: int = 35
var can_fire: bool = true
var pistol_scene: Spatial = null
var reloading: bool = false

const name: String = "PISTOL"
const trfrm = Transform(Vector3(-0.476,2.762,-0.515), Vector3(-1.095,0.299,2.614), Vector3(2.588,0.634,1.011),Vector3(-0.232,0.644,0.006))

func _init():
	pistol_scene = preload("res://scenes/weapons/pistol.tscn").instance()
	pistol_scene.set_visible(false)

func init(owner):
	player_owner = owner
	player_owner.add_weapon_vm(pistol_scene, trfrm)

func select() -> void:
	if can_fire: pistol_scene.get_node("AnimationPlayer").play("idle")
	player_owner.rpc("anim_event", {"VMANIMPLAY" : "pistol_idle_vm"})
	pistol_scene.set_visible(true)

func deselect() -> bool:
	if reloading:
		return false
	pistol_scene.set_visible(false)
	return true

func reload() -> void:
	if can_fire or reloading:
		return
	reloading = true
	player_owner.rpc("anim_event", {"VMANIMPLAY" : "pistol_reload_vm"})
	pistol_scene.get_node("PistolReload").play()
	yield(player_owner.get_tree().create_timer(2.7), "timeout")
	pistol_scene.get_node("AnimationPlayer").play("reset")
	can_fire = true
	reloading = false

func attack1():
	if !can_fire:
		return
	can_fire = false

	pistol_scene.get_node("AnimationPlayer").play("fire")
	player_owner.rpc("anim_event", {"VMANIMPLAY" : "pistol_fire_vm"})
	yield(player_owner.get_tree().create_timer(0.05), "timeout")
	player_owner.gun_ray.force_raycast_update()
	if player_owner.gun_ray.is_colliding():
		var hit = player_owner.gun_ray.get_collider()
		if hit.has_method("damage"):
			hit.rpc("damage", bullet_damage, {"type":"PIERCE", "attacker_net_id" : player_owner.get_network_master(), "attacker_name": player_owner.name, "weapon_name" : " pistol"})
		else:
			var puff = preload("res://particles/DirtPuff.tscn").instance()
			player_owner.world.add_child(puff)
			puff.global_transform.origin = player_owner.gun_ray.get_collision_point()
			puff.look_at(player_owner.gun_ray.get_collision_point() + player_owner.gun_ray.get_collision_normal(), Vector3.UP)
		if hit.has_method("net_apply_impulse"):
			hit.rpc("net_apply_impulse", -150*player_owner.melee_ray.global_transform.basis.z)

func mouse_input(_m1: float, _m3: float, _m2: float) -> void:
	pass