Skip to content

Commit

Permalink
merge entity into engine; Distance to hold float
Browse files Browse the repository at this point in the history
  • Loading branch information
jxv committed Feb 11, 2018
1 parent 290c307 commit 690ecb5
Show file tree
Hide file tree
Showing 28 changed files with 85 additions and 81 deletions.
2 changes: 1 addition & 1 deletion library/DinoRush.hs
Expand Up @@ -17,7 +17,7 @@ import DinoRush.Effect.Audio
import DinoRush.Effect.Clock
import DinoRush.Effect.Logger
import DinoRush.Effect.Renderer
import DinoRush.Entity.Obstacle
import DinoRush.Engine.Obstacle
import DinoRush.Wrapper.SDLInput
import DinoRush.Wrapper.SDLRenderer
import DinoRush.Manager.Input
Expand Down
12 changes: 6 additions & 6 deletions library/DinoRush/Config.hs
Expand Up @@ -4,12 +4,12 @@ import qualified SDL
import qualified SDL.Mixer as Mixer
import qualified Animate

import DinoRush.Entity.Bird
import DinoRush.Entity.Bouncer
import DinoRush.Entity.Dino
import DinoRush.Entity.Mountain
import DinoRush.Entity.Lava
import DinoRush.Entity.Rock
import DinoRush.Engine.Bird
import DinoRush.Engine.Bouncer
import DinoRush.Engine.Dino
import DinoRush.Engine.Mountain
import DinoRush.Engine.Lava
import DinoRush.Engine.Rock
import DinoRush.Engine.Types

data Config = Config
Expand Down
12 changes: 6 additions & 6 deletions library/DinoRush/Effect/Renderer.hs
Expand Up @@ -8,12 +8,12 @@ import Control.Monad.Reader

import DinoRush.Config
import DinoRush.Engine.Types
import DinoRush.Entity.Dino
import DinoRush.Entity.Lava
import DinoRush.Entity.Rock
import DinoRush.Entity.Bird
import DinoRush.Entity.Bouncer
import DinoRush.Entity.Mountain
import DinoRush.Engine.Dino
import DinoRush.Engine.Lava
import DinoRush.Engine.Rock
import DinoRush.Engine.Bird
import DinoRush.Engine.Bouncer
import DinoRush.Engine.Mountain
import DinoRush.Wrapper.SDLRenderer

rectFromClip :: Animate.SpriteClip key -> SDL.Rectangle CInt
Expand Down
@@ -1,4 +1,4 @@
module DinoRush.Entity.Bird where
module DinoRush.Engine.Bird where

import Data.Text (Text)
import qualified Animate
Expand Down
@@ -1,4 +1,4 @@
module DinoRush.Entity.Bouncer where
module DinoRush.Engine.Bouncer where

import Data.Text (Text)
import qualified Animate
Expand Down
@@ -1,19 +1,14 @@
module DinoRush.Entity.Dino where
module DinoRush.Engine.Dino where

import qualified Safe
import qualified SDL
import qualified SDL.Mixer as Mixer
import qualified Animate

import Control.Lens
import Data.Text (Text)
import Data.Aeson (FromJSON, ToJSON)
import System.Random
import KeyState

import DinoRush.Engine.Frame
import DinoRush.Engine.Types
import DinoRush.Entity.Obstacle
import DinoRush.Engine.Obstacle
import DinoRush.Engine.Input
import DinoRush.Engine.Step
import DinoRush.Engine.Physics
Expand Down
1 change: 1 addition & 0 deletions library/DinoRush/Engine/Ground.hs
@@ -0,0 +1 @@
module DinoRush.Engine.Ground where
1 change: 1 addition & 0 deletions library/DinoRush/Engine/Jungle.hs
@@ -0,0 +1 @@
module DinoRush.Engine.Jungle where
@@ -1,4 +1,4 @@
module DinoRush.Entity.Lava where
module DinoRush.Engine.Lava where

import qualified Animate
import Data.Text (Text)
Expand Down
@@ -1,4 +1,4 @@
module DinoRush.Entity.Mountain where
module DinoRush.Engine.Mountain where

