Cow_Life_Sim_RPG/Objects/SkillSpecific/Building/SandcastleBuilding/Sandcastle.gd

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