-- 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