class Part( val parent : Movable, val dx : int, val dy : int ) : Movable { init { actor = parent.actor } fun reoccupy() { parent.square.neighbour( dx, dy ).addOccupant( this ) } override fun canPush( direction : int, speed : int, strength : int ) : boolean = parent.canPush( direction, speed, strength ) override fun push( direction : int, speed : int ) { parent.push( direction, speed ) } override fun movement() : Movement = parent.movement() override fun isPlayer() : boolean = parent.isPlayer() override fun isDeadly() : boolean = parent.isDeadly() override fun isMoving() : boolean = parent.isMoving() override fun squashable( direction : int ) : boolean = parent.squashable( direction ) override fun collectable() : boolean = parent.collectable() override fun rounded( direction : int ) : boolean = parent.rounded( direction ) override fun invading( movement : Movement ) { if ( movement.item != parent ) { parent.invading( movement ) } } override fun invaded( movement : Movement ) : boolean { if ( movement.item == parent ) return true return parent.invaded( movement ) } override fun kill() { parent.kill() } override fun toString() = "Part $dx,$dy of $parent" }