Remove non-existent import

This commit is contained in:
2025-01-04 21:12:15 +00:00
parent 86173f9f6a
commit 02f5bdae31
+97 -75
View File
@@ -1,122 +1,144 @@
--{-# LANGUAGE TupleSections #-}
{-# LANGUAGE BangPatterns #-}
{- |
Basic helpers.
These modules should have few dependencies. -}
module Dodge.Base
( module Dodge.Base
, module Dodge.Base.Arithmetic
, module Dodge.Base.You
, module Dodge.Base.NewID
, module Dodge.Base.Window
, module Dodge.Base.Coordinate
, module Dodge.Base.Collide
, module Dodge.Base.CardinalPoint
, module Dodge.Base.Wall
These modules should have few dependencies.
-}
module Dodge.Base (
module Dodge.Base,
module Dodge.Base.You,
module Dodge.Base.NewID,
module Dodge.Base.Window,
module Dodge.Base.Coordinate,
module Dodge.Base.Collide,
module Dodge.Base.CardinalPoint,
module Dodge.Base.Wall,
) where
import Dodge.Base.Wall
import Dodge.Base.Arithmetic
import Dodge.Base.NewID
import Dodge.Base.Coordinate
import Dodge.Base.CardinalPoint
import Data.List (unfoldr)
--import Dodge.Zone
--import Dodge.Zone.Data
import Dodge.Base.Window
import Dodge.Base.Collide
import Geometry
--import Picture
import qualified IntMapHelp as IM
--import FoldableHelp
import Dodge.Base.You
import Control.Lens
--import Data.Bifunctor
--import qualified Data.IntSet as IS
--import qualified Data.Set as S
import Data.List (unfoldr)
import Dodge.Base.CardinalPoint
import Dodge.Base.Collide
import Dodge.Base.Coordinate
import Dodge.Base.NewID
import Dodge.Base.Wall
import Dodge.Base.Window
import Dodge.Base.You
import Geometry
import qualified IntMapHelp as IM
{- | Expands a line out to a given thickness. -}
-- | Expands a line out to a given thickness.
lineGeom :: Float -> Point2 -> Point2 -> [Point2]
lineGeom t x y
| x == y = []
| otherwise = [x +.+ n x y, x -.- n x y, y +.+ n x y, y -.- n x y]
where
n a b = (t * 0.5) *.* errorNormalizeV 4200 (vNormal (a -.- b))
{- | A triangular wedge thick at the first point and
- tapering off to the second. -}
wedgeGeom
:: Float -- Thickness
-> Point2
-> Point2
-> [Point2]
- tapering off to the second.
-}
wedgeGeom ::
Float -> -- Thickness
Point2 ->
Point2 ->
[Point2]
wedgeGeom t x y
| x == y = []
| otherwise = [x +.+ n x y, x -.- n x y, y]
where
n a b = (t * 0.5) *.* errorNormalizeV 4200 (vNormal (a -.- b))
{- | I believe this overwrites the value if it already exists, but not sure. -}
insertIMInZone
:: Int -- ^ First key
-> Int -- ^ Second key
-> Int -- ^ Third key
-> a -- ^ Item to insert
-> IM.IntMap (IM.IntMap (IM.IntMap a))
-> IM.IntMap (IM.IntMap (IM.IntMap a))
-- | I believe this overwrites the value if it already exists, but not sure.
insertIMInZone ::
-- | First key
Int ->
-- | Second key
Int ->
-- | Third key
Int ->
-- | Item to insert
a ->
IM.IntMap (IM.IntMap (IM.IntMap a)) ->
IM.IntMap (IM.IntMap (IM.IntMap a))
insertIMInZone x y obid obj = IM.insertWith f x $ IM.singleton y $ IM.singleton obid obj
where
f _ = IM.insertWith g y $ IM.singleton obid obj
g _ = IM.insert obid obj
deleteIMInZone
:: Int -- ^ First key
-> Int -- ^ Second key
-> Int -- ^ Third key
-> IM.IntMap (IM.IntMap (IM.IntMap a))
-> IM.IntMap (IM.IntMap (IM.IntMap a))
deleteIMInZone ::
-- | First key
Int ->
-- | Second key
Int ->
-- | Third key
Int ->
IM.IntMap (IM.IntMap (IM.IntMap a)) ->
IM.IntMap (IM.IntMap (IM.IntMap a))
deleteIMInZone x y z = ix x . ix y %~ IM.delete z
adjustIMZone
:: (a -> a) -- ^ Update function
-> Int -- ^ First key
-> Int -- ^ Second key
-> Int -- ^ Third key
-> IM.IntMap (IM.IntMap (IM.IntMap a))
-> IM.IntMap (IM.IntMap (IM.IntMap a))
adjustIMZone ::
-- | Update function
(a -> a) ->
-- | First key
Int ->
-- | Second key
Int ->
-- | Third key
Int ->
IM.IntMap (IM.IntMap (IM.IntMap a)) ->
IM.IntMap (IM.IntMap (IM.IntMap a))
adjustIMZone f x y n = IM.adjust f' x
where
f' = IM.adjust f'' y
f'' = IM.adjust f n
{- | Create a logistic function given three parameters. -}
-- | Create a logistic function given three parameters.
logistic :: Float -> Float -> Float -> (Float -> Float)
logistic x0 l k x = l / (1 + exp (k * (x0 - x)))
{- | given a target and a start point, shift toward the end point by a given
amount.
If close enough, end up on the end point -}
mvPointTowardAtSpeed
:: Float -- ^ Speed.
-> Point2 -- ^ End point.
-> Point2 -- ^ Start point.
-> Point2
If close enough, end up on the end point
-}
mvPointTowardAtSpeed ::
-- | Speed.
Float ->
-- | End point.
Point2 ->
-- | Start point.
Point2 ->
Point2
mvPointTowardAtSpeed !speed !ep !p
| dist p ep < speed = ep
| otherwise = p +.+ speed *.* normalizeV (ep -.- p)
{- | given a target and a start point, shift toward the end point by a given
amount.
If close enough, go past the end point -}
mvPointAlongAtSpeed
:: Float -- ^ Speed.
-> Point2 -- ^ End point.
-> Point2 -- ^ Start point.
-> Point2
If close enough, go past the end point
-}
mvPointAlongAtSpeed ::
-- | Speed.
Float ->
-- | End point.
Point2 ->
-- | Start point.
Point2 ->
Point2
mvPointAlongAtSpeed !speed !ep !p
| dist p ep == 0 = ep
| otherwise = p +.+ speed *.* normalizeV (ep -.- p)
{- | given a target and a start point, shift toward the end point by 1.
If close enough, end up on the end point -}
mvPointToward
:: Point2 -- ^ End point.
-> Point2 -- ^ Start point.
-> Point2
If close enough, end up on the end point
-}
mvPointToward ::
-- | End point.
Point2 ->
-- | Start point.
Point2 ->
Point2
mvPointToward !ep !p
| dist p ep < 1 = ep
| otherwise = p +.+ normalizeV (ep -.- p)