Mercurial > molko
annotate src/main.c @ 42:22a09a5ee476
core: add better map check and unit tests
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 15 Jan 2020 20:33:21 +0100 |
parents | 3996f873a54b |
children | 291be94202c7 |
rev | line source |
---|---|
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * main.c -- Molko's Adventure |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
36
798baf7f3ec0
core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents:
35
diff
changeset
|
19 #include <stdio.h> |
798baf7f3ec0
core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents:
35
diff
changeset
|
20 #include <stdlib.h> |
798baf7f3ec0
core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents:
35
diff
changeset
|
21 |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
22 #include "clock.h" |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
23 #include "error.h" |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
24 #include "event.h" |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
25 #include "painter.h" |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
26 #include "image.h" |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
27 #include "map.h" |
36
798baf7f3ec0
core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents:
35
diff
changeset
|
28 #include "sys.h" |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
29 #include "walksprite.h" |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
30 #include "window.h" |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
31 #include "util.h" |
36
798baf7f3ec0
core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents:
35
diff
changeset
|
32 |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 int |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 main(int argc, char **argv) |
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 { |
1
03f6d572fd17
core: implement basic drawing, closes #2438
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
36 (void)argc; |
03f6d572fd17
core: implement basic drawing, closes #2438
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
37 (void)argv; |
19
bc1fdff76775
core: implement most useful events, closes #2445
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
38 |
42
22a09a5ee476
core: add better map check and unit tests
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
39 #if 0 |
22a09a5ee476
core: add better map check and unit tests
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
40 |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
41 struct clock clock; |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
42 struct map map; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
43 struct texture *guy; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
44 struct sprite sprite; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
45 struct walksprite ws; |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
46 |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
47 if (!sys_init()) |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
48 error_fatal(); |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
49 if (!window_init("Molko's Adventure", 1024, 576)) |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
50 error_fatal(); |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
51 if (!map_open(&map, "world.json")) |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
52 error_fatal(); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
53 if (!(guy = image_openf(sys_datapath("sprites/test-walk.png")))) |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
54 error_fatal(); |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
55 |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
56 sprite_init(&sprite, guy, 48, 48); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
57 walksprite_init(&ws, &sprite, 200); |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
58 clock_start(&clock); |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
59 map_repaint(&map); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
60 |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
61 int guy_x = 10; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
62 int guy_y = 10; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
63 int guy_dx = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
64 int guy_dy = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
65 |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
66 int dx = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
67 int dy = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
68 int orientation = 0; |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
69 |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
70 for (;;) { |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
71 uint64_t elapsed = clock_elapsed(&clock); |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
72 union event ev; |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
73 |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
74 clock_start(&clock); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
75 |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
76 while (event_poll(&ev)) { |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
77 switch (ev.type) { |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
78 case EVENT_QUIT: |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
79 return 0; |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
80 case EVENT_KEYDOWN: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
81 switch (ev.key.key) { |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
82 case KEY_UP: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
83 orientation = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
84 dy = -5; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
85 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
86 case KEY_RIGHT: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
87 orientation = 2; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
88 dx = 5; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
89 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
90 case KEY_DOWN: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
91 orientation = 4; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
92 dy = 5; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
93 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
94 case KEY_LEFT: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
95 orientation = 6; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
96 dx = -5; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
97 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
98 default: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
99 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
100 } |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
101 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
102 case EVENT_KEYUP: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
103 switch (ev.key.key) { |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
104 case KEY_DOWN: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
105 dy = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
106 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
107 case KEY_UP: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
108 dy = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
109 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
110 case KEY_LEFT: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
111 dx = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
112 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
113 case KEY_RIGHT: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
114 dx = 0; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
115 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
116 default: |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
117 break; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
118 } |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
119 break; |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
120 default: |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
121 break; |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
122 } |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
123 } |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
124 |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
125 walksprite_update(&ws, elapsed); |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
126 painter_clear(); |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
127 map_draw(&map); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
39
diff
changeset
|
128 walksprite_draw(&ws, orientation, 100, 100); |
39
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
129 painter_present(); |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
130 delay(50); |
9d1421c09dfb
core: add more utilities to improve code simplicity
David Demelier <markand@malikania.fr>
parents:
36
diff
changeset
|
131 } |
42
22a09a5ee476
core: add better map check and unit tests
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
132 #endif |
36
798baf7f3ec0
core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents:
35
diff
changeset
|
133 |
1
03f6d572fd17
core: implement basic drawing, closes #2438
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
134 return 0; |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 } |