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()