diff --git a/src/Dodge/Base.hs b/src/Dodge/Base.hs index 6f59f3d7f..a822fa7c3 100644 --- a/src/Dodge/Base.hs +++ b/src/Dodge/Base.hs @@ -328,7 +328,7 @@ zoneOfSight :: World -> [(Int,Int)] zoneOfSight w = [(a,b) | a <- [minimum xs .. maximum xs] , b <- [minimum ys .. maximum ys] ] - where (xs,ys) = unzip $ map zoneOfPoint $ screenPolygon w ++ [_cameraCenter w] + where (xs,ys) = unzip $ map zoneOfPoint $ screenPolygon w ++ [_cameraViewFrom w] screenPolygon :: World -> [Point2] screenPolygon w = [tr,tl,bl,br] @@ -751,6 +751,9 @@ cartePosToScreen w = doWindowScale . doRotate . doZoom . doTranslate mouseWorldPos :: World -> Point2 mouseWorldPos w = _cameraPos w +.+ (1/_cameraZoom w) *.* rotateV (_cameraRot w) (_mousePos w) +mouseCartePos :: World -> Point2 +mouseCartePos w = _carteCenter w +.+ (1/_carteZoom w) *.* rotateV (_carteRot w) (_mousePos w) + logistic :: Float -> Float -> Float -> (Float -> Float) logistic x0 l k x = l / (1 + exp (k*(x0 - x))) diff --git a/src/Dodge/Critters.hs b/src/Dodge/Critters.hs index ff73debb6..940183883 100644 --- a/src/Dodge/Critters.hs +++ b/src/Dodge/Critters.hs @@ -3,7 +3,7 @@ module Dodge.Critters where import Dodge.Data import Dodge.AIs import Dodge.CreatureState -import Dodge.Prototypes +import Dodge.Default import Dodge.Base import Dodge.Item.Weapon import Dodge.Item.Consumable @@ -37,87 +37,87 @@ colouredEnemy col = pictures [color col $ circleSolid 10, circLine 10] -- armouredSwarmCrit :: Int -> Creature --- armouredSwarmCrit n = (basicCreature n) +-- armouredSwarmCrit n = (defaultCreature n) -- -- { _crUpdate = encircleAI' n -- { _crUpdate = swarmAI lineOrth n -- , _crHP = 30 -- , _crPict = equipOnTop goalPict --- , _crState = basicState {_goals = [[]], _faction = EncircleFlock} +-- , _crState = defaultState {_goals = [[]], _faction = EncircleFlock} -- , _crInv = IM.fromList [(0,frontArmour)] -- } -- -- swarmCrit :: Int -> Creature --- swarmCrit n = (basicCreature n) +-- swarmCrit n = (defaultCreature n) -- -- { _crUpdate = encircleAI' n -- { _crUpdate = swarmAI lineOrth n -- , _crHP = 30 -- , _crPict = equipOnTop goalPict --- , _crState = basicState {_goals = [[]], _faction = EncircleFlock} +-- , _crState = defaultState {_goals = [[]], _faction = EncircleFlock} -- , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] -- } -- -- encircleCrit :: Int -> Creature --- encircleCrit n = (basicCreature n) +-- encircleCrit n = (defaultCreature n) -- -- { _crUpdate = encircleAI' n -- { _crUpdate = swarmAI lineOrth n -- , _crHP = 30 -- , _crPict = equipOnTop goalPict --- , _crState = basicState {_goals = [[]], _faction = EncircleFlock} +-- , _crState = defaultState {_goals = [[]], _faction = EncircleFlock} -- , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] -- } -- spawnerCrit :: Creature -spawnerCrit = basicCreature +spawnerCrit = defaultCreature { _crUpdate = stateUpdate $ spawnerAI chaseCrit , _crHP = 300 , _crPict = enemyPict blue - , _crState = basicState {_goals = [[WaitFor 0]] + , _crState = defaultState {_goals = [[WaitFor 0]] } , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] } -- -- guardMelee :: Int -> Creature --- guardMelee n = (basicCreature n) +-- guardMelee n = (defaultCreature n) -- { _crUpdate = meleeAI' n -- , _crHP = 30 -- , _crPict = equipOnTop goalPict --- , _crState = basicState {_goals = [[InitGuard]] +-- , _crState = defaultState {_goals = [[InitGuard]] -- ,_faction = ChaseCritters} -- , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] -- } smallChaseCrit :: Creature -smallChaseCrit = basicCreature +smallChaseCrit = defaultCreature { _crUpdate = stateUpdate chaseAI , _crHP = 1 , _crRad = 4 --, _crPict = equipOnTop goalPict , _crPict = enemyPict green - , _crState = basicState {_goals = [[Wait]] + , _crState = defaultState {_goals = [[Wait]] ,_faction = ChaseCritters} , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] , _crCorpse = onLayer CorpseLayer $ color (greyN 0.5) $ circleSolid 4 } chaseCrit :: Creature -chaseCrit = basicCreature +chaseCrit = defaultCreature { _crUpdate = stateUpdate chaseAI , _crHP = 300 -- , _crPict = goalPict -- enemyPict green , _crPict = enemyPict green - , _crState = basicState {_goals = [[Wait]] + , _crState = defaultState {_goals = [[Wait]] ,_faction = ChaseCritters} , _crInv = IM.empty -- IM.fromList [(0,frontArmour)] } armourChaseCrit :: Creature -armourChaseCrit = basicCreature +armourChaseCrit = defaultCreature { _crUpdate = stateUpdate chaseAI , _crHP = 300 , _crPict = enemyPict green - , _crState = basicState {_goals = [[Wait]]} + , _crState = defaultState {_goals = [[Wait]]} , _crInv = IM.fromList [(0,frontArmour)] } miniGunCrit :: Creature -miniGunCrit = basicCreature +miniGunCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate miniAI @@ -126,11 +126,11 @@ miniGunCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[InitGuard]]} + , _crState = defaultState {_goals = [[InitGuard]]} , _crHP = 500 } longCrit :: Creature -longCrit = basicCreature +longCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate sniperAI @@ -139,11 +139,11 @@ longCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[InitGuard]]} + , _crState = defaultState {_goals = [[InitGuard]]} , _crHP = 300 } multGunCrit :: Creature -multGunCrit = basicCreature +multGunCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate (twitchMissAI 300 350) @@ -152,11 +152,11 @@ multGunCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[InitGuard]]} + , _crState = defaultState {_goals = [[InitGuard]]} , _crHP = 300 } launcherCrit :: Creature -launcherCrit = basicCreature +launcherCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate (launcherAI 150 200) @@ -165,11 +165,11 @@ launcherCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[Init]]} + , _crState = defaultState {_goals = [[Init]]} , _crHP = 300 } spreadGunCrit :: Creature -spreadGunCrit = basicCreature +spreadGunCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate chargeAI @@ -178,11 +178,11 @@ spreadGunCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[Init]]} + , _crState = defaultState {_goals = [[Init]]} , _crHP = 300 } pistolCrit :: Creature -pistolCrit = basicCreature +pistolCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate (dodgeAI 150 200) @@ -191,11 +191,11 @@ pistolCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[InitGuard]]} + , _crState = defaultState {_goals = [[InitGuard]]} , _crHP = 500 } autoCrit :: Creature -autoCrit = basicCreature +autoCrit = defaultCreature { _crPict = enemyPict red --, _crUpdate = checkDeadStopSound n . shooterFootsteps n . makeStateAI autoShooterAI n , _crUpdate = stateUpdate basicShooterAI @@ -204,7 +204,7 @@ autoCrit = basicCreature , _crInvSel = 0 , _crRad = 10 --, _crState = ShooterWait - , _crState = basicState {_goals = [[InitGuard]]} + , _crState = defaultState {_goals = [[InitGuard]]} , _crHP = 300 } addArmour :: Creature -> Creature @@ -212,25 +212,25 @@ addArmour = over crInv insarmour where insarmour xs = IM.insert i frontArmour xs where i = newKey xs --closeShooterCrit :: Int -> Creature ---closeShooterCrit n = (basicCreature n) +--closeShooterCrit n = (defaultCreature n) -- { _crPos = startPos -- , _crPict = equipOnTop goalPict -- , _crUpdate = closeShooterAI n -- , _crInv = IM.fromList [(0,ltAutoGun)] -- , _crInvSel = 0 -- , _crRad = 10 --- , _crState = basicState {_goals = [[InitGuard]]} +-- , _crState = defaultState {_goals = [[InitGuard]]} -- , _crHP = 50 -- } -- where startPos = (20*fromIntegral n-550,0) barrel :: Creature -barrel = basicCreature +barrel = defaultCreature { _crUpdate = updateBarrel , _crHP = 500 , _crPict = \ _ -> onLayer CrLayer $ pictures [ color orange $ circleSolid 10 , color (greyN 0.5) $ circleSolid 8 ] - , _crState = basicState {_goals = [[Wait]] + , _crState = defaultState {_goals = [[Wait]] ,_faction = ChaseCritters ,_crSpState = Barrel [] } @@ -238,13 +238,13 @@ barrel = basicCreature } explosiveBarrel :: Creature -explosiveBarrel = basicCreature +explosiveBarrel = defaultCreature { _crUpdate = updateExpBarrel , _crHP = 400 , _crPict = \ _ -> onLayer CrLayer $ pictures [ color orange $ circleSolid 10 , color red $ circleSolid 8 ] - , _crState = basicState {_goals = [[Wait]] + , _crState = defaultState {_goals = [[Wait]] ,_faction = ChaseCritters ,_crSpState = Barrel [] ,_crApplyDamage = \_ c -> (id, c) @@ -273,7 +273,7 @@ frontArmouredPict = const $ pictures [ color (greyN 0.8) $ circleSolid 20 ] --packCrits :: (Int -> World -> World) -> [Int] -> [Creature] ---packCrits ai is = [(basicCreature i) +--packCrits ai is = [(defaultCreature i) -- { _crPos = (150,10+20*fromIntegral i) -- , _crPict = swarmPict -- , _crUpdate = ai i @@ -285,7 +285,7 @@ frontArmouredPict = const $ pictures [ color (greyN 0.8) $ circleSolid 20 -- | i <- is] --queenBeeCrit :: Int -> Creature ---queenBeeCrit cID = (basicCreature cID) +--queenBeeCrit cID = (defaultCreature cID) -- { _crRad = 20 -- , _crCorpse = color (greyN 0.5) $ circleSolid 20 -- , _crPict = const $ pictures [color black $ circSolid 20 @@ -297,7 +297,7 @@ frontArmouredPict = const $ pictures [ color (greyN 0.8) $ circleSolid 20 -- } --antCrit :: Int -> Creature ---antCrit cID = (basicCreature cID) +--antCrit cID = (defaultCreature cID) -- { _crPos = (0,100 + 3 * fromIntegral cID) -- , _crUpdate = checkDead cID . makeStateAI (antAI 2) cID -- , _crState = AntMove 50 @@ -337,7 +337,7 @@ goalPict cr = let r = _crRad cr in case _crState cr of _ -> sizeColEnemy r (light $ dim green) startCr :: Creature -startCr = basicCreature +startCr = defaultCreature { _crPos = (0,0) , _crOldPos = (0,0) , _crDir = 0 diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index c549d3d12..214a55301 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -42,7 +42,7 @@ data World = World , _cameraAimTime :: Int , _cameraRot :: !Float , _cameraZoom :: !Float - , _cameraCenter :: !Point2 + , _cameraViewFrom :: !Point2 , _creatures :: IM.IntMap Creature , _creaturesZone :: IM.IntMap (IM.IntMap (IM.IntMap Creature)) , _itemPositions :: IM.IntMap ItemPos @@ -84,7 +84,7 @@ data World = World , _tempLightSources :: ![TempLightSource] , _closeActiveObjects :: [Either FloorItem Button] , _seenLocations :: IM.IntMap (World -> Point2,String) --- , _remap :: Keycode -> Keycode + , _selLocation :: Int } data Corpse = Corpse diff --git a/src/Dodge/Prototypes.hs b/src/Dodge/Default.hs similarity index 83% rename from src/Dodge/Prototypes.hs rename to src/Dodge/Default.hs index 01a6e8fd4..8d40002f4 100644 --- a/src/Dodge/Prototypes.hs +++ b/src/Dodge/Default.hs @@ -1,5 +1,5 @@ {-# LANGUAGE BangPatterns #-} -module Dodge.Prototypes where +module Dodge.Default where import Dodge.Item.Weapon.Recock @@ -19,17 +19,16 @@ import qualified Data.Map as M import qualified Data.Set as S import Data.Graph.Inductive.Graph hiding ((&)) import Data.List ---import Dodge.KeyEvents (keyremapDefault) -- defalt datatypes / prototypes {{{ -basicWall = Wall { _wlLine = [(0,0),(50,0)] +defaultWall = Wall { _wlLine = [(0,0),(50,0)] , _wlID = 0 , _wlColor = greyN 0.6 , _wlDraw = Nothing , _wlSeen = False , _wlIsSeeThrough = False } -basicAutoDoor = Door { _wlLine = [(0,0),(50,0)] +defaultAutoDoor = Door { _wlLine = [(0,0),(50,0)] , _wlID = 0 , _doorMech = id , _wlColor = light $ dim $ dim $ dim $ yellow @@ -38,7 +37,7 @@ basicAutoDoor = Door { _wlLine = [(0,0),(50,0)] , _wlIsSeeThrough = False , _doorPathable = True } -basicDoor = Door { _wlLine = [(0,0),(50,0)] +defaultDoor = Door { _wlLine = [(0,0),(50,0)] , _wlID = 0 , _doorMech = id , _wlColor = light $ dim $ dim $ dim $ yellow @@ -47,8 +46,8 @@ basicDoor = Door { _wlLine = [(0,0),(50,0)] , _wlIsSeeThrough = False , _doorPathable = False } -basicCreature :: Creature -basicCreature = Creature +defaultCreature :: Creature +defaultCreature = Creature { _crPos = (0,0) , _crOldPos = (0,0) , _crDir = 0 @@ -61,18 +60,18 @@ basicCreature = Creature , _crMaxHP = 150 , _crInv = IM.empty , _crInvSel = 0 - , _crState = basicState + , _crState = defaultState , _crCorpse = onLayer CorpseLayer $ color (greyN 0.5) $ circleSolid 10 } -basicState = CrSt { _goals = [] +defaultState = CrSt { _goals = [] , _stance = Stance {_carriage=Walking 0 0,_posture=AtEase} , _faction = NoFaction , _crDamage = [] , _crPastDamage = 0 , _crSpState = GenCr - , _crApplyDamage = basicApplyDamage' + , _crApplyDamage = defaultApplyDamage' } -basicEquipment = Equipment +defaultEquipment = Equipment { _itIdentity = Generic , _itName = "genericEquipment" , _itMaxStack = 1 @@ -84,13 +83,13 @@ basicEquipment = Equipment , _itID = Nothing , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itInvColor = yellow , _itInvDisplay = _itName } -basicItZoom = ItZoom 20 0.2 1 20 0.2 1 -basicConsumable :: Item -basicConsumable = Consumable +defaultItZoom = ItZoom 20 0.2 1 20 0.2 1 +defaultConsumable :: Item +defaultConsumable = Consumable { _itIdentity = Generic , _itName = "genericConsumable" , _itMaxStack = 9 @@ -104,16 +103,16 @@ basicConsumable = Consumable , _itEffect = wpRecock , _itHammer = HammerUp } -basicApplyDamage' :: [DamageType] -> Creature -> (World -> World, Creature) -basicApplyDamage' ds cr = (id, doPoisonDam $ foldr (\d c -> snd $ basicApplyDamage d c) cr ds') +defaultApplyDamage' :: [DamageType] -> Creature -> (World -> World, Creature) +defaultApplyDamage' ds cr = (id, doPoisonDam $ foldr (\d c -> snd $ defaultApplyDamage d c) cr ds') where (ps,ds') = partition isPoison ds isPoison (PoisonDam {}) = True isPoison _ = False poisonDam = quot (max 0 (sum (map _dmAmount ps) - 0)) 10 doPoisonDam = over crHP (\hp -> hp - poisonDam) -basicApplyDamage :: DamageType -> Creature -> (World -> World, Creature) -basicApplyDamage (Concussive amount from push pushexp pushRad) cr +defaultApplyDamage :: DamageType -> Creature -> (World -> World, Creature) +defaultApplyDamage (Concussive amount from push pushexp pushRad) cr = ( id , over crHP (\hp -> hp - amount) $ over crPos (+.+ (pushAmount *.* safeNormalizeV (_crPos cr -.- from))) @@ -123,19 +122,19 @@ basicApplyDamage (Concussive amount from push pushexp pushRad) cr = 0 | otherwise = min 5 $ (push*5*pushRad / (dist (_crPos cr) from * _crMass cr))**pushexp -basicApplyDamage (TorqueDam amount rot) cr +defaultApplyDamage (TorqueDam amount rot) cr = ( id , over crHP (\hp -> hp - amount) $ over crDir (+ rot) cr) -basicApplyDamage (PushDam amount pback) cr +defaultApplyDamage (PushDam amount pback) cr = ( id , over crHP (\hp -> hp - amount) $ over crPos (+.+ ((1/_crMass cr) *.* pback )) cr ) -basicApplyDamage dt cr +defaultApplyDamage dt cr = ( id , over crHP (\hp -> hp - _dmAmount dt) cr ) -basicFlIt = FlIt {_flItRot=0,_flIt = basicIt, _flItPos = (0,0), _flItID = 0} -basicIt = Consumable +defaultFlIt = FlIt {_flItRot=0,_flIt = defaultIt, _flItPos = (0,0), _flItID = 0} +defaultIt = Consumable { _itIdentity = Medkit25 - , _itName = "basicIt" + , _itName = "defaultIt" , _itMaxStack = 3 , _itAmount = 2 , _cnEffect = \ _ -> return @@ -147,7 +146,7 @@ basicIt = Consumable , _itEffect = NoItEffect , _itHammer = HammerUp } -basicButton = Button +defaultButton = Button { _btPict = onLayer WlLayer $ color red $ polygon $ rectNSEW 5 (-5) 10 (-10) , _btPos = (0,0) , _btRot = 0 @@ -159,7 +158,7 @@ basicButton = Button , _btText = "Button" , _btState = BtOff } -basicPT = Projectile +defaultPT = Projectile { _ptPos = (0,0) , _ptStartPos = (0,0) , _ptVel = (0,0) @@ -167,7 +166,7 @@ basicPT = Projectile , _ptID = 0 , _ptUpdate = id } -basicPP = PressPlate +defaultPP = PressPlate { _ppPict = onLayer PressPlateLayer $ color (dim $ dim $ bright $ blue) $ circleSolid 5 , _ppPos = (0,0) , _ppRot = 0 @@ -177,14 +176,14 @@ basicPP = PressPlate } -- }}} -basicWorld = World +defaultWorld = World { _keys = S.empty , _mouseButtons = S.empty , _cameraPos = (0,0) , _cameraAimTime = 0 , _cameraRot = 0 , _cameraZoom = 1 - , _cameraCenter = (0,0) + , _cameraViewFrom = (0,0) , _creatures = IM.empty , _creaturesZone = IM.empty , _clouds = IM.empty @@ -217,7 +216,7 @@ basicWorld = World , _pathPoints = IM.empty , _pathInc = M.empty , _windowX = 800 - , _windowY = 840 + , _windowY = 600 , _carteDisplay = False , _carteCenter = (0,0) , _carteZoom = 0.5 @@ -229,6 +228,7 @@ basicWorld = World [(0, (_crPos . you, "CURRENT POSITION")) ,(1, (const (0,0) , "START POSITION")) ] + , _selLocation = 0 } youLight = -- LS {_lsEff = \w _ p -> (logistic 1 1 1 (d p w * 0.01) ) diff --git a/src/Dodge/Initialisation.hs b/src/Dodge/Initialisation.hs index 70d20c9f0..f56f8a9f0 100644 --- a/src/Dodge/Initialisation.hs +++ b/src/Dodge/Initialisation.hs @@ -1,6 +1,6 @@ module Dodge.Initialisation where -- imports {{{ -import Dodge.Prototypes +import Dodge.Default import Dodge.Data import Dodge.Critters import Dodge.Base @@ -23,7 +23,7 @@ firstWorld :: IO World firstWorld = return $ generateFromTree lev1 $ initialWorld initialWorld :: World -initialWorld = basicWorld +initialWorld = defaultWorld { _keys = S.empty , _cameraPos = (0,0) , _cameraRot = 0 diff --git a/src/Dodge/Item/Consumable.hs b/src/Dodge/Item/Consumable.hs index ab94863b1..569130e1c 100644 --- a/src/Dodge/Item/Consumable.hs +++ b/src/Dodge/Item/Consumable.hs @@ -2,7 +2,7 @@ module Dodge.Item.Consumable where import Dodge.Data import Dodge.Base -import Dodge.Prototypes +import Dodge.Default import Dodge.SoundLogic import Dodge.Item.Draw @@ -14,7 +14,7 @@ import Control.Lens import qualified Data.IntMap.Strict as IM medkit :: Int -> Item -medkit i = basicConsumable +medkit i = defaultConsumable { _itIdentity = Medkit25 , _itName = "MEDKIT" ++ show i , _itMaxStack = 9 diff --git a/src/Dodge/Item/Weapon.hs b/src/Dodge/Item/Weapon.hs index f66a0565e..68b8dbe34 100644 --- a/src/Dodge/Item/Weapon.hs +++ b/src/Dodge/Item/Weapon.hs @@ -12,7 +12,7 @@ import Dodge.RandomHelp import Dodge.WorldEvent import Dodge.Debug import Dodge.WallCreatureCollisions -import Dodge.Prototypes +import Dodge.Default import Dodge.Item.Draw @@ -73,7 +73,7 @@ pistol = Weapon , _itMaxStack = 1 , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itEquipPict = drawWeapon $ color green $ polygon $ rectNESW 3 3 (-3) (-3) , _itScrollUp = const id , _itScrollDown = const id @@ -116,7 +116,7 @@ autoGun = defaultGun , _itMaxStack = 1 , _itAimingSpeed = 0.4 , _itAimingRange = 1 - , _itZoom = basicItZoom {_itAimZoomFac = 1.5} + , _itZoom = defaultItZoom {_itAimZoomFac = 1.5} , _itEquipPict = drawWeapon $ color red $ polygon $ rectNESW 4 4 (-4) (-4) , _itEffect = NoItEffect , _itAttachment = Just $ ItMode 0 @@ -206,7 +206,7 @@ teslaGun = defaultAutoGun , _itAmount = 1 , _itMaxStack = 1 , _itAimingSpeed = 0.4 - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itAimingRange = 0 , _itEquipPict = drawWeapon $ color blue $ pictures [polygon $ rectNESW 7 3 1 (-3) ,polygon $ rectNESW (-1) 3 (-7) (-3) @@ -345,7 +345,7 @@ bezierGun = defaultAutoGun , _itScrollDown = removeItAttachment 0 , _itHammer = HammerUp , _itEffect = bezierRecock - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itAimingRange = 0 } @@ -451,7 +451,7 @@ ltAutoGun = defaultAutoGun , _itMaxStack = 1 , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itEquipPict = drawWeapon $ color green $ pictures [polygon $ rectNSWE 4 (-4) (-4) 0 ,circleSolid 4 ] @@ -542,7 +542,7 @@ multGun = defaultGun , _itMaxStack = 1 , _itAimingSpeed = 0.4 , _itAimingRange = 1 - , _itZoom = basicItZoom {_itAimZoomFac = 1.5} + , _itZoom = defaultItZoom {_itAimZoomFac = 1.5} , _itEquipPict = drawWeapon $ multGunPic } where multGunPic = color red $ pictures @@ -576,7 +576,7 @@ longGun = defaultGun , _itMaxStack = 1 , _itAimingSpeed = 0.2 , _itAimingRange = 1 - , _itZoom = basicItZoom {_itAimZoomMax = 0.5, _itAimZoomMin = 0.5} + , _itZoom = defaultItZoom {_itAimZoomMax = 0.5, _itAimZoomMin = 0.5} , _itEquipPict = drawWeapon $ pictures [color orange $ polygon $ rectNESW 3 6 (-3) (-6) ] , _itScrollUp = startZoomInLongGun , _itScrollDown = startZoomOutLongGun @@ -610,7 +610,7 @@ poisonSprayer = defaultAutoGun , _itMaxStack = 1 , _itAimingSpeed = 0.2 , _itAimingRange = 0 - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itEquipPict = drawWeapon $ color yellow $ polygon $ rectNESW 4 4 (-4) (-4) } @@ -633,7 +633,7 @@ flamer = defaultAutoGun -- , _itAimingSpeed = 1 -- , _itAimingSpeed = 0.2 , _itAimingRange = 0 - , _itZoom = basicItZoom {_itAimZoomMax = 5, _itAimZoomMin = 1.5} + , _itZoom = defaultItZoom {_itAimZoomMax = 5, _itAimZoomMin = 1.5} , _itEquipPict = drawWeapon $ color yellow $ polygon $ rectNESW 4 4 (-4) (-4) , _itAttachment = Nothing } @@ -1007,7 +1007,7 @@ retireRemoteBomb itid 0 ptid w = set (pointToItem (_itemPositions w IM.! itid) . itAttachment . _Just . scopePos) (0,0) $ set (pointToItem (_itemPositions w IM.! itid) . itZoom) - basicItZoom + defaultItZoom $ set (pointToItem (_itemPositions w IM.! itid) . twFire) throwRemoteBomb (w & projectiles %~ IM.delete ptid) @@ -1047,7 +1047,7 @@ moveRemoteBomb itid time pID w -> w' & creatures . ix cid . crInv . ix invid . itAttachment . _Just . scopePos .~ (newPos -.- _crPos (_creatures w' IM.! cid)) & creatures . ix cid . crInv . ix invid . itZoom - .~ (basicItZoom {_itAimZoomMax = 0.5, _itAimZoomMin = 0.5}) + .~ (defaultItZoom {_itAimZoomMax = 0.5, _itAimZoomMin = 0.5}) _ -> w' pt = _projectiles w IM.! pID oldPos = _ptPos pt @@ -1230,7 +1230,7 @@ grenade = Throwable , _twFire = throwGrenade fuseTime , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom {_itAimZoomMax = (f fuseTime), _itAimZoomMin = (f fuseTime)} + , _itZoom = defaultItZoom {_itAimZoomMax = (f fuseTime), _itAimZoomMin = (f fuseTime)} , _itEquipPict = drawWeapon $ grenadePic fuseTime , _itID = Nothing , _itAttachment = Just $ ItFuse fuseTime @@ -1250,7 +1250,7 @@ increaseFuse fuse i w = w & creatures . ix 0 . crInv . ix itRef . itScrollUp .~ & creatures . ix 0 . crInv . ix itRef . itName .~ "GRENADE " ++ show newTime & creatures . ix 0 . crInv . ix itRef . itAttachment .~ Just (ItFuse newTime) & creatures . ix 0 . crInv . ix itRef . itZoom - .~ (basicItZoom {_itAimZoomMax = zm, _itAimZoomMin = zm}) + .~ (defaultItZoom {_itAimZoomMax = zm, _itAimZoomMin = zm}) where itRef = fromMaybe (-2) $ w ^? creatures . ix 0 . crInvSel newTime = min (fuse + 5) 90 zm = 50 / fromIntegral newTime @@ -1262,7 +1262,7 @@ decreaseFuse fuse i w = w & creatures . ix 0 . crInv . ix itRef . itScrollUp .~ & creatures . ix 0 . crInv . ix itRef . itName .~ "GRENADE " ++ show newTime & creatures . ix 0 . crInv . ix itRef . itAttachment .~ Just (ItFuse newTime) & creatures . ix 0 . crInv . ix itRef . itZoom - .~ (basicItZoom {_itAimZoomMax = zm, _itAimZoomMin = zm}) + .~ (defaultItZoom {_itAimZoomMax = zm, _itAimZoomMin = zm}) where itRef = fromMaybe (-2) $ w ^? creatures . ix 0 . crInvSel newTime = max (fuse - 5) 20 zm = 50 / fromIntegral newTime @@ -1648,7 +1648,7 @@ pipe = Craftable , _itInvDisplay = _itName , _itInvColor = green } -magShield = basicEquipment +magShield = defaultEquipment { _itIdentity = MagShield , _itName = "MAGSHIELD" , _itMaxStack = 1 @@ -1657,7 +1657,7 @@ magShield = basicEquipment , _itEquipPict = \cr _ -> blank , _itID = Nothing } -flameShield = basicEquipment +flameShield = defaultEquipment { _itIdentity = FlameShield , _itName = "FLAMESHIELD" , _itMaxStack = 1 @@ -1668,7 +1668,7 @@ flameShield = basicEquipment ) , _itID = Nothing } -frontArmour = basicEquipment +frontArmour = defaultEquipment { _itIdentity = FrontArmour , _itName = "FARMOUR" , _itMaxStack = 1 @@ -1685,7 +1685,7 @@ frontArmour = basicEquipment , _itEffect = NoItEffect , _itID = Nothing } -jetPack = basicEquipment +jetPack = defaultEquipment { _itIdentity = JetPack , _itName = "JETPACK" , _itMaxStack = 1 @@ -1700,7 +1700,7 @@ jetPack = basicEquipment } latchkey :: Int -> Item -latchkey n = basicEquipment +latchkey n = defaultEquipment { _itIdentity = Generic , _itName = "KEY "++show n , _itMaxStack = 1 @@ -1712,7 +1712,7 @@ latchkey n = basicEquipment , _itID = Nothing , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom + , _itZoom = defaultItZoom , _itInvColor = yellow , _itInvDisplay = _itName } @@ -1859,7 +1859,7 @@ radar = defaultGun , _itAmount = 1 , _itMaxStack = 1 , _itAimingRange = 1 - , _itZoom = basicItZoom {_itAimZoomMax = 1, _itZoomMax = 1} + , _itZoom = defaultItZoom {_itAimZoomMax = 1, _itZoomMax = 1} , _itEquipPict = drawWeapon $ color blue $ polygon $ rectNESW 5 5 (-5) (-5) } @@ -1880,7 +1880,7 @@ sonar = defaultGun , _itAmount = 1 , _itMaxStack = 1 , _itAimingRange = 1 - , _itZoom = basicItZoom {_itAimZoomMax = 1, _itZoomMax = 1} + , _itZoom = defaultItZoom {_itAimZoomMax = 1, _itZoomMax = 1} , _itEquipPict = drawWeapon $ color blue $ polygon $ rectNESW 5 5 (-5) (-5) } @@ -1968,7 +1968,7 @@ mvRadar x p w pt = (putBlips w, Just $ pt {_ptDraw = const pic | otherwise = fromIntegral x / 10 colHelper y = color (withAlpha (y * globalAlpha) red) -autoSonar = basicEquipment +autoSonar = defaultEquipment { _itIdentity = Generic , _itName = "AUTOSONAR" , _itMaxStack = 1 @@ -1979,9 +1979,9 @@ autoSonar = basicEquipment , _itID = Nothing , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom {_itAimZoomMax = 1, _itZoomMax = 1} + , _itZoom = defaultItZoom {_itAimZoomMax = 1, _itZoomMax = 1} } -autoRadar = basicEquipment +autoRadar = defaultEquipment { _itIdentity = Generic , _itName = "AUTORADAR" , _itMaxStack = 1 @@ -1992,7 +1992,7 @@ autoRadar = basicEquipment , _itID = Nothing , _itAimingSpeed = 1 , _itAimingRange = 0 - , _itZoom = basicItZoom {_itAimZoomMax = 1, _itZoomMax = 1} + , _itZoom = defaultItZoom {_itAimZoomMax = 1, _itZoomMax = 1} } autoRadarEffect :: ItEffect diff --git a/src/Dodge/LevelGen/StaticWalls.hs b/src/Dodge/LevelGen/StaticWalls.hs index eb0b77d20..4d2594ce7 100644 --- a/src/Dodge/LevelGen/StaticWalls.hs +++ b/src/Dodge/LevelGen/StaticWalls.hs @@ -2,7 +2,7 @@ module Dodge.LevelGen.StaticWalls where import Dodge.Data import Dodge.Base -import Dodge.Prototypes +import Dodge.Default import Geometry @@ -49,7 +49,7 @@ createPolyWall (p1,p2) walls = p4 = p3 +.+ 10000 *.* vNormal (p2 -.- p1) maybeW = wallOnLine p3 p4 walls k = newKey walls - newWall = basicWall {_wlLine = [p1,p2], _wlID = k} + newWall = defaultWall {_wlLine = [p1,p2], _wlID = k} -- given a segment and a wall, adds a cut point to the wall if it intersects the -- segment diff --git a/src/Dodge/Rendering.hs b/src/Dodge/Rendering.hs index 6939df3eb..32a2c0685 100644 --- a/src/Dodge/Rendering.hs +++ b/src/Dodge/Rendering.hs @@ -119,9 +119,9 @@ lineOnScreenCone :: World -> [Point2] -> Bool lineOnScreenCone w (p1:p2:_) = errorPointInPolygon 8 p1 sp || errorPointInPolygon 9 p2 sp || any (isJust . uncurry (intersectSegSeg' p1 p2)) sps where sp' = screenPolygon w - vp = _cameraCenter w + vp = _cameraViewFrom w sp | pointInPolygon vp sp' = sp' - | otherwise = orderPolygon $ (_cameraCenter w : sp') + | otherwise = orderPolygon $ (_cameraViewFrom w : sp') sps = zip sp (tail sp ++ [head sp]) @@ -138,7 +138,7 @@ drawWallFace w wall where (x:y:_) = _wlLine wall points = extendConeToScreenEdge w sightFrom (x,y) - sightFrom = _cameraCenter w + sightFrom = _cameraViewFrom w -- the following assumes that the point a is inside the screen -- it still works otherwise, but it might intersect two points: diff --git a/src/Dodge/Rooms.hs b/src/Dodge/Rooms.hs index d1c7517f0..d218275fd 100644 --- a/src/Dodge/Rooms.hs +++ b/src/Dodge/Rooms.hs @@ -6,7 +6,7 @@ import Dodge.Critters import Dodge.LevelGen import Dodge.Base import Dodge.RandomHelp -import Dodge.Prototypes +import Dodge.Default import Dodge.Path import Dodge.Layout import Dodge.LightSources @@ -438,14 +438,14 @@ randFirstWeapon :: State StdGen PSType randFirstWeapon = do r <- state $ randomR (-pi,pi) takeOne $ map PutFlIt - [ basicFlIt {_flItRot=r,_flIt = pistol} - , basicFlIt {_flItRot=r,_flIt = ltAutoGun} --- , basicFlIt {_flItRot=r,_flIt = autoGun} - , basicFlIt {_flItRot=r,_flIt = spreadGun} - , basicFlIt {_flItRot=r,_flIt = multGun} - , basicFlIt {_flItRot=r,_flIt = launcher} --- , basicFlIt {_flItRot=r,_flIt = lasGun} --- , basicFlIt {_flItRot=r,_flIt = flamer} + [ defaultFlIt {_flItRot=r,_flIt = pistol} + , defaultFlIt {_flItRot=r,_flIt = ltAutoGun} +-- , defaultFlIt {_flItRot=r,_flIt = autoGun} + , defaultFlIt {_flItRot=r,_flIt = spreadGun} + , defaultFlIt {_flItRot=r,_flIt = multGun} + , defaultFlIt {_flItRot=r,_flIt = launcher} +-- , defaultFlIt {_flItRot=r,_flIt = lasGun} +-- , defaultFlIt {_flItRot=r,_flIt = flamer} ] --randC1 :: State StdGen PSType diff --git a/src/Dodge/Update/Camera.hs b/src/Dodge/Update/Camera.hs index 62b9eff91..7066df8cf 100644 --- a/src/Dodge/Update/Camera.hs +++ b/src/Dodge/Update/Camera.hs @@ -25,7 +25,7 @@ updateAimTime w moveCamera :: World -> World moveCamera w = w & cameraPos .~ idealPos - & cameraCenter .~ sightFrom + & cameraViewFrom .~ sightFrom where aimRangeFactor | _cameraZoom w == 0 = 0 | otherwise = (fromMaybe 0 $ yourItem w ^? itAimingRange) / _cameraZoom w aimTimeFactor = fromIntegral (w ^. cameraAimTime) / 10 @@ -121,7 +121,7 @@ zoomCamOut w | SDL.ScancodeK `S.member` _keys w autoZoomCam :: World -> World autoZoomCam w = over cameraZoom changeZoom w where maxViewDistance = 800 - camPos = _cameraCenter w + camPos = _cameraViewFrom w camRot = _cameraRot w wallZoom = min (halfWidth w / (horizontalMax+50) ) (halfHeight w / (verticalMax+50) )