#include "script/common.lua" pLimit = GetFloatParam("limit", 50) function getBodyVoxelCount(b) local count = 0 local shapes = GetBodyShapes(b) for i=1, #shapes do count = count + GetShapeVoxelCount(shapes[i]) end return count end function init() target = FindBody("target") alarmShape = FindShape("alarm") orgVoxCount = getBodyVoxelCount(target) lastVoxCount = orgVoxCount percentage = 100 done = false doneTimer = 0 doneAlpha = 0 breakTimer = 0 breakAlpha = 0 end function tick(dt) local t = math.fmod(GetTime(), 1.0) if GetBool("level.alarm") then --Alarm blink if t < 0.5 then SetShapeEmissiveScale(alarmShape, 1) else SetShapeEmissiveScale(alarmShape, 0) end else --Regular blink if t > 0.9 then SetShapeEmissiveScale(alarmShape, 0.5) else SetShapeEmissiveScale(alarmShape, 0) end end if done then doneTimer = doneTimer + dt if doneTimer > 2 then if doneAlpha == 1 then SetValue("doneAlpha", 0.0, "linear", 0.25) end else if doneAlpha == 0 then SetValue("doneAlpha", 1.0, "linear", 0.25) end end return end local currentVoxCount = getBodyVoxelCount(target) if currentVoxCount < orgVoxCount then SetBool("level.alarm", true) end percentage = currentVoxCount / orgVoxCount * 100 if percentage < pLimit then SetTag(target, "target", "cleared") done = true end if currentVoxCount < lastVoxCount then breakTimer = 1 breakAlpha = 1 end lastVoxCount = currentVoxCount if breakTimer > 0 then breakTimer = breakTimer - dt if breakTimer <= 0 then SetValue(breakTimer, 0, "linear", 0.25) end end end function draw() local MAX_DIST = 20 local FADE_DIST = 5 if not done then local x, y, dist = UiWorldToPixel(GetBodyTransform(target).pos) if dist > 0 then local a = math.clamp((MAX_DIST - dist)/FADE_DIST, 0.0, 1.0) a = math.max(a, breakAlpha) if a > 0 then local life = math.clamp((percentage-pLimit)/(100-pLimit)*100, 0, 100) UiColorFilter(1,1,1,a) UiTranslate(x, y) UiAlign("center middle") UiColor(0,0,0, 0.5) UiImageBox("ui/common/box-solid-6.png", 250, 80, 6, 6) UiWindow(250, 80) UiTranslate(125, 25) UiColor(1,1,1) UiPush() UiFont("bold.ttf", 22) UiText(GetTranslatedStringByKey("UI_TEXT_CONDITION").. math.floor(life) .. "%") UiPop() UiTranslate(-100, 15) progressBar(200, 20, life/100) end end else local x, y, dist = UiWorldToPixel(GetBodyTransform(target).pos) if dist > 0 and doneAlpha > 0 then UiColorFilter(1,1,1,doneAlpha) UiTranslate(x, y) UiAlign("center middle") UiColor(0,0,0, 0.75) UiImageBox("ui/common/box-solid-6.png", 150, 40, 6, 6) UiWindow(150, 40) UiTranslate(75, 20) UiColor(1,1,1) UiPush() UiFont("bold.ttf", 22) UiText("loc@UI_TEXT_DEMOLISHED") UiPop() end end end