annotate src/core/map_state.c @ 112:40f22a8188d2

image: set dimensions
author David Demelier <markand@malikania.fr>
date Sun, 12 Apr 2020 16:55:26 +0200
parents c7e993455985
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * map_state.c -- state when player is on a map
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <stdio.h>
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
79
8f95462ac5f8 core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents: 73
diff changeset
21 #include "debug.h"
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include "event.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include "game.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include "map.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include "map_state.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include "painter.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include "state.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include "texture.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include "walksprite.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include "window.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 /*
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 * This is the speed the player moves on the map.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 * SPEED represents the number of pixels it must move per SEC.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * SEC simply represends the number of milliseconds in one second.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #define SPEED 100
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #define SEC 1000
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 /*
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 * Those are margins within the edge of the screen. The camera always try to
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 * keep those padding between the player and the screen.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 #define MARGIN_WIDTH 80
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #define MARGIN_HEIGHT 80
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 /*
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
49 * Convenient macros to access the state data.
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
50 */
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
51 #define MAP() (&map_state_data.map)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
52 #define PLAYER() (&map_state_data.player)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
53 #define VIEW() (&map_state_data.view)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
54
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
55 /*
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 * This structure defines the possible movement of the player as flags since
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * it's possible to make diagonal movements.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 enum movement {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 MOVING_UP = 1 << 0,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 MOVING_RIGHT = 1 << 1,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 MOVING_DOWN = 1 << 2,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 MOVING_LEFT = 1 << 3
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 };
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 /*
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 * A bit of explanation within this array. The structure walksprite requires
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 * an orientation between 0-7 depending on the user direction.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * Since keys for moving the character may be pressed at the same time, we need
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * a conversion table from "key pressed" to "orientation".
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 * When an orientation is impossible, it is set to -1. Example, when both left
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 * and right are pressed.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 * MOVING_UP = 0001 = 0x1
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * MOVING_RIGHT = 0010 = 0x2
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 * MOVING_DOWN = 0100 = 0x3
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * MOVING_LEFT = 1000 = 0x4
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 static unsigned int orientations[16] = {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 [0x1] = 0,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 [0x2] = 2,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 [0x3] = 1,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 [0x4] = 4,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 [0x6] = 3,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 [0x8] = 6,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 [0x9] = 7,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 [0xC] = 5
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 };
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
91
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
92 /*
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
93 * Additional data that is not necessary to expose in map_state_data.
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
94 */
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 static struct {
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
96 struct {
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
97 enum movement moving;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
98 struct walksprite ws;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
99 } player;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
100
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
101 struct {
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
102 int x;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
103 int y;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
104 unsigned int w;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
105 unsigned int h;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
106 } margin;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
107 } cache;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
108
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
109 static void
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
110 center(void)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
111 {
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
112 VIEW()->x = PLAYER()->x - (VIEW()->w / 2);
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
113 VIEW()->y = PLAYER()->y - (VIEW()->h / 2);
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
114
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
115 if (VIEW()->x < 0)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
116 VIEW()->x = 0;
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
117 else if ((unsigned int)VIEW()->x > MAP()->data.real_w - VIEW()->w)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
118 VIEW()->x = MAP()->data.real_w - VIEW()->w;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
119
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
120 if (VIEW()->y < 0)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
121 VIEW()->y = 0;
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
122 else if ((unsigned int)VIEW()->y > MAP()->data.real_h - VIEW()->h)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
123 VIEW()->y = MAP()->data.real_h - VIEW()->h;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
124 }
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 enter(void)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 {
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
129 /* Adjust map properties. */
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
130 struct map *m = &map_state_data.map.map;
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
131
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
132 map_repaint(m);
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
133 MAP()->data.real_w = m->picture.w;
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
134 MAP()->data.real_h = m->picture.h;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
135
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
136 /* Adjust view. */
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
137 VIEW()->w = window.w;
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
138 VIEW()->h = window.h;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
139
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
140 /* Adjust margin. */
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
141 cache.margin.w = VIEW()->w - (MARGIN_WIDTH * 2);
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
142 cache.margin.h = VIEW()->h - (MARGIN_HEIGHT * 2);
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
143
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
144 /* Center the view by default. */
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
145 center();
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
146
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
147 /* Final bits. */
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
148 walksprite_init(&cache.player.ws, &PLAYER()->sprite, 300);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
150
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 leave(void)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
155
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 handle_keydown(const union event *event)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 switch (event->key.key) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 case KEY_UP:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
161 cache.player.moving |= MOVING_UP;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 case KEY_RIGHT:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
164 cache.player.moving |= MOVING_RIGHT;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 case KEY_DOWN:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
167 cache.player.moving |= MOVING_DOWN;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 case KEY_LEFT:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
170 cache.player.moving |= MOVING_LEFT;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 default:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
176 PLAYER()->angle = orientations[cache.player.moving];
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
178
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 handle_keyup(const union event *event)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 switch (event->key.key) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 case KEY_UP:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
184 cache.player.moving &= ~(MOVING_UP);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 case KEY_RIGHT:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
187 cache.player.moving &= ~(MOVING_RIGHT);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 case KEY_DOWN:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
190 cache.player.moving &= ~(MOVING_DOWN);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 case KEY_LEFT:
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
193 cache.player.moving &= ~(MOVING_LEFT);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 default:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
199
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 static void
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
201 move_right(unsigned int delta)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
202 {
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
203 PLAYER()->x += delta;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
204
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
205 if (PLAYER()->x > (int)(cache.margin.x + cache.margin.w)) {
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
206 VIEW()->x = (PLAYER()->x - VIEW()->w) + MARGIN_WIDTH;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
207
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
208 if (VIEW()->x >= (int)(MAP()->data.real_w - VIEW()->w))
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
209 VIEW()->x = MAP()->data.real_w - VIEW()->w;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
210 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
211
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
212 if (PLAYER()->x > (int)MAP()->data.real_w - 48)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
213 PLAYER()->x = MAP()->data.real_w - 48;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
214 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
215
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
216 static void
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
217 move_left(unsigned int delta)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
218 {
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
219 PLAYER()->x -= delta;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
220
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
221 if (PLAYER()->x < cache.margin.x) {
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
222 VIEW()->x = PLAYER()->x - MARGIN_WIDTH;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
223
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
224 if (VIEW()->x < 0)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
225 VIEW()->x = 0;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
226 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
227
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
228 if (PLAYER()->x < 0)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
229 PLAYER()->x = 0;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
230 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
231
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
232 static void
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
233 move_down(unsigned int delta)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
234 {
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
235 PLAYER()->y += delta;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
236
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
237 if (PLAYER()->y > (int)(cache.margin.y + cache.margin.h)) {
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
238 VIEW()->y = (PLAYER()->y - VIEW()->h) + MARGIN_HEIGHT;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
239
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
240 if (VIEW()->y >= (int)(MAP()->data.real_h - VIEW()->h))
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
241 VIEW()->y = MAP()->data.real_h - VIEW()->h;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
242 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
243
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
244 if (PLAYER()->y > (int)MAP()->data.real_h - 48)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
245 PLAYER()->y = MAP()->data.real_h - 48;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
246 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
247
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
248 static void
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
249 move_up(unsigned int delta)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
250 {
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
251 PLAYER()->y -= delta;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
252
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
253 if (PLAYER()->y < cache.margin.y) {
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
254 VIEW()->y = PLAYER()->y - MARGIN_HEIGHT;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
255
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
256 if (VIEW()->y < 0)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
257 VIEW()->y = 0;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
258 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
259
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
260 if (PLAYER()->y < 0)
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
261 PLAYER()->y = 0;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
262 }
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
263
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
264 static void
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 move(unsigned int ticks)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 /* This is the amount of pixels the player must move. */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 const int delta = SPEED * ticks / SEC;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
269
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 /* This is the rectangle within the view where users must be. */
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
271 cache.margin.x = VIEW()->x + MARGIN_WIDTH;
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
272 cache.margin.y = VIEW()->y + MARGIN_HEIGHT;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
273
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 int dx = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 int dy = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
276
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
277 if (cache.player.moving == 0)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 return;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
279
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
280 if (cache.player.moving & MOVING_UP)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 dy = -1;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
282 if (cache.player.moving & MOVING_DOWN)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 dy = 1;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
284 if (cache.player.moving & MOVING_LEFT)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 dx = -1;
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
286 if (cache.player.moving & MOVING_RIGHT)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 dx = 1;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
288
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 /* Move the player and adjust view if needed. */
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
290 if (dx > 0)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
291 move_right(delta);
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
292 else if (dx < 0)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
293 move_left(delta);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
294
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
295 if (dy > 0)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
296 move_down(delta);
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
297 else if (dy < 0)
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
298 move_up(delta);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
299
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
300 walksprite_update(&cache.player.ws, ticks);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
302
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 handle(const union event *event)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 switch (event->type) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 case EVENT_KEYDOWN:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 handle_keydown(event);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 case EVENT_KEYUP:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 handle_keyup(event);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 default:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
316 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
317
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 update(unsigned int ticks)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 move(ticks);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
322 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
323
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 draw(void)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 {
79
8f95462ac5f8 core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents: 73
diff changeset
327 struct debug_report report = DEBUG_INIT_DEFAULTS;
8f95462ac5f8 core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents: 73
diff changeset
328
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
329 map_draw(&map_state_data.map.map, VIEW()->x, VIEW()->y);
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
330 walksprite_draw(
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
331 &cache.player.ws,
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
332 PLAYER()->angle,
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
333 PLAYER()->x - VIEW()->x,
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
334 PLAYER()->y - VIEW()->y);
79
8f95462ac5f8 core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents: 73
diff changeset
335
98
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
336 debug_printf(&report, "position: %d, %d", PLAYER()->x,
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
337 PLAYER()->y);
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
338 debug_printf(&report, "view: %d, %d", VIEW()->x,
c7e993455985 map: split the map structure into two definitions
David Demelier <markand@malikania.fr>
parents: 97
diff changeset
339 VIEW()->y);
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
340 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
341
55
87b32293b95a core: improve map_state organization
David Demelier <markand@malikania.fr>
parents: 50
diff changeset
342 struct map_state_data map_state_data;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
343
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 struct state map_state = {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 .enter = enter,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
346 .leave = leave,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 .update = update,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 .handle = handle,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 .draw = draw
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 };