figura-protogen/script.lua
2021-12-21 23:54:23 -05:00

113 lines
2.6 KiB
Lua

-- Texture dimensions --
size = 128
factor = size / 64
-- Values for UV mappings --
face_damage=0
face_expr=0
step_u_face=32
step_v_face=16
offset_u_face=64
offset_v_face=0
-- initialize values --
function player_init()
old_health=player.getHealth()
end
expr_cooldown=0
-- Parts --
HEAD=model.Head.Head
-- Initial configuration --
for key, value in pairs(vanilla_model) do
value.setEnabled(false)
end
vanilla_model.CAPE.setEnabled(true)
-- Expression change --
function getExprUV(damage, expression)
local u=offset_u_face+(damage*step_u_face)
local v=offset_v_face+(expression*step_v_face)
return {u/size,v/size}
end
function changeExpression(_damage, _expression, ticks)
-- u is damage, v is expression
local damage = _damage
local expression = _expression
if damage == nil then
damage = face_damage
end
if expression == nil then
expression = face_expr
end
HEAD.setUV(getExprUV(damage,expression))
expr_cooldown=ticks
end
function setExpression(damage, expression)
face_damage=damage
face_expr=expression
HEAD.setUV(getExprUV(damage, expression))
end
function resetExpression()
HEAD.setUV(getExprUV(face_damage,face_expr))
end
-- Action Wheel --
action_wheel.SLOT_1.setTitle('test expression')
action_wheel.SLOT_1.setFunction(function() ping.expressionTest() end)
function ping.expressionTest()
setExpression(1,0)
changeExpression(nil, 1, 10)
end
action_wheel.SLOT_2.setTitle('log health')
action_wheel.SLOT_2.setFunction(function() print(player.getHealth()) end)
-- Pings --
--- Damage function --
function ping.oof(health)
if health <= 5 then
setExpression(1,0)
end
changeExpression(nil,1,10)
end
--- Heal function (revert expression) --
function ping.healed(health)
setExpression(0,0)
end
-- does not work on multiplayer, use ping.oof()
function onDamage(amount, source)
end
-- Tick function --
function tick()
-- expression reset spaghetti code --
if expr_cooldown > 0 then
expr_cooldown = expr_cooldown-1
if expr_cooldown <= 0 then
resetExpression()
end
end
-- optimization, only execute these once a second --
if world.getTimeOfDay() % 20 then
-- if face is cracked
if face_damage==1 and player.getHealth() > 5 then
ping.healed()
end
end
-- Damage ping (onDamage doesn't work in multiplayer) --
if old_health>player.getHealth() then
-- debug
-- print(string.format('old_health=%03.2f, player.getHealth=%03.2f', old_health,player.getHealth()))
ping.oof(player.getHealth())
end
-- End of tick --
old_health=player.getHealth()
end