import Data.Text (Text)
import qualified Animate
Expand Down
@@ -1,17 +1,17 @@
module DinoRush.Entity.Obstacle where
module DinoRush.Engine.Obstacle where

import qualified Animate
import System.Random

import DinoRush.Engine.Types
import DinoRush.Entity.Bird
import DinoRush.Entity.Bouncer
import DinoRush.Entity.Ground
import DinoRush.Entity.Jungle
import DinoRush.Entity.Lava
import DinoRush.Entity.Mountain
import DinoRush.Entity.River
import DinoRush.Entity.Rock
import DinoRush.Engine.Bird
import DinoRush.Engine.Bouncer
import DinoRush.Engine.Ground
import DinoRush.Engine.Jungle
import DinoRush.Engine.Lava
import DinoRush.Engine.Mountain
import DinoRush.Engine.River
import DinoRush.Engine.Rock

data ObstacleTag
= ObstacleTag'GroundShort
Expand All @@ -31,7 +31,7 @@ randomRBoundedEnum (aMin, aMax) g = let
a = [minBound..lastEnum] !! (index `mod` fromEnum lastEnum)
in (a, g')

streamOfObstacles :: RandomGen g => g -> [(Distance, ObstacleTag)]
streamOfObstacles :: RandomGen g => g -> [(Int, ObstacleTag)]
streamOfObstacles g = zip (map (\dist -> dist `mod` 20 + 1) $ randoms g) (randoms g)

data ObstacleInfo
Expand All @@ -46,5 +46,16 @@ data ObstacleState = ObstacleState
, osDistance :: Distance
} deriving (Show, Eq)

stepObstacles :: Float -> [(Float, ObstacleTag)] -> [(Float, ObstacleTag)]
stepObstacles delta = map (\(loc, obs) -> (loc - delta, obs))
stepObstacles :: Distance -> [ObstacleState] -> [ObstacleState]
stepObstacles delta = map (\o@ObstacleState{osDistance} -> ObstacleState{osDistance = osDistance - delta })

