1
Fork 0
mirror of https://github.com/Steffo99/pineapple-surf.git synced 2024-11-22 15:54:20 +00:00
pineapple-surf/player/onhand/PeaShooter.gd

74 lines
1.9 KiB
GDScript

extends BaseWeapon
class_name PeaShooter
const FIRE_RATE := 0.15
var last_fired := 0
var remaining := 10
@onready var ray = $RayCast3D
@onready var audio_player: AudioStreamPlayer = $ShootSound
# FIXME: use singleton class here as well
@onready var croptiles_container: Node3D = get_tree().root.find_child("CropTiles", true, false)
var croptile = preload("res://island/CropTile.tscn")
func _init() -> void:
self.weaponSlot = WeaponSlot.ONE
self.ammoType = AmmoType.SINGLE
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
super.bob_weapon(self, _delta)
var current_time = Time.get_ticks_msec()
if Input.is_action_just_pressed("fire") and current_time > (last_fired + FIRE_RATE*1000):
if remaining > 0:
shoot()
func shoot() -> void:
last_fired = Time.get_ticks_msec()
audio_player.play()
# $AnimationPlayer.seek(0)
# $AnimationPlayer.play("shoot")
if ray.is_colliding():
var _normal = ray.get_collision_normal() as Vector3
var _point = ray.get_collision_point() as Vector3
var _object = ray.get_collider() as Node3D
try_placing_seed(ray)
# decalInstance.position = point
# object.add_child(decalInstance)
else:
# We should show a particle fx where the seed bouced off
pass
remaining -= 1
func try_placing_seed(ray: RayCast3D) -> bool:
var point = ray.get_collision_point() as Vector3
var normal = ray.get_collision_normal() as Vector3
var coll = ray.get_collider() as CollisionObject3D
var similarity = normal.dot(Vector3.UP)
if similarity < 0.95:
return false
if coll.collision_layer == 0b10000:
return false
var correct_point = Vector3(floor(point.x), round(point.y), floor(point.z))
var crop = croptile.instantiate() as CropTile
crop.position = correct_point
croptiles_container.add_child(crop)
crop.plant()
return true