Cow_Life_Sim_RPG/NPCs/Beach/Ambrose/Ambrose.gd

211 lines
4.6 KiB
GDScript

extends NPC
var meowDelay = 0
func _ready():
MessageManager.messageSent.connect(messageSpoken)
dialogueResource = load("res://NPCs/Beach/Ambrose/Ambrose.dialogue")
pronouns = "he/they"
func _process(delta):
if meowDelay > 0:
meowDelay -= delta
func messageSpoken(message:String):
if meowDelay > 0:
return
if GameVariables.player.global_position.distance_to(global_position) > 900:
return
var responseMessages = ["you're a cute kitty", "your a cute kitty", "cute kitty", "meow"]
message = message.to_lower().strip_edges()
for responseMessage in responseMessages:
if message.contains(responseMessage):
meowDelay = 0.5
MessageManager.addMessage("meow :3", self, "Ambrose", Color.YELLOW)
break
func notes_check():
if !note_check_1():
return false
if !note_check_2():
return false
if !note_check_3():
return false
return true
func note_check_1():
if InventoryManager.get_item_count_by_name("Basket Plan 1", "keyItems") > 0:
return true
return false
func note_check_2():
if InventoryManager.get_item_count_by_name("Basket Plan 2", "keyItems") > 0:
return true
return false
func note_check_3():
if InventoryManager.get_item_count_by_name("Basket Plan 3", "keyItems") > 0:
return true
return false
func rules_check():
if !basket_rule_check_1():
return false
if !basket_rule_check_2():
return false
if !basket_rule_check_3():
return false
return true
#Rule 1: Sort the baskets from highest to lowest edibility, left to right then top to bottom
func basket_rule_check_1():
var baskets = get_basket_items()
var highest = 500000
for basket in baskets:
if basket == null:
continue
if basket.get_edibility() > highest:
return false
else:
highest = basket.get_edibility()
return true
#Rule 2: The top row baskets must be edible and the bottom row must be inedible
func basket_rule_check_2():
var baskets = get_basket_items()
var index = 0
for basket in baskets:
if basket == null:
continue
if index <= 2:
if basket.get_edibility() < 50:
return false
else:
if basket.get_edibility() >= 50:
return false
index += 1
return true
#Rule 3: One collumn must be very red, one collumn very green, and one collumn very blue
func basket_rule_check_3():
var baskets = get_basket_items()
var colorsLeft = ["red", "green", "blue"]
var collumnOneColor = get_main_color(baskets[0])
if collumnOneColor == "none":
return false
if get_main_color(baskets[3]) != collumnOneColor:
return false
colorsLeft.erase(collumnOneColor)
var collumnTwoColor = get_main_color(baskets[1])
if collumnTwoColor == "none" or !(collumnTwoColor in colorsLeft):
return false
if get_main_color(baskets[4]) != collumnTwoColor:
return false
colorsLeft.erase(collumnTwoColor)
var collumnThreeColor = get_main_color(baskets[2])
if collumnThreeColor == "none" or !(collumnThreeColor in colorsLeft):
return false
if get_main_color(baskets[5]) != collumnThreeColor:
return false
return true
func get_main_color(basket:Item):
if basket == null:
return "none"
var color:Color = basket.get_average_color()
if color.r > color.g and color.r > color.b:
return red_check(color)
elif color.g > color.r and color.g > color.b:
return green_check(color)
elif color.b > color.r and color.b > color.g:
return blue_check(color)
else:
return "none"
func red_check(color:Color):
var otherColor = color.g + color.b
var red = color.r
if color.g > 0.2:
return "none"
if red <= 0.156:
return "none"
if red <= 0.25:
if otherColor <= 0.06:
return "red"
else:
return "none"
if red <= 0.39:
if otherColor <= 0.12:
return "red"
else:
return "none"
if red <= 0.58:
if color.g <= 0.20 and color.b <= 0.20:
return "red"
else:
return "none"
if otherColor <= 0.36:
return "red"
else:
return "none"
func green_check(color:Color):
var otherColor = color.r + color.b
var green = color.g
if green <= 0.156:
return "none"
if otherColor < green + 0.2:
return "green"
else:
return "none"
func blue_check(color:Color):
var red = color.r
var blue = color.b
if blue <= 0.156:
return "none"
if red <= float(blue/float(2.5)):
return "blue"
else:
return "none"
func get_basket_items():
var basketInvNames = ["BeachBasket1Basket", "BeachBasket2Basket", "BeachBasket3Basket",
"BeachBasket4Basket", "BeachBasket5Basket", "BeachBasket6Basket"]
var baskets = []
for basketInvName in basketInvNames:
var basketHoldingInv = InventoryManager.get_inventory(basketInvName)
if basketHoldingInv.items.size() > 0:
baskets.append(basketHoldingInv.items[0])
else:
baskets.append(null)
return baskets