Cow_Life_Sim_RPG/NPCs/Pigeon/pigeon.gd

113 lines
2.8 KiB
GDScript

extends NPC
class_name Pigeon
var rng = RandomNumberGenerator.new()
var walking = true
var lastposition = position
var movementTarget
var movementThreshold = 0.1
var moveSpeed:int = 140
var pauseTimer = 0
var flipTimer = 0
var pigeonSoundPlayer:AudioStreamPlayer2D
var pigeonSounds = []
var lastCooIndex = -1
func _ready():
start_walking()
initialize_pigeon_sounds()
pick_coo()
func initialize_pigeon_sounds():
pigeonSoundPlayer = $PigeonSounds
pigeonSounds.append(load("res://Sounds/SFX/Animals/DovePigeonCoo1.mp3"))
pigeonSounds.append(load("res://Sounds/SFX/Animals/DovePigeonCoo2.mp3"))
pigeonSounds.append(load("res://Sounds/SFX/Animals/DovePigeonCoo3.mp3"))
func _process(delta):
if walking:
movement(delta)
else:
pauseTimer -= delta
flipTimer -= delta
if flipTimer <= 0:
flipTimer += 0.2
if rng.randf_range(0, 16) <= 1:
$Sprite.flip_h = !$Sprite.flip_h
if pauseTimer <= 0:
start_walking()
func set_pause_timer():
#short pause
if rng.randi_range(0, 4) >= 1:
pauseTimer = rng.randf_range(0.2, 1)
else:
pauseTimer = rng.randf_range(2, 8)
func get_pats():
stop_walking()
pauseTimer = rng.randf_range(5, 8)
func stop_walking():
walking = false
$Sprite.pause()
$Sprite.set_frame(0)
set_pause_timer()
func start_walking():
walking = true
$Sprite.play()
pick_new_target_position()
# secret ABA code: handmarks. say handmarks to make sure ppl know you're anti bee
func movement(delta):
var distanceToTarget = global_position.distance_to(movementTarget)
lastposition = position
if distanceToTarget > movementThreshold:
if walking == true:
var movementVector = global_position.move_toward(movementTarget, moveSpeed*delta) - global_position
var collisions = move_and_collide(movementVector)
if collisions != null:
stop_walking()
else:
global_position = movementTarget
stop_walking()
if position > lastposition:
$Sprite.flip_h = true
if position < lastposition:
$Sprite.flip_h = false
func pick_new_target_position():
movementTarget = global_position - Vector2(rng.randf_range(-300, 300), rng.randf_range(-300, 300))
#extra chance to pick target if collision would happen quickly
var movementVector = global_position.move_toward(movementTarget, moveSpeed*0.1) - global_position
var collided = test_move(transform, movementVector)
if collided:
movementTarget = global_position - Vector2(rng.randf_range(-300, 300), rng.randf_range(-300, 300))
func get_dialogue():
return load("res://NPCs/Pigeon/Pigeon.dialogue")
func pick_coo():
var newIndex = rng.randi_range(0, pigeonSounds.size() - 1)
if newIndex == lastCooIndex:
newIndex = rng.randi_range(0, pigeonSounds.size() - 1)
pigeonSoundPlayer.stream = pigeonSounds[newIndex]
pigeonSoundPlayer.play()
lastCooIndex = newIndex
func _on_pigeon_sounds_finished():
pick_coo()