120 lines
3.2 KiB
GDScript
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())
|