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
|