class Umbrella : Fragile(), Draggable, Scalable { @Attribute val angle = Angle() var umbrellaTop: UmbrellaTop override fun activated() { val topHalf = actor.createChild("topHalf").apply { scaleXY = actor.scaleXY direction.radians += angle.radians } umbrellaTop = topHalf.role as UmbrellaTop umbrellaTop.umbrella = this val joint = TicklePinJoint(actor, umbrellaTop.actor, actor.position) joint.limitRotation(Angle.degrees(-60.0), Angle.degrees(60.0)) } fun createJoint() { } override fun mass(): float { return actor.body.mass // + umbrellaTop.actor.body.mass } override fun scale( by : Vector2 ) { actor.scale *= by // No need to scale joints, because they are at 0,0 //actor.body.scaleJoints( by ) umbrellaTop.actor.scale *= by //umbrellaTop.actor.body.scaleJoints( by ) } } class UmbrellaTop : Scenery, Draggable, Scalable { var umbrella : Umbrella = null override fun scale( by : Vector2 ) { umbrella.scale( by ) } override fun mass() = umbrella.mass() }