diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index 3ff6532ae..d503bb621 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -573,9 +573,9 @@ data Wall , _blHP :: Int , _wlIsSeeThrough :: Bool , _blVisible :: Bool - , _blShadows :: [Int] , _blDegrades :: [Int] , _wlCastShadow :: Bool + , _blShadows :: [Int] } | MultiBlock { _wlLine :: [Point2] diff --git a/src/Dodge/Item/Weapon.hs b/src/Dodge/Item/Weapon.hs index 4e3f5d4cc..f7039b9f6 100644 --- a/src/Dodge/Item/Weapon.hs +++ b/src/Dodge/Item/Weapon.hs @@ -62,6 +62,7 @@ pistol = Weapon , _wpFireState = 0 , _wpFire = shootWithSound 0 . withRandomDir 0.1 + . withMuzFlare . withVelWthHiteff (30,0) 2 $ threeEff' bulHitCr' bulHitWall' bulHitFF' , _wpSpread = 0.02 @@ -124,17 +125,19 @@ autoGun = defaultGun , _itInvDisplay = displayAutoGun } autoFireMode = shootWithSound (fromIntegral autoGunSound) - $ withRecoil 40 - $ torqueBefore 0.05 - $ withRandomDir (autogunSpread/2) - $ withVelWthHiteff (50,0) 3 - $ threeEff' bulHitCr' bulHitWall' bulHitFF' + . withRecoil 40 + . torqueBefore 0.05 + . withRandomDir (autogunSpread/2) + . withMuzFlare + . withVelWthHiteff (50,0) 3 + $ threeEff' bulHitCr' bulHitWall' bulHitFF' singleFireMode = shootWithSound (fromIntegral autoGunSound) - $ withRecoil 40 - $ torqueAfter 0.03 - $ withRandomDir (autogunSpread/2) - $ withVelWthHiteff (50,0) 3 - $ threeEff' bulHitCr' bulHitWall' bulHitFF' + . withRecoil 40 + . torqueAfter 0.03 + . withRandomDir (autogunSpread/2) + . withMuzFlare + . withVelWthHiteff (50,0) 3 + $ threeEff' bulHitCr' bulHitWall' bulHitFF' incMode :: Int -> World -> World incMode _ w @@ -422,9 +425,10 @@ hvAutoGun = defaultAutoGun , _itEquipPict = drawWeapon $ color orange $ polygon $ rectNESW 5 5 (-5) (-5) } where mkHvBul = withSound (fromIntegral longGunSound) - $ withThinSmoke - $ withVelWthHiteff (80,0) 6 - $ threeEff' + . withThinSmoke + . withMuzFlare + . withVelWthHiteff (80,0) 6 + $ threeEff' hvBulHitCr' hvBulHitWall' bulHitFF' ltAutoGun = defaultAutoGun @@ -436,7 +440,8 @@ ltAutoGun = defaultAutoGun , _wpReloadState = 0 , _wpFireRate = 4 , _wpFireState = 0 - , _wpFire = shootWithSound 0 . withRandomDir 0.3 $ withVelWthHiteff (30,0) 2 bulletEffect' + , _wpFire = shootWithSound 0 . withRandomDir 0.3 + . withMuzFlare $ withVelWthHiteff (30,0) 2 bulletEffect' , _wpSpread = 0.5 , _wpRange = 20 , _itFloorPict = onLayer FlItLayer $ color green $ pictures [polygon $ rectNSWE 4 (-4) (-4) 0 @@ -463,6 +468,7 @@ miniGun = defaultAutoGun , _wpFire = withWarmUp 50 . torqueBefore 0.03 . withSidePush 50 . withRecoil 15 . withRandomDir 0.1 . withRandomOffset 9 + . withMuzFlare $ withVelWthHiteff (30,0) 2 bulletEffect' , _wpSpread = autogunSpread , _wpRange = 20 @@ -555,11 +561,11 @@ longGun = defaultGun , _wpFireRate = 100 , _wpFireState = 0 , _wpFire = shootWithSound (fromIntegral longGunSound) - $ withThickSmoke - $ torqueAfter 0.05 - $ withVelWthHiteff (60,0) 6 - $ threeEff' - hvBulHitCr' hvBulHitWall' bulHitFF' + . withThickSmoke + . torqueAfter 0.05 + . withMuzFlare + . withVelWthHiteff (60,0) 6 + $ threeEff' hvBulHitCr' hvBulHitWall' bulHitFF' , _wpSpread = 0.0 , _wpRange = 200 diff --git a/src/Dodge/Item/Weapon/TriggerType.hs b/src/Dodge/Item/Weapon/TriggerType.hs index 48814cb52..97d3c7ae1 100644 --- a/src/Dodge/Item/Weapon/TriggerType.hs +++ b/src/Dodge/Item/Weapon/TriggerType.hs @@ -94,7 +94,7 @@ shoot f cid w | fireCondition = over (pointerToItem . wpLoadedAmmo) (\ammo -> am reloadCondition = _wpLoadedAmmo item == 0 withMuzFlare :: (Int -> World -> World) -> Int -> World -> World -withMuzFlare f cid w = over tempLightSources (tLightAt 4 pos :) +withMuzFlare f cid w = over tempLightSources (tLightAt 3 pos :) . lowLightAt pos2 $ f cid w where cr = _creatures w IM.! cid dir = _crDir cr @@ -112,8 +112,8 @@ withRandomDir acc f cid w = over (creatures . ix cid . crDir) (\d -> d - a) withVelWthHiteff :: Point2 -> Float -> HitEffect' -> Int -> World -> World withVelWthHiteff vel width hiteff cid w = over particles' ((:) newbul) - . over tempLightSources ((:) (tLightAt 4 pos)) - . lowLightAt pos2 +-- . over tempLightSources ((:) (tLightAt 4 pos)) +-- . lowLightAt pos2 $ set randGen g w where cr = _creatures w IM.! cid diff --git a/src/Geometry.hs b/src/Geometry.hs index 67f13627f..e2e2d40af 100644 --- a/src/Geometry.hs +++ b/src/Geometry.hs @@ -36,6 +36,7 @@ closestPointOnLineParam a b p rectNESW :: Float -> Float -> Float -> Float -> [Point2] rectNESW a b c d = [(b,a),(b,c),(d,c),(d,a) ] +rectNSEW :: Float -> Float -> Float -> Float -> [Point2] rectNSEW n s e w = rectNESW n e s w rectNSWE :: Float -> Float -> Float -> Float -> [Point2] @@ -89,6 +90,7 @@ safeNormalizeV p = normalizeV p -- this has been called somewhere with l1 == l2 isLHS :: Point2 -> Point2 -> Point2 -> Bool {-# INLINE isLHS #-} +isLHS' :: (Float, Float) -> (Float, Float) -> Point2 -> Bool isLHS' l1 l2 p | l1 == l2 = False | otherwise = closestPointOnLineParam l1 (l1 +.+ vNormal (l2 -.- l1)) p < 0 @@ -138,6 +140,7 @@ circOnLine p1 p2 c rad = magV (p1 -.- c) <= rad || magV (p2 -.- c) <= rad isJustTrue (Just True) = True isJustTrue _ = False +difference :: (Ord a, Num a) => a -> a -> a difference x y | x > y = x - y | otherwise = y - x @@ -145,6 +148,7 @@ reflectIn :: Point2 -> Point2 -> Point2 reflectIn line vec = let angle = 2 * angleBetween line vec in rotateV angle vec +angleBetween :: Point2 -> Point2 -> Float angleBetween v1 v2 = argV v1 - argV v2 doublePair :: (a,a) -> [(a,a)] @@ -195,7 +199,7 @@ ssaTri :: Float -> Float -> Float -> Float ssaTri ab bc a | sin a == 0 = 0 | bc == 0 = ab - | otherwise = let c = asin ( (ab * (sin a))/bc) + | otherwise = let c = asin ( (ab * sin a)/bc) b = pi - (a + c) in sin b * bc / sin a diff --git a/src/Loop.hs b/src/Loop.hs index 752e173af..ce1d724a9 100644 --- a/src/Loop.hs +++ b/src/Loop.hs @@ -10,7 +10,6 @@ import qualified Graphics.Rendering.OpenGL as GL import Control.Monad import System.Mem import Foreign.C -import Geometry import Preload