summaryrefslogtreecommitdiff
path: root/godot/scenes/weapons/pistol.gd
diff options
context:
space:
mode:
authorAnson Bridges <bridges.anson@gmail.com>2022-09-25 06:39:12 -0400
committerAnson Bridges <bridges.anson@gmail.com>2022-09-25 06:39:12 -0400
commit7a1d857de96174dfa5a0fa40f8c14acbd2f651c2 (patch)
treed52acaa4e89b0f8375326ea1aefd0105bb91cfc7 /godot/scenes/weapons/pistol.gd
parent62039380a67b6da396d1c8d745d2e2625ba988fc (diff)
weapons, viewmodels, some performance fixes
Diffstat (limited to 'godot/scenes/weapons/pistol.gd')
-rw-r--r--godot/scenes/weapons/pistol.gd64
1 files changed, 64 insertions, 0 deletions
diff --git a/godot/scenes/weapons/pistol.gd b/godot/scenes/weapons/pistol.gd
new file mode 100644
index 0000000..219696b
--- /dev/null
+++ b/godot/scenes/weapons/pistol.gd
@@ -0,0 +1,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, "PIERCE", [player_owner.get_network_master(), player_owner.name], "using a 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