From a546d070f0a77eec2d035b53fcf0061cdd4700fe Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 18 Nov 2021 18:30:22 +0000 Subject: [PATCH] Add shrinkability and cursed items --- appDodge/Main.hs | 1 - src/Dodge/Base/Window.hs | 1 - src/Dodge/Block.hs | 1 - src/Dodge/Config/Data.hs | 3 +- src/Dodge/Creature.hs | 13 +++- src/Dodge/Creature/Action.hs | 58 ++++++++++++-- src/Dodge/Creature/ArmourChase.hs | 1 - src/Dodge/Creature/Boid.hs | 1 - src/Dodge/Creature/ChaseCrit.hs | 1 - src/Dodge/Creature/ChooseTarget.hs | 1 - src/Dodge/Creature/Impulse.hs | 4 - src/Dodge/Creature/Impulse/Movement.hs | 5 +- src/Dodge/Creature/Inanimate.hs | 2 - src/Dodge/Creature/Perception.hs | 2 - src/Dodge/Creature/Picture.hs | 28 +++---- src/Dodge/Creature/Property.hs | 1 - src/Dodge/Creature/ReaderUpdate.hs | 3 - src/Dodge/Creature/SetTarget.hs | 8 +- src/Dodge/Creature/State.hs | 4 - src/Dodge/Creature/State/WalkCycle.hs | 2 - src/Dodge/Creature/SwarmCrit.hs | 1 - src/Dodge/Creature/Test.hs | 1 - src/Dodge/Creature/Volition.hs | 1 - src/Dodge/Creature/YourControl.hs | 4 +- src/Dodge/Data.hs | 21 +++++- src/Dodge/Debug/Terminal.hs | 1 - src/Dodge/Default.hs | 20 +++-- src/Dodge/Default/Weapon.hs | 3 +- src/Dodge/Default/World.hs | 4 +- src/Dodge/Distortion.hs | 10 +++ src/Dodge/Distortion/Data.hs | 7 ++ src/Dodge/Event.hs | 2 - src/Dodge/Initialisation.hs | 1 - src/Dodge/Inventory.hs | 1 + src/Dodge/Item.hs | 2 - src/Dodge/Item/Attachment.hs | 1 - src/Dodge/Item/Attachment/Data.hs | 2 + src/Dodge/Item/Consumable.hs | 5 +- src/Dodge/Item/Draw.hs | 5 +- src/Dodge/Item/Equipment.hs | 5 +- src/Dodge/Item/Weapon.hs | 36 +-------- src/Dodge/Item/Weapon/BatteryGuns.hs | 2 - src/Dodge/Item/Weapon/Bezier.hs | 2 - src/Dodge/Item/Weapon/Booster.hs | 2 - src/Dodge/Item/Weapon/BulletGuns.hs | 9 +-- src/Dodge/Item/Weapon/ExtraEffect.hs | 1 - src/Dodge/Item/Weapon/Grenade.hs | 4 +- src/Dodge/Item/Weapon/InventoryDisplay.hs | 1 - src/Dodge/Item/Weapon/Launcher.hs | 3 - src/Dodge/Item/Weapon/SprayGuns.hs | 2 - src/Dodge/Item/Weapon/TriggerType.hs | 3 - src/Dodge/Item/Weapon/Utility.hs | 79 ++++++++++++++++++++ src/Dodge/LevelGen/Data.hs | 2 +- src/Dodge/LevelGen/Switch.hs | 1 - src/Dodge/Menu.hs | 1 - src/Dodge/Particle/Bullet/HitEffect.hs | 2 - src/Dodge/Particle/Spark.hs | 1 - src/Dodge/Particle/TeslaArc.hs | 1 - src/Dodge/Placement/Instance/Turret.hs | 1 - src/Dodge/Placement/Instance/Wall.hs | 15 +++- src/Dodge/Placement/PlaceSpot.hs | 2 +- src/Dodge/Placement/PlaceSpot/Block.hs | 30 +++----- src/Dodge/Placement/PlaceSpot/TriggerDoor.hs | 1 - src/Dodge/Render.hs | 7 +- src/Dodge/Render/HUD.hs | 9 ++- src/Dodge/Room/Boss.hs | 1 - src/Dodge/Room/NoNeedWeapon.hs | 1 - src/Dodge/Room/Procedural.hs | 1 + src/Dodge/Room/RoadBlock.hs | 13 +++- src/Dodge/Room/Room.hs | 3 +- src/Dodge/SoundLogic.hs | 1 - src/Dodge/Update.hs | 17 +---- src/Dodge/Update/Camera.hs | 1 - src/Dodge/Update/UsingInput.hs | 1 - src/Dodge/WallCreatureCollisions.hs | 1 - src/Dodge/WorldEvent/Damage.hs | 1 - src/Dodge/WorldEvent/Explosion.hs | 1 - src/Dodge/WorldEvent/HitEffect.hs | 1 - src/Dodge/WorldEvent/Shockwave.hs | 1 - src/Dodge/WorldEvent/Sound.hs | 1 - src/Dodge/WorldEvent/SpawnParticle.hs | 3 - src/ShapePicture.hs | 4 + 82 files changed, 273 insertions(+), 233 deletions(-) create mode 100644 src/Dodge/Distortion.hs create mode 100644 src/Dodge/Distortion/Data.hs create mode 100644 src/Dodge/Item/Weapon/Utility.hs diff --git a/appDodge/Main.hs b/appDodge/Main.hs index 30988a015..20f3edec3 100644 --- a/appDodge/Main.hs +++ b/appDodge/Main.hs @@ -7,7 +7,6 @@ import Dodge.LevelGen import Dodge.Update import Dodge.Event import Dodge.Render -import Dodge.Config.Data import Dodge.Config.KeyConfig import Dodge.Config.Load import Dodge.Config.Update diff --git a/src/Dodge/Base/Window.hs b/src/Dodge/Base/Window.hs index af2ab0e0b..8e824463b 100644 --- a/src/Dodge/Base/Window.hs +++ b/src/Dodge/Base/Window.hs @@ -10,7 +10,6 @@ module Dodge.Base.Window ) where import Dodge.Data -import Dodge.Config.Data import Geometry -- | A box covering the screen in world coordinates diff --git a/src/Dodge/Block.hs b/src/Dodge/Block.hs index 15391be64..745499b3b 100644 --- a/src/Dodge/Block.hs +++ b/src/Dodge/Block.hs @@ -1,6 +1,5 @@ module Dodge.Block where import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.SoundLogic import Dodge.Zone import Dodge.WorldEvent.Sound diff --git a/src/Dodge/Config/Data.hs b/src/Dodge/Config/Data.hs index b075450ce..9f9065721 100644 --- a/src/Dodge/Config/Data.hs +++ b/src/Dodge/Config/Data.hs @@ -1,8 +1,7 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} -module Dodge.Config.Data - where +module Dodge.Config.Data where import Data.Aeson import GHC.Generics import Control.Lens diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index ccc470dc7..6d03b3eee 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -15,6 +15,7 @@ module Dodge.Creature import Dodge.Creature.State.Data import Dodge.Item.Weapon.Grenade import Dodge.Item.Weapon.Booster +import Dodge.Item.Weapon.Utility --import Dodge.Creature.ReaderUpdate --import Dodge.Creature.AlertLevel --import Dodge.Creature.SetTarget @@ -158,14 +159,20 @@ startCr = defaultCreature , _crHP = 1000 , _crMaxHP = 1500 , _crInv = startInventory - , _crCorpse = onLayer CorpseLayer $ color (greyN 0.5) $ pictures [color (greyN 0.8) $ circleSolid 10, circLine 10] + , _crCorpse = onLayer CorpseLayer + $ color (greyN 0.5) $ pictures [color (greyN 0.8) $ circleSolid 10, circLine 10] , _crFaction = PlayerFaction + , _crMvType = MvWalking yourDefaultSpeed } {- | Items you start with. -} +startInvList :: [Item] +startInvList = + [shrinkGun + ] startInventory :: IM.IntMap Item -startInventory = IM.fromList $ zip [0..20] $ repeat NoItem +startInventory = IM.fromList $ zip [0..defaultInvSize -1] $ startInvList ++ repeat NoItem stackedInventory :: IM.IntMap Item -stackedInventory = IM.fromList (zip [0..20] +stackedInventory = IM.fromList (zip [0..25] ( [spreadGun ,tractorGun diff --git a/src/Dodge/Creature/Action.hs b/src/Dodge/Creature/Action.hs index be98b3373..86af02a18 100644 --- a/src/Dodge/Creature/Action.hs +++ b/src/Dodge/Creature/Action.hs @@ -1,9 +1,14 @@ +{-# LANGUAGE TupleSections #-} {- | Actions performed by creatures within the world -} module Dodge.Creature.Action ( performActionsR + , stripNoItems + , setMinInvSize + , dropUnselected , startReloadingWeapon , blinkAction + , sizeSelf , crAutoReload , copyItemToFloor , youDropItem @@ -11,10 +16,10 @@ module Dodge.Creature.Action ) where import Dodge.Path +import Dodge.Default import Dodge.Creature.Stance.Data import Dodge.WorldEvent.Shockwave import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.Base import Dodge.Zone import Dodge.Base.Collide @@ -167,15 +172,15 @@ blinkAction -> World blinkAction cr w = soundMultiFrom [TeleSound 0,TeleSound 1] p3 teleS Nothing - . over radDistortion (distortionBulge ++) + . over distortions (distortionBulge ++) . set (creatures . ix cid . crPos) p3 . blinkShockwave cid p3 $ inverseShockwaveAt cpos 40 2 2 w where distR = 120 distortionBulge = - [(p3,p3 +.+ V2 distR 0, p3 +.+ V2 0 distR,0.1) - ,(cpos,cpos +.+ V2 distR 0, cpos +.+ V2 0 distR,1.9) + [RadialDistortion p3 (p3 +.+ V2 distR 0) (p3 +.+ V2 0 distR) 0.1 + ,RadialDistortion cpos (cpos +.+ V2 distR 0) (cpos +.+ V2 0 distR) 1.9 ] cid = _crID cr p1 = mouseWorldPos w @@ -191,14 +196,35 @@ blinkShockwave -> World blinkShockwave i p = makeShockwaveAt [i] p 60 1 2 cyan +setMinInvSize :: Int -> Creature -> World -> World +setMinInvSize n cr = creatures . ix (_crID cr) . crInv %~ f + where + f inv = IM.unionWith (\x _ -> x) inv $ IM.fromList $ [0..n-1] <&> (, NoItem) + +stripNoItems :: Creature -> World -> World +stripNoItems cr = creatures . ix (_crID cr) . crInv %~ IM.mapMaybe f + where + f NoItem = Nothing + f x = Just x + +dropUnselected :: Creature -> World -> World +dropUnselected cr w = foldr (dropItem cr) w . IM.keys $ unselectedItems + where + unselectedItems = _crInvSel cr `IM.delete` _crInv cr + +dropItem :: Creature -> Int -> World -> World +dropItem cr invid = rmInvItem cid invid . copyItemToFloor cr invid + where + cid = _crID cr + {- | Get your creature to drop the item under the cursor. -} youDropItem :: World -> World -youDropItem w = case yourItem w of - NoItem -> w - _ -> rmSelectedInvItem (_yourID w) +youDropItem w = case yourItem w ^? itCurseStatus of + Just Uncursed -> rmSelectedInvItem (_yourID w) . copyItemToFloor (you w) (_crInvSel cr) $ soundStart (CrSound (_crID cr)) (_crPos cr) whiteNoiseFadeOutS Nothing w + _ -> w where cr = you w {- | Copy an inventory item to the floor. -} @@ -243,3 +269,21 @@ pickUpItem cid flit w = case maybeInvSlot of Nothing -> w' Just j -> w' & itemPositions . ix j .~ InInv 0 invid +sizeSelf :: Float -> Creature -> World -> World +sizeSelf x cr w = w + & soundMultiFrom [TeleSound 0,TeleSound 1] cpos teleS Nothing + & over distortions (distortionBulge :) +-- & inverseShockwaveAt cpos 40 0 2 + & creatures . ix cid %~ + ( (crRad .~ 10 * x) + . (crMvType . mvSpeed .~ yourDefaultSpeed * x) + . (crStance . strideLength .~ ceiling (fromIntegral yourDefaultStrideLength * x)) + ) + where + distR = 120 + distortionBulge + | _crRad cr < 10 * x + = RadialDistortion cpos (cpos +.+ V2 distR 0) (cpos +.+ V2 0 distR) 1.9 + | otherwise = RadialDistortion cpos (cpos +.+ V2 distR 0) (cpos +.+ V2 0 distR) 0.1 + cid = _crID cr + cpos = _crPos cr diff --git a/src/Dodge/Creature/ArmourChase.hs b/src/Dodge/Creature/ArmourChase.hs index 946ad946b..726a9f03e 100644 --- a/src/Dodge/Creature/ArmourChase.hs +++ b/src/Dodge/Creature/ArmourChase.hs @@ -5,7 +5,6 @@ module Dodge.Creature.ArmourChase import Dodge.Data import Dodge.Default import Dodge.Creature.State -import Dodge.Creature.State.Data import Dodge.Creature.ReaderUpdate import Dodge.Creature.Perception import Dodge.Creature.Picture diff --git a/src/Dodge/Creature/Boid.hs b/src/Dodge/Creature/Boid.hs index e809d0a3e..093c7364d 100644 --- a/src/Dodge/Creature/Boid.hs +++ b/src/Dodge/Creature/Boid.hs @@ -2,7 +2,6 @@ module Dodge.Creature.Boid where import Dodge.Data import Dodge.Base -import Dodge.Creature.State.Data import Geometry import Geometry.ConvexPoly diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index 0d82fb2a3..e5a82ebeb 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -10,7 +10,6 @@ import Dodge.Creature.Impulse import Dodge.Creature.Action import Dodge.Creature.Perception import Dodge.Creature.State -import Dodge.Creature.State.Data import Dodge.Item.Consumable import Dodge.Picture.Layer import Dodge.SoundLogic diff --git a/src/Dodge/Creature/ChooseTarget.hs b/src/Dodge/Creature/ChooseTarget.hs index 1a9bf8ac7..02c124bd5 100644 --- a/src/Dodge/Creature/ChooseTarget.hs +++ b/src/Dodge/Creature/ChooseTarget.hs @@ -3,7 +3,6 @@ module Dodge.Creature.ChooseTarget import Dodge.Data import Dodge.Base import Dodge.Base.Collide -import Dodge.Creature.Perception.Data import Control.Lens --import qualified Data.IntMap.Strict as IM diff --git a/src/Dodge/Creature/Impulse.hs b/src/Dodge/Creature/Impulse.hs index 019bd36fc..4bf779d2e 100644 --- a/src/Dodge/Creature/Impulse.hs +++ b/src/Dodge/Creature/Impulse.hs @@ -4,12 +4,8 @@ module Dodge.Creature.Impulse where import Dodge.Data import Dodge.Creature.Vocalization -import Dodge.Data.SoundOrigin import Dodge.Creature.Impulse.Movement import Dodge.Creature.Impulse.UseItem ---import Dodge.Creature.Action.UseItem -import Dodge.Creature.State.Data -import Dodge.Creature.Stance.Data import Dodge.SoundLogic import Geometry diff --git a/src/Dodge/Creature/Impulse/Movement.hs b/src/Dodge/Creature/Impulse/Movement.hs index caf7d59da..9bc3efdc6 100644 --- a/src/Dodge/Creature/Impulse/Movement.hs +++ b/src/Dodge/Creature/Impulse/Movement.hs @@ -1,8 +1,5 @@ -module Dodge.Creature.Impulse.Movement - where +module Dodge.Creature.Impulse.Movement where import Dodge.Data -import Dodge.Creature.Stance.Data -import Dodge.Item.Data import Geometry import Data.Maybe diff --git a/src/Dodge/Creature/Inanimate.hs b/src/Dodge/Creature/Inanimate.hs index 354016070..1a4d8ee2b 100644 --- a/src/Dodge/Creature/Inanimate.hs +++ b/src/Dodge/Creature/Inanimate.hs @@ -12,7 +12,6 @@ import Dodge.Data import Dodge.WorldEvent.Explosion import Dodge.Creature.Picture --import Dodge.Creature.Stance.Data -import Dodge.Creature.State.Data import Dodge.Picture.Layer import Dodge.Default import Dodge.Creature.State @@ -29,7 +28,6 @@ import Polyhedra import Shape import Dodge.WorldEvent import Dodge.SoundLogic -import Dodge.Data.SoundOrigin import System.Random import Data.List diff --git a/src/Dodge/Creature/Perception.hs b/src/Dodge/Creature/Perception.hs index 21876b353..29eb298e9 100644 --- a/src/Dodge/Creature/Perception.hs +++ b/src/Dodge/Creature/Perception.hs @@ -5,9 +5,7 @@ module Dodge.Creature.Perception ) where import Dodge.Data -import Dodge.Creature.Perception.Data import Dodge.Creature.Vocalization -import Dodge.Creature.Memory.Data import Dodge.Base.Collide --import Dodge.SoundLogic import Geometry.Vector diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index b0acc3b3f..078603653 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -10,18 +10,10 @@ module Dodge.Creature.Picture , picAtCrPosNoRot ) where import Dodge.Data -import Dodge.Config.Data ---import Dodge.Data.DamageType --import Dodge.Base ---import Dodge.Creature.Stance.Data -import Dodge.Creature.Perception.Data ---import Dodge.Creature.State.Data -import Dodge.Creature.Stance.Data ---import Dodge.Creature.Memory.Data import Dodge.Creature.Test --import Dodge.Creature.AlertLevel.Data --import Dodge.Picture.Layer -import Dodge.Item.Data import Dodge.Clock import Picture import Geometry @@ -58,13 +50,14 @@ basicCrShape :: Color -- ^ Creature color -> Creature -> Shape -basicCrShape col cr = tr $ mconcat +basicCrShape col cr = tr . scaleSH (V3 crsize crsize crsize) $ mconcat [ rotdir . _spShape $ drawEquipment cr , rotdir . dm . translateSHz 20 $ scalp cr , rotdir . dm $ upperBody col cr , dm . rotmdir $ feet cr ] where + crsize = 0.1 * _crRad cr dm = damageModSH cr tr = uncurryV translateSHf (_crPos cr) rotdir = rotateSH (_crDir cr) @@ -161,7 +154,7 @@ arms :: Creature -> Shape {-# INLINE arms #-} arms cr | oneH cr = shoulderSH . translateSHf 11 (-3) . rotateSH (-0.5) $ scaleSH (V3 1 1.5 1) aHand - | twists cr = shoulderSH . translateSHf 0 (0.5* crad) . rotateSH (-1) $ mconcat + | twists cr = shoulderSH . translateSHf 0 5 . rotateSH (-1) $ mconcat [ translateSHf 12 4 aHand , translateSHf 4 (-10) aHand ] @@ -175,7 +168,6 @@ arms cr --crIt = _crInv cr IM.! _crInvSel cr aHand :: Shape aHand = translateSHz (-4) . upperPrismPolyHalf 4 $ polyCirc 3 4 - crad = _crRad cr off = 8 sLen = _strideLength $ _crStance cr f i = negate 2 + negate 6 * fromIntegral (sLen - i) / fromIntegral sLen @@ -183,12 +175,11 @@ arms cr scalp :: Creature -> Shape {-# INLINE scalp #-} scalp cr - | twists cr = translateSHf 0 (0.5*crad) . rotateSH (-1) $ translateSHf (negate 0.25 * crad) 0.25 fhead - | oneH cr = rotateSH 0.5 $ translateSHf (0.25 * crad) 0 fhead - | otherwise = translateSHf (0.25 * crad) 0 fhead + | twists cr = translateSHf 0 5 . rotateSH (-1) $ translateSHf (negate 2.5) 0.25 fhead + | oneH cr = rotateSH 0.5 $ translateSHf 2.5 0 fhead + | otherwise = translateSHf 2.5 0 fhead where - fhead = colorSH (greyN 0.9) . upperPrismPolyHalf 5 . polyCirc 4 $ crad * 0.5 - crad = _crRad cr + fhead = colorSH (greyN 0.9) . upperPrismPolyHalf 5 $ polyCirc 4 5 oneH :: Creature -> Bool oneH cr = crIsAiming' cr && crIt ^? itAimStance == Just OneHand @@ -212,7 +203,7 @@ torso cr [ translateSHf 0 3 . rotateSH (negate 0.2) $ aShoulder , translateSHf 0 (negate 3) . rotateSH 0.2 $ aShoulder ] - | twists cr = translateSHf 0 (0.5* crad) . rotateSH (-1) $ mconcat + | twists cr = translateSHf 0 5 . rotateSH (-1) $ mconcat [ rotateSH (negate 0.2) . translateSHf 2 3 . rotateSH (negate 0.4) $ aShoulder , rotateSH (negate 0.2) . translateSHf 0 (negate 3) . rotateSH 0.2 $ aShoulder ] @@ -222,8 +213,7 @@ torso cr ] where --aShoulder = translateSHz (-10) . scaleSH (V3 0.5 1 1) . upperPrismPoly 10 $ polyCirc 3 crad - aShoulder = scaleSH (V3 crad crad 1) baseShoulder - crad = _crRad cr + aShoulder = scaleSH (V3 10 10 1) baseShoulder baseShoulder :: Shape {-# INLINE baseShoulder #-} diff --git a/src/Dodge/Creature/Property.hs b/src/Dodge/Creature/Property.hs index 020f6064e..64d4b2841 100644 --- a/src/Dodge/Creature/Property.hs +++ b/src/Dodge/Creature/Property.hs @@ -4,7 +4,6 @@ module Dodge.Creature.Property , crNearPoint ) where import Dodge.Data -import Dodge.Item.Data import Geometry import Control.Lens diff --git a/src/Dodge/Creature/ReaderUpdate.hs b/src/Dodge/Creature/ReaderUpdate.hs index aca9a57c0..6a6cb3247 100644 --- a/src/Dodge/Creature/ReaderUpdate.hs +++ b/src/Dodge/Creature/ReaderUpdate.hs @@ -14,11 +14,8 @@ module Dodge.Creature.ReaderUpdate ) where import Dodge.Data -import Dodge.Creature.Stance.Data -import Dodge.Creature.Memory.Data import Dodge.Creature.Test import Dodge.Creature.Volition -import Dodge.Creature.Perception.Data import Dodge.Base import Dodge.Base.Collide import Geometry diff --git a/src/Dodge/Creature/SetTarget.hs b/src/Dodge/Creature/SetTarget.hs index 7d290980f..ce2a5126c 100644 --- a/src/Dodge/Creature/SetTarget.hs +++ b/src/Dodge/Creature/SetTarget.hs @@ -1,10 +1,6 @@ -{- | -Deals with setting a target for creatures --} -module Dodge.Creature.SetTarget - where +{- | Deals with setting a target for creatures -} +module Dodge.Creature.SetTarget where import Dodge.Data -import Dodge.Creature.Perception.Data import Control.Lens import qualified Data.IntMap.Strict as IM diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 4ccfe81cb..7816cc44a 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -3,11 +3,7 @@ module Dodge.Creature.State , doDamage ) where import Dodge.Data -import Dodge.Data.SoundOrigin -import Dodge.Item.Data -import Dodge.Creature.State.Data import Dodge.Creature.State.WalkCycle -import Dodge.Creature.Stance.Data --import Dodge.Creature.Test --import Dodge.Base import Dodge.SoundLogic diff --git a/src/Dodge/Creature/State/WalkCycle.hs b/src/Dodge/Creature/State/WalkCycle.hs index fbff0317a..69c071562 100644 --- a/src/Dodge/Creature/State/WalkCycle.hs +++ b/src/Dodge/Creature/State/WalkCycle.hs @@ -4,8 +4,6 @@ module Dodge.Creature.State.WalkCycle ) where import Dodge.Data -import Dodge.Data.SoundOrigin -import Dodge.Creature.Stance.Data import Dodge.SoundLogic import Geometry.Data import Sound.Data diff --git a/src/Dodge/Creature/SwarmCrit.hs b/src/Dodge/Creature/SwarmCrit.hs index 74e782136..8cc3b38e4 100644 --- a/src/Dodge/Creature/SwarmCrit.hs +++ b/src/Dodge/Creature/SwarmCrit.hs @@ -10,7 +10,6 @@ import Dodge.Creature.ReaderUpdate import Dodge.Creature.Perception import Dodge.Creature.Impulse import Dodge.Creature.State -import Dodge.Creature.State.Data import Dodge.Picture.Layer import Picture diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index 8cb3792ef..b2ad26754 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -19,7 +19,6 @@ module Dodge.Creature.Test where import Dodge.Data import Dodge.Base.Collide -import Dodge.Creature.Stance.Data import Geometry import SameConstr diff --git a/src/Dodge/Creature/Volition.hs b/src/Dodge/Creature/Volition.hs index be6cd0c8e..3325dd82c 100644 --- a/src/Dodge/Creature/Volition.hs +++ b/src/Dodge/Creature/Volition.hs @@ -9,7 +9,6 @@ module Dodge.Creature.Volition import Dodge.Data --import Dodge.Base.Collide import Dodge.Creature.Test -import Dodge.Creature.Stance.Data import Dodge.SoundLogic.LoadSound import Geometry diff --git a/src/Dodge/Creature/YourControl.hs b/src/Dodge/Creature/YourControl.hs index 73c69e119..e24235fdb 100644 --- a/src/Dodge/Creature/YourControl.hs +++ b/src/Dodge/Creature/YourControl.hs @@ -3,10 +3,8 @@ module Dodge.Creature.YourControl ) where import Dodge.Data import Dodge.Creature.Impulse.Movement -import Dodge.Creature.Stance.Data import Dodge.Update.UsingInput import Dodge.Config.KeyConfig -import Dodge.Item.Attachment.Data import Geometry import Control.Lens @@ -24,7 +22,7 @@ yourControl cr w = , Just . mouseActionsCr (_mouseButtons w) $ wasdWithAiming w speed 0 cr ) where - speed = 4 + speed = _mvSpeed $ _crMvType cr {- | Turn key presses into creature movement. -} wasdWithAiming :: World diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index 22461670c..e6eb83bf4 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -9,12 +9,22 @@ circular imports are probably not a good idea. {-# LANGUAGE DeriveGeneric #-} module Dodge.Data ( module Dodge.Data + , module Dodge.Distortion.Data , module Dodge.Data.DamageType + , module Dodge.Data.SoundOrigin + , module Dodge.Creature.State.Data + , module Dodge.Creature.Stance.Data + , module Dodge.Creature.Perception.Data + , module Dodge.Creature.Memory.Data + , module Dodge.Item.Attachment.Data + , module Dodge.Item.Data + , module Dodge.Config.Data ) where import Dodge.Creature.State.Data import Dodge.Creature.Stance.Data import Dodge.Creature.Perception.Data import Dodge.Creature.Memory.Data +import Dodge.Distortion.Data import Dodge.Data.SoundOrigin import Dodge.Data.DamageType import Dodge.Config.Data @@ -98,7 +108,7 @@ data World = World , _sideEffects :: World -> IO World , _inventoryMode :: InventoryMode , _lClickHammer :: HammerPosition - , _radDistortion :: [(Point2,Point2,Point2,Float)] + , _distortions :: [Distortion] , _worldBounds :: Bounds , _gameRooms :: [GameRoom] , _keyConfig :: KeyConfigSDL @@ -107,6 +117,7 @@ data World = World , _savedWorlds :: M.Map SaveSlot World , _frameClock :: Int } + data SaveSlot = QuicksaveSlot | LevelStartSlot deriving (Eq,Ord) @@ -150,6 +161,7 @@ data InventoryMode | TweakInventory | CombineInventory | InspectInventory + | LockedInventory deriving (Eq, Ord, Show) data CrGroupParams = CrGroupParams { _crGroupParamID :: Int @@ -239,6 +251,7 @@ data Intention = Intention data CrMvType = NoMvType + | MvWalking { _mvSpeed :: Float } | ChaseMvType { _mvSpeed :: Float , _mvTurnRad :: Float -> Float @@ -316,6 +329,7 @@ data Item , _itAimStance :: AimStance , _wpNumBarrels :: Int , _itDimension :: ItemDimension + , _itCurseStatus :: CurseStatus } | Consumable { _itName :: String @@ -331,6 +345,7 @@ data Item , _itEffect :: ItEffect , _itHammer :: HammerPosition , _itAimStance :: AimStance + , _itCurseStatus :: CurseStatus } | Craftable { _itName :: String @@ -343,6 +358,7 @@ data Item , _itInvDisplay :: Item -> String , _itInvColor :: Color , _itAimStance :: AimStance + , _itCurseStatus :: CurseStatus } | Equipment { _itName :: String @@ -359,6 +375,7 @@ data Item , _itInvColor :: Color , _itHammer :: HammerPosition , _itAimStance :: AimStance + , _itCurseStatus :: CurseStatus } | Throwable { _itName :: String @@ -385,8 +402,10 @@ data Item , _itHammer :: HammerPosition , _itScroll :: Float -> Creature -> Item -> Item , _itAimStance :: AimStance + , _itCurseStatus :: CurseStatus } | NoItem +data CurseStatus = Uncursed | UndroppableIdentified | UndroppableUnidentified data ItemDimension = ItemDimension { _itDim :: Point3 -- length width height diff --git a/src/Dodge/Debug/Terminal.hs b/src/Dodge/Debug/Terminal.hs index 6e9f1e1c9..71033367f 100644 --- a/src/Dodge/Debug/Terminal.hs +++ b/src/Dodge/Debug/Terminal.hs @@ -1,7 +1,6 @@ module Dodge.Debug.Terminal where import Dodge.Data -import Dodge.Config.Data import Dodge.Creature import Control.Lens diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index a400501b6..1e34fb9a9 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -7,12 +7,6 @@ This module contains prototypical data structures. module Dodge.Default where import Dodge.Item.Weapon.ExtraEffect import Dodge.Data -import Dodge.Data.SoundOrigin -import Dodge.Item.Data -import Dodge.Creature.Stance.Data -import Dodge.Creature.State.Data -import Dodge.Creature.Perception.Data -import Dodge.Creature.Memory.Data import Dodge.SoundLogic import Dodge.Picture.Layer import Dodge.Wall.Delete @@ -50,7 +44,7 @@ defaultCreature = Creature , _crStance = Stance {_carriage=Walking 0 WasLeftForward ,_posture=AtEase - ,_strideLength = 40 + ,_strideLength = yourDefaultStrideLength } , _crVocalization = Mute , _crActionPlan = ActionPlan [] [] WatchAndWait [LiveLongAndProsper] @@ -68,6 +62,9 @@ defaultCreatureMemory = MemoryState { _soundsToInvestigate = [] } +defaultInvSize :: Int +defaultInvSize = 20 + defaultPerceptionState :: PerceptionState defaultPerceptionState = PerceptionState { _crAwakeLevel = Lethargic @@ -118,6 +115,12 @@ defaultAimMvType = AimMvType defaultAimingCrit :: Creature defaultAimingCrit = defaultCreature { _crMvType = defaultAimMvType } +yourDefaultSpeed :: Float +yourDefaultSpeed = 4 + +yourDefaultStrideLength :: Int +yourDefaultStrideLength = 40 + defaultState :: CreatureState defaultState = CrSt { _crDamage = [] @@ -128,6 +131,7 @@ defaultState = CrSt defaultEquipment :: Item defaultEquipment = Equipment { _itIdentity = Generic + , _itCurseStatus = Uncursed , _itName = "genericEquipment" , _itFloorPict = \_ -> (,) emptySH $ setLayer 0 $ onLayer FlItLayer $ polygon $ map toV2 [(-3,-3),(-3,3),(3,3),(3,-3)] , _itEquipPict = \_ _ -> (,) emptySH blank @@ -147,6 +151,7 @@ defaultItZoom = ItZoom 20 0.2 1 defaultConsumable :: Item defaultConsumable = Consumable { _itIdentity = Generic + , _itCurseStatus = Uncursed , _itName = "genericConsumable" , _itMaxStack = 9 , _itAmount = 1 @@ -194,6 +199,7 @@ defaultFlIt = FlIt {_flItRot=0,_flIt = defaultIt, _flItPos = V2 0 0, _flItID = 0 defaultIt :: Item defaultIt = Consumable { _itIdentity = Medkit25 + , _itCurseStatus = Uncursed , _itName = "defaultIt" , _itMaxStack = 3 , _itAmount = 2 diff --git a/src/Dodge/Default/Weapon.hs b/src/Dodge/Default/Weapon.hs index 0d71fd68c..04a6cd29d 100644 --- a/src/Dodge/Default/Weapon.hs +++ b/src/Dodge/Default/Weapon.hs @@ -3,8 +3,6 @@ module Dodge.Default.Weapon import Dodge.Data import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.InventoryDisplay -import Dodge.Item.Attachment.Data -import Dodge.Item.Data import Picture import ShapePicture @@ -12,6 +10,7 @@ import Linear.V3 defaultGun :: Item defaultGun = Weapon { _itName = "default" + , _itCurseStatus = Uncursed , _itIdentity = Pistol , _wpMaxAmmo = 15 , _wpLoadedAmmo = 15 diff --git a/src/Dodge/Default/World.hs b/src/Dodge/Default/World.hs index 0b4ec2a32..f7dbdb1d4 100644 --- a/src/Dodge/Default/World.hs +++ b/src/Dodge/Default/World.hs @@ -2,9 +2,7 @@ module Dodge.Default.World where import Dodge.Data import Dodge.Base -import Dodge.Config.Data import Dodge.Config.KeyConfig -import Dodge.Item.Data import Dodge.Bounds --import Dodge.Menu --import Picture @@ -81,7 +79,7 @@ defaultWorld = World , _inventoryMode = TopInventory , _lClickHammer = HammerUp , _foregroundShape = mempty - , _radDistortion = [] + , _distortions = [] , _gameRooms = [] , _preloadData = DummyPdata -- hack TODO remove this , _frameClock = 0 diff --git a/src/Dodge/Distortion.hs b/src/Dodge/Distortion.hs new file mode 100644 index 000000000..f070eed03 --- /dev/null +++ b/src/Dodge/Distortion.hs @@ -0,0 +1,10 @@ +module Dodge.Distortion where +import Dodge.Distortion.Data + +updateDistortion :: Distortion -> Maybe Distortion +updateDistortion dt = case dt of + RadialDistortion a b c v + | v > 1 -> Just $ RadialDistortion a b c $ max 1 (v - 0.05) + | v < 1 -> Just $ RadialDistortion a b c $ min 1 (v + 0.05) + | otherwise -> Nothing + diff --git a/src/Dodge/Distortion/Data.hs b/src/Dodge/Distortion/Data.hs new file mode 100644 index 000000000..262915205 --- /dev/null +++ b/src/Dodge/Distortion/Data.hs @@ -0,0 +1,7 @@ +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE StrictData #-} +module Dodge.Distortion.Data where +import Geometry + +data Distortion + = RadialDistortion Point2 Point2 Point2 Float diff --git a/src/Dodge/Event.hs b/src/Dodge/Event.hs index 6c2ae9f49..9b6aa3d7b 100644 --- a/src/Dodge/Event.hs +++ b/src/Dodge/Event.hs @@ -16,13 +16,11 @@ module Dodge.Event import Dodge.Event.Keyboard --import Dodge.Event.Menu import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.Base import Dodge.Base.Window --import Dodge.Creature.Action import Dodge.SoundLogic import Dodge.Inventory -import Dodge.Config.Data --import Geometry import Preload.Update import qualified IntMapHelp as IM diff --git a/src/Dodge/Initialisation.hs b/src/Dodge/Initialisation.hs index 5cf5adf59..a3d1ef728 100644 --- a/src/Dodge/Initialisation.hs +++ b/src/Dodge/Initialisation.hs @@ -2,7 +2,6 @@ module Dodge.Initialisation where import Dodge.Default.World import Dodge.Save import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.Creature import Dodge.Story import Dodge.WorldEvent.Cloud diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index 83813b3f1..8656778e3 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -2,6 +2,7 @@ module Dodge.Inventory ( checkInvSlotsYou , rmSelectedInvItem , addItem + , rmInvItem , updateCloseObjects , closeObjScrollDir ) diff --git a/src/Dodge/Item.hs b/src/Dodge/Item.hs index 754bdd6fe..ea2d502fa 100644 --- a/src/Dodge/Item.hs +++ b/src/Dodge/Item.hs @@ -1,8 +1,6 @@ module Dodge.Item where import Dodge.Data -import Dodge.Item.Data ---import Dodge.Base import Dodge.Default import Dodge.Picture import Picture diff --git a/src/Dodge/Item/Attachment.hs b/src/Dodge/Item/Attachment.hs index 5b6600ea3..a235c792d 100644 --- a/src/Dodge/Item/Attachment.hs +++ b/src/Dodge/Item/Attachment.hs @@ -5,7 +5,6 @@ module Dodge.Item.Attachment ) where import Dodge.Data -import Dodge.Item.Attachment.Data import Dodge.Default import Control.Lens hiding ((|>),(<|)) diff --git a/src/Dodge/Item/Attachment/Data.hs b/src/Dodge/Item/Attachment/Data.hs index 256f5b5a2..dbf2289d1 100644 --- a/src/Dodge/Item/Attachment/Data.hs +++ b/src/Dodge/Item/Attachment/Data.hs @@ -19,6 +19,8 @@ data ItAttachment | ItCharMode {_itCharMode :: Seq.Seq Char } | ItTargetPos { _itTargetPos :: Point2 } | ItInt { _itInt :: Int } + | ItFloat { _itFloat :: Float } + | ItBool { _itBool :: Bool } | NoItAttachment makeLenses ''ItAttachment diff --git a/src/Dodge/Item/Consumable.hs b/src/Dodge/Item/Consumable.hs index 869263749..68ece16ab 100644 --- a/src/Dodge/Item/Consumable.hs +++ b/src/Dodge/Item/Consumable.hs @@ -1,8 +1,5 @@ -module Dodge.Item.Consumable - where +module Dodge.Item.Consumable where import Dodge.Data -import Dodge.Data.SoundOrigin -import Dodge.Item.Data import Dodge.Picture.Layer import Dodge.Default import Dodge.SoundLogic diff --git a/src/Dodge/Item/Draw.hs b/src/Dodge/Item/Draw.hs index 27f8aa725..ddedbb708 100644 --- a/src/Dodge/Item/Draw.hs +++ b/src/Dodge/Item/Draw.hs @@ -1,9 +1,6 @@ -module Dodge.Item.Draw - where +module Dodge.Item.Draw where import Dodge.Data -import Dodge.Item.Data --import Dodge.Picture.Layer -import Dodge.Creature.Stance.Data --import Picture --import Shape import ShapePicture diff --git a/src/Dodge/Item/Equipment.hs b/src/Dodge/Item/Equipment.hs index abe7e6c68..d31ab70f4 100644 --- a/src/Dodge/Item/Equipment.hs +++ b/src/Dodge/Item/Equipment.hs @@ -1,7 +1,5 @@ -module Dodge.Item.Equipment - where +module Dodge.Item.Equipment where import Dodge.Data -import Dodge.Item.Data import Dodge.Item.Draw import Dodge.Default import Dodge.Default.Wall @@ -10,7 +8,6 @@ import Dodge.Item.Weapon.BatteryGuns import Dodge.Creature.Test import Dodge.Wall.Reflect import Dodge.Wall -import Dodge.Creature.State.Data import Picture import Geometry import ShapePicture diff --git a/src/Dodge/Item/Weapon.hs b/src/Dodge/Item/Weapon.hs index 0a46bd434..c13e41d8b 100644 --- a/src/Dodge/Item/Weapon.hs +++ b/src/Dodge/Item/Weapon.hs @@ -2,22 +2,18 @@ In progress: move out effects into other modules. -} module Dodge.Item.Weapon where import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.Base import Dodge.Zone import Dodge.Picture.Layer import Dodge.SoundLogic -import Dodge.Creature.Action import Dodge.WorldEvent import Dodge.Default import Dodge.Item.Draw -import Dodge.Item.Data import Dodge.Item.Weapon.BulletGuns import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.UseEffect import Dodge.Item.Weapon.Remote -import Dodge.Item.Attachment.Data import Dodge.Default.Weapon import Dodge.Item.Weapon.Grenade import Geometry @@ -83,40 +79,9 @@ removeItAttachment i _ w = w & creatures . ix i . crInv . ix itRef . itAttachmen cr = _creatures w IM.! i itRef = _crInvSel cr -blinkGun :: Item -blinkGun = defaultGun - { _itName = "BLINKER" - , _itIdentity = Blinker - , _wpMaxAmmo = 100 - , _wpLoadedAmmo = 100 - , _wpReloadTime = 20 - , _wpReloadState = 0 - , _itUseRate = 0 - , _itUseTime = 0 - , _itUse = const aSelf - , _itUseModifiers = - [ ammoCheckI - , hammerCheckI - ] - , _itLeftClickUse = Just $ hammerCheckL $ shootL aSelfL - , _wpSpread = 0.05 - , _wpRange = 20 - , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2[(-2,-2),(-2,2),(2,2),(2,0),(0,0),(0,-2)] - , _itAimingSpeed = 1 - , _itAimingRange = 0 - } - - shellExplosionAt :: Point2 -> World -> World shellExplosionAt = makeExplosionAt - -aSelf :: Creature -> World -> World -aSelf = blinkAction - -aSelfL :: Creature -> Int -> World -> World -aSelfL cr _ = blinkAction cr - reflect :: Float -> Float -> Float reflect a b = a + 2*(a-b) @@ -270,6 +235,7 @@ remoteBombUnarmedPic = color (dark $ dark orange) $ circleSolid 5 pipe :: Item pipe = Craftable { _itIdentity = Generic + , _itCurseStatus = Uncursed , _itName = "PIPE" , _itMaxStack = 3 , _itAmount = 3 diff --git a/src/Dodge/Item/Weapon/BatteryGuns.hs b/src/Dodge/Item/Weapon/BatteryGuns.hs index 066b22976..f48051cc6 100644 --- a/src/Dodge/Item/Weapon/BatteryGuns.hs +++ b/src/Dodge/Item/Weapon/BatteryGuns.hs @@ -12,11 +12,9 @@ import Dodge.WorldEvent import Dodge.WorldEvent.Damage import Dodge.Default import Dodge.Item.Draw -import Dodge.Item.Data import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.AmmoParams -import Dodge.Item.Attachment.Data import Dodge.Default.Weapon import Dodge.Item.Attachment import Dodge.WorldEvent.HelperParticle diff --git a/src/Dodge/Item/Weapon/Bezier.hs b/src/Dodge/Item/Weapon/Bezier.hs index bc3a0d969..97bf04ed9 100644 --- a/src/Dodge/Item/Weapon/Bezier.hs +++ b/src/Dodge/Item/Weapon/Bezier.hs @@ -4,13 +4,11 @@ module Dodge.Item.Weapon.Bezier import Dodge.Data import Dodge.Base import Dodge.Default.Weapon -import Dodge.Item.Data import Dodge.Item.Draw import Dodge.Item.Weapon.Targeting import Dodge.Item.Weapon.BulletGuns import Dodge.Item.Weapon.TriggerType import Dodge.Item.Weapon.ExtraEffect -import Dodge.Item.Attachment.Data import Dodge.Default import Dodge.Particle.Bullet.Spawn import Dodge.Particle.Bullet.HitEffect diff --git a/src/Dodge/Item/Weapon/Booster.hs b/src/Dodge/Item/Weapon/Booster.hs index 19fdb96ea..f86189ae5 100644 --- a/src/Dodge/Item/Weapon/Booster.hs +++ b/src/Dodge/Item/Weapon/Booster.hs @@ -6,12 +6,10 @@ import Dodge.Base import Dodge.Zone import Dodge.Base.Collide import Dodge.Default.Weapon -import Dodge.Item.Data import Geometry import qualified IntMapHelp as IM import Dodge.Picture.Layer import Picture -import Dodge.Item.Attachment.Data import ShapePicture import Shape diff --git a/src/Dodge/Item/Weapon/BulletGuns.hs b/src/Dodge/Item/Weapon/BulletGuns.hs index c2a43ac6b..a6a781673 100644 --- a/src/Dodge/Item/Weapon/BulletGuns.hs +++ b/src/Dodge/Item/Weapon/BulletGuns.hs @@ -15,11 +15,9 @@ import Dodge.Data import Dodge.Default.Weapon import Dodge.Default import Dodge.Item.Attachment -import Dodge.Item.Attachment.Data import Dodge.Item.Weapon.ExtraEffect import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.AmmoParams -import Dodge.Item.Data import Dodge.Item.Draw import Dodge.Item.Weapon.Bullet import Dodge.Item.Weapon.TriggerType @@ -75,18 +73,15 @@ autoGun = defaultAutoGun , _wpAmmo = basicBullet } autoGunPic :: Item -> SPic -autoGunPic it = - ( colorSH red (prismPoly +autoGunPic it = noPic $ + colorSH red (prismPoly (map (addZ 5) $ rectNESW 2 12 (-2) (-8)) (map (addZ 0) $ rectNESW 4 12 (-4) (-12)) ) <> translateSHf 0 (-1) (rotateSHx (negate $ pi/4) . upperPrismPoly 2 $ rectNESW (negate $ 3 + 0.25 * x) 0 3 (-5)) - , mempty - ) where x = fromIntegral $ loadedAmmo it - pistol :: Item pistol = defaultGun { _itName = "PISTOL" diff --git a/src/Dodge/Item/Weapon/ExtraEffect.hs b/src/Dodge/Item/Weapon/ExtraEffect.hs index 4e45df9a6..2bdec6bce 100644 --- a/src/Dodge/Item/Weapon/ExtraEffect.hs +++ b/src/Dodge/Item/Weapon/ExtraEffect.hs @@ -11,7 +11,6 @@ module Dodge.Item.Weapon.ExtraEffect ) where import Dodge.Data import Dodge.Base -import Dodge.Item.Data import Dodge.Item.Weapon.Decoration import Dodge.Item.Weapon.UseEffect --import Dodge.Item.Attachment.Data diff --git a/src/Dodge/Item/Weapon/Grenade.hs b/src/Dodge/Item/Weapon/Grenade.hs index 363ed0529..7bc846ac9 100644 --- a/src/Dodge/Item/Weapon/Grenade.hs +++ b/src/Dodge/Item/Weapon/Grenade.hs @@ -2,8 +2,6 @@ module Dodge.Item.Weapon.Grenade ( grenade ) where import Dodge.Data -import Dodge.Data.SoundOrigin -import Dodge.Item.Data import Dodge.Picture.Layer import Dodge.WorldEvent.Explosion import Dodge.Item.Weapon.TriggerType @@ -11,7 +9,6 @@ import Dodge.Default import Dodge.Base import Dodge.Zone import Dodge.SoundLogic -import Dodge.Item.Attachment.Data import Dodge.Item.Draw import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.ExtraEffect @@ -27,6 +24,7 @@ import qualified Data.IntMap.Strict as IM grenade :: Item grenade = Throwable { _itName = "GRENADE " ++ show fuseTime + , _itCurseStatus = Uncursed , _itIdentity = Grenade , _itMaxStack = 8 , _itAmount = 1 diff --git a/src/Dodge/Item/Weapon/InventoryDisplay.hs b/src/Dodge/Item/Weapon/InventoryDisplay.hs index d76b6eda9..4a20af808 100644 --- a/src/Dodge/Item/Weapon/InventoryDisplay.hs +++ b/src/Dodge/Item/Weapon/InventoryDisplay.hs @@ -5,7 +5,6 @@ module Dodge.Item.Weapon.InventoryDisplay ( basicWeaponDisplay ) where import Dodge.Data -import Dodge.Item.Attachment.Data import Padding import Data.Sequence diff --git a/src/Dodge/Item/Weapon/Launcher.hs b/src/Dodge/Item/Weapon/Launcher.hs index ccddf84e1..30d7c8318 100644 --- a/src/Dodge/Item/Weapon/Launcher.hs +++ b/src/Dodge/Item/Weapon/Launcher.hs @@ -3,13 +3,10 @@ module Dodge.Item.Weapon.Launcher , remoteLauncher ) where import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.Default.Weapon import Dodge.Default.Shell import Dodge.SoundLogic.LoadSound import Dodge.WorldEvent.Explosion -import Dodge.Item.Data -import Dodge.Item.Attachment.Data import Dodge.Item.Draw import Dodge.Item.Weapon.Shell import Dodge.Item.Weapon.Remote diff --git a/src/Dodge/Item/Weapon/SprayGuns.hs b/src/Dodge/Item/Weapon/SprayGuns.hs index 5c48f9096..fece80a07 100644 --- a/src/Dodge/Item/Weapon/SprayGuns.hs +++ b/src/Dodge/Item/Weapon/SprayGuns.hs @@ -14,14 +14,12 @@ import Dodge.SoundLogic.LoadSound import Dodge.WorldEvent import Dodge.Default import Dodge.Item.Draw -import Dodge.Item.Data --import Dodge.Item.Weapon.BulletGuns --import Dodge.Item.Weapon.InventoryDisplay import Dodge.Item.Weapon.TriggerType --import Dodge.Item.Weapon.ExtraEffect --import Dodge.Item.Weapon.UseEffect import Dodge.Item.Weapon.AmmoParams -import Dodge.Item.Attachment.Data import Dodge.Default.Weapon --import Dodge.Item.Attachment import Geometry diff --git a/src/Dodge/Item/Weapon/TriggerType.hs b/src/Dodge/Item/Weapon/TriggerType.hs index b6c93a9e3..b9cff9767 100644 --- a/src/Dodge/Item/Weapon/TriggerType.hs +++ b/src/Dodge/Item/Weapon/TriggerType.hs @@ -37,13 +37,10 @@ module Dodge.Item.Weapon.TriggerType ) where import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.SoundLogic import Dodge.Creature.Action (startReloadingWeapon) import Dodge.WorldEvent import Dodge.RandomHelp -import Dodge.Item.Attachment.Data -import Dodge.Item.Data import Dodge.Default import Sound.Data import Geometry diff --git a/src/Dodge/Item/Weapon/Utility.hs b/src/Dodge/Item/Weapon/Utility.hs new file mode 100644 index 000000000..da5ae6efd --- /dev/null +++ b/src/Dodge/Item/Weapon/Utility.hs @@ -0,0 +1,79 @@ +module Dodge.Item.Weapon.Utility where +import Dodge.Data +import Dodge.Default +import Dodge.Picture.Layer +import Dodge.Creature.Action +import Dodge.Item.Weapon.TriggerType +import Dodge.Default.Weapon +import Geometry +import Picture +--import qualified IntMapHelp as IM +import Shape +--import ShapePicture + +import Control.Lens +shrinkGun :: Item +shrinkGun = defaultGun + { _itName = "SHRINKER" + , _itIdentity = Generic + , _wpMaxAmmo = 100 + , _wpLoadedAmmo = 100 + , _wpReloadTime = 20 + , _wpReloadState = 0 + , _itUseRate = 0 + , _itUseTime = 0 + , _itAimStance = TwoHandFlat + , _itUse = useShrinkGun + , _itUseModifiers = + [ ammoCheckI + , hammerCheckI + ] + , _itLeftClickUse = Nothing + , _wpSpread = 0.05 + , _wpRange = 20 + , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2[(-2,-2),(-2,2),(2,2),(2,0),(0,0),(0,-2)] + , _itAimingSpeed = 1 + , _itAimingRange = 0 + , _itAttachment = ItBool True + } + +useShrinkGun :: Item -> Creature -> World -> World +useShrinkGun it cr = case _itBool $ _itAttachment it of + True -> sizeSelf 0.5 cr . f False UndroppableIdentified + . stripNoItems cr + . dropUnselected cr + False -> sizeSelf 1 cr . f True Uncursed + . setMinInvSize defaultInvSize cr + where + f isInUse cstatus = creatures . ix (_crID cr) . crInv . ix (_crInvSel cr) %~ + ( (itAttachment . itBool .~ isInUse) . (itCurseStatus .~ cstatus) ) + +blinkGun :: Item +blinkGun = defaultGun + { _itName = "BLINKER" + , _itIdentity = Blinker + , _wpMaxAmmo = 100 + , _wpLoadedAmmo = 100 + , _wpReloadTime = 20 + , _wpReloadState = 0 + , _itUseRate = 0 + , _itUseTime = 0 + , _itUse = const blinkAction + , _itUseModifiers = + [ ammoCheckI + , hammerCheckI + ] + , _itLeftClickUse = Just $ hammerCheckL $ shootL aSelfL + , _wpSpread = 0.05 + , _wpRange = 20 + , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2[(-2,-2),(-2,2),(2,2),(2,0),(0,0),(0,-2)] + , _itAimingSpeed = 1 + , _itAimingRange = 0 + } + + +aSelf :: Creature -> World -> World +aSelf = blinkAction + +aSelfL :: Creature -> Int -> World -> World +aSelfL cr _ = blinkAction cr diff --git a/src/Dodge/LevelGen/Data.hs b/src/Dodge/LevelGen/Data.hs index 496a28e97..46361d97b 100644 --- a/src/Dodge/LevelGen/Data.hs +++ b/src/Dodge/LevelGen/Data.hs @@ -20,7 +20,7 @@ data PSType = PutCrit {_unPutCrit :: Creature} | PutProp Prop | PutFlIt Item | PutPressPlate PressPlate - | PutBlock BlockMaterial [Int] Color [Point2] + | PutBlock BlockMaterial [Int] Wall [Point2] | PutCoordinate Point2 | PutMod Modification | PutTrigger (World -> Bool) diff --git a/src/Dodge/LevelGen/Switch.hs b/src/Dodge/LevelGen/Switch.hs index e9522612c..397734156 100644 --- a/src/Dodge/LevelGen/Switch.hs +++ b/src/Dodge/LevelGen/Switch.hs @@ -6,7 +6,6 @@ module Dodge.LevelGen.Switch ) where import Dodge.Data import Dodge.Default -import Dodge.Data.SoundOrigin import Dodge.SoundLogic import Picture import ShapePicture diff --git a/src/Dodge/Menu.hs b/src/Dodge/Menu.hs index e9bd2ef55..4335b0618 100644 --- a/src/Dodge/Menu.hs +++ b/src/Dodge/Menu.hs @@ -8,7 +8,6 @@ module Dodge.Menu where import Dodge.Data import Dodge.Save -import Dodge.Config.Data import Dodge.Config.Update import SDL import SDL.Internal.Numbered diff --git a/src/Dodge/Particle/Bullet/HitEffect.hs b/src/Dodge/Particle/Bullet/HitEffect.hs index 006f9392b..7ec3028dd 100644 --- a/src/Dodge/Particle/Bullet/HitEffect.hs +++ b/src/Dodge/Particle/Bullet/HitEffect.hs @@ -5,14 +5,12 @@ module Dodge.Particle.Bullet.HitEffect where import Dodge.Data import Dodge.Particle.Spark -import Dodge.Data.SoundOrigin import Dodge.Wall.Damage import Dodge.WorldEvent import Dodge.Particle.Bullet.Spawn import Dodge.SoundLogic import Dodge.RandomHelp import Dodge.WorldEvent.Shockwave -import Dodge.Creature.State.Data import Dodge.Creature.Property import Dodge.Wall.Reflect import Geometry diff --git a/src/Dodge/Particle/Spark.hs b/src/Dodge/Particle/Spark.hs index 4a1b3d449..bdfd55ce7 100644 --- a/src/Dodge/Particle/Spark.hs +++ b/src/Dodge/Particle/Spark.hs @@ -7,7 +7,6 @@ import Dodge.Data import Dodge.Particle.Bullet.Draw import Dodge.Particle.Bullet.Update import Dodge.WorldEvent.HitEffect -import Dodge.Creature.State.Data import Color import Geometry diff --git a/src/Dodge/Particle/TeslaArc.hs b/src/Dodge/Particle/TeslaArc.hs index 6223a99b3..802da2600 100644 --- a/src/Dodge/Particle/TeslaArc.hs +++ b/src/Dodge/Particle/TeslaArc.hs @@ -2,7 +2,6 @@ module Dodge.Particle.TeslaArc ( makeTeslaArcAt ) where import Dodge.Data -import Dodge.Creature.State.Data import Dodge.WorldEvent.Damage import Dodge.Base import Dodge.Zone diff --git a/src/Dodge/Placement/Instance/Turret.hs b/src/Dodge/Placement/Instance/Turret.hs index 0c6eef37f..12b13cfa6 100644 --- a/src/Dodge/Placement/Instance/Turret.hs +++ b/src/Dodge/Placement/Instance/Turret.hs @@ -8,7 +8,6 @@ import Dodge.WorldEvent.Explosion import Dodge.Item.Weapon.BatteryGuns import Dodge.SoundLogic.LoadSound import Dodge.SoundLogic -import Dodge.Data.SoundOrigin import Geometry import ShapePicture import Shape diff --git a/src/Dodge/Placement/Instance/Wall.hs b/src/Dodge/Placement/Instance/Wall.hs index 20f1ed282..65d6c6d38 100644 --- a/src/Dodge/Placement/Instance/Wall.hs +++ b/src/Dodge/Placement/Instance/Wall.hs @@ -23,9 +23,9 @@ lowWall ps = ps0j (PutForeground . colorSH col $ upperPrismPoly 30 ps) singleBlock :: Point2 -> [Placement] singleBlock a = [sPS a 0 - $ PutBlock StoneBlock [5,20,20] (greyN 0.5) + $ PutBlock StoneBlock [5,20,20] baseBlockPane $ reverse - $ rectNSWE 10 (-10) (-10) 10 + $ square 10 ] {- Places a line of blocks between two points. @@ -82,6 +82,17 @@ baseBlockPane = defaultWall , _wlDraw = True , _wlFireThrough = True } +dirtWall :: Wall +dirtWall = defaultWall + { _wlLine = (V2 0 0,V2 50 0) + , _wlID = 0 + , _wlColor = V4 (150/256) ( 75/256) 0 ( 250/256) + , _wlSeen = False + , _wlOpacity = Opaque + , _wlRotateTo = False + , _wlDraw = True + , _wlFireThrough = True + } baseWindowPane :: Wall baseWindowPane = defaultWall { _wlLine = (V2 0 0,V2 50 0) diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index e6be0c377..46cfb8311 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -102,7 +102,7 @@ placeSpotID ps pt w = case pt of PutDoor col f pss -> placeDoor col f (map (bimap doShift doShift) pss) w PutCoordinate coordp -> placeNewInto coordinates (doShift coordp) w PutSlideDoor pathing col f a b spd -> placeSlideDoor pathing col f (doShift a) (doShift b) spd w - PutBlock bm (hp:hps) col ps' -> placeBlock (map doShift ps') hp col Opaque hps bm w + PutBlock bm (hp:hps) wl ps' -> placeBlock (map doShift ps') hp wl hps bm w PutBlock{} -> error "messed up block placement somehow" PutLineBlock wl bm wdth dpth a b -> placeLineBlock wl bm wdth dpth (doShift a) (doShift b) w PutWall { _pwPoly = ps', _pwWall = wl } -> (0,placeWallPoly (map doShift ps') wl w) diff --git a/src/Dodge/Placement/PlaceSpot/Block.hs b/src/Dodge/Placement/PlaceSpot/Block.hs index 4828643dd..d05f2d555 100644 --- a/src/Dodge/Placement/PlaceSpot/Block.hs +++ b/src/Dodge/Placement/PlaceSpot/Block.hs @@ -8,10 +8,8 @@ import Dodge.Data import Dodge.Path import Dodge.Base import Dodge.Zone -import Dodge.Default.Wall import Geometry import qualified IntMapHelp as IM -import Color import Control.Lens import Data.List @@ -19,16 +17,15 @@ import qualified Data.IntSet as IS addBlock :: [Point2] -- ^ Block polygon + -> Wall -- ^ Base Pane -> Int -- ^ First layer of health - -> Color - -> Opacity -- ^ Is the block see through? -> [Int] -- ^ Extra layers of health -> BlockMaterial -> World -> World -addBlock (p:ps) hp col opacity hps bm w +addBlock (p:ps) wl hp hps bm w | hp <= 0 && null hps = w - | hp <= 0 = addBlock (p:ps) (head hps + hp) col opacity (tail hps) bm w + | hp <= 0 = addBlock (p:ps) wl (head hps + hp) (tail hps) bm w | otherwise = w & wallsZone . znObjects %~ flip (IM.foldl' $ flip wallInZone) panes & walls %~ IM.union panes @@ -40,31 +37,28 @@ addBlock (p:ps) hp col opacity hps bm w i = IM.newKey $ _walls w is = [i.. i + length lns-1] panes = IM.fromList $ zipWith - (\j (a,b) -> (,) j defaultWall + (\j (a,b) -> (,) j wl { _wlLine = (a,b) , _wlID = j - , _wlColor = col - , _wlOpacity = opacity , _wlStructure = BlockPart blid - , _wlFireThrough = True } ) is lns - wallInZone wl - | uncurry dist (_wlLine wl) <= 2*zoneSize - = insertIMInZone x y wlid wl - | otherwise = flip (foldl' $ flip (\(a,b) -> insertIMInZone a b wlid wl)) ips + wallInZone wl' + | uncurry dist (_wlLine wl') <= 2*zoneSize + = insertIMInZone x y wlid wl' + | otherwise = flip (foldl' $ flip (\(a,b) -> insertIMInZone a b wlid wl')) ips where (x,y) = zoneOfPoint $ uncurry pHalf (_wlLine wl) wlid = _wlID wl ips = map zoneOfPoint $ uncurry (divideLine (2*zoneSize)) (_wlLine wl) -addBlock _ _ _ _ _ _ _ = error "Trying to add a block with incomplete polygon" +addBlock _ _ _ _ _ _ = error "Trying to add a block with incomplete polygon" -placeBlock :: [Point2] -> Int -> Color -> Opacity -> [Int] -> BlockMaterial -> World -> (Int,World) -placeBlock poly i c opac is bm w +placeBlock :: [Point2] -> Int -> Wall -> [Int] -> BlockMaterial -> World -> (Int,World) +placeBlock poly i wl is bm w = (0, foldr (uncurry removePathsCrossing) wWithBlock pairs) where pairs = loopPairs poly - wWithBlock = addBlock poly i c opac is bm w + wWithBlock = addBlock poly wl i is bm w {- | Splits a line into many four cornered blocks. -} placeLineBlock diff --git a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs index 554b59b2e..71b8da25f 100644 --- a/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs +++ b/src/Dodge/Placement/PlaceSpot/TriggerDoor.hs @@ -11,7 +11,6 @@ import Picture import Geometry import qualified IntMapHelp as IM import Dodge.SoundLogic -import Dodge.Data.SoundOrigin import Data.List import Control.Lens diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 5cd5a28be..8f87f3f08 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -5,7 +5,6 @@ module Dodge.Render ) where import Dodge.Data -import Dodge.Config.Data import Dodge.Base.Window import Dodge.Render.Picture import Dodge.Render.ShapePicture @@ -216,15 +215,15 @@ doDrawing pdata w = do depthFunc $= Just Always blendFunc $= (One,Zero) -- perform any radial distortion - case _radDistortion w of + case _distortions w of [] -> do bindTO $ fst $ snd $ _fboBase pdata bindFramebuffer Framebuffer $= defaultFramebufferObject --bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms drawShader (_fullscreenShader pdata) 4 rds -> do - let bindDrawDist :: (Point2,Point2,Point2,Float) -> IO () - bindDrawDist ( V2 a b , V2 c d , V2 e f , g) = do + let bindDrawDist :: Distortion -> IO () + bindDrawDist (RadialDistortion (V2 a b) (V2 c d) (V2 e f) g) = do pokeArray (shadVBOptr $ _barrelShader pdata) [a,b,c,d,e,f,g] bindShaderBuffers [_barrelShader pdata] [1] drawShader (_barrelShader pdata) 1 diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index faab3f6fd..8f33b84ef 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -37,6 +37,7 @@ drawInventory w = subInventoryDisplay w `appendPic` displayInv 0 w subInventoryDisplay :: World -> Picture subInventoryDisplay w = case _inventoryMode w of + LockedInventory -> topInvCursor col iPos w TopInventory -> pictures [ closeObjectTexts w , topInvCursor col iPos w @@ -201,7 +202,13 @@ itemText :: Item -> Picture --itemText NoItem = dShadCol (greyN 0.5) $ text "----" --itemText it = dShadCol (_itInvColor it) $ text (_itInvDisplay it it) itemText NoItem = text "----" -itemText it = color (_itInvColor it) $ text (_itInvDisplay it it) +itemText it = case _itCurseStatus it of + UndroppableIdentified -> color black (text (_itInvDisplay it it)) + <> color (withAlpha 0.5 thecolor) (polygon (rectNSEW 120 (-70) 900 (-100))) + _ -> color thecolor $ text (_itInvDisplay it it) + where + thecolor = _itInvColor it + openCursorAt :: Float -- ^ Width diff --git a/src/Dodge/Room/Boss.hs b/src/Dodge/Room/Boss.hs index 8516d9c57..a6e2dde59 100644 --- a/src/Dodge/Room/Boss.hs +++ b/src/Dodge/Room/Boss.hs @@ -11,7 +11,6 @@ import Dodge.Room.Corridor import Dodge.Room.Path --import Dodge.LevelGen.Data import Dodge.Creature -import Dodge.Creature.State.Data import Dodge.RandomHelp import Dodge.Layout.Tree.Polymorphic import Geometry diff --git a/src/Dodge/Room/NoNeedWeapon.hs b/src/Dodge/Room/NoNeedWeapon.hs index 00004744c..7d05b1754 100644 --- a/src/Dodge/Room/NoNeedWeapon.hs +++ b/src/Dodge/Room/NoNeedWeapon.hs @@ -4,7 +4,6 @@ module Dodge.Room.NoNeedWeapon ) where import Dodge.Data import Dodge.Creature -import Dodge.Creature.State.Data --import Dodge.Creature.Inanimate import Dodge.LevelGen.Data import Dodge.Room.Procedural diff --git a/src/Dodge/Room/Procedural.hs b/src/Dodge/Room/Procedural.hs index e50762222..233815b14 100644 --- a/src/Dodge/Room/Procedural.hs +++ b/src/Dodge/Room/Procedural.hs @@ -13,6 +13,7 @@ import Dodge.Data import Dodge.Default.Wall import Dodge.PlacementSpot import Dodge.Placement.Instance +import Dodge.Item.Weapon.Utility import Dodge.Room.Link import Dodge.Room.Path import Dodge.Default.Room diff --git a/src/Dodge/Room/RoadBlock.hs b/src/Dodge/Room/RoadBlock.hs index 2e2810473..172a6354f 100644 --- a/src/Dodge/Room/RoadBlock.hs +++ b/src/Dodge/Room/RoadBlock.hs @@ -74,15 +74,20 @@ blockedCorridor = do sequence $ treeFromPost [] $ return $ Right $ set rmPmnts plmnts corridor dirtPoly :: [Point2] -> PSType -dirtPoly = PutBlock DirtBlock [1] (V4 (150/256) ( 75/256) 0 ( 250/256)) . reverse +dirtPoly = PutBlock DirtBlock [1] dirtWall . reverse -- | A single corridor with a destructible block blocking it. blockedCorridor' :: RandomGen g => State g Room blockedCorridor' = do r <- state $ randomR (0,pi) - theblocks <- takeOne [ [sPS (V2 20 40) r $ dirtPoly $ reverse $ square 10] - , [ sPS (V2 5 40) r $ dirtPoly $ square 10 - , sPS (V2 35 40) (r+0.5) $ dirtPoly $ square 10 + theblocks <- takeOne + [ -- [sPS (V2 20 40) r $ dirtPoly $ square 10] + --, [ sPS (V2 5 40) r $ dirtPoly $ square 10 + -- , sPS (V2 35 40) (r+0.5) $ dirtPoly $ square 10 + -- ] + --, + [ sPS (V2 5 50) r $ dirtPoly $ square 10 + , sPS (V2 35 35) (r+0.5) $ dirtPoly $ square 10 ] ] return $ corridor & rmPmnts .~ theblocks diff --git a/src/Dodge/Room/Room.hs b/src/Dodge/Room/Room.hs index 33ec95e95..825292e3c 100644 --- a/src/Dodge/Room/Room.hs +++ b/src/Dodge/Room/Room.hs @@ -18,7 +18,6 @@ import Dodge.Room.Link import Dodge.Room.Door import Dodge.Room.Airlock import Geometry -import Picture import Tile import Control.Lens @@ -147,7 +146,7 @@ miniRoom3 = do w <- state $ randomR (300,400) h <- state $ randomR (300,400) let cp = V2 0 (h/2+40) - let b = PutBlock StoneBlock [5,20,20] (greyN 0.5) $ map toV2 [(-10,-60) + let b = PutBlock StoneBlock [5,20,20] baseBlockPane $ map toV2 [(-10,-60) ,( 10,-60) ,( 10,-80) ,(-10,-80) diff --git a/src/Dodge/SoundLogic.hs b/src/Dodge/SoundLogic.hs index f51f839ae..e61c9cfcc 100644 --- a/src/Dodge/SoundLogic.hs +++ b/src/Dodge/SoundLogic.hs @@ -22,7 +22,6 @@ module Dodge.SoundLogic ( , module Dodge.SoundLogic.LoadSound ) where import Dodge.Data -import Dodge.Data.SoundOrigin import Sound.Data import Geometry.Data import Geometry.Vector diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 0b021fb2a..207fd69f9 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -5,10 +5,9 @@ Description : Simulation update module Dodge.Update (update) where import Dodge.Data import Dodge.Block -import Dodge.Data.SoundOrigin +import Dodge.Distortion import Dodge.SoundLogic import Dodge.Menu -import Dodge.Config.Data import Dodge.Base import Dodge.Zone import Dodge.WallCreatureCollisions @@ -46,7 +45,7 @@ functionalUpdate w = case _menuLayers w of w (_ : _) -> w [] -> checkEndGame - . updateRadialDistortions + . updateDistortions . updateCreatureSoundPositions . ppEvents . updateCamera @@ -112,16 +111,8 @@ updateCreatureGroups :: World -> World updateCreatureGroups w = w & creatureGroups %~ IM.mapMaybe (\cgp -> _crGroupUpdate cgp w cgp) -updateRadialDistortions :: World -> World -updateRadialDistortions = radDistortion %~ mapMaybe decreaseBulge - -decreaseBulge - :: (Point2,Point2,Point2,Float) - -> Maybe (Point2,Point2,Point2,Float) -decreaseBulge (a,b,c,v) - | v > 1 = Just (a,b,c,max 1 (v - 0.05) ) - | v < 1 = Just (a,b,c,min 1 (v + 0.05) ) - | otherwise = Nothing +updateDistortions :: World -> World +updateDistortions = distortions %~ mapMaybe updateDistortion updateLightSources :: World -> World updateLightSources w = over tempLightSources f w diff --git a/src/Dodge/Update/Camera.hs b/src/Dodge/Update/Camera.hs index d6efd8aa0..9813115d4 100644 --- a/src/Dodge/Update/Camera.hs +++ b/src/Dodge/Update/Camera.hs @@ -12,7 +12,6 @@ import Dodge.Zone import Dodge.Base.Window import Dodge.Base.Collide import Dodge.Config.KeyConfig -import Dodge.Item.Attachment.Data import Geometry --import Geometry.ConvexPoly import Dodge.GameRoom diff --git a/src/Dodge/Update/UsingInput.hs b/src/Dodge/Update/UsingInput.hs index c07479ed2..e0db145ef 100644 --- a/src/Dodge/Update/UsingInput.hs +++ b/src/Dodge/Update/UsingInput.hs @@ -4,7 +4,6 @@ module Dodge.Update.UsingInput ( updateUsingInput ) where import Dodge.Data -import Dodge.Item.Data import Dodge.Creature.Impulse.UseItem import Geometry diff --git a/src/Dodge/WallCreatureCollisions.hs b/src/Dodge/WallCreatureCollisions.hs index 96e376c37..3d059c194 100644 --- a/src/Dodge/WallCreatureCollisions.hs +++ b/src/Dodge/WallCreatureCollisions.hs @@ -7,7 +7,6 @@ import Dodge.Data --import Dodge.Creature.State.Data import Dodge.Zone import Dodge.Base -import Dodge.Config.Data import Geometry import Data.Monoid diff --git a/src/Dodge/WorldEvent/Damage.hs b/src/Dodge/WorldEvent/Damage.hs index b8155d9b0..33079403f 100644 --- a/src/Dodge/WorldEvent/Damage.hs +++ b/src/Dodge/WorldEvent/Damage.hs @@ -2,7 +2,6 @@ module Dodge.WorldEvent.Damage ( damThingHitWith ) where import Dodge.Data -import Dodge.Creature.State.Data import Geometry import Dodge.Wall.Damage diff --git a/src/Dodge/WorldEvent/Explosion.hs b/src/Dodge/WorldEvent/Explosion.hs index e58a8d476..c7f8194d7 100644 --- a/src/Dodge/WorldEvent/Explosion.hs +++ b/src/Dodge/WorldEvent/Explosion.hs @@ -8,7 +8,6 @@ module Dodge.WorldEvent.Explosion , makeTeslaExplosionAt ) where import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.Default import Dodge.Zone import Dodge.Base.Collide diff --git a/src/Dodge/WorldEvent/HitEffect.hs b/src/Dodge/WorldEvent/HitEffect.hs index 73f0e25d0..fc54836b8 100644 --- a/src/Dodge/WorldEvent/HitEffect.hs +++ b/src/Dodge/WorldEvent/HitEffect.hs @@ -5,7 +5,6 @@ module Dodge.WorldEvent.HitEffect , penWalls ) where import Dodge.Data -import Dodge.Creature.State.Data import Geometry import Data.Bifunctor diff --git a/src/Dodge/WorldEvent/Shockwave.hs b/src/Dodge/WorldEvent/Shockwave.hs index d9232067e..4102429cb 100644 --- a/src/Dodge/WorldEvent/Shockwave.hs +++ b/src/Dodge/WorldEvent/Shockwave.hs @@ -4,7 +4,6 @@ module Dodge.WorldEvent.Shockwave ) where import Dodge.Data -import Dodge.Creature.State.Data import Dodge.Wall.Damage import Dodge.Base import Dodge.Zone diff --git a/src/Dodge/WorldEvent/Sound.hs b/src/Dodge/WorldEvent/Sound.hs index 74b48b0f0..8b759900e 100644 --- a/src/Dodge/WorldEvent/Sound.hs +++ b/src/Dodge/WorldEvent/Sound.hs @@ -6,7 +6,6 @@ module Dodge.WorldEvent.Sound ) where import Dodge.Data -import Dodge.Data.SoundOrigin import Dodge.SoundLogic import Sound.Data import Geometry.Data diff --git a/src/Dodge/WorldEvent/SpawnParticle.hs b/src/Dodge/WorldEvent/SpawnParticle.hs index 5fcfc7b23..6cb9f35ec 100644 --- a/src/Dodge/WorldEvent/SpawnParticle.hs +++ b/src/Dodge/WorldEvent/SpawnParticle.hs @@ -7,9 +7,6 @@ module Dodge.WorldEvent.SpawnParticle , makeFlameletTimed ) where import Dodge.Data -import Dodge.Data.SoundOrigin -import Dodge.Creature.State.Data ---import Dodge.WorldEvent.Damage import Dodge.Base import Dodge.WorldEvent.HitEffect import Dodge.WorldEvent.ThingsHit diff --git a/src/ShapePicture.hs b/src/ShapePicture.hs index 7c8245d10..81ff8681f 100644 --- a/src/ShapePicture.hs +++ b/src/ShapePicture.hs @@ -4,6 +4,7 @@ module ShapePicture , translateSPz , rotateSP , SPic + , noPic , _spShape , _spPicture ) @@ -16,6 +17,9 @@ import Data.Bifunctor type SPic = (Shape, Picture) +noPic :: Shape -> SPic +noPic sh = (sh,mempty) + _spShape :: SPic -> Shape _spShape = fst _spPicture :: SPic -> Picture