anchor.diff:                      Entity.EnabledLocal <== field --> fun field -> match field.Menu.MenuState with MenuTech _ -> false | _ -> true
                       Entity.ClickEvent ==> msg MenuTechOpen]
                    Content.button Gen.name
  +                   [Entity.PositionLocal == position - v2 0.0f 240.0f; Entity.ElevationLocal == elevation; Entity.Size == v2 72.0f 72.0f
  +                    Entity.Text == "O"
  +                    Entity.EnabledLocal == false
  +                    Entity.ClickEvent ==> msg Nop]
  +                 Content.button Gen.name
  +                   [Entity.PositionLocal == position - v2 0.0f 320.0f; Entity.ElevationLocal == elevation; Entity.Size == v2 72.0f 72.0f
  +                    Entity.Text == "Q"
  +                    Entity.EnabledLocal == false
  +                    Entity.ClickEvent ==> msg Nop]
  +                 Content.button Gen.name
                      [Entity.PositionLocal == position - v2 0.0f 400.0f; Entity.ElevationLocal == elevation; Entity.Size == v2 72.0f 72.0f
                       Entity.Text == "X"
                       Entity.ClickEvent ==> msg MenuClose]]
  
positive.code:                          Entity.EnabledLocal <== teammateAndMenu --> fun (teammate, menu) -> filter teammate menu
                           Entity.Text <== teammateAndMenu --> fun (teammate, _) -> CharacterType.getName teammate.CharacterType
                           Entity.ClickEvent ==> msg (fieldMsg index)])
  
          static let techs (position : Vector2) elevation field fieldMsg =
              Content.entities field
                  (fun (field : Field) _ -> (field.Menu, field.Team))
                  (fun (menu, team) _ ->
                      match menu.MenuState with
                      | MenuTech menuTech ->
                          match Map.tryFind menuTech.TeammateIndex team with
                          | Some teammate -> teammate.Techs |> Seq.index |> Map.ofSeq
                          | None -> Map.empty
                      | _ -> Map.empty)
                  (fun i techLens _ ->
                      let x = position.X
                      let y = position.Y - single i * 60.0f
                      Content.button Gen.name
                          [Entity.PositionLocal == v2 x y; Entity.ElevationLocal == elevation; Entity.Size == v2 336.0f 60.0f
                           Entity.Justification == Justified (JustifyLeft, JustifyMiddle); Entity.Margins == v2 16.0f 0.0f
                           Entity.EnabledLocal == false
                           Entity.Text <== techLens --> scstringm
                           Entity.ClickEvent ==> msg (fieldMsg i)])
  
          static let items (position : Vector2) elevation columns field fieldMsg =
              Content.entities field
  
negative.code:                          Entity.EnabledLocal <== selectionLens --> fun (_, (itemType, _)) -> match itemType with Consumable _ | Equipment _ -> true | KeyItem _ | Stash _ -> false
                           Entity.ClickEvent ==> msg (fieldMsg selectionLens)])
  
          static let techs (position : Vector2) elevation field fieldMsg =
              Content.entities field
                  (fun (field : Field) _ -> (field.Menu, field.Team))
                  (fun (menu, team) _ ->
                      match menu.MenuState with
                      | MenuTech menuTech ->
                          match Map.tryFind menuTech.TeammateIndex team with
                          | Some teammate -> teammate.Techs |> Seq.index |> Map.ofSeq
                          | None -> Map.empty
                      | _ -> Map.empty)
                  (fun i techLens _ ->
                      let x = position.X
                      let y = position.Y - single i * 60.0f
                      Content.button Gen.name
                          [Entity.PositionLocal == v2 x y; Entity.ElevationLocal == elevation; Entity.Size == v2 336.0f 60.0f
                           Entity.Justification == Justified (JustifyLeft, JustifyMiddle); Entity.Margins == v2 16.0f 0.0f
                           Entity.Text <== techLens --> scstringm
                           Entity.EnabledLocal == false
                           Entity.ClickEvent ==> msg (fieldMsg i)])
  
          override this.Channel (_, field) =
              [Simulants.Field.Scene.Avatar.Avatar.ChangeEvent =|> fun evt -> msg (UpdateAvatar (evt.Data.Value :?> Avatar))
               field.UpdateEvent => msg Update
  