Cow_Life_Sim_RPG/NPCs/Beesly/beesly.gd

110 lines
2.3 KiB
GDScript

extends NPC
var rng = RandomNumberGenerator.new()
var moveSpeed = 140
var moveSpeedCond = 140
var maxx = 100
var minx = -100
var waitTimer = 0
var lime_mode = false
var walking = false
var waited = false
var GameState = null
func _ready():
minx = position.x
maxx = position.x + 100
characterName = "Beesly"
pronouns = "any"
GameState = get_node("/root/GameVariables")
dialogueResource = load("res://NPCs/Beesly/beesly.dialogue")
if SaveManager.get_save_value("BeeslyLimeMode"):
lime_mode = true
$Sprite.play("LimeMode")
if not SaveManager.get_save_value("LimeEnabled", true):
LimeOff()
func _process(delta):
waitTimer -= delta
if waitTimer <= 0:
if !waited:
waited = true
wait_between_actions()
else:
pick_next_action(delta)
if walking and not lime_mode:
var movementVector = Vector2(moveSpeed*delta,0)
var collisions = move_and_collide(movementVector)
if collisions != null:
walking = false
stand_up()
if moveSpeed < 0:
$Sprite.flip_h = true
elif moveSpeed > 0:
$Sprite.flip_h = false
func wait_between_actions():
waitTimer = rng.randf_range(0.5, 3)
func pick_next_action(delta):
if lime_mode: return
else:
var randomDir
if position.x <= minx:
randomDir = 1
elif position.x >= maxx:
randomDir = -1
else:
randomDir = -1 if rng.randi_range(0, 1) == 0 else 1
moveSpeed = moveSpeedCond * randomDir
var nextActionResult = rng.randi_range(0, 4)
if nextActionResult <= 2:
walking = true
walk()
elif nextActionResult <= 3:
walking = false
stand_up()
elif nextActionResult <= 4:
wait_between_actions()
waited = false
func morph():
SaveManager.set_save_value("BeeslyLimeMode", true)
$Sprite.stop()
$Sprite.play("LimeMorph")
$MorphParticle.emitting = true
await $Sprite.animation_finished
lime_mode = true
$MorphParticle.emitting = false
$Sprite.play("LimeMode")
LevelManager.get_skill("appreciating").experience_event("Beesley's Lime Move", "watched", 31)
func stand_up():
if lime_mode: $Sprite.play("LimeMode")
else: $Sprite.play("Stand")
waitTimer = 4
func walk():
$Sprite.play("Walk")
waitTimer = 1
func LimeOff():
SaveManager.set_save_value("BeeslyLimeMode", false)
$Sprite.stop()
$Sprite.play("BeeMorph")
$MorphParticle.emitting = true
await $Sprite.animation_finished
lime_mode = false
$MorphParticle.emitting = false
$Sprite.play("Stand")