diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index 4cc24ca7d..a38d96817 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -199,7 +199,7 @@ defaultIt = Consumable , _itMaxStack = 3 , _itAmount = 2 , _cnEffect = const return - , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ map toV2 [(-3,-3),(-3,3),(3,3),(3,-3)] + , _itFloorPict = \_ -> (,) emptySH $ onLayer FlItLayer $ polygon $ square 3 , _itEquipPict = \_ _ -> (,) emptySH blank , _itID = Nothing , _itInvDisplay = _itName @@ -209,15 +209,15 @@ defaultIt = Consumable , _itAimStance = LeaveHolstered } defaultDrawButton :: Color -> Button -> SPic -defaultDrawButton col bt - | _btState bt == BtOff = - ( translateSHz 15 . colorSH col $ upperPrismPoly 5 $ rectNSEW 5 (-5) 10 (-10) - , mempty - ) - | otherwise = - ( translateSHz 15 . colorSH red $ upperPrismPoly 5 $ rectNSEW (-3) (-5) 10 (-10) - , mempty - ) +defaultDrawButton col bt = + ( translateSHz 15 . colorSH col $ upperPrismPoly 5 buttonGeometry + , mempty + ) + where + buttonGeometry + | _btState bt == BtOff = rectWH width 5 + | otherwise = rectNSEW (-3) (-5) width (-width) + width = 8 defaultButton :: Button defaultButton = Button { _btPict = defaultDrawButton (dark red) @@ -240,7 +240,7 @@ defaultPT = Projectile } defaultPP :: PressPlate defaultPP = PressPlate - { _ppPict = onLayer PressPlateLayer $ color (dim $ dim $ bright blue) $ circleSolid 5 + { _ppPict = onLayer PressPlateLayer . color (dim . dim $ bright blue) $ circleSolid 5 , _ppPos = V2 0 0 , _ppRot = 0 , _ppEvent = const id @@ -257,6 +257,5 @@ defaultTLS = TLS } where f _ t - | _tlsTime t <= 0 - = Nothing - | otherwise = Just $ t & tlsTime -~ 1 + | _tlsTime t <= 0 = Nothing + | otherwise = Just $ t & tlsTime -~ 1 diff --git a/src/Dodge/Item/Weapon.hs b/src/Dodge/Item/Weapon.hs index 83d559017..05679bd9c 100644 --- a/src/Dodge/Item/Weapon.hs +++ b/src/Dodge/Item/Weapon.hs @@ -530,10 +530,10 @@ multGun = defaultGun } multGunSPic :: Item -> SPic multGunSPic it = - ( (colorSH red $ - upperPrismPoly 2 (rectNESW 4 8 (-4) (-12)) ++ + ( colorSH red ( + upperPrismPoly 2 (rectNESW 4 8 (-4) (-12)) <> translateSHf 8 0 (concatMap barrel [12,7,2,-3,-8] <> - (upperPrismPoly 2 $ map toV2 [(-1.5,12),(-2,12),(-2,-12),(-1.5,-12)]) + upperPrismPoly 2 (map toV2 [(-1.5,12),(-2,12),(-2,-12),(-1.5,-12)]) ) ) <> bulletClip am , mempty @@ -566,21 +566,21 @@ longGun = defaultGun , withMuzFlareI ] , _wpRange = 200 - , _itFloorPict = \_ -> longGunSPic + , _itFloorPict = longGunSPic , _itAimingSpeed = 0.2 , _itAimingRange = 1 , _itZoom = defaultItZoom , _itAimZoom = defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5} - , _itEquipPict = pictureWeaponOnAim $ \_ -> longGunSPic + , _itEquipPict = pictureWeaponOnAim longGunSPic , _itScroll = zoomLongGun , _itAttachment = ItScope (V2 0 0) 0 1 False , _itEffect = itemLaserScopeEffect , _wpAmmo = hvBullet , _itAimStance = TwoHandTwist } -longGunSPic :: SPic -longGunSPic = - ( colorSH orange $ upperPrismPoly 5 $ rectNESW 2 12 (-2) (-12) +longGunSPic :: Item -> SPic +longGunSPic _ = + ( colorSH orange $ upperPrismPoly 5 $ rectWH 12 2 , mempty ) diff --git a/src/Dodge/Item/Weapon/Bezier.hs b/src/Dodge/Item/Weapon/Bezier.hs index 6384bf0f3..c5a93d93b 100644 --- a/src/Dodge/Item/Weapon/Bezier.hs +++ b/src/Dodge/Item/Weapon/Bezier.hs @@ -29,7 +29,8 @@ bezierGun = defaultGun { _itName = "B-GUN" , _itUse = \_ -> useTargetPos $ \p -> shootBezier $ fromJust p -- <- the start point , _itUseModifiers = - [ useTimeCheckI + [ ammoCheckI + , useTimeCheckI , withSoundStart tap2S , useAmmo 1 , withMuzFlareI diff --git a/src/Dodge/LevelGen/Data.hs b/src/Dodge/LevelGen/Data.hs index 063d3f77e..bcb638c2d 100644 --- a/src/Dodge/LevelGen/Data.hs +++ b/src/Dodge/LevelGen/Data.hs @@ -60,6 +60,9 @@ jsps0J pst plm = Just $ Placement (PS (V2 0 0) 0 pst) $ \_ -> Just plm ps0 :: PSType -> (Int -> Maybe Placement) -> Placement ps0 pst = Placement (PS (V2 0 0) 0 pst) +jps0 :: PSType -> (Int -> Maybe Placement) -> Maybe Placement +jps0 pst = Just . Placement (PS (V2 0 0) 0 pst) + ps0j :: PSType -> Placement -> Placement ps0j pst plmnt = Placement (PS (V2 0 0) 0 pst) (const $ Just plmnt) diff --git a/src/Dodge/LevelGen/Switch.hs b/src/Dodge/LevelGen/Switch.hs index 44368a8f3..0b1fdddb1 100644 --- a/src/Dodge/LevelGen/Switch.hs +++ b/src/Dodge/LevelGen/Switch.hs @@ -21,8 +21,9 @@ makeButton col eff = Button { _btPict = defaultDrawButton col , _btPos = V2 0 0 , _btRot = 0 - , _btEvent = \b w -> eff . over buttons (IM.adjust turnOn (_btID b)) - . soundFromGeneral (LeverSound 0) (btpos b) click1S Nothing $ w + , _btEvent = \b w -> eff + . over buttons (IM.adjust turnOn (_btID b)) + . soundFromGeneral (LeverSound 0) (btpos b) click1S Nothing $ w , _btID = 0 , _btText = "Button" , _btState = BtOff diff --git a/src/Dodge/Room.hs b/src/Dodge/Room.hs index 69d423702..6a4bf87c8 100644 --- a/src/Dodge/Room.hs +++ b/src/Dodge/Room.hs @@ -10,6 +10,7 @@ import Dodge.Item.Weapon import Dodge.Item.Weapon.AutoGun import Dodge.Item.Weapon.Launcher import Dodge.Creature +import Dodge.Room.Foreground --import Dodge.Creature.Inanimate --import Dodge.LevelGen import Dodge.LevelGen.Data @@ -21,6 +22,7 @@ import Dodge.Default.Wall --import Dodge.Layout import Dodge.Layout.Tree.Polymorphic import Dodge.Layout.Tree.Either +import Dodge.LightSources.Fitting --import Dodge.LightSources --import Dodge.SoundLogic import Dodge.Room.Data @@ -78,9 +80,11 @@ roomPadCut ps p = defaultRoom roomPillars :: Room roomPillars = over rmLinks init $ set rmPS plmnts $ roomRect 240 240 2 2 where - plmnts = sPS (V2 120 120) 0 putLamp - : sPS (V2 12 12) 0 putLamp - : sPS (V2 228 228) 0 putLamp + plmnts = mountedLightI 70 (V2 120 24) (V2 120 216) + : mountedLightV (V2 12 12) (V3 25 25 70) + : mountedLightV (V2 228 228) (V3 215 215 70) + : sps0 (PutForeground $ thinHighBar 75 (V2 26 25) (V2 120 25)) + : sps0 (PutForeground $ thinHighBar 75 (V2 214 215) (V2 120 215)) : g 180 150 90 60 f a x b y = putBlockRect a x b y g a b c d = f a b a b ++ f a b c d ++ f c d a b ++ f c d c d @@ -321,11 +325,9 @@ weaponBetweenPillars = do ,sPS crPos2 (d crPos2) randC1 ] theRoom = roomPillars & rmPS %~ (++ plmnts) --- & rmPolys %~ (rectNSWE 300 0 0 300 :) (fmap connectRoom . randomiseOutLinks) =<< filterLinks f theRoom where f (_,a) = a == 0 - --f (_,_) = True -- this is probably preferable... weaponLongCorridor :: RandomGen g => State g (Tree (Either Room Room)) weaponLongCorridor = do diff --git a/src/Dodge/Room/LongDoor.hs b/src/Dodge/Room/LongDoor.hs index f95c9689e..107a5eb1c 100644 --- a/src/Dodge/Room/LongDoor.hs +++ b/src/Dodge/Room/LongDoor.hs @@ -39,10 +39,10 @@ twinSlowDoorRoom w h x = defaultRoom ] , _rmPath = [] , _rmPS = - [ Placement (PS (V2 0 (h-5)) pi $ PutButton $ makeSwitch col red id id) + [ Placement (PS (V2 0 (h-5)) pi $ PutButton $ makeButton col id) $ \btid -> jsps0J (PutSingleDoor col (cond' btid) (V2 x 1) (V2 x h) wlSpeed) $ ps0 (PutSingleDoor col (cond' btid) (V2 (-x) 1) (V2 (-x) h) wlSpeed) - $ \did -> Just $ ps0 (PutLS (colorLightAt (V3 0.75 0 0) (V3 0 (h-1) lampHeight) 0)) + $ \did -> jps0 (PutLS (colorLightAt (V3 0.75 0 0) (V3 0 (h-1) lampHeight) 0)) $ \lsid -> jsps0 $ PutProp $ addColorChange lsid did $ lampCoverWhen (drmoving did) (V2 0 (h-1)) lampHeight ] , _rmBound = ps @@ -62,7 +62,7 @@ twinSlowDoorRoom w h x = defaultRoom [rectNSWE h 0 (-w) w ,rectNSWE 20 (-h) (negate x) x ] - cond' btid w' = _btState (_buttons w' IM.! btid) == BtOn + cond' btid w' = _btState (_buttons w' IM.! btid) /= BtOff col = dim $ dim $ bright red twinSlowDoorChasers diff --git a/src/Geometry.hs b/src/Geometry.hs index ce99de928..067141cf9 100644 --- a/src/Geometry.hs +++ b/src/Geometry.hs @@ -63,8 +63,11 @@ rectNSEW !n !s !e !w = rectNESW n e s w rectNSWE :: Float -> Float -> Float -> Float -> [Point2] rectNSWE !n !s !w !e = [V2 w n, V2 w s, V2 e s, V2 e n] -- | Draw a rectangle around the origin with given height and width -rectWdthHght :: Float -> Float -> [Point2] -rectWdthHght w h = rectNSWE h (-h) (-w) w +rectWH :: Float -> Float -> [Point2] +rectWH w h = rectNSWE h (-h) (-w) w + +square :: Float -> [Point2] +square n = rectWH n n mirrorXAxis :: [Point2] -> [Point2] mirrorXAxis ps = orderPolygon $ ps ++ mapMaybe f ps