annotate src/map_state.c @ 50:402aa7dcffe1

core: implement map origin, closes #2462 @1h
author David Demelier <markand@malikania.fr>
date Fri, 17 Jan 2020 12:59:11 +0100
parents f053a9f38c0e
children 87b32293b95a
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
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include "event.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include "game.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include "map.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include "map_state.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include "painter.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include "state.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include "texture.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include "walksprite.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include "window.h"
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
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 * 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
33 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * 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
35 * 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
36 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #define SPEED 100
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #define SEC 1000
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
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 * 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
42 * keep those padding between the player and the screen.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #define MARGIN_WIDTH 80
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 #define MARGIN_HEIGHT 80
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
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 * 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
49 * it's possible to make diagonal movements.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 enum movement {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 MOVING_UP = 1 << 0,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 MOVING_RIGHT = 1 << 1,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 MOVING_DOWN = 1 << 2,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 MOVING_LEFT = 1 << 3
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 };
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
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 * 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
60 * 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
61 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 * 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
63 * a conversion table from "key pressed" to "orientation".
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 * 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
66 * and right are pressed.
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 *
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 * MOVING_UP = 0001 = 0x1
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 * MOVING_RIGHT = 0010 = 0x2
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * MOVING_DOWN = 0100 = 0x3
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 * MOVING_LEFT = 1000 = 0x4
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 static unsigned int orientations[16] = {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 [0x1] = 0,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 [0x2] = 2,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 [0x3] = 1,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 [0x4] = 4,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 [0x6] = 3,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 [0x8] = 6,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 [0x9] = 7,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 [0xC] = 5
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 };
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
83
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 static struct {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 struct map map;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 struct walksprite player_sprite;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 int player_x;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 int player_y;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 int player_orientation;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 int view_x;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 int view_y;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 enum movement moving;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 } data;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 enter(void)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
99
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 leave(void)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 handle_keydown(const union event *event)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 switch (event->key.key) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 case KEY_UP:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 data.moving |= MOVING_UP;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 case KEY_RIGHT:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 data.moving |= MOVING_RIGHT;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 case KEY_DOWN:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 data.moving |= MOVING_DOWN;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 case KEY_LEFT:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 data.moving |= MOVING_LEFT;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 default:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 data.player_orientation = orientations[data.moving];
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
127
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 handle_keyup(const union event *event)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 switch (event->key.key) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 case KEY_UP:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 data.moving &= ~(MOVING_UP);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 case KEY_RIGHT:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 data.moving &= ~(MOVING_RIGHT);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 case KEY_DOWN:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 data.moving &= ~(MOVING_DOWN);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 case KEY_LEFT:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 data.moving &= ~(MOVING_LEFT);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 default:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 move(unsigned int ticks)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 /* 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
153 const int delta = SPEED * ticks / SEC;
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 /* This is the view width which simply equals to the screen. */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 const unsigned int view_w = window_width();
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 const unsigned int view_h = window_height();
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 /* This is the rectangle within the view where users must be. */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 const int margin_x = data.view_x + MARGIN_WIDTH;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 const int margin_y = data.view_y + MARGIN_HEIGHT;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 const unsigned int margin_w = window_width() - (MARGIN_WIDTH * 2);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 const unsigned int margin_h = window_height() - (MARGIN_HEIGHT * 2);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
164
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 /* This is map size. */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 const unsigned int map_w = texture_width(data.map.picture);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 const unsigned int map_h = texture_height(data.map.picture);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 int dx = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 int dy = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
171
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 if (data.moving == 0)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 return;
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 if (data.moving & MOVING_UP)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 dy = -1;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 if (data.moving & MOVING_DOWN)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 dy = 1;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 if (data.moving & MOVING_LEFT)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 dx = -1;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 if (data.moving & MOVING_RIGHT)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 dx = 1;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
183
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 /* Move the player and adjust view if needed. */
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 if (dx > 0) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 data.player_x += delta;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
187
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 if (data.player_x > (int)(margin_x + margin_w)) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 data.view_x = (data.player_x - view_w) + MARGIN_WIDTH;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
190
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 if (data.view_x >= (int)(map_w - view_w))
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 data.view_x = map_w - view_w;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
194
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
195 if (data.player_x > (int)map_w - 48)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 data.player_x = map_w - 48;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 } else if (dx < 0) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 data.player_x -= delta;
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 if (data.player_x < margin_x) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 data.view_x = data.player_x - MARGIN_WIDTH;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
202
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 if (data.view_x < 0)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 data.view_x = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
206
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 if (data.player_x < 0)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 data.player_x = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
210
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 if (dy > 0) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 data.player_y += delta;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
213
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 if (data.player_y > (int)(margin_y + margin_h)) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 data.view_y = (data.player_y - view_h) + MARGIN_HEIGHT;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
216
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 if (data.view_y >= (int)(map_h - view_h))
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 data.view_y = map_h - view_h;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
220
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
221 if (data.player_y > (int)map_h - 48)
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 data.player_y = map_h - 48;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 } else if (dy < 0) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 data.player_y -= delta;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
225
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 if (data.player_y < margin_y) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 data.view_y = data.player_y - MARGIN_HEIGHT;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
228
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 if (data.view_y < 0)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 data.view_y = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 if (data.player_y < 0)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 data.player_y = 0;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
236
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 walksprite_update(&data.player_sprite, ticks);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
239
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 handle(const union event *event)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 switch (event->type) {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 case EVENT_KEYDOWN:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 handle_keydown(event);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 case EVENT_KEYUP:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 handle_keyup(event);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 default:
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 break;
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
254
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 update(unsigned int ticks)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 move(ticks);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
260
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 static void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 draw(void)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 painter_set_color(0x000000ff);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 painter_clear();
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 map_repaint(&data.map);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 map_draw(&data.map, data.view_x, data.view_y);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 walksprite_draw(&data.player_sprite, data.player_orientation, data.player_x - data.view_x, data.player_y - data.view_y);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 painter_present();
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
271
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
272 static void
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
273 center(void)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
274 {
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
275 /* This is map size. */
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
276 const unsigned int win_w = window_width();
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
277 const unsigned int win_h = window_height();
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
278 const unsigned int map_w = texture_width(data.map.picture);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
279 const unsigned int map_h = texture_height(data.map.picture);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
280
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
281 data.view_x = data.player_x - (win_w / 2);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
282 data.view_y = data.player_y - (win_h / 2);
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
283
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
284 if (data.view_x < 0)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
285 data.view_x = 0;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
286 else if (data.view_x > (int)(map_w - win_w))
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
287 data.view_x = map_w - win_w;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
288
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
289 if (data.view_y < 0)
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
290 data.view_y = 0;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
291 else if (data.view_y > (int)(map_h - win_h))
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
292 data.view_y = map_h - win_h;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
293 }
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
294
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 void
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 map_state_start(struct map *map, struct sprite *s)
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 {
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
298 /* Copy essential. */
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 data.map = *map;
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
300 data.player_x = map->origin_x;
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
301 data.player_y = map->origin_y;
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
302
50
402aa7dcffe1 core: implement map origin, closes #2462 @1h
David Demelier <markand@malikania.fr>
parents: 47
diff changeset
303 center();
47
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 walksprite_init(&data.player_sprite, s, 250);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 game_switch(&map_state);
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 }
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
307
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 struct state map_state = {
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 .enter = enter,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 .leave = leave,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 .update = update,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 .handle = handle,
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 .draw = draw
f053a9f38c0e core: implement basic scrolling, closes #2459
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 };