Mercurial > molko
annotate src/main.c @ 13:c188e9603faf
misc: add basic documentation files
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 07 Jan 2020 21:34:03 +0100 |
parents | c91c3272101b |
children | bc1fdff76775 |
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 |
1
03f6d572fd17
core: implement basic drawing, closes #2438
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
19 #include <stdio.h> |
03f6d572fd17
core: implement basic drawing, closes #2438
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
20 |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
21 #include "animation.h" |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
22 #include "font.h" |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
23 #include "clock.h" |
4
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
24 #include "image.h" |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
25 #include "sprite.h" |
4
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
26 #include "texture.h" |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
27 #include "window.h" |
5
b5c649b6367b
core: implement sprites, closes #2440
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
28 |
b5c649b6367b
core: implement sprites, closes #2440
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
29 #include <SDL.h> |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
30 #include <SDL_ttf.h> |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
31 #include <SDL_image.h> |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 |
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; |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
38 SDL_Init(SDL_INIT_VIDEO); |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
39 TTF_Init(); |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
40 IMG_Init(IMG_INIT_PNG); |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
42 struct texture *logo, *label; |
5
b5c649b6367b
core: implement sprites, closes #2440
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
43 struct sprite sprite; |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
44 struct clock clock; |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
45 struct font *font; |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
46 struct animation animation; |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 |
4
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
48 window_init("Molko's Adventure", 640, 480); |
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
49 window_set_color(0x667788ff); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
50 |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
51 clock_start(&clock); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
52 |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
53 logo = image_openf("E:\\dev\\molko\\explosion.png"); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
54 font = font_openf("E:\\dev\\molko\\DejaVuSans.ttf", 10); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
55 |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
56 if (!logo || !font) { |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
57 printf("%s\n", SDL_GetError()); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
58 exit(1); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
59 } |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
60 |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
61 label = font_render(font, "Hello World", 0xffffffff); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
62 sprite_init(&sprite, logo, 256, 256); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
63 animation_init(&animation, &sprite, 20); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
64 |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
65 setvbuf(stdout, NULL, _IONBF, 0); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
66 |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
67 while (!animation_is_complete(&animation)) { |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
68 uint64_t ticks = clock_elapsed(&clock); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
69 |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
70 clock_start(&clock); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
71 |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
72 SDL_Event ev; |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
73 while (SDL_PollEvent(&ev)) { |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
74 switch (ev.type) { |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
75 case SDL_QUIT: |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
76 return 0; |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
77 } |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
78 } |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
79 |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
80 animation_update(&animation, ticks); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
81 window_clear(); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
82 texture_draw(label, 30, 30); |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
83 animation_draw(&animation, 10, 10); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
84 window_present(); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
85 SDL_Delay(50); |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
86 } |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
87 |
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
88 #if 0 |
4
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
89 window_set_color(0xffffffff); |
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
90 window_draw_line(50, 50, 100, 100); |
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
91 window_draw_point(60, 60); |
cd58eabb7fb4
core: implement basic images, closes #2441
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
92 window_draw_rectangle(true, 20, 20, 70, 10); |
5
b5c649b6367b
core: implement sprites, closes #2440
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
93 logo = image_openf("E:\\Charactervector.png"); |
b5c649b6367b
core: implement sprites, closes #2440
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
94 sprite_init(&sprite, logo, 65, 100); |
b5c649b6367b
core: implement sprites, closes #2440
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
95 sprite_draw(&sprite, 1, 2, 400, 400); |
7
fbb7101b7bd8
core: implement animations, closes #2439
David Demelier <markand@malikania.fr>
parents:
5
diff
changeset
|
96 #endif |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
1
03f6d572fd17
core: implement basic drawing, closes #2438
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
98 return 0; |
0
efcc908bca21
core: implement basic windowing, closes #2437
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 } |