-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
120 lines (77 loc) · 2.6 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <stdio.h>
#include <allegro5/allegro5.h>
#include <allegro5/allegro_primitives.h>
#include "config/config.h"
#include "game/game.h"
#include "game/events.h"
#include "game/intro.h"
#include "game/map.h"
#include "main/audio.h"
#include "main/drawing.h"
#include "main/fs.h"
#include "main/graphics.h"
#include "misc/directions.h"
#include "misc/random.h"
int main(int argc, const char * argv[])
{
// inizializzazione libreria grafica
if (graphics_initialize_library() != 0) {
errorf("Errore in fase di inizializzazione della libreria grafica.\n", NULL);
return EXIT_FAILURE;
}
// caricamento file principale di configurazione
char * absolute_config = fs_construct_path(fs_get_resources_path(), "assets", "config.cfg");
hashtable_t * config = config_open(absolute_config);
memfree(absolute_config);
// problemi di caricamento del file di config
if (!config)
return EXIT_FAILURE;
// inizializzazione della libreria grafica
if (graphics_initialize(config) != 0) {
hashtable_delete(config);
fs_destroy();
return EXIT_FAILURE;
}
// generatore di numeri random
well512_initialize();
// schermata di caricamento
output_screen_fill(ColorMakeRGB(0, 0, 0));
output_screen_redraw();
// inizializzazione elementi del gioco
game_t * game = game_initialize(config);
if (!game) {
graphics_destroy();
hashtable_delete(config);
fs_destroy();
return EXIT_FAILURE;
}
// menu principale
bool done = !intro_display(game);
while (!done) {
event_t event;
// gestisce gli eventi
int events = events_handle(game, EVENT_EXIT | EVENT_GAME_RELOAD, &event);
// c'è stato un EVENT_EXIT?
if (events & EVENT_EXIT) {
done = true;
} else if (events & EVENT_GAME_RELOAD) {
// salvataggio dello stato dell'audio
bool mute = game->mute;
// libera le risorse
game_destroy(game);
// inizializzazione elementi del gioco
game = game_initialize(config);
game->mute = mute;
// ri-avvio il gioco
game_set_started(game);
}
// fading out delle tracce audio
audio_fade(game);
}
game_destroy(game);
graphics_destroy();
fs_destroy();
// deallocazione file di config
hashtable_delete(config);
return EXIT_SUCCESS;
}