function state_game_rolling() --- @type Die local die --- @type EventBus local event_bus local function roll_die() die.bouncing = true local rot = Tween.new(0.7, die, { angle = (die.angle + math.random(180,360))-- die.angle + (math.random()<.5 and 1 or -1)* math.random(270, 360) }, "outSine") local done = false repeat done = rot:update(dt) coroutine.yield() until done die.bouncing = false event_bus:emit(EVENT_SET_STEP, "placing") end ---@param self any ---@param _die Die ---@param _event_bus EventBus local _enter = function(self, _die, _event_bus) assert(_die, "states.game.rolling needs a die") assert(_event_bus, "states.game.rolling needs an event_bus") die = _die event_bus = _event_bus addcoroutine(roll_die) end local update = function(self) end return { _enter = _enter, update = update } end