119 lines
3 KiB
GDScript
119 lines
3 KiB
GDScript
extends "res://Objects/SkillSpecific/Building/BuildingZone.gd"
|
|
|
|
func _ready():
|
|
super._ready()
|
|
|
|
func _process(delta):
|
|
super._process(delta)
|
|
if complete:
|
|
take_damage(3 * delta)
|
|
$SelectionRegionIndicator.visible = false
|
|
|
|
var castleDeterioration = (1 - float(float(health)/float(maxHealth)))
|
|
var stepSize = float(1)/float(6)
|
|
var castleFrame = floori(castleDeterioration/stepSize)
|
|
if castleFrame > 5:
|
|
castleFrame = 5
|
|
$MainSprite.frame = castleFrame
|
|
else:
|
|
$SelectionRegionIndicator.visible = true
|
|
|
|
func experiencing_destruction(item):
|
|
LevelManager.get_skill("appreciating").experience_item(item, "washed away")
|
|
|
|
func drop_items(item):
|
|
pass
|
|
|
|
func get_stages_for_item(item:Item):
|
|
if item == null:
|
|
return 0
|
|
|
|
var stages = 0
|
|
if item.get_weight() <= 0:
|
|
stages = 4
|
|
elif item.get_weight() <= 0.2:
|
|
stages = 40
|
|
else:
|
|
stages = ceili(float(8)/float(item.get_weight()))
|
|
|
|
if item.get_name(false) == "Worm on a String" or item.get_name(false) == "Basket on a String":
|
|
stages = 8
|
|
|
|
return stages
|
|
|
|
func take_damage(damage, fireDamage = false):
|
|
health -= damage
|
|
|
|
if health <= 0:
|
|
experiencing_destruction(buildingMaterial)
|
|
unbuilt()
|
|
|
|
func get_stage_xp():
|
|
var difficulty = abs(buildingMaterial.get_hardness() - 30)
|
|
var xpReward = 1
|
|
xpReward += difficulty * 0.1
|
|
|
|
xpReward = floori(xpReward)
|
|
return xpReward
|
|
|
|
func get_completion_xp():
|
|
var difficulty = abs(buildingMaterial.get_hardness() - 30)
|
|
var xpReward = 48
|
|
xpReward += get_stages_for_item(buildingMaterial) * 3
|
|
xpReward += difficulty * 4
|
|
|
|
xpReward = floori(xpReward)
|
|
return xpReward
|
|
|
|
func get_success_chance(item:Item):
|
|
var chance = 100
|
|
var playerLevel = LevelManager.get_skill("building").currentLevel
|
|
|
|
var difficulty = abs(item.get_hardness() - 30)
|
|
var difficultyDif = difficulty - playerLevel - 10
|
|
if difficultyDif <= 0:
|
|
difficultyDif = 0
|
|
|
|
var difficultySteps = floori(difficultyDif/5)
|
|
chance -= difficultySteps * 5
|
|
chance -= difficultyDif * 2
|
|
|
|
if difficultyDif > 5:
|
|
chance -= 15
|
|
if difficultyDif > 10:
|
|
chance -= 10
|
|
|
|
if chance <= 1:
|
|
chance = 1
|
|
elif chance > 100:
|
|
chance = 100
|
|
|
|
return chance
|
|
|
|
func fully_built(loadedState = false):
|
|
if !loadedState:
|
|
LevelManager.get_skill("appreciating").experience_item(buildingMaterial, "castled")
|
|
|
|
maxHealth = get_max_health()
|
|
health = maxHealth
|
|
complete = true
|
|
|
|
if buildingMaterial.get_name(false) == "Worm on a String" or buildingMaterial.get_name(false) == "Basket on a String":
|
|
$MainSprite.self_modulate = Color.WHITE
|
|
$MainSprite.play("worm")
|
|
$MainSprite.visible = true
|
|
else:
|
|
$MainSprite.play("default")
|
|
$MainSprite.visible = true
|
|
set_visible_bridge_material(buildingMaterial)
|
|
|
|
if buildingMaterial.get_name(false) == "Dirt":
|
|
AchievementManager.complete_achievement("Hurt")
|
|
|
|
func set_visible_bridge_material(materialItem:Item):
|
|
var itemSprite = materialItem.get_sprite()
|
|
|
|
var unmodifiedSprite = materialItem.get_sprite(false)
|
|
var averageColor = SpriteGeneration.get_average_color(unmodifiedSprite.get_image())
|
|
$MainSprite.self_modulate = averageColor
|