diff options
Diffstat (limited to 'godot/scenes/weapons/pistol.gd')
| -rw-r--r-- | godot/scenes/weapons/pistol.gd | 64 |
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 |
