-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.c
More file actions
100 lines (88 loc) · 2.96 KB
/
main.c
File metadata and controls
100 lines (88 loc) · 2.96 KB
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
#include <stdio.h>
#include <stdint.h>
#include <time.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <stdbool.h>
#include <assert.h>
const int SCREEN_WIDTH = 700;
const int SCREEN_HEIGHT = 400;
typedef enum Phase {LATE_NIGHT, DAWN, MORNING, AFTERNOON, DUSK, EVENING} Phase;
typedef struct display {
SDL_Window* window;
SDL_Renderer* renderer;
SDL_Surface* surface;
SDL_Texture* texture;
} display;
/*
create variables
while some condition
load time
render image
endwhile
clean up
*/
Phase getPhase(time_t globalTime){
if (!(globalTime != (time_t)(-1))) {fprintf(stderr, "Failed to get time!\n"); assert(false);}
return localtime(&globalTime)->tm_hour/4;
}
void createDisplay(display* d){
if(SDL_Init(SDL_INIT_VIDEO) < 0) {printf("WE goofed %s\n", SDL_GetError()); assert(false);}
d->window = SDL_CreateWindow("SDL Art", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
if (d->window == NULL) printf("WE done goofed as well %s\n", SDL_GetError());
d->renderer = SDL_CreateRenderer(d->window, -1, SDL_RENDERER_ACCELERATED);
}
void destroyDisplay(display* d){
SDL_DestroyRenderer(d->renderer);
SDL_DestroyWindow(d->window);
SDL_FreeSurface(d->surface);
SDL_DestroyTexture(d->texture);
SDL_Quit();
}
void drawImage(Phase phase, display d){
switch (phase){
case LATE_NIGHT:
d.surface = IMG_Load("./images/LATE_NIGHT.png");
break;
case DAWN:
d.surface = IMG_Load("./images/DAWN.png");
break;
case MORNING:
d.surface = IMG_Load("./images/MORNING.png");
break;
case AFTERNOON:
d.surface = IMG_Load("./images/AFTERNOON.png");
break;
case DUSK:
d.surface = IMG_Load("./images/DUSK.png");
break;
case EVENING:
d.surface = IMG_Load("./images/EVENING.png");
break;
}
d.texture = SDL_CreateTextureFromSurface(d.renderer, d.surface);
SDL_RenderCopy(d.renderer, d.texture, NULL, NULL);
SDL_RenderPresent(d.renderer);
}
int main() {
display d;
time_t globalTime = time(NULL); // Returns as # of seconds since Jan 1st 1970
Phase phase = getPhase(globalTime);
if (phase > 5){
fprintf(stderr, "Received a phase bigger than permitted. Got %d\n", phase);
assert(false);
}
if(SDL_Init(SDL_INIT_VIDEO) < 0) {printf("WE goofed %s\n", SDL_GetError()); assert(false);}
d.window = SDL_CreateWindow("SDL Art", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
if (d.window == NULL) printf("WE done goofed as well %s\n", SDL_GetError());
d.renderer = SDL_CreateRenderer(d.window, -1, SDL_RENDERER_ACCELERATED);
drawImage(phase, d);
while(!SDL_QuitRequested()){
SDL_Delay(1000);
globalTime = time(NULL);
phase = getPhase(globalTime);
drawImage(phase, d);
}
destroyDisplay(&d);
return 0;
}