-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGame.elm
52 lines (40 loc) · 1.29 KB
/
Game.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
module Game where
import Keyboard exposing (..)
import Time exposing (..)
import Window
import Game.Types exposing (..)
import Game.Update exposing (update)
import Game.Render exposing (render)
import Game.Player exposing (localPlayer)
gameState : Signal GameState
gameState =
Signal.foldp update initialGameState events
events : Signal Event
events =
(Signal.map NewInput input)
|> Signal.merge (Signal.map NewOrUpdatedPlayer addOrUpdatePlayer)
|> Signal.merge (Signal.map UpdatedPing ping)
|> Signal.merge (Signal.map UpdatedTime (every second))
input : Signal Input
input =
Signal.sampleOn delta <|
Signal.map4 Input
Keyboard.space -- # fire
(Signal.map .x Keyboard.wasd) -- turn direction
(Signal.map .y Keyboard.wasd) -- thrust direction
delta
-- delta corresponds to the amount of change per second,
-- e.g. if FPS is 1, then delta is 1, if FPS is 2, delta is 0.5.
delta =
Signal.map inSeconds (fps 60)
port stateChange : Signal GameState
port stateChange =
gameState
port initialGameState : GameState
port ping : Signal Int
port addOrUpdatePlayer : Signal Player
port publishPlayerUpdate : Signal Player
port publishPlayerUpdate =
Signal.sampleOn (every 250) <| Signal.map localPlayer gameState
main =
Signal.map2 render Window.dimensions gameState