packages feed

swarm-0.4: src/Swarm/TUI/Editor/Masking.hs

module Swarm.TUI.Editor.Masking where

import Control.Lens hiding (Const, from)
import Data.Maybe (fromMaybe)
import Swarm.Game.Universe
import Swarm.Game.World qualified as W
import Swarm.TUI.Editor.Model
import Swarm.TUI.Editor.Util qualified as EU
import Swarm.TUI.Model.UI

shouldHideWorldCell :: UIState -> W.Coords -> Bool
shouldHideWorldCell ui coords =
  isOutsideSingleSelectedCorner || isOutsideMapSaveBounds
 where
  we = ui ^. uiWorldEditor
  withinTimeout = ui ^. lastFrameTime < we ^. editingBounds . boundsPersistDisplayUntil

  isOutsideMapSaveBounds =
    withinTimeout
      && fromMaybe
        False
        ( do
            bounds <- we ^. editingBounds . boundsRect
            pure $ EU.isOutsideRegion (bounds ^. planar) coords
        )

  isOutsideSingleSelectedCorner = fromMaybe False $ do
    Cosmic _ cornerCoords <- case we ^. editingBounds . boundsSelectionStep of
      LowerRightPending cornerCoords -> Just cornerCoords
      _ -> Nothing
    pure $ EU.isOutsideTopLeftCorner cornerCoords coords