File tree 10 files changed +49
-7
lines changed
10 files changed +49
-7
lines changed Original file line number Diff line number Diff line change 1
1
module Animation where
2
2
3
3
import Graphics.UI.SDL as SDL
4
+ import Graphics.UI.SDL.TTF as TTF
4
5
5
6
import Data.Word
6
7
import Data.Tiled
@@ -46,11 +47,30 @@ drawWalkingMode gs = do
46
47
blitAnimations ((animation (player gs)) : animations gs) s (cameraPos gs)
47
48
SDL. flip s
48
49
50
+ drawLabels :: [String ] -> Position -> Surface -> Font -> IO ()
51
+ drawLabels [] _ _ _ = return ()
52
+ drawLabels (x: xs) pos s fnt = do
53
+ title <- renderTextSolid fnt x (Color 20 0 0 )
54
+ blitSurface title Nothing s (Just (Rect (floor $ xVal pos) (floor $ yVal pos) 200 200 ))
55
+ drawLabels xs (Position ((xVal pos)) ((yVal pos) + 30 )) s fnt
56
+
57
+ drawMenu :: GameState -> Surface -> IO ()
58
+ drawMenu gs s = do
59
+ let menu' = menu gs
60
+ let pos' = menuPos menu'
61
+ let gx' = gx gs
62
+ blitSurface (menubg gx') Nothing s (Just (Rect (floor $ xVal pos') (floor $ yVal pos') 20 20 ))
63
+ blitSurface (menumarker gx') Nothing s (Just (Rect (floor $ xVal pos') ((floor $ yVal pos') + 10 + (choice menu') * 30 ) 20 20 ))
64
+ drawLabels (labels menu') (Position (((xVal pos') + 10.0 )) (((yVal pos') + 10.0 ))) s (fnt gs)
65
+
66
+ return ()
67
+
49
68
drawFight :: GameState -> IO ()
50
69
drawFight gs = do
51
70
s <- getVideoSurface
52
71
blitSurface (fightbg $ gx gs) Nothing s Nothing
53
-
72
+ blitSurface (enemyfire $ gx gs) Nothing s (Just (Rect 200 100 0 0 ))
73
+ drawMenu gs s
54
74
SDL. flip s
55
75
56
76
drawGamestate :: GameState -> IO ()
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ module Event where
2
2
3
3
import Graphics.UI.SDL as SDL
4
4
import Model
5
+ import Logics
5
6
6
7
getEvents :: IO Event -> [Event ] -> IO [Event ]
7
8
getEvents pEvent es = do
@@ -22,6 +23,8 @@ handleFightEvent x gs =
22
23
case x of
23
24
KeyDown (Keysym SDLK_ESCAPE _ _) -> gs {gameActive = False }
24
25
KeyDown (Keysym SDLK_a _ _ ) -> gs { gameMode = Model. AfterFight }
26
+ KeyDown (Keysym SDLK_DOWN _ _ ) -> gs { menu = (menu gs) { choice = ((choice $ menu gs) + 1 ) `mod` (length $ labels $ menu gs) } }
27
+ KeyDown (Keysym SDLK_RETURN _ _ ) -> activateMenuOption gs
25
28
_ -> gs
26
29
27
30
handleWalkingEvent :: Event -> GameState -> GameState
Original file line number Diff line number Diff line change @@ -58,3 +58,7 @@ updateGamestate gs t dt
58
58
player' = updatePlayer (player gs) t dt
59
59
cameraPos' = updateCamera (cameraPos gs) (playerPos $ player gs) (fromIntegral $ mapWidth $ currentMap gs) (fromIntegral $ mapHeight $ currentMap gs)
60
60
gameMode' = checkForFight gs t
61
+
62
+ activateMenuOption :: GameState -> GameState
63
+ activateMenuOption gs
64
+ | otherwise = gs
Original file line number Diff line number Diff line change 1
1
module Model where
2
2
3
3
import Graphics.UI.SDL as SDL
4
+ import Graphics.UI.SDL.TTF as TTF
4
5
5
6
import Data.Word
6
7
import Data.Tiled
@@ -21,7 +22,16 @@ data Mode = Walking | Fight | AfterFight
21
22
22
23
data Graphics = Graphics {
23
24
tileSurface :: Surface ,
24
- fightbg :: Surface
25
+ fightbg :: Surface ,
26
+ menumarker :: Surface ,
27
+ menubg :: Surface ,
28
+ enemyfire :: Surface
29
+ }
30
+
31
+ data Menu = Menu {
32
+ choice :: Int ,
33
+ labels :: [String ],
34
+ menuPos :: Position
25
35
}
26
36
27
37
data GameState = GameState {
@@ -34,7 +44,9 @@ data GameState = GameState{
34
44
gameMode :: Mode ,
35
45
rng :: StdGen ,
36
46
nextFight :: Int ,
37
- gx :: Graphics
47
+ gx :: Graphics ,
48
+ menu :: Menu ,
49
+ fnt :: Font
38
50
}
39
51
40
52
data Animation = Animation {
Original file line number Diff line number Diff line change @@ -26,20 +26,23 @@ main = do
26
26
27
27
tiledMap <- Data.Tiled. loadMapFile " map.tmx"
28
28
tileSurface <- SDLi. load (iSource $ head $ tsImages $ head $ mapTilesets tiledMap)
29
- -- let image = head $ mapTilesets m
30
29
31
30
rng <- getStdGen
32
31
33
32
fnt <- openFont " font.ttf" 30
34
33
sheet <- SDLi. load " playerWalkDown.png"
35
34
bg <- SDLi. load " menubg.bmp"
36
35
fightbg <- SDLi. load " fight.png"
36
+ menumarker <- SDLi. load " menumarker.png"
37
+ menubg <- SDLi. load " menubg.png"
38
+ enemyfire <- SDLi. load " enemyfire.png"
37
39
38
40
t0 <- getTicks
39
41
40
42
let player = Player Down Stop (Position 300 300 ) (Animation sheet 26 4 250 t0 0 (Position 0 0 ))
41
- let gx = Graphics tileSurface fightbg
42
- let gs = (GameState True [] t0 player tiledMap (Position 32 32 ) Model. Walking rng 0 gx)
43
+ let gx = Graphics tileSurface fightbg menumarker menubg enemyfire
44
+ let menu = Menu 0 [" Attack" , " Run" ] (Position 0 340 )
45
+ let gs = (GameState True [] t0 player tiledMap (Position 32 32 ) Model. Walking rng 0 gx menu fnt)
43
46
let gs' = setUpNextFight gs ( fromIntegral (t0+ 1000 ) )
44
47
45
48
gameLoop gs' t0
@@ -53,7 +56,7 @@ gameLoop gs lastTick = do
53
56
let gs' = updateGamestate (handleEvents events gs) t (t - lastTick)
54
57
55
58
drawGamestate gs'
56
- putStrLn $ show $ gameMode gs
59
+ -- putStrLn $ show $ gameMode gs
57
60
if gameActive gs'
58
61
then gameLoop gs' t
59
62
else return ()
You can’t perform that action at this time.
0 commit comments