Cow_Life_Sim_RPG/Objects/SkillSpecific/Building/BeaverDam/BeaverDam.gd

120 lines
3.2 KiB
GDScript

extends "res://Objects/SkillSpecific/Building/BuildingZone.gd"
const balloonCreatureScene = preload("res://Objects/SkillSpecific/Building/BeaverDam/BalloonCreature.tscn")
var itemDisplays = []
var itemsOnBridge = []
var cowOnBridge = false
var stateCheckDelay = 0.5
func _ready():
for itemSprite in $FrontItems.get_children():
itemDisplays.append(itemSprite)
for itemSprite in $BackItems.get_children():
itemDisplays.append(itemSprite)
for itemSprite in $MiddleItems.get_children():
itemDisplays.append(itemSprite)
super._ready()
state_check()
func _process(delta):
super._process(delta)
if complete:
var bridgeLoad = get_bridge_load()
var gumption = get_gumption(buildingMaterial)
if bridgeLoad > gumption:
var overloadDamage = 45
overloadDamage += bridgeLoad - gumption
var maxDamage = maxHealth
if maxDamage < 200:
maxDamage = 200
if overloadDamage > maxDamage:
overloadDamage = maxDamage
take_damage(overloadDamage * delta)
if stateCheckDelay > 0:
stateCheckDelay -= delta
if stateCheckDelay <= 0:
state_check()
stateCheckDelay = 0.5
func state_check():
if !SaveManager.get_save_value("BeaverLoveQuestStarted", false):
visible = false
else:
visible = true
func get_bridge_load():
var load = 0
if cowOnBridge:
load += InventoryManager.get_inventory_weight()
for groundItem:GroundItem in itemsOnBridge:
if groundItem.item != null:
load += groundItem.item.get_weight()
return load
func hide_other_visuals():
$FrontItems.visible = false
$BackItems.visible = false
$MiddleItems.visible = false
func fully_built(loadedState = false):
super.fully_built(loadedState)
if "Balloon" in buildingMaterial.get_name():
AchievementManager.complete_achievement("Transient Art")
var newCreature:Node2D = balloonCreatureScene.instantiate()
get_parent().add_child(newCreature)
newCreature.global_position = global_position + Vector2(0, 90)
unbuilt()
elif buildingMaterial.get_name(false) == "Worm on a String" or buildingMaterial.get_name(false) == "Basket on a String":
$MainSprite.self_modulate = Color.WHITE
if rng.randi_range(0,1) == 1:
$MainSprite.play("worm1")
else:
$MainSprite.play("worm2")
$MainSprite.visible = true
$FrontItems.visible = false
$BackItems.visible = false
$MiddleItems.visible = false
else:
$MainSprite.play("default")
$MainSprite.visible = true
set_visible_bridge_material(buildingMaterial)
func set_visible_bridge_material(materialItem:Item):
var itemSprite = materialItem.get_sprite()
for sprite in itemDisplays:
sprite.texture = itemSprite
$FrontItems.visible = true
$BackItems.visible = true
$MiddleItems.visible = true
var unmodifiedSprite = materialItem.get_sprite(false)
var averageColor = SpriteGeneration.get_average_color(unmodifiedSprite.get_image())
$MainSprite.self_modulate = averageColor
func _on_standing_zone_area_entered(area):
if area.get_parent() is Cow:
cowOnBridge = true
elif area.get_parent() is GroundItem:
itemsOnBridge.append(area.get_parent())
func _on_standing_zone_area_exited(area):
if area.get_parent() is Cow:
cowOnBridge = false
elif area.get_parent() is GroundItem:
itemsOnBridge.erase(area.get_parent())