class Gate : Item{ @Attribute var scene = "hub" var open = false override fun rounded( direction : int ) = true fun open() { open = true actor.event( "open" ) } override fun collectable() = open fun enter() { if (open) { Game.instance.startScene( scene ) } } override fun invaded( movement : Movement ) : boolean { if ( movement.item.isPlayer() ) { val player = movement.item as Player player.actor.event( "entering" ) // NOTE the animation is being performed by the GATE, not the PLAYER. // This is because the Player will get a new Action once the Movement is completed. replaceAction( ( ScaleTo( player.actor, 2, 0.1, Eases.easeOut ) and TurnBy( player.actor.direction, 2, Angle.degrees( 360 * 4 ), Eases.easeIn ) and Fade( player.actor.color, 2, 0, Eases.easeInQuad ) ) thenOnce this:>enter ) // Prevents the player from moving once in the gate. player.awake = false } return true } }