Réparationement des problèmes de mémoire
This commit is contained in:
parent
c8c7fb1b52
commit
ab44eac4ee
12 changed files with 133 additions and 13 deletions
1
.gitignore
vendored
Normal file → Executable file
1
.gitignore
vendored
Normal file → Executable file
|
@ -8,3 +8,4 @@ raylib/
|
||||||
*.tiled-session
|
*.tiled-session
|
||||||
map/maps_out.c
|
map/maps_out.c
|
||||||
map/converter
|
map/converter
|
||||||
|
log.txt
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
OUTNAME = mtycoon
|
OUTNAME = mtycoon
|
||||||
|
|
||||||
CFLAGS = -O2 -Wall -Wextra -g -I./raylib/include -I./lua/include -pipe
|
CFLAGS = -O0 -Wall -Wextra -g -I./raylib/include -I./lua/include -pipe
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,11 @@
|
||||||
|
|
||||||
#define VERSION_MAJ 0
|
#define VERSION_MAJ 0
|
||||||
#define VERSION_MIN 1
|
#define VERSION_MIN 1
|
||||||
#define VERSION_PATCH 3
|
#define VERSION_PATCH 4
|
||||||
|
|
||||||
|
#define DEBUG 1
|
||||||
|
|
||||||
|
#define LOG_PATH "log.txt"
|
||||||
|
|
||||||
// Set in ui.c
|
// Set in ui.c
|
||||||
extern char *VERSION_STR;
|
extern char *VERSION_STR;
|
||||||
|
|
10
src/draw.c
10
src/draw.c
|
@ -39,17 +39,23 @@ Image tile_index[TILE_N];
|
||||||
extern GUIInfo gui_info;
|
extern GUIInfo gui_info;
|
||||||
|
|
||||||
int init_draw(){
|
int init_draw(){
|
||||||
|
char tmpbuf[4096];
|
||||||
|
|
||||||
InitWindow(1280, 720, "Mineur Tycoon");
|
InitWindow(1280, 720, "Mineur Tycoon");
|
||||||
|
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
|
|
||||||
|
char *cwd = GetApplicationDirectory();
|
||||||
|
puts(cwd);
|
||||||
|
|
||||||
for(int i = 0; i < TEX_N; i++){
|
for(int i = 0; i < TEX_N; i++){
|
||||||
tex_index[i] = LoadTexture(tex_files[i]);
|
snprintf(tmpbuf, 4096, "%s%s", cwd, tex_files[i]);
|
||||||
|
tex_index[i] = LoadTexture(tmpbuf);
|
||||||
GenTextureMipmaps(&tex_index[i]);
|
GenTextureMipmaps(&tex_index[i]);
|
||||||
}
|
}
|
||||||
for(int i = 0; i < TILE_N; i++){
|
for(int i = 0; i < TILE_N; i++){
|
||||||
tile_index[i] = LoadImage(tile_files[i]);
|
snprintf(tmpbuf, 4096, "%s%s", cwd, tile_files[i]);
|
||||||
|
tile_index[i] = LoadImage(tmpbuf);
|
||||||
ImageFormat(&tile_index[i], 4);
|
ImageFormat(&tile_index[i], 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
20
src/game.c
Normal file → Executable file
20
src/game.c
Normal file → Executable file
|
@ -8,6 +8,7 @@
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
#include <raymath.h>
|
#include <raymath.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
@ -19,6 +20,16 @@ MachineDef machine_dict[] = {
|
||||||
{{{0,0},{32,0},{0,32},{32,32}}, {R_Coal, R_Iron}, 2, R_Steel, 0}, // MT_Furnace
|
{{{0,0},{32,0},{0,32},{32,32}}, {R_Coal, R_Iron}, 2, R_Steel, 0}, // MT_Furnace
|
||||||
};
|
};
|
||||||
|
|
||||||
|
char *worker_names[] = {
|
||||||
|
"Bob",
|
||||||
|
"Jill",
|
||||||
|
"Frank",
|
||||||
|
"Michel",
|
||||||
|
"Sophie"
|
||||||
|
};
|
||||||
|
|
||||||
|
_Static_assert(sizeof(worker_names)/sizeof(void*) >= WORKER_NAMES);
|
||||||
|
|
||||||
int init_machines(Machines *machines){
|
int init_machines(Machines *machines){
|
||||||
machines->machine_n = 0;
|
machines->machine_n = 0;
|
||||||
machines->machine_id = 0;
|
machines->machine_id = 0;
|
||||||
|
@ -64,18 +75,26 @@ int init_game(Game *game){
|
||||||
for(int j = 0; j < 16; j++){
|
for(int j = 0; j < 16; j++){
|
||||||
Machine *coal_mine = add_machine(&game->machines, (V2d){k*250+40,j*400+40});
|
Machine *coal_mine = add_machine(&game->machines, (V2d){k*250+40,j*400+40});
|
||||||
coal_mine->type = MT_CoalMine;
|
coal_mine->type = MT_CoalMine;
|
||||||
|
int coal_id = coal_mine->id;
|
||||||
Machine *iron_mine = add_machine(&game->machines, (V2d){k*250+40,j*400+240});
|
Machine *iron_mine = add_machine(&game->machines, (V2d){k*250+40,j*400+240});
|
||||||
iron_mine->type = MT_IronMine;
|
iron_mine->type = MT_IronMine;
|
||||||
|
int iron_id = iron_mine->id;
|
||||||
Machine *furnace = add_machine(&game->machines, (V2d){k*250+140,j*400+140});
|
Machine *furnace = add_machine(&game->machines, (V2d){k*250+140,j*400+140});
|
||||||
furnace->type = MT_Furnace;
|
furnace->type = MT_Furnace;
|
||||||
|
|
||||||
|
// The adresses may have changed
|
||||||
|
coal_mine = get_machine_from_id(&game->machines, coal_id);
|
||||||
|
iron_mine = get_machine_from_id(&game->machines, coal_id);
|
||||||
|
|
||||||
for(int i = 0; i < 10; i++)
|
for(int i = 0; i < 10; i++)
|
||||||
add_worker(&game->workers, (V2d){.x=k*250+100,.y=j*400});
|
add_worker(&game->workers, (V2d){.x=k*250+100,.y=j*400});
|
||||||
for(int i = 0; i < 4; i++)
|
for(int i = 0; i < 4; i++)
|
||||||
assign_worker_machine(coal_mine, &game->workers.worker_stack[c_worker++]);
|
assign_worker_machine(coal_mine, &game->workers.worker_stack[c_worker++]);
|
||||||
for(int i = 4; i < 8; i++)
|
for(int i = 4; i < 8; i++)
|
||||||
assign_worker_machine(iron_mine, &game->workers.worker_stack[c_worker++]);
|
assign_worker_machine(iron_mine, &game->workers.worker_stack[c_worker++]);
|
||||||
|
game->workers.worker_stack[c_worker].satisf = rand() & 63;
|
||||||
assign_worker_fetch(iron_mine, furnace, &game->workers.worker_stack[c_worker++]);
|
assign_worker_fetch(iron_mine, furnace, &game->workers.worker_stack[c_worker++]);
|
||||||
|
game->workers.worker_stack[c_worker].satisf = rand() & 63;
|
||||||
assign_worker_fetch(coal_mine, furnace, &game->workers.worker_stack[c_worker++]);
|
assign_worker_fetch(coal_mine, furnace, &game->workers.worker_stack[c_worker++]);
|
||||||
if(!(furnace->id%1000))
|
if(!(furnace->id%1000))
|
||||||
printf("%d\n",furnace->id);
|
printf("%d\n",furnace->id);
|
||||||
|
@ -113,6 +132,7 @@ Worker *add_worker(Workers *workers, V2d pos){
|
||||||
|
|
||||||
Worker *work = &workers->worker_stack[workers->worker_n++];
|
Worker *work = &workers->worker_stack[workers->worker_n++];
|
||||||
work->pos = pos;
|
work->pos = pos;
|
||||||
|
work->name = rand()%WORKER_NAMES;
|
||||||
work->ai = (AiInternal){S_Idle, 0, 0, 0, MACH_NULL, MACH_NULL, {.x=0,.y=0}};
|
work->ai = (AiInternal){S_Idle, 0, 0, 0, MACH_NULL, MACH_NULL, {.x=0,.y=0}};
|
||||||
|
|
||||||
return work;
|
return work;
|
||||||
|
|
|
@ -20,7 +20,10 @@
|
||||||
|
|
||||||
#define TPS_TIME (1.0/TPS)
|
#define TPS_TIME (1.0/TPS)
|
||||||
|
|
||||||
|
#define WORKER_NAMES 5
|
||||||
|
|
||||||
extern MachineDef machine_dict[];
|
extern MachineDef machine_dict[];
|
||||||
|
extern char *worker_names[];
|
||||||
|
|
||||||
int init_game(Game *game);
|
int init_game(Game *game);
|
||||||
|
|
||||||
|
|
|
@ -305,11 +305,17 @@ void lua_mt_init(lua_State *L){
|
||||||
}
|
}
|
||||||
|
|
||||||
void script_init(Game *game){
|
void script_init(Game *game){
|
||||||
|
char tmpbuf[4096];
|
||||||
gl_game = game;
|
gl_game = game;
|
||||||
FilePathList scripts = LoadDirectoryFilesEx("script",".lua",true);
|
|
||||||
|
char *cwd = GetApplicationDirectory();
|
||||||
|
snprintf(tmpbuf, 4096, "%sscript", cwd);
|
||||||
|
FilePathList scripts = LoadDirectoryFilesEx(tmpbuf,".lua",true);
|
||||||
|
|
||||||
lstate_n = scripts.count;
|
lstate_n = scripts.count;
|
||||||
lstates = malloc(sizeof(void*)*lstate_n);
|
lstates = malloc(sizeof(void*)*lstate_n);
|
||||||
if(!lstates){
|
if(!lstates){
|
||||||
|
puts("Fail 318");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for(int i = 0; i < scripts.count; i++){
|
for(int i = 0; i < scripts.count; i++){
|
||||||
|
@ -320,7 +326,9 @@ void script_init(Game *game){
|
||||||
int ret = luaL_dofile(lstates[i], scripts.paths[i]);
|
int ret = luaL_dofile(lstates[i], scripts.paths[i]);
|
||||||
if(ret)
|
if(ret)
|
||||||
puts(lua_tostring(lstates[i], -1));
|
puts(lua_tostring(lstates[i], -1));
|
||||||
|
MemFree(scripts.paths[i]);
|
||||||
}
|
}
|
||||||
|
MemFree(scripts.paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
void script_clean(){
|
void script_clean(){
|
||||||
|
|
39
src/main.c
39
src/main.c
|
@ -7,6 +7,7 @@
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
#include <raymath.h>
|
#include <raymath.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
@ -22,11 +23,45 @@
|
||||||
* map :
|
* map :
|
||||||
* - Textures : ~
|
* - Textures : ~
|
||||||
* - Affichage :
|
* - Affichage :
|
||||||
* - convertisseur :
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
FILE *log_file;
|
||||||
|
|
||||||
|
char *log_levels[] = {
|
||||||
|
"???",
|
||||||
|
"TRACE",
|
||||||
|
"DEBUG",
|
||||||
|
"INFO",
|
||||||
|
"WARNING",
|
||||||
|
"ERROR",
|
||||||
|
"FATAL",
|
||||||
|
"!!!"
|
||||||
|
};
|
||||||
|
|
||||||
|
void log_callback(int logLevel, const char *text, va_list args){
|
||||||
|
char tmpbuf[1024*16];
|
||||||
|
snprintf(tmpbuf, 1024*16, "%s : %s\n", log_levels[logLevel], text);
|
||||||
|
vfprintf(log_file, tmpbuf, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
int init_log_file(){
|
||||||
|
char tmpbuf[4096];
|
||||||
|
snprintf(tmpbuf, 4096, "%s%s", GetApplicationDirectory(), LOG_PATH);
|
||||||
|
log_file = fopen(tmpbuf, "w");
|
||||||
|
if(!log_file)
|
||||||
|
return 1;
|
||||||
|
SetTraceLogCallback(log_callback);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int init(Game *game){
|
int init(Game *game){
|
||||||
int err = init_draw();
|
int err;
|
||||||
|
#if DEBUG
|
||||||
|
err = init_log_file();
|
||||||
|
#endif
|
||||||
|
err |= init_draw();
|
||||||
err |= init_game(game);
|
err |= init_game(game);
|
||||||
init_ui();
|
init_ui();
|
||||||
script_init(game);
|
script_init(game);
|
||||||
|
|
|
@ -21,6 +21,8 @@ int generate_coll(Game *game, int mapn){
|
||||||
memcpy(lmap->coll, map->layers[1], map->width*map->height);
|
memcpy(lmap->coll, map->layers[1], map->width*map->height);
|
||||||
for(int i = 0; i < mach->machine_n; i++){
|
for(int i = 0; i < mach->machine_n; i++){
|
||||||
V2d pos = mach->machine_stack[i].pos;
|
V2d pos = mach->machine_stack[i].pos;
|
||||||
|
pos.x /= 32;
|
||||||
|
pos.y /= 32;
|
||||||
lmap->coll[(int)(pos.y * lmap->width + pos.x)] = 1;
|
lmap->coll[(int)(pos.y * lmap->width + pos.x)] = 1;
|
||||||
lmap->coll[(int)(pos.y * lmap->width + pos.x+1)] = 1;
|
lmap->coll[(int)(pos.y * lmap->width + pos.x+1)] = 1;
|
||||||
lmap->coll[(int)((pos.y+1) * lmap->width + pos.x)] = 1;
|
lmap->coll[(int)((pos.y+1) * lmap->width + pos.x)] = 1;
|
||||||
|
@ -35,7 +37,7 @@ int load_map(Game *game, int mapn){
|
||||||
nmap->maptex = mkmap_tex(map);
|
nmap->maptex = mkmap_tex(map);
|
||||||
nmap->width = map->width;
|
nmap->width = map->width;
|
||||||
nmap->height = map->height;
|
nmap->height = map->height;
|
||||||
nmap->coll = realloc(nmap->coll, map->width*map->height);
|
nmap->coll = malloc(map->width*map->height);
|
||||||
if(!nmap->coll)
|
if(!nmap->coll)
|
||||||
return 1;
|
return 1;
|
||||||
if(generate_coll(game, mapn))
|
if(generate_coll(game, mapn))
|
||||||
|
|
|
@ -60,7 +60,8 @@ typedef struct {
|
||||||
uint assign_n : 2; // To offset on machines
|
uint assign_n : 2; // To offset on machines
|
||||||
uint satisf : 6;
|
uint satisf : 6;
|
||||||
uint8_t fatigue;
|
uint8_t fatigue;
|
||||||
uint8_t __padding[3];
|
uint8_t name;
|
||||||
|
uint8_t __padding[2];
|
||||||
|
|
||||||
} Worker;
|
} Worker;
|
||||||
|
|
||||||
|
|
44
src/ui.c
44
src/ui.c
|
@ -27,6 +27,20 @@ void draw_text_centered(char *str, int y, int font_size, Color color){
|
||||||
DrawText(str, 640-width/2, y, font_size, color);
|
DrawText(str, 640-width/2, y, font_size, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void draw_print(int x, int y, int font_size, Color color, char *fmt, ...){
|
||||||
|
char tmpbuf[2048];
|
||||||
|
|
||||||
|
va_list vlist;
|
||||||
|
|
||||||
|
va_start(vlist, fmt);
|
||||||
|
|
||||||
|
vsnprintf(tmpbuf, 2048, fmt, vlist);
|
||||||
|
|
||||||
|
va_end(vlist);
|
||||||
|
|
||||||
|
DrawText(tmpbuf, x, y, font_size, color);
|
||||||
|
}
|
||||||
|
|
||||||
void draw_buttons(Widget *widget){
|
void draw_buttons(Widget *widget){
|
||||||
for(int i = 0; i < widget->button_n; i++){
|
for(int i = 0; i < widget->button_n; i++){
|
||||||
Button *butt = &widget->buttons[i];
|
Button *butt = &widget->buttons[i];
|
||||||
|
@ -188,6 +202,16 @@ Widget pause_menu = {
|
||||||
|
|
||||||
void worker_widget_draw(Widget *widget, Game *game){
|
void worker_widget_draw(Widget *widget, Game *game){
|
||||||
DrawRectangleRounded(widget->box, 0.1, 3, color_main_brown);
|
DrawRectangleRounded(widget->box, 0.1, 3, color_main_brown);
|
||||||
|
|
||||||
|
draw_buttons(widget);
|
||||||
|
|
||||||
|
Worker *work = gui_info.widg_target;
|
||||||
|
draw_print(205, 100, 17, BLACK, "Name : %s", worker_names[work->name]);
|
||||||
|
draw_print(205, 120, 17, BLACK, "Traits : TODO");
|
||||||
|
draw_print(205, 140, 17, BLACK, "Satisfaction : %.0f%%",
|
||||||
|
(float)work->satisf/64.0f*100.0f);
|
||||||
|
draw_print(205, 160, 17, BLACK, "Fatigue : %.0f%%",
|
||||||
|
(float)work->fatigue/256.0f*100.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void worker_widget_do_event(Widget *widget, Game *game, MTEvent event){
|
void worker_widget_do_event(Widget *widget, Game *game, MTEvent event){
|
||||||
|
@ -196,14 +220,27 @@ void worker_widget_do_event(Widget *widget, Game *game, MTEvent event){
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget worker_widget = {
|
Widget worker_widget = {
|
||||||
.box = {.x = 40, .y = 40, .width = 300, .height = 600},
|
.box = {.x = 40, .y = 40, .width = 350, .height = 600},
|
||||||
.draw = worker_widget_draw,
|
.draw = worker_widget_draw,
|
||||||
.do_event = worker_widget_do_event,
|
.do_event = worker_widget_do_event,
|
||||||
.capt_flags = CF_Mouse,
|
.capt_flags = CF_Mouse,
|
||||||
.buttons = {
|
.buttons = {
|
||||||
|
{.box = {350,50,30,30},
|
||||||
|
.color_0 = RED,
|
||||||
|
.color_1 = BLACK,
|
||||||
|
.color_txt = BLACK,
|
||||||
|
.txt = "X",
|
||||||
|
.handler = NULL
|
||||||
},
|
},
|
||||||
.button_n = 0
|
{.box = {55,90,140,140},
|
||||||
|
.color_0 = GRAY,
|
||||||
|
.color_1 = BLACK,
|
||||||
|
.color_txt = WHITE,
|
||||||
|
.txt = "",
|
||||||
|
.handler = NULL
|
||||||
|
},
|
||||||
|
},
|
||||||
|
.button_n = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
Widget machine_widget = {
|
Widget machine_widget = {
|
||||||
|
@ -306,6 +343,7 @@ void try_interface(Game *game, V2d pos){
|
||||||
|
|
||||||
printf("found worker\n");
|
printf("found worker\n");
|
||||||
gui_info.widget_active[2] = true;
|
gui_info.widget_active[2] = true;
|
||||||
|
gui_info.widg_target = work;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
2
src/ui.h
2
src/ui.h
|
@ -72,6 +72,8 @@ typedef struct {
|
||||||
Widget *widgets[WIDGET_N];
|
Widget *widgets[WIDGET_N];
|
||||||
bool widget_active[WIDGET_N];
|
bool widget_active[WIDGET_N];
|
||||||
|
|
||||||
|
void *widg_target;
|
||||||
|
|
||||||
float *zoom;
|
float *zoom;
|
||||||
|
|
||||||
} GUIInfo;
|
} GUIInfo;
|
||||||
|
|
Loading…
Add table
Reference in a new issue