anchor.diff:  
   type WorldChangers = WorldChanger List
   
  -type DragState =
  -    | DragNone
  -    | DragPosition of Vector2 * Vector2 * Address
  -    | DragRotation of Vector2 * Vector2 * Address
  +type DragEntityState =
  +    | DragEntityNone
  +    | DragEntityPosition of Vector2 * Vector2 * Address
  +    | DragEntityRotation of Vector2 * Vector2 * Address
  +
  +type DragCameraState =
  +    | DragCameraNone
  +    | DragCameraPosition of Vector2 * Vector2
   
   type EditorState =
  -    { DragState : DragState
  +    { DragEntityState : DragEntityState
  +      DragCameraState : DragCameraState
         PastWorlds : World list
         FutureWorlds : World list
         Clipboard : (EntityModel option) ref }
  
positive.code:         ignore <| Single.TryParse (form.creationDepthTextBox.Text, creationDepth)
          !creationDepth
  
      let beginDrag (form : NuEditForm) worldChangers refWorld _ _ message world_ =
          match message.Data with
          | MouseButtonData (position, _) ->
              if form.interactButton.Checked then (message, world_)
  
negative.code:     let DefaultSize = 64.0f
      let DefaultRotation = 0.0f
      let (ScreenWidth, ScreenHeight) = (900, 600)
      let CameraSpeed = 4.0f // NOTE: might be nice to be able to configure this just like entity creation depth in the editor
  
      let pushPastWorld pastWorld world =
          let editorState_ = world.ExtData :?> EditorState
  