enum class EllipticalArcByType { ROUNDED_RECT } class EllipticalArcByRole : ActionRole { @Attribute var type = EllipticalArcByType.ROUNDED_RECT override fun createAction() : Action { return if ( type == EllipticalArcByType.ROUNDED_RECT ) { val lengthSeconds = 1 val cornerSeconds = 0.3 val length = 100 val radius = 20 ( MoveXBy( actor.position, lengthSeconds*2, length*2 ) then CircularArcBy( actor.position, cornerSeconds, Vector2(radius,radius), radius, false, true ) then MoveYBy( actor.position, lengthSeconds, length ) then CircularArcBy( actor.position, cornerSeconds, Vector2(-radius,radius), radius, false, true ) then MoveXBy( actor.position, lengthSeconds*2, -length*2 ) then CircularArcBy( actor.position, cornerSeconds, Vector2(-radius,-radius), radius, false, true ) then MoveYBy( actor.position, lengthSeconds, -length ) then CircularArcBy( actor.position, cornerSeconds, Vector2(radius,-radius), radius, false, true ) ).forever() } else { Delay(1) } } }