diff --git a/src/Dodge/Base.hs b/src/Dodge/Base.hs index f476fca75..0776d6f06 100644 --- a/src/Dodge/Base.hs +++ b/src/Dodge/Base.hs @@ -6,12 +6,18 @@ Consider splitting. -} module Dodge.Base ( module Dodge.Base , module Dodge.Base.You + , module Dodge.Base.WinScale + , module Dodge.Base.Window + , module Dodge.Base.Coordinate + , module Dodge.Base.Collide ) where import Dodge.Data -import Dodge.WinScale +import Dodge.Base.WinScale +import Dodge.Base.Coordinate import Dodge.Zone --import Dodge.Zone.Data ---import Dodge.Base.Window +import Dodge.Base.Window +import Dodge.Base.Collide import Geometry --import Picture import qualified IntMapHelp as IM @@ -407,39 +413,6 @@ nearestCrInFront p dir x crInPolygon :: Creature -> [Point2] -> Bool crInPolygon = pointInPolygon . _crPos -{- | Transform coordinates from world position to screen coordinates. -} -worldPosToScreenNorm :: Configuration -> World -> Point2 -> Point2 -worldPosToScreenNorm cfig w = doWindowScale cfig . doRotate . doZoom . doTranslate - where - doTranslate p = p -.- _cameraCenter w - doZoom p = _cameraZoom w *.* p - doRotate p = rotateV (negate $ _cameraRot w) p -{- | Transform world coordinates to scaled screen coordinates. - - These have to be according to the size of the window to get actual screen positions. - - This allows for line thicknesses etc to correspond to pixel sizes.-} -worldPosToScreen :: World -> Point2 -> Point2 -worldPosToScreen w = doRotate . doZoom . doTranslate - where - doTranslate p = p -.- _cameraCenter w - doZoom p = _cameraZoom w *.* p - doRotate p = rotateV (negate $ _cameraRot w) p -{- | Transform coordinates from the map position to screen -coordinates. -} -cartePosToScreen :: Configuration -> World -> Point2 -> Point2 -cartePosToScreen cfig w = doWindowScale cfig . doRotate . doZoom . doTranslate - where - doTranslate p = p -.- _carteCenter (_hud w) - doZoom p = _carteZoom (_hud w) *.* p - doRotate p = rotateV (negate $ _carteRot (_hud w)) p -crToMousePosOffset :: Creature -> World -> (Point2,Float) -crToMousePosOffset cr w = (mouseWorldPos w -.- _crPos cr,0) -{- | The mouse position in world coordinates. -} -mouseWorldPos :: World -> Point2 -mouseWorldPos w = _cameraCenter w +.+ (1/_cameraZoom w) *.* rotateV (_cameraRot w) (_mousePos w) -{- | The mouse position in map coordinates -} -mouseCartePos :: World -> Point2 -mouseCartePos w = _carteCenter (_hud w) +.+ (1/_carteZoom (_hud w)) - *.* rotateV (_carteRot (_hud w)) (_mousePos w) {- | Create a logistic function given three parameters. -} logistic :: Float -> Float -> Float -> (Float -> Float) logistic x0 l k x = l / (1 + exp (k*(x0 - x))) diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index 4eb8a3da6..4b505c2d3 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -26,7 +26,6 @@ import Dodge.WorldEvent.Shockwave import Dodge.Data import Dodge.Base import Dodge.Zone -import Dodge.Base.Collide import Dodge.SoundLogic --import Dodge.WorldEvent import Dodge.Inventory diff --git a/src/Dodge/Creature/ChooseTarget.hs b/src/Dodge/Creature/ChooseTarget.hs index 02c124bd5..e4d07a28c 100644 --- a/src/Dodge/Creature/ChooseTarget.hs +++ b/src/Dodge/Creature/ChooseTarget.hs @@ -2,7 +2,6 @@ module Dodge.Creature.ChooseTarget where import Dodge.Data import Dodge.Base -import Dodge.Base.Collide import Control.Lens --import qualified Data.IntMap.Strict as IM diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 89b762d2e..c1a323e02 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -13,9 +13,12 @@ module Dodge.Creature.Picture import Dodge.Data --import Dodge.Base import Dodge.Creature.Test +import Dodge.Render.InfoBox +import Dodge.Render.List --import Dodge.Creature.AlertLevel.Data --import Dodge.Picture.Layer import Dodge.Clock +import Dodge.Debug.Picture import Picture import Geometry import Shape @@ -71,8 +74,26 @@ basicCrShape col cr = tr . scaleSH (V3 crsize crsize crsize) $ mconcat rotmdir = rotateSH (_crMvDir cr) . colorSH (greyN 0.3) +crDisplayInfo :: Configuration -> World -> Creature -> (Point2,[String]) +crDisplayInfo cfig w cr = (_crPos cr, + [show $_crGoal ap + ,show $ _crStrategy ap + ,show $ _crAction ap + ,show $ _crImpulse ap + ] + ) + where + ap = _crActionPlan cr + crOnScreen = pointOnScreen cfig w $ _crPos cr + creatureDisplayText :: Configuration -> World -> Creature -> Picture -creatureDisplayText cfig w cr +creatureDisplayText cfig w cr = setLayer 4 . setDepth 50 + $ color white $ renderListAt 0 0 cfig $ zip ["TEST","ME"] $ repeat white + -- $ renderInfoListAt 0 0 cfig w + -- $ crDisplayInfo cfig w cr + +creatureDisplayText' :: Configuration -> World -> Creature -> Picture +creatureDisplayText' cfig w cr | not (_debug_cr_status cfig) = [] | otherwise = setLayer 4 @@ -82,10 +103,10 @@ creatureDisplayText cfig w cr . rotate (0.5 * pi) -- . rotate (argV v - 0.5 * pi) . scale theScale theScale - . centerText + . stackText $ clockCycle 25 (V.fromList - [ crDisplayAwake - , crDisplayAlert + [ \cr' -> [crDisplayAwake cr'] + , \cr' -> [crDisplayAlert cr'] ] ) w cr where diff --git a/src/Dodge/Creature/ReaderUpdate.hs b/src/Dodge/Creature/ReaderUpdate.hs index 823f67e89..8cdee2a02 100644 --- a/src/Dodge/Creature/ReaderUpdate.hs +++ b/src/Dodge/Creature/ReaderUpdate.hs @@ -16,7 +16,6 @@ import Dodge.Data import Dodge.Creature.Test import Dodge.Creature.Volition import Dodge.Base -import Dodge.Base.Collide import Geometry import FoldableHelp diff --git a/src/Dodge/Debug/Picture.hs b/src/Dodge/Debug/Picture.hs index d2d355e46..c088ed869 100644 --- a/src/Dodge/Debug/Picture.hs +++ b/src/Dodge/Debug/Picture.hs @@ -41,6 +41,8 @@ lineOnScreenCone cfig w p1 p2 = pointInPolygon p1 sp | otherwise = orderPolygon (_cameraViewFrom w : sp') sps = zip sp (tail sp ++ [head sp]) +pointOnScreen :: Configuration -> World -> Point2 -> Bool +pointOnScreen cfig w p = pointInPolygon p $ screenPolygon cfig w drawWallFace :: Configuration -> World -> Wall -> Picture drawWallFace cfig w wall diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index eb265cac8..fe95466f9 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -29,8 +29,6 @@ import Dodge.Inventory.CloseObject import Dodge.Inventory.CheckSlots import Dodge.Inventory.ItemSpace import Dodge.Base -import Dodge.Base.Window -import Dodge.Base.Collide import Geometry --import FoldableHelp import Padding diff --git a/src/Dodge/Item/Weapon/Booster.hs b/src/Dodge/Item/Weapon/Booster.hs index dbbed18c1..97ac53d6c 100644 --- a/src/Dodge/Item/Weapon/Booster.hs +++ b/src/Dodge/Item/Weapon/Booster.hs @@ -4,7 +4,6 @@ module Dodge.Item.Weapon.Booster import Dodge.Data import Dodge.Base import Dodge.Zone -import Dodge.Base.Collide import Dodge.Default.Weapon import Geometry import qualified IntMapHelp as IM diff --git a/src/Dodge/Placement/Instance/Turret.hs b/src/Dodge/Placement/Instance/Turret.hs index 72a86b9ed..94465019d 100644 --- a/src/Dodge/Placement/Instance/Turret.hs +++ b/src/Dodge/Placement/Instance/Turret.hs @@ -22,7 +22,6 @@ import Geometry import ShapePicture import Shape import Dodge.Base -import Dodge.Base.Collide import LensHelp import qualified IntMapHelp as IM @@ -107,7 +106,7 @@ updateTurret rotSpeed mc w doTurn | seesYou = machines . ix mcid . mcDir %~ turnTo rotSpeed mcpos ypos | otherwise = id - closeFireAngle = seesYou && angleVV (ypos -.- mcpos) (unitVectorAtAngle mcdir) < 1 + closeFireAngle = seesYou -- && angleVV (ypos -.- mcpos) (unitVectorAtAngle mcdir) < 1 updateFiringStatus | closeFireAngle = machines . ix mcid . mcType . tuFireTime .~ 20 | otherwise = machines . ix mcid . mcType . tuFireTime %~ (max 0 . subtract 1) diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index b58ed786e..0484ce952 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -116,7 +116,7 @@ doDrawing pdata u = do else renderBlankWalls pdata nWalls --draw object pictures onto base buffer renderLayer 0 shadV layerCounts - --draw object shpaes onto base buffer + --draw object shapes onto base buffer let fs = _shapeShader pdata currentProgram $= Just (_shadProg fs) bindVertexArrayObject $= Just (_vao $ _shadVAO fs) diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index ec4859144..bf2877bda 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -3,10 +3,8 @@ module Dodge.Render.HUD ( hudDrawings ) where import Dodge.Data -import Dodge.WinScale import Dodge.Combine import Dodge.Base -import Dodge.Base.Window --import Dodge.Combine.Combinations import Dodge.Inventory import Dodge.Inventory.ItemSpace diff --git a/src/Dodge/Render/List.hs b/src/Dodge/Render/List.hs index 64b722823..d1e675316 100644 --- a/src/Dodge/Render/List.hs +++ b/src/Dodge/Render/List.hs @@ -1,7 +1,7 @@ module Dodge.Render.List where import Dodge.Data import Dodge.Base.Window -import Dodge.WinScale +import Dodge.Base.WinScale import Picture import Geometry --import Control.Monad diff --git a/src/Dodge/Render/Picture.hs b/src/Dodge/Render/Picture.hs index b165e3b5e..b9e01fa40 100644 --- a/src/Dodge/Render/Picture.hs +++ b/src/Dodge/Render/Picture.hs @@ -4,7 +4,7 @@ module Dodge.Render.Picture ) where import Dodge.Data --import Dodge.Base.Window -import Dodge.WinScale +import Dodge.Base.WinScale import Dodge.Picture.Layer import Dodge.Render.HUD import Dodge.Render.MenuScreen diff --git a/src/Dodge/Update/Camera.hs b/src/Dodge/Update/Camera.hs index f0f468fbc..631843a2a 100644 --- a/src/Dodge/Update/Camera.hs +++ b/src/Dodge/Update/Camera.hs @@ -8,9 +8,6 @@ module Dodge.Update.Camera import Dodge.Data import Dodge.Base import Dodge.Zone -import Dodge.Base.Window -import Dodge.Base.Collide ---import Dodge.Config.KeyConfig import Geometry --import Geometry.ConvexPoly import Dodge.GameRoom diff --git a/src/Dodge/WinScale.hs b/src/Dodge/WinScale.hs deleted file mode 100644 index 34e27a3cf..000000000 --- a/src/Dodge/WinScale.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Dodge.WinScale where -import Dodge.Config.Data -import Geometry -import Picture - -winScale :: Configuration -> Picture -> Picture -{-# INLINE winScale #-} -winScale cfig = scale (2 / _windowX cfig) (2 / _windowY cfig) - -doWindowScale :: Configuration -> Point2 -> Point2 -doWindowScale cfig (V2 x y) = V2 ( x * 2 / _windowX cfig) ( y * 2 / _windowY cfig) diff --git a/src/Picture.hs b/src/Picture.hs index 85ca77b93..7780c1e65 100644 --- a/src/Picture.hs +++ b/src/Picture.hs @@ -25,6 +25,7 @@ module Picture , lineCol , text , centerText + , stackText , pictures , concatMapPic , appendPic @@ -224,6 +225,10 @@ centerText :: String -> Picture {-# INLINE centerText #-} centerText s = translate (50 * (negate . fromIntegral $ length s - 1)) 0 $ text s +stackText :: [String] -> Picture +{-# INLINE stackText #-} +stackText = mconcat . zipWith (\y s -> translate 0 y $ centerText s) [0,100..] + text :: String -> Picture {-# INLINE text #-} text = map f . stringToList