1
Fork 0
mirror of https://github.com/Steffo99/pineapple-surf.git synced 2024-11-25 09:14:18 +00:00
pineapple-surf/player/onhand/PeaShooter.gd

75 lines
2 KiB
GDScript3
Raw Normal View History

2023-01-08 01:25:48 +00:00
extends BaseWeapon
class_name PeaShooter
2023-01-09 01:08:34 +00:00
const FIRE_RATE := 0.06
2023-01-08 01:25:48 +00:00
var last_fired := 0
var remaining := 10
2023-01-09 00:54:54 +00:00
@onready var raycast = $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)
2023-01-08 11:29:41 +00:00
var croptile = preload("res://island/CropTile.tscn")
2023-01-08 01:25:48 +00:00
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.
2023-01-08 12:13:09 +00:00
func _process(_delta: float) -> void:
2023-01-08 17:39:37 +00:00
super.bob_weapon(self, _delta)
2023-01-08 01:25:48 +00:00
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()
2023-01-08 15:44:18 +00:00
audio_player.play()
2023-01-08 01:25:48 +00:00
# $AnimationPlayer.seek(0)
# $AnimationPlayer.play("shoot")
2023-01-09 00:54:54 +00:00
if raycast.is_colliding():
var _normal = raycast.get_collision_normal() as Vector3
var _point = raycast.get_collision_point() as Vector3
var _object = raycast.get_collider() as Node3D
try_placing_seed()
2023-01-08 01:25:48 +00:00
# decalInstance.position = point
# object.add_child(decalInstance)
else:
# We should show a particle fx where the seed bouced off
pass
remaining -= 1
2023-01-08 11:29:41 +00:00
2023-01-09 00:54:54 +00:00
func try_placing_seed() -> bool:
var point = raycast.get_collision_point() as Vector3
var normal = raycast.get_collision_normal() as Vector3
var coll = raycast.get_collider() as CollisionObject3D
var similarity = normal.dot(Vector3.UP)
if similarity < 0.95:
2023-01-08 11:29:41 +00:00
return false
if coll.collision_layer == 0b10000:
return false
2023-01-08 11:29:41 +00:00
var correct_point = Vector3(floor(point.x), round(point.y), floor(point.z))
2023-01-08 11:29:41 +00:00
var crop = croptile.instantiate() as CropTile
crop.position = correct_point
croptiles_container.add_child(crop)
crop.plant()
2023-01-08 11:29:41 +00:00
return true