diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f314253 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.associations": { + "ncurses.h": "c", + "stdio.h": "c", + "math.h": "c" + } +} \ No newline at end of file diff --git a/Makefile b/Makefile index e5d25f8..795a959 100644 --- a/Makefile +++ b/Makefile @@ -4,11 +4,10 @@ LFLAGS = -lSDL2 -lSDL2_image -lm -lncurses all: bin/back - test: bin/back bin/back -bin/back: obj/main.o obj/generation.o obj/display.o obj/base.o obj/hash.o +bin/back: obj/main.o obj/generation.o obj/display.o obj/move.o obj/base.o obj/hash.o mkdir -p bin $(CC) $(FLAGS) $^ $(LFLAGS) -o $@ @@ -19,6 +18,7 @@ obj/%.o: src/%.c obj/main.o: src/main.c obj/generation.o: src/generation.c obj/display.o: src/display.c +obj/move.o: src/move.c obj/base.o: src/base.c obj/hash.o: src/hash.c diff --git a/bin/back b/bin/back index 9021eb7..1559060 100755 Binary files a/bin/back and b/bin/back differ diff --git a/obj/base.o b/obj/base.o index de5f54f..b28fbe8 100644 Binary files a/obj/base.o and b/obj/base.o differ diff --git a/obj/display.o b/obj/display.o index 7cba6f8..f116f47 100644 Binary files a/obj/display.o and b/obj/display.o differ diff --git a/obj/main.o b/obj/main.o index 5b907f8..c5cdc7f 100644 Binary files a/obj/main.o and b/obj/main.o differ diff --git a/obj/move.o b/obj/move.o new file mode 100644 index 0000000..15d3f02 Binary files /dev/null and b/obj/move.o differ diff --git a/src/base.c b/src/base.c index b6b6b97..7d3fd3e 100644 --- a/src/base.c +++ b/src/base.c @@ -83,10 +83,6 @@ int to_int(double n) { return (int)n ; } -double distance_pt(int x1, int x2, int y1, int y2) { - return sqrt(to_double(pw(x2 - x1, 2) + pw(y2 - y1, 2))); -} - int line_count(char* filename) { FILE* ptr = fopen(filename, "r"); char c = 'd'; @@ -182,84 +178,91 @@ bool str_equal(char* s1, char* s2) { // ------------------------------------------------------------------------------------------------ // -void linked_add(linkedList* lst, int x, int y, char* flag) { - if(lst == NULL) { - fprintf(stderr, "ERROR : linked list has not been initialized\n"); - exit(1); - } else if(lst->next == NULL) { - lst->next = malloc(sizeof(linkedList)); - lst->next->coord = x + 16*y ; - lst->next->flag = flag ; - lst->next->next = NULL ; +cube_0 create_cube_0(double x, double y, double z, double w, double h, double d, int r, int g, int b) { + cube_0 cb ; + cb.red = r ; + cb.green = g ; + cb.blue = b ; + cb.x = x ; + cb.y = y ; + cb.z = z ; + cb.w = w ; + cb.h = h ; + cb.d = d ; + cb.hz_angle = 0.0 ; + cb.vt_angle = 0.0 ; + return cb ; +} + +cube create_cube(double x, double y, double z, double w, double h, double d, int r, int g, int b) { + cube cb = malloc(sizeof(cube_0)); + *cb = create_cube_0(x, y, z, w, d, h, r, g, b) ; + return cb; +} + +void free_cube(cube c) { + free(c) ; +} + +// ------------------------------------------------------------------------------------------------ // + +double convex_pt(double a, double b, double theta) { + return (a+(b-a)*theta) ; +} + +double distance_pt_pt_3d(double x0, double y0, double z0, double x1, double y1, double z1) { + return sqrt((x1 - x0)*(x1 - x0)+(y1 - y0)*(y1 - y0)+(z1 - z0)*(z1 - z0)) ; +} + +double distance_pt_seg_3d(double x, double y, double z, double sx, double sy, double sz, double ex, double ey, double ez) { + double theta = -( + ((ex - sx) * (sx - x) + (ey - sy) * (sy - y) + (ez - sz) * (sz - z)) / + ((ex - sx) * (ex - sx) + (ey - sy) * (ey - sy) + (ez - sz) * (ez - sz)) + ); + if(theta >= 0.0 && theta <= 1.0) { + return (distance_pt_pt_3d(x, y, z, convex_pt(sx, ex, theta), convex_pt(sy, ey, theta), convex_pt(sz, ez, theta))) ; + } else if (theta < 0.0) { + return (distance_pt_pt_3d(x, y, z, sx, sy, sz)) ; } else { - linked_add(lst->next, x, y, flag); + return (distance_pt_pt_3d(x, y, z, ex, ey, ez)) ; } } -void linked_removeCoord(linkedList* lst, int x, int y) { - if(lst != NULL) { - if(lst->coord == x + 16*y) { - linkedList* temp = lst->next ; - free(lst) ; - lst = temp ; - } else { - linked_removeCoord(lst->next, x, y); - } +double distance_pt_cube_axis(double coord, double begin, double end) { + if(coord < begin) { + return (begin-coord) ; + } else if(coord > end) { + return (coord-end) ; + } else { + return 0.0 ; } } -void linked_removeFlag(linkedList* lst, char* flag) { - if(lst != NULL) { - if(lst->flag == flag) { - linkedList* temp = lst->next ; - free(lst) ; - lst = temp ; - } else { - linked_removeFlag(lst->next, flag); - } - } +double distance_pt_cube_aligned_3d(double x0, double y0, double z0, double cx, double cy, double cz, double cw, double ch, double cd) { + return (distance_pt_cube_axis(x0, cx, cx+cw)+distance_pt_cube_axis(y0, cy, cy+ch)+distance_pt_cube_axis(z0, cz, cz+cd)) ; } -void linked_change(linkedList* lst, int x, int y, char* flag) { - linked_removeCoord(lst, x, y); - linked_add(lst, x, y, flag); +double distance_pt_cube_0_3d(double x0, double y0, double z0, cube_0 c) { + // places the origin at the center of the cube + double x = x0 - (c.x + c.w/2.0) ; + double y = y0 - (c.y + c.h/2.0) ; + double z = z0 - (c.z + c.d/2.0) ; + + // rotate the point : y then x + double xry = x*cos(c.hz_angle) + z*sin(c.hz_angle) ; + double yry = y ; + double zry = z*cos(c.hz_angle) - x*sin(c.hz_angle) ; + + double xrx = xry ; + double yrx = yry*cos(c.vt_angle) - zry*sin(c.vt_angle) ; + double zrx = zry*cos(c.vt_angle) + yry*sin(c.vt_angle) ; + + // now the cube and pt are aligned, and (0, 0, 0) is at the cube's (bary)center + return distance_pt_cube_aligned_3d(xrx, yrx, zrx, -c.w/2.0, -c.h/2.0, -c.d/2.0, c.w/2.0, c.h/2.0, c.d/2.0) ; } -bool linked_mem(linkedList* lst, int x, int y, char** flag) { - if(lst == NULL) { - return false; - } - if(lst->coord == x + 16*y) { - *flag = lst->flag; - return true ; - } - return linked_mem(lst->next, x, y, flag); -} - -linkedList* linked_copy(linkedList* src) { - linkedList* new = malloc(sizeof(linkedList)) ; - new->flag = "E" ; - new->coord = 0 ; - new->next = NULL ; - - //printf("in\n"); - linkedList* curSrc = src->next ; - //printf("out\n"); - - while(curSrc != NULL) { - //printf("cp\n"); - linked_add(new, curSrc->coord%8, curSrc->coord/16, curSrc->flag); - curSrc = curSrc->next; - } - - return new ; -} - -void linkedPrint(linkedList* lst) { - if(lst != NULL) { - printf("[(%d, %d), %s] ", lst->coord%8, lst->coord/16, lst->flag); - linkedPrint(lst->next); - } +double distance_pt_cube_3d(double x0, double y0, double z0, cube cb) { + return distance_pt_cube_0_3d(x0, y0, z0, *cb) ; } // ------------------------------------------------------------------------------------------------ // diff --git a/src/base.h b/src/base.h index 18d2764..b29af16 100644 --- a/src/base.h +++ b/src/base.h @@ -2,59 +2,40 @@ #define BACK_BASE_H int ln_baseN(int n, int b); - int pw(int x, int n); - int abs(int n); - int min(int a, int b); - int max(int a, int b); - double absf(double n); - int convex_seg(int x1, int x2, double theta); - bool is_an_integer(char c); - double to_double(int n); - int to_int(double n); - -double distance_pt(int x1, int x2, int y1, int y2); - int line_count(char* filename); - int str_to_int(char* s); - int get_integer(FILE* ptr); - int get_integer_plus_align(FILE* ptr, FILE* ptr2); - int count_char_in_line(FILE* ptr, char c); - void terminate_line(FILE* ptr); - bool str_equal(char* s1, char* s2); -void linked_add(linkedList* lst, int x, int y, char* flag); +cube_0 create_cube_0(double x, double y, double z, double w, double h, double d, int r, int g, int b); +cube create_cube(double x, double y, double z, double w, double h, double d, int r, int g, int b); +void free_cube(cube c); +double convex_pt(double a, double b, double theta); +double distance_pt_pt_3d(double x0, double y0, double z0, double x1, double y1, double z1); +double distance_pt_seg_3d(double x, double y, double z, double sx, double sy, double sz, double ex, double ey, double ez); -void linked_removeCoord(linkedList* lst, int x, int y); - -void linked_removeFlag(linkedList* lst, char* flag); - -void linked_change(linkedList* lst, int x, int y, char* flag); - -bool linked_mem(linkedList* lst, int x, int y, char** flag); - -linkedList* linked_copy(linkedList* src); - -void linkedPrint(linkedList* lst); +double convex_pt(double a, double b, double theta); +double distance_pt_pt_3d(double x0, double y0, double z0, double x1, double y1, double z1) ; +double distance_pt_seg_3d(double x, double y, double z, double sx, double sy, double sz, double ex, double ey, double ez); +double distance_pt_cube_axis(double coord, double begin, double end); +double distance_pt_cube_aligned_3d(double x0, double y0, double z0, double cx, double cy, double cz, double cw, double ch, double cd); +double distance_pt_cube_0_3d(double x0, double y0, double z0, cube_0 c); +double distance_pt_cube_3d(double x0, double y0, double z0, cube cb); void import_digits(SDL_Renderer* renderer); - void import_letters(SDL_Renderer* renderer); - void free_digits(imgs dgts); #endif \ No newline at end of file diff --git a/src/display.c b/src/display.c index b18df64..57f1165 100644 --- a/src/display.c +++ b/src/display.c @@ -14,6 +14,7 @@ #include "hash.h" #include "structure.h" #include "base.h" +#include "move.h" #include "generation.h" #include "display.h" @@ -42,21 +43,40 @@ void placeRectToRenderer(SDL_Renderer* renderer, int X, int Y, int W, int H, int SDL_RenderFillRect(renderer, &rect); } +void placeRectToRendererNoColor(SDL_Renderer* renderer, int X, int Y, int W, int H) { + SDL_Rect rect; + rect.x = X; + rect.y = Y; + rect.w = W; + rect.h = H; + SDL_RenderFillRect(renderer, &rect); +} + void drawLineWithThicc(SDL_Renderer* renderer, int width, int x1, int x2, int y1, int y2, int R, int G, int B, int A) { // draws line with width (native SDL cannot do that) double theta = 0.0; - double seglen = distance_pt(x1, x2, y1, y2); + double seglen = distance_pt_pt_3d(x1, y1, 0.0, x2, y2, 0.0); while(theta < 1.0) { placeRectToRenderer(renderer, convex_seg(x1, x2, theta)-width/2, convex_seg(y1, y2, theta)-width/2, width, width, R, G, B, A); theta += 1 / seglen; } } +void drawLineWithThiccNoColor(SDL_Renderer* renderer, int width, int x1, int x2, int y1, int y2) { + // draws line with width (native SDL cannot do that) + double theta = 0.0; + double seglen = distance_pt_pt_3d(x1, y1, 0.0, x2, y2, 0.0); + while(theta < 1.0) { + placeRectToRendererNoColor(renderer, convex_seg(x1, x2, theta)-width/2, convex_seg(y1, y2, theta)-width/2, width, width); + theta += 1 / seglen; + } +} + void drawLineWithThiccGradient(SDL_Renderer* renderer, int start_width, int end_width, int x1, int x2, int y1, int y2, int R, int G, int B, int A) { // draws line with width ; // width goes from start_width to end_with in a linear way double theta = 0.0; - double seglen = distance_pt(x1, x2, y1, y2); + double seglen = distance_pt_pt_3d(x1, y1, 0.0, x2, y2, 0.0); while(theta < 1.0) { int width = convex_seg(start_width, end_width, theta) ; placeRectToRenderer(renderer, convex_seg(x1, x2, theta)-width/2, convex_seg(y1, y2, theta)-width/2, width, width, R, G, B, A); @@ -135,3 +155,90 @@ void drawStringToRenderer(SDL_Renderer* renderer, imgs data, char* s, int X, int k += 1; } } + +// ---------------------------------------------------------------------------------------------------------------------------------- // +// 3D stuff + +void project_to_camera(double x0, double y0, double z0, double* rx, double* ry, double* rz) { + // align camera to (0, 0, 0) + double x = x0 - camx ; + double y = y0 - camy ; + double z = z0 - camz ; + + // rotate (y) + double xry = x*cos(rot_hz) + z*sin(rot_hz) ; + double yry = y ; + double zry = z*cos(rot_hz) - x*sin(rot_hz) ; + + // rotate (x) + *rx = xry ; + *ry = yry*cos(rot_vt) - zry*sin(rot_vt) ; + *rz = zry*cos(rot_vt) + yry*sin(rot_vt) ; +} + +void draw_segment(SDL_Renderer* renderer, double sx, double sy, double sz, double ex, double ey, double ez) { + double spx ;double spy ;double spz ;double epx ;double epy ;double epz ; + project_to_camera(sx, sy, sz, &spx, &spy, &spz) ; + project_to_camera(ex, ey, ez, &epx, &epy, &epz) ; + if(spz >= 0.4 && epz >= 0.4) { + drawLineWithThiccNoColor(renderer, 1, + (int)(1500.0 * (1.0 + (spx / (1.5 * spz * tan_fov))) / 2.0), + (int)(1500.0 * (1.0 + (epx / (1.5 * epz * tan_fov))) / 2.0), + (int)(1000.0 * (1.0 + (spy / (spz * tan_fov))) / 2.0), + (int)(1000.0 * (1.0 + (epy / (epz * tan_fov))) / 2.0) + ) ; + } else if(epz >= 0.4) { + double midx = convex_pt(ex, sx, (epz - 0.4)/(epz - spz)) ; + double midy = convex_pt(ey, sy, (epz - 0.4)/(epz - spz)) ; + double midz = convex_pt(ez, sz, (epz - 0.4)/(epz - spz)) ; + project_to_camera(midx, midy, midz, &spx, &spy, &spz) ; + //printf("* %f\n", spz) ; + drawLineWithThiccNoColor(renderer, 1, + (int)(1500.0 * (1.0 + (spx / (1.5 * spz * tan_fov))) / 2.0), + (int)(1500.0 * (1.0 + (epx / (1.5 * epz * tan_fov))) / 2.0), + (int)(1000.0 * (1.0 + (spy / (spz * tan_fov))) / 2.0), + (int)(1000.0 * (1.0 + (epy / (epz * tan_fov))) / 2.0) + ) ; + } else if(spz >= 0.4) { + double midx = convex_pt(sx, ex, (spz - 0.4)/(spz - epz)) ; + double midy = convex_pt(sy, ey, (spz - 0.4)/(spz - epz)) ; + double midz = convex_pt(sz, ez, (spz - 0.4)/(spz - epz)) ; + project_to_camera(midx, midy, midz, &epx, &epy, &epz) ; + //printf("%f *\n", epz) ; + drawLineWithThiccNoColor(renderer, 1, + (int)(1500.0 * (1.0 + (spx / (1.5 * spz * tan_fov))) / 2.0), + (int)(1500.0 * (1.0 + (epx / (1.5 * epz * tan_fov))) / 2.0), + (int)(1000.0 * (1.0 + (spy / (spz * tan_fov))) / 2.0), + (int)(1000.0 * (1.0 + (epy / (epz * tan_fov))) / 2.0) + ) ; + } // else : not visible (behind camera) +} + +void drawOutlineOfCube_0(SDL_Renderer* renderer, cube_0 c) { + SDL_SetRenderDrawColor(renderer, c.red, c.green, c.blue, 255) ; + // x = constant + draw_segment(renderer, c.x, c.y, c.z, c.x + c.w, c.y, c.z) ; + draw_segment(renderer, c.x, c.y + c.h, c.z, c.x + c.w, c.y + c.h, c.z) ; + draw_segment(renderer, c.x, c.y, c.z + c.d, c.x + c.w, c.y, c.z + c.d) ; + draw_segment(renderer, c.x, c.y + c.h, c.z + c.d, c.x + c.w, c.y + c.h, c.z + c.d) ; + + // y = constant + draw_segment(renderer, c.x, c.y, c.z, c.x, c.y + c.h, c.z) ; + draw_segment(renderer, c.x + c.w, c.y, c.z, c.x + c.w, c.y + c.h, c.z) ; + draw_segment(renderer, c.x, c.y, c.z + c.d, c.x, c.y + c.h, c.z + c.d) ; + draw_segment(renderer, c.x + c.w, c.y, c.z + c.d, c.x + c.w, c.y + c.h, c.z + c.d) ; + + // z = constant + draw_segment(renderer, c.x, c.y, c.z, c.x, c.y, c.z + c.d) ; + draw_segment(renderer, c.x + c.w, c.y, c.z, c.x + c.w, c.y, c.z + c.d) ; + draw_segment(renderer, c.x, c.y + c.h, c.z, c.x, c.y + c.h, c.z + c.d) ; + draw_segment(renderer, c.x + c.w, c.y + c.h, c.z, c.x + c.w, c.y + c.h, c.z + c.d) ; +} + +// -------------------------------------------------------------------------------------------------------------------------------- // + +void drawData(SDL_Renderer* renderer) { + drawNumberToRenderer(renderer, digits, (int)camx, 10, 10, 75/2, 105/2, 0) ; + drawNumberToRenderer(renderer, digits, (int)camy, 10, 60, 75/2, 105/2, 0) ; + drawNumberToRenderer(renderer, digits, (int)camz, 10, 110, 75/2, 105/2, 0) ; +} \ No newline at end of file diff --git a/src/display.h b/src/display.h index dc169db..ecc810d 100644 --- a/src/display.h +++ b/src/display.h @@ -2,23 +2,27 @@ #define DISPLAY_H void updateRenderer(SDL_Renderer* renderer); - void resetRenderer(SDL_Renderer* renderer); void drawRectToRenderer(SDL_Renderer* renderer, SDL_Rect* rect, int R, int G, int B, int A); void placeRectToRenderer(SDL_Renderer* renderer, int X, int Y, int W, int H, int R, int G, int B, int A); +void placeRectToRendererNoColor(SDL_Renderer* renderer, int X, int Y, int W, int H); void drawLineWithThicc(SDL_Renderer* renderer, int width, int x1, int x2, int y1, int y2, int R, int G, int B, int A); +void drawLineWithThiccNoColor(SDL_Renderer* renderer, int width, int x1, int x2, int y1, int y2); void drawLineWithThiccGradient(SDL_Renderer* renderer, int start_width, int end_width, int x1, int x2, int y1, int y2, int R, int G, int B, int A); void drawDigitToRenderer(SDL_Renderer* renderer, imgs data, int digit, int X, int Y, int W, int H); - void drawCharToRenderer(SDL_Renderer* renderer, imgs data, char c, int X, int Y, int W, int H); - void drawNumberToRenderer(SDL_Renderer* renderer, imgs data, int n, int X, int Y, int W, int H, int Woffset); - void drawStringToRenderer(SDL_Renderer* renderer, imgs data, char* s, int X, int Y, int W, int H); +void project_to_camera(double x0, double y0, double z0, double* rx, double* ry, double* rz); +void draw_segment(SDL_Renderer* renderer, double sx, double sy, double sz, double ex, double ey, double ez); +void drawOutlineOfCube_0(SDL_Renderer* renderer, cube_0 c); + +void drawData(SDL_Renderer* renderer); + #endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 8e14a5d..4874e5b 100644 --- a/src/main.c +++ b/src/main.c @@ -14,6 +14,7 @@ #include "hash.h" #include "structure.h" #include "base.h" +#include "move.h" #include "display.h" #include "generation.h" @@ -28,7 +29,7 @@ int main(int argc, char** argv) { SDL_Window* win = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - 1000, 1000, 0); + 1500, 1000, 0); Uint32 render_flags = SDL_RENDERER_ACCELERATED; SDL_Renderer* rend = SDL_CreateRenderer(win, -1, render_flags); @@ -39,10 +40,26 @@ int main(int argc, char** argv) { fprintf(stderr, "cannot initialize audio"); exit(1); } + SDL_SetRelativeMouseMode(true) ; /* -------------------------------------------------------- */ - - + init_csts() ; + import_digits(rend) ; + import_letters(rend) ; + cube_0 cb = create_cube_0(1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 255, 255, 255) ; + while(true) { + resetRenderer(rend) ; + + SDL_SetRenderDrawColor(rend, 255, 255, 255, 255) ; + playerActions() ; + drawData(rend) ; + drawOutlineOfCube_0(rend, cb) ; + //draw_segment(rend, 1.0, 1.0, 1.0, 10.0, 2.0, -1.0) ; + + updateRenderer(rend) ; + usleep(1000000/60) ; + } + free_digits(digits) ; /* -------------------------------------------------------- */ diff --git a/src/move.c b/src/move.c new file mode 100644 index 0000000..52c79b0 --- /dev/null +++ b/src/move.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hash.h" +#include "structure.h" +#include "base.h" +#include "move.h" + +// ---------------------------------------------------------------------------------------------------- // +double sensitivity = 0.3 ; +double fov = 90.0 ; +double speed = 1.0 ; +// ---------------------------------------------------------------------------------------------------- // + +double camx ; +double camy ; +double camz ; + +double rot_hz ; +double rot_vt ; + +double tan_fov ; + +bool has_changed ; + +void init_csts() { + camx = 0.0 ; + camy = 0.0 ; + camz = 0.0 ; + rot_hz = 0.0 ; + rot_vt = 0.0 ; + tan_fov = tan((fov * 3.14159 / 180.0) / 2.0) ; +} + +void playerActions() { + SDL_Event event; + while(SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + break; + case SDL_MOUSEMOTION: + has_changed = true ; + rot_hz -= sensitivity * event.motion.xrel / 100.0 ; + rot_vt -= sensitivity * event.motion.yrel / 100.0 ; + if(rot_hz >= 2*3.141592) { + rot_hz -= 2*3.141592 ; + } else if(rot_hz < 0.0) { + rot_hz += 2*3.141592 ; + } + if(rot_vt >= 2*3.141592) { + rot_vt -= 2*3.141592 ; + } else if(rot_vt < 0.0) { + rot_vt += 2*3.141592 ; + } + break; + case SDL_KEYDOWN: + has_changed = true ; + switch (event.key.keysym.sym) { + case SDLK_z: + camz += speed*cos(rot_hz); + camx -= speed*sin(rot_hz); + break; + case SDLK_q: + camx -= speed*cos(rot_hz); + camz -= speed*sin(rot_hz); + break; + case SDLK_s: + camz -= speed*cos(rot_hz); + camx += speed*sin(rot_hz); + break; + case SDLK_d: + camx += speed*cos(rot_hz); + camz += speed*sin(rot_hz); + break; + + case SDLK_t: + fprintf(stderr, "Killed.\n") ; + exit(1) ; + break; + + case SDLK_a: + rot_hz -= sensitivity ; + break; + case SDLK_e: + rot_hz += sensitivity ; + break; + + case SDLK_p: + rot_vt -= sensitivity ; + break; + case SDLK_m: + rot_vt += sensitivity ; + break; + + default: + break; + } + } + } +} \ No newline at end of file diff --git a/src/move.h b/src/move.h new file mode 100644 index 0000000..84688c5 --- /dev/null +++ b/src/move.h @@ -0,0 +1,7 @@ +#ifndef MOVE_H +#define MOVE_H + +void init_csts(); +void playerActions(); + +#endif \ No newline at end of file diff --git a/src/structure.h b/src/structure.h index 2ec4cb1..2abb785 100644 --- a/src/structure.h +++ b/src/structure.h @@ -6,7 +6,32 @@ typedef struct imgs { SDL_Texture** arr; } imgs ; +struct cube_0 { + int red; int green; int blue ; + double x; + double y; + double z; + double w; + double h; + double d; + double hz_angle ; + double vt_angle ; +} ; +typedef struct cube_0 cube_0 ; +typedef cube_0* cube ; + extern imgs digits ; extern imgs letters ; +extern double camx ; +extern double camy ; +extern double camz ; + +extern double rot_hz ; +extern double rot_vt ; + +extern double tan_fov ; + +extern bool has_changed ; + #endif \ No newline at end of file