removeOutOfBoundObstacles :: [ObstacleState] -> ([ObstacleState], [ObstacleState])
removeOutOfBoundObstacles os = foldr
(\o@ObstacleState{osDistance} (removed, remained) ->
if inBounds osDistance
then (o : removed, remained)
else (removed, o : remained))
([], [])
os
where
inBounds x = x - 32 < 0
@@ -1,13 +1,13 @@
{-# LANGUAGE TemplateHaskell #-}
module DinoRush.Entity.Play where
module DinoRush.Engine.Play where

import qualified Animate
import Control.Lens

import DinoRush.Engine.Types
import DinoRush.Entity.Dino
import DinoRush.Entity.Mountain
import DinoRush.Entity.Obstacle
import DinoRush.Engine.Dino
import DinoRush.Engine.Mountain
import DinoRush.Engine.Obstacle

data PlayVars = PlayVars
{ pvScore :: Score
Expand All @@ -23,12 +23,12 @@ data PlayVars = PlayVars
, pvGroundPosition :: Percent
, pvNeargroundPosition :: Percent
, pvObstacles :: [ObstacleState]
, pvUpcomingObstacles :: [(Distance, ObstacleTag)]
, pvUpcomingObstacles :: [(Int, ObstacleTag)]
} deriving (Show, Eq)

makeClassy ''PlayVars

initPlayVars :: [(Distance, ObstacleTag)] -> PlayVars
initPlayVars :: [(Int, ObstacleTag)] -> PlayVars
initPlayVars upcomingObstacles = PlayVars
{ pvScore = 0
, pvLives = 1
Expand Down
1 change: 1 addition & 0 deletions library/DinoRush/Engine/River.hs
@@ -0,0 +1 @@
module DinoRush.Engine.River where
@@ -1,4 +1,4 @@
module DinoRush.Entity.Rock where
module DinoRush.Engine.Rock where

import qualified Animate
import Data.Text (Text)
Expand Down
@@ -1,4 +1,4 @@
module DinoRush.Entity.Scene where
module DinoRush.Engine.Scene where

data Scene
= Scene'Title
Expand Down
@@ -1,12 +1,12 @@
{-# LANGUAGE TemplateHaskell #-}
module DinoRush.Entity.Title where
module DinoRush.Engine.Title where

import qualified Animate
import Control.Lens

import DinoRush.Engine.Types
import DinoRush.Entity.Dino
import DinoRush.Entity.Mountain
import DinoRush.Engine.Dino
import DinoRush.Engine.Mountain

data TitleVars = TitleVars
{ tvPlayer :: Animate.Position DinoKey Seconds
Expand Down
4 changes: 2 additions & 2 deletions library/DinoRush/Engine/Types.hs
Expand Up @@ -18,8 +18,8 @@ newtype Lives = Lives Int
newtype Percent = Percent Float
deriving (Show, Eq, Num, Fractional, RealFrac, Real, Ord)

newtype Distance = Distance Integer
deriving (Show, Eq, Num, Integral, Real, Ord, Enum, Random)
newtype Distance = Distance Float
deriving (Show, Eq, Num, Fractional, RealFrac, Real, Ord)

newtype Seconds = Seconds Float
deriving (Show, Eq, Num, ToJSON, FromJSON, Fractional, Ord)
Expand Down
1 change: 0 additions & 1 deletion library/DinoRush/Entity/Ground.hs

This file was deleted.

1 change: 0 additions & 1 deletion library/DinoRush/Entity/Jungle.hs

This file was deleted.

1 change: 0 additions & 1 deletion library/DinoRush/Entity/River.hs

This file was deleted.

2 changes: 1 addition & 1 deletion library/DinoRush/Manager/Scene.hs
Expand Up @@ -3,7 +3,7 @@ module DinoRush.Manager.Scene
, Scene(..)
) where

import DinoRush.Entity.Scene
import DinoRush.Engine.Scene

class Monad m => SceneManager m where
toScene :: Scene -> m ()
12 changes: 6 additions & 6 deletions library/DinoRush/Resource.hs
Expand Up @@ -9,12 +9,12 @@ import SDL.Vect

import DinoRush.Config
import DinoRush.Engine.Types
import DinoRush.Entity.Dino
import DinoRush.Entity.Bird
import DinoRush.Entity.Bouncer
import DinoRush.Entity.Lava
import DinoRush.Entity.Mountain
import DinoRush.Entity.Rock
import DinoRush.Engine.Dino
import DinoRush.Engine.Bird
import DinoRush.Engine.Bouncer
import DinoRush.Engine.Lava
import DinoRush.Engine.Mountain
import DinoRush.Engine.Rock

loadSurface :: FilePath -> Maybe Animate.Color -> IO SDL.Surface
loadSurface path alpha = do
Expand Down
5 changes: 2 additions & 3 deletions library/DinoRush/Runner.hs
Expand Up @@ -13,10 +13,9 @@ import DinoRush.Effect.Clock
import DinoRush.Effect.Logger
import DinoRush.Effect.Renderer
import DinoRush.Engine.Input
import DinoRush.Engine.Types
import DinoRush.Engine.Frame
import DinoRush.Entity.Play
import DinoRush.Entity.Title
import DinoRush.Engine.Play
import DinoRush.Engine.Title
import DinoRush.Manager.Input
import DinoRush.Manager.Scene
import DinoRush.Scene.GameOver
Expand Down
4 changes: 2 additions & 2 deletions library/DinoRush/Scene/GameOver.hs
Expand Up @@ -4,8 +4,8 @@ module DinoRush.Scene.GameOver where
import qualified Animate
import Control.Lens

import DinoRush.Entity.Dino
import DinoRush.Entity.Obstacle
import DinoRush.Engine.Dino
import DinoRush.Engine.Obstacle
import DinoRush.Engine.Types

data GameOverVars = GameOverVars
Expand Down
2 changes: 1 addition & 1 deletion library/DinoRush/Scene/Pause.hs
Expand Up @@ -7,7 +7,7 @@ import KeyState
import DinoRush.Effect.Renderer
import DinoRush.Engine.Input
import DinoRush.Scene.Play
import DinoRush.Entity.Play
import DinoRush.Engine.Play
import DinoRush.Manager.Input
import DinoRush.Manager.Scene

Expand Down
15 changes: 9 additions & 6 deletions library/DinoRush/Scene/Play.hs
Expand Up @@ -16,9 +16,9 @@ import DinoRush.Engine.Input
import DinoRush.Engine.Frame
import DinoRush.Engine.Types
import DinoRush.Engine.Step
import DinoRush.Entity.Dino
import DinoRush.Entity.Obstacle
import DinoRush.Entity.Play
import DinoRush.Engine.Dino
import DinoRush.Engine.Obstacle
import DinoRush.Engine.Play
import DinoRush.Manager.Scene
import DinoRush.Manager.Input

Expand All @@ -45,7 +45,7 @@ drawPlay = do
drawJungle (truncate $ 1280 * pvBackgroundPositionNear pv, jungleY)
drawGround (truncate $ 1280 * pvGroundPosition pv, groundY)
forM_ (pvObstacles pv) $ \ObstacleState{osInfo,osDistance} -> let
x = fromIntegral osDistance * 16
x = truncate $ osDistance * 16
in case osInfo of
ObstacleInfo'Lava pos -> drawLava (Animate.currentLocation lavaAnimations pos) (x, 0)
ObstacleInfo'Rock pos -> drawRock (Animate.currentLocation rockAnimations pos) (x, 0)
Expand Down Expand Up @@ -73,8 +73,9 @@ updatePlay = do
input <- getInput
dinoAnimations <- getDinoAnimations
mountainAnimations <- getMountainAnimations
PlayVars{pvDinoAction} <- gets (view playVars)
let dinoAction = stepDinoAction input pvDinoAction
pv' <- gets (view playVars)
let dinoAction = stepDinoAction input (pvDinoAction pv')
let (removed, remained) = removeOutOfBoundObstacles $ stepObstacles (realToFrac (pvSpeed pv')) (pvObstacles pv')
modify $ playVars %~ (\pv -> pv
{ pvDinoPos = stepDinoPosition dinoAction dinoAnimations (pvDinoPos pv)
, pvMountainPos = Animate.stepPosition mountainAnimations (pvMountainPos pv) frameDeltaSeconds
Expand All @@ -85,4 +86,6 @@ updatePlay = do
, pvSpeed = clamp (pvSpeed pv + 0.01) 5
, pvDinoAction = smash dinoAction
, pvDinoSfx = stepDinoSfx dinoAction
, pvObstacles = remained
, pvScore = pvScore pv + fromIntegral (length removed)
})
7 changes: 2 additions & 5 deletions library/DinoRush/Scene/Title.hs
Expand Up @@ -12,11 +12,8 @@ import DinoRush.Config
import DinoRush.Effect.Renderer
import DinoRush.Engine.Input
import DinoRush.Engine.Frame
import DinoRush.Engine.Types
import DinoRush.Entity.Dino
import DinoRush.Entity.Mountain
import DinoRush.Entity.Obstacle
import DinoRush.Entity.Title
import DinoRush.Engine.Dino
import DinoRush.Engine.Title
import DinoRush.Manager.Input
import DinoRush.Manager.Scene

Expand Down
9 changes: 4 additions & 5 deletions library/DinoRush/State.hs
Expand Up @@ -5,10 +5,9 @@ import Control.Lens

import DinoRush.Manager.Scene
import DinoRush.Engine.Input
import DinoRush.Engine.Types
import DinoRush.Entity.Obstacle
import DinoRush.Entity.Play
import DinoRush.Entity.Title
import DinoRush.Engine.Obstacle
import DinoRush.Engine.Play
import DinoRush.Engine.Title

data Vars = Vars
{ vScene :: Scene
Expand All @@ -18,7 +17,7 @@ data Vars = Vars
, vInput :: Input
} deriving (Show, Eq)

initVars :: [(Distance, ObstacleTag)] -> Vars
initVars :: [(Int, ObstacleTag)] -> Vars
initVars mkObstacles = Vars Scene'Title Scene'Title initTitleVars (initPlayVars mkObstacles) initInput

instance HasTitleVars Vars where
Expand Down

0 comments on commit 690ecb5

Please sign in to comment.