Compare commits

..

No commits in common. "master" and "v0-1-3" have entirely different histories.

14 changed files with 113 additions and 484 deletions

2
.gitignore vendored Executable file → Normal file
View file

@ -7,5 +7,3 @@ raylib/
*.swp *.swp
*.tiled-session *.tiled-session
map/maps_out.c map/maps_out.c
map/converter
log.txt

BIN
map/converter Executable file

Binary file not shown.

View file

@ -9,10 +9,6 @@ machine.pos = pos
mtprint(pos.x) mtprint(pos.x)
machine.pos.x = 50 machine.pos.x = 50
machine.storage[0] = 1 machine.storage[0] = 1
worker = add_worker(30, 10)
mtprint(worker.name)
worker.pos.x = 25
mtprint(worker.pos.x)
function on_tick(game) function on_tick(game)
-- Ceci va drainer la sortie de la machine 2 -- Ceci va drainer la sortie de la machine 2
@ -26,8 +22,3 @@ end
function on_frame(game) function on_frame(game)
end end
function on_load(game, map)
mtprint("loaded map :")
mtprint(map)
end

View file

@ -2,11 +2,7 @@
#define VERSION_MAJ 0 #define VERSION_MAJ 0
#define VERSION_MIN 1 #define VERSION_MIN 1
#define VERSION_PATCH 4 #define VERSION_PATCH 3
#define DEBUG 1
#define LOG_PATH "log.txt"
// Set in ui.c // Set in ui.c
extern char *VERSION_STR; extern char *VERSION_STR;

View file

@ -39,23 +39,17 @@ 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++){
snprintf(tmpbuf, 4096, "%s%s", cwd, tex_files[i]); tex_index[i] = LoadTexture(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++){
snprintf(tmpbuf, 4096, "%s%s", cwd, tile_files[i]); tile_index[i] = LoadImage(tile_files[i]);
tile_index[i] = LoadImage(tmpbuf);
ImageFormat(&tile_index[i], 4); ImageFormat(&tile_index[i], 4);
} }
@ -82,8 +76,7 @@ Texture2D mkmap_tex(Map *map){
Rectangle rectb = recta; Rectangle rectb = recta;
rectb.x = x*32; rectb.x = x*32;
rectb.y = y*32; rectb.y = y*32;
ImageDraw(&mapimg, tile_index[tiles[map->width*y + x]], recta, rectb, ImageDraw(&mapimg, tile_index[tiles[map->width*y + x]], recta, rectb, WHITE);
WHITE);
} }
} }
Texture2D maptex = LoadTextureFromImage(mapimg); Texture2D maptex = LoadTextureFromImage(mapimg);

22
src/game.c Executable file → Normal file
View file

@ -8,7 +8,6 @@
#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"
@ -20,16 +19,6 @@ 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;
@ -69,32 +58,26 @@ int init_game(Game *game){
return 1; return 1;
} }
load_map(game, 0);
int c_worker = 0; int c_worker = 0;
for(int k = 0; k < 16; k++){ for(int k = 0; k < 16; k++){
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);
@ -132,7 +115,6 @@ 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;

View file

@ -20,10 +20,7 @@
#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);

View file

@ -13,85 +13,6 @@
Game *gl_game; Game *gl_game;
typedef void (lua_affect_t)(lua_State*, void *, int);
struct LuaAffect {
lua_affect_t *func;
int arg;
};
struct TypeMap {
char *type_name;
int n_fields;
char **field_names;
struct LuaAffect field_affect[];
};
void lua_index_custom(lua_State *L, struct TypeMap *map){
void **ptr = luaL_checkudata(L, 1, map->type_name);
const char *name = luaL_checkstring(L, 2);
for(int i = 0; i < map->n_fields; i++){
if(!strcmp(name,map->field_names[i])){
map->field_affect[i].func(L, *((char**)(ptr)), map->field_affect[i].arg);
return;
}
}
char tbuf[256];
snprintf(tbuf, 256, "Invalid index for %s : \"%s\"", map->type_name, name);
luaL_error(L, tbuf);
}
void lua_index_u8(lua_State *L, void *base, int offset){
uint8_t *ptr = (void*)(((char*)base) + offset);
lua_pushinteger(L, *ptr);
}
void lua_index_u16(lua_State *L, void *base, int offset){
uint16_t *ptr = (void*)(((char*)base) + offset);
lua_pushinteger(L, *ptr);
}
void lua_index_i32(lua_State *L, void *base, int offset){
int32_t *ptr = (void*)(((char*)base) + offset);
lua_pushinteger(L, *ptr);
}
// Index a V2d member of a struct != adressing into a V2d
void lua_index_V2d(lua_State *L, void *base, int offset){
V2d *ptr0 = (void*)(((char*)base) + offset);
V2d **ptr1 = lua_newuserdatauv(L, sizeof(void*), 0);
*ptr1 = ptr0;
luaL_newmetatable(L, "V2d");
lua_setmetatable(L, -2);
}
void lua_newindex_u8(lua_State *L, void *base, int offset){
uint8_t *ptr = (void*)(((char*)base) + offset);
*ptr = luaL_checkinteger(L, 3);
}
void lua_newindex_u16(lua_State *L, void *base, int offset){
uint16_t *ptr = (void*)(((char*)base) + offset);
*ptr = luaL_checkinteger(L, 3);
}
void lua_newindex_i32(lua_State *L, void *base, int offset){
uint16_t *ptr = (void*)(((char*)base) + offset);
*ptr = luaL_checkinteger(L, 3);
}
// newindex a V2d member of a struct != adressing into a V2d
void lua_newindex_V2d(lua_State *L, void *base, int offset){
V2d *dst = (void*)(((char*)base) + offset);
V2d **ptr = luaL_checkudata(L, 3, "V2d");
memmove(dst, *ptr, sizeof(V2d));
}
static int lua_V2d_index(lua_State *L){ static int lua_V2d_index(lua_State *L){
V2d **ptr = luaL_checkudata(L, 1, "V2d"); V2d **ptr = luaL_checkudata(L, 1, "V2d");
V2d *u = *ptr; V2d *u = *ptr;
@ -99,11 +20,11 @@ static int lua_V2d_index(lua_State *L){
if(name[1] != '\0') if(name[1] != '\0')
return luaL_error(L, "Invalid index for V2d"); return luaL_error(L, "Invalid index for V2d");
if(name[0] == 'x'){ if(name[0] == 'x'){
lua_pushnumber(L, u->x); lua_pushinteger(L, u->x);
return 1; return 1;
} }
else if(name[0] == 'y'){ else if(name[0] == 'y'){
lua_pushnumber(L, u->y); lua_pushinteger(L, u->y);
return 1; return 1;
} }
else { else {
@ -115,7 +36,7 @@ static int lua_V2d_newindex(lua_State *L){
V2d **ptr = luaL_checkudata(L, 1, "V2d"); V2d **ptr = luaL_checkudata(L, 1, "V2d");
V2d *u = *ptr; V2d *u = *ptr;
const char *name = luaL_checkstring(L, 2); const char *name = luaL_checkstring(L, 2);
lua_Number val = luaL_checknumber(L, 3); float val = luaL_checknumber(L, 3);
if(name[1] != '\0') if(name[1] != '\0')
return luaL_error(L, "Invalid index for V2d"); return luaL_error(L, "Invalid index for V2d");
if(name[0] == 'x'){ if(name[0] == 'x'){
@ -148,215 +69,94 @@ static int lua_storage_newindex(lua_State *L){
uint8_t *storage = *ptr; uint8_t *storage = *ptr;
int pos = luaL_checkinteger(L, 2); int pos = luaL_checkinteger(L, 2);
int val = luaL_checkinteger(L, 3); int val = luaL_checkinteger(L, 3);
if(pos >= 0 && pos < 5) if(pos >= 0 && pos < 5){
storage[pos] = val; storage[pos] = val;
}
else else
return luaL_error(L, "Invalid index for Storage"); return luaL_error(L, "Invalid index for Storage");
return 0; return 0;
} }
void lua_machine_storage_index(lua_State *L, void *mach_, int offset){ static int lua_machine_index(lua_State *L){
(void)offset; void **ptr = luaL_checkudata(L, 1, "Machine");
Machine *mach = mach_; Machine *mach = *ptr;
const char *name = luaL_checkstring(L, 2);
int ret;
if(!strcmp(name, "pos")){
V2d **ptr = lua_newuserdatauv(L, sizeof(void*), 0);
*ptr = &mach->pos;
luaL_newmetatable(L, "V2d");
lua_setmetatable(L, -2);
return 1;
}
else if(!strcmp(name, "type")){
ret = mach->type;
}
else if(!strcmp(name, "assign_workers")){
ret = mach->assign_workers;
}
else if(!strcmp(name, "active")){
ret = mach->active;
}
else if(!strcmp(name, "storage")){
uint8_t **ptr = lua_newuserdatauv(L, sizeof(void*), 0); uint8_t **ptr = lua_newuserdatauv(L, sizeof(void*), 0);
*ptr = mach->storage; *ptr = mach->storage;
luaL_newmetatable(L, "Storage"); luaL_newmetatable(L, "Storage");
lua_setmetatable(L, -2); lua_setmetatable(L, -2);
return 1;
}
else if(!strcmp(name, "id")){
ret = mach->id;
}
else {
return luaL_error(L, "Invalid index for Machine");
} }
void lua_worker_aiint_index(lua_State *L, void *work_, int offset){ lua_pushinteger(L, ret);
(void)offset;
Worker *work = work_;
AiInternal **ptr = lua_newuserdatauv(L, sizeof(void*), 0);
*ptr = &work->ai;
luaL_newmetatable(L, "AiInternal");
lua_setmetatable(L, -2);
}
void lua_worker_aiint_newindex(lua_State *L, void *work_, int offset){
(void)offset;
Worker *work = work_;
AiInternal **src = luaL_checkudata(L, 3, "AiInternal");
memmove(&work->ai, *src, sizeof(AiInternal));
}
#define OFFSET(field) (size_t)((char*)(BASE.field)-(char*)(BASE))
Machine bmach;
#define BASE &bmach
char *mach_index_names[] = {
"pos",
"type",
"assign_workers",
"active",
"storage",
"id"
};
struct TypeMap machine_index_map = {
.type_name = "Machine",
.n_fields = 6,
.field_names = mach_index_names,
.field_affect = {
{lua_index_V2d, OFFSET(pos)},
{lua_index_u8, OFFSET(type)},
{lua_index_u8, OFFSET(assign_workers)},
{lua_index_u8, OFFSET(active)},
{lua_machine_storage_index, 0},
{lua_index_u16, OFFSET(id)}
}
};
struct TypeMap machine_newindex_map = {
.type_name = "Machine",
.n_fields = 6,
.field_names = mach_index_names,
.field_affect = {
{lua_newindex_V2d, OFFSET(pos)},
{lua_newindex_u8, OFFSET(type)},
{lua_newindex_u8, OFFSET(assign_workers)},
{lua_newindex_u8, OFFSET(active)},
{NULL, 0}, // Shouldn't happen - TODO : Fix when it happens
{lua_newindex_u16, OFFSET(id)}
}
};
#undef BASE
AiInternal baiint;
#define BASE &baiint
char *aiint_index_names[] = {
"status",
"carrying",
"carry_type",
"mtype",
"assigned_machine",
"assigned_machine1",
"dest"
};
struct TypeMap aiint_index_map = {
.type_name = "AiInternal",
.n_fields = 7,
.field_names = aiint_index_names,
.field_affect = {
{lua_index_u8, OFFSET(status)},
{lua_index_u8, OFFSET(carrying)},
{lua_index_u8, OFFSET(carry_type)},
{lua_index_u8, OFFSET(mtype)},
{lua_index_u16, OFFSET(assigned_machine)},
{lua_index_u16, OFFSET(assigned_machine1)},
{lua_index_V2d, OFFSET(dest)}
}
};
struct TypeMap aiint_newindex_map = {
.type_name = "AiInternal",
.n_fields = 7,
.field_names = aiint_index_names,
.field_affect = {
{lua_newindex_u8, OFFSET(status)},
{lua_newindex_u8, OFFSET(carrying)},
{lua_newindex_u8, OFFSET(carry_type)},
{lua_newindex_u8, OFFSET(mtype)},
{lua_newindex_u16, OFFSET(assigned_machine)},
{lua_newindex_u16, OFFSET(assigned_machine1)},
{lua_newindex_V2d, OFFSET(dest)}
}
};
#undef BASE
Worker bwork;
#define BASE &bwork
char *work_index_names[] = {
"pos",
"ai",
"traits",
"anim_frame",
"assign_n",
"satisf",
"fatigue",
"name"
};
struct TypeMap worker_index_map = {
.type_name = "Worker",
.n_fields = 8,
.field_names = work_index_names,
.field_affect = {
{lua_index_V2d, OFFSET(pos)},
{lua_worker_aiint_index, 0},
{lua_index_u16, OFFSET(traits)},
{lua_index_u8, OFFSET(anim_frame)},
{lua_index_u8, OFFSET(assign_n)},
{lua_index_u8, OFFSET(satisf)},
{lua_index_u8, OFFSET(fatigue)},
{lua_index_u8, OFFSET(name)}
}
};
struct TypeMap worker_newindex_map = {
.type_name = "Worker",
.n_fields = 8,
.field_names = work_index_names,
.field_affect = {
{lua_newindex_V2d, OFFSET(pos)},
{lua_worker_aiint_newindex, 0},
{lua_newindex_u16, OFFSET(traits)},
{lua_newindex_u8, OFFSET(anim_frame)},
{lua_newindex_u8, OFFSET(assign_n)},
{lua_newindex_u8, OFFSET(satisf)},
{lua_newindex_u8, OFFSET(fatigue)},
{lua_newindex_u8, OFFSET(name)}
}
};
#undef BASE
#undef OFFSET
static int lua_machine_index(lua_State *L){
lua_index_custom(L, &machine_index_map);
return 1; return 1;
} }
static int lua_machine_newindex(lua_State *L){ static int lua_machine_newindex(lua_State *L){
lua_index_custom(L, &machine_newindex_map); void **ptr = luaL_checkudata(L, 1, "Machine");
Machine *mach = *ptr;
const char *name = luaL_checkstring(L, 2);
int prm;
V2d *pos = NULL;
if(lua_isinteger(L, -1))
prm = luaL_checkinteger(L, 3);
else{
V2d **ptr = luaL_checkudata(L, 3, "V2d");
pos = *ptr;
}
if(!strcmp(name, "pos") && pos){
memmove(&mach->pos, pos, sizeof(V2d));
return 1;
}
else if(!strcmp(name, "type")){
mach->type = prm;
}
else if(!strcmp(name, "assign_workers")){
mach->assign_workers = prm;
}
else if(!strcmp(name, "active")){
mach->active = prm;
}
else if(!strcmp(name, "id")){
mach->id = prm;
}
else {
return luaL_error(L, "Invalid index for Machine");
}
return 0; return 0;
} }
static int lua_aiint_index(lua_State *L){
lua_index_custom(L, &aiint_index_map);
return 1;
}
static int lua_aiint_newindex(lua_State *L){
lua_index_custom(L, &aiint_newindex_map);
return 1;
}
static int lua_worker_index(lua_State *L){
lua_index_custom(L, &worker_index_map);
return 1;
}
static int lua_worker_newindex(lua_State *L){
lua_index_custom(L, &worker_newindex_map);
return 1;
}
// add_machine(x, y) // add_machine(x, y)
static int lua_add_machine(lua_State *L){ static int lua_add_machine(lua_State *L){
lua_Number x = luaL_checknumber(L, 1); int x = luaL_checkinteger(L, 1);
lua_Number y = luaL_checknumber(L, 2); int y = luaL_checkinteger(L, 2);
Machine **buf = lua_newuserdatauv(L, sizeof(void*), 0); Machine **buf = lua_newuserdatauv(L, sizeof(void*), 0);
*buf = add_machine(&gl_game->machines, (V2d){.x=x,.y=y}); *buf = add_machine(&gl_game->machines, (V2d){.x=x,.y=y});
@ -383,19 +183,6 @@ static int lua_get_machine_from_id(lua_State *L){
return 1; return 1;
} }
// add_worker(x, y)
static int lua_add_worker(lua_State *L){
lua_Number x = luaL_checknumber(L, 1);
lua_Number y = luaL_checknumber(L, 2);
Worker *work = add_worker(&gl_game->workers, (V2d){.x=x,.y=y});
if(!work)
return luaL_error(L, "(lua) Failed to add a worker");
Worker **buf = lua_newuserdatauv(L, sizeof(void*), 0);
*buf = work;
luaL_newmetatable(L, "Worker");
lua_setmetatable(L, -2);
}
// mtprint(str) // mtprint(str)
static int lua_mtprint(lua_State *L){ static int lua_mtprint(lua_State *L){
printf("(lua) %s\n", luaL_checkstring(L, 1)); printf("(lua) %s\n", luaL_checkstring(L, 1));
@ -412,7 +199,6 @@ struct LuaFn exported_funcs[] = {
{"mtprint", lua_mtprint}, {"mtprint", lua_mtprint},
{"add_machine", lua_add_machine}, {"add_machine", lua_add_machine},
{"get_machine_from_id", lua_get_machine_from_id}, {"get_machine_from_id", lua_get_machine_from_id},
{"add_worker", lua_add_worker},
}; };
int lstate_n; int lstate_n;
@ -472,62 +258,38 @@ void lua_onframe(Game *game){
lua_callloop(game, "on_frame"); lua_callloop(game, "on_frame");
} }
void lua_onmapload(Game *game, int map){
gl_game = game;
for(int i = 0; i < lstate_n; i++){
lua_State *L = lstates[i];
lua_mkgame(L, game);
if(lua_getglobal(L, "on_load") == LUA_TNIL){
lua_pop(L, 2);
continue;
}
lua_pushvalue(L, -2);
lua_pushinteger(L, map);
int ret = lua_pcall(L, 2, 0, 0);
if(ret)
puts(lua_tostring(L, -1));
else{
lua_pushliteral(L, "cash");
lua_gettable(L, -2);
if(lua_isinteger(L, -1))
game->cash = lua_tointeger(L, -1);
}
}
}
#define ADD_TYPE(name, index, newindex) \
luaL_newmetatable(L, (name)); \
lua_pushcfunction(L, (index)); \
lua_setfield(L, -2, "__index"); \
lua_pushcfunction(L, (newindex)); \
lua_setfield(L, -2, "__newindex")
void lua_mt_init(lua_State *L){ void lua_mt_init(lua_State *L){
for(size_t i = 0; i < sizeof(exported_funcs)/sizeof(*exported_funcs); i++) for(int i = 0; i < sizeof(exported_funcs)/sizeof(*exported_funcs); i++)
lua_register(L, exported_funcs[i].name, exported_funcs[i].fn); lua_register(L, exported_funcs[i].name, exported_funcs[i].fn);
ADD_TYPE("Machine", lua_machine_index, lua_machine_newindex); luaL_newmetatable(L, "Machine");
ADD_TYPE("V2d", lua_V2d_index, lua_V2d_newindex); lua_pushcfunction(L, lua_machine_index);
ADD_TYPE("Storage", lua_storage_index, lua_storage_newindex); lua_setfield(L, -2, "__index");
ADD_TYPE("AiInternal", lua_aiint_index, lua_aiint_newindex); lua_pushcfunction(L, lua_machine_newindex);
ADD_TYPE("Worker", lua_worker_index, lua_worker_newindex); lua_setfield(L, -2, "__newindex");
luaL_newmetatable(L, "V2d");
lua_pushcfunction(L, lua_V2d_index);
lua_setfield(L, -2, "__index");
lua_pushcfunction(L, lua_V2d_newindex);
lua_setfield(L, -2, "__newindex");
luaL_newmetatable(L, "Storage");
lua_pushcfunction(L, lua_storage_index);
lua_setfield(L, -2, "__index");
lua_pushcfunction(L, lua_storage_newindex);
lua_setfield(L, -2, "__newindex");
} }
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);
const 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(uint i = 0; i < scripts.count; i++){ for(int i = 0; i < scripts.count; i++){
lstates[i] = luaL_newstate(); lstates[i] = luaL_newstate();
lua_mt_init(lstates[i]); lua_mt_init(lstates[i]);
@ -535,9 +297,7 @@ 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(){

View file

@ -7,8 +7,6 @@ void lua_ontick(Game *game);
void lua_onframe(Game *game); void lua_onframe(Game *game);
void lua_onmapload(Game *game, int map);
void script_init(); void script_init();
void script_clean(); void script_clean();

View file

@ -7,7 +7,6 @@
#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"
@ -23,49 +22,14 @@
* 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; int err = init_draw();
#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);
load_map(game, 0);
return err; return err;
} }

View file

@ -10,7 +10,6 @@
#include "types.h" #include "types.h"
#include "draw.h" #include "draw.h"
#include "lua_inter.h"
extern MapCollec mapcollec; extern MapCollec mapcollec;
@ -21,8 +20,6 @@ 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;
@ -37,14 +34,11 @@ 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 = malloc(map->width*map->height); nmap->coll = realloc(nmap->coll, map->width*map->height);
if(!nmap->coll) if(!nmap->coll)
return 1; return 1;
if(generate_coll(game, mapn)) if(generate_coll(game, mapn))
return 1; return 1;
lua_onmapload(game, mapn);
return 0; return 0;
} }

View file

@ -57,11 +57,10 @@ typedef struct {
AiInternal ai; AiInternal ai;
uint16_t traits; uint16_t traits;
uint8_t anim_frame; uint8_t anim_frame;
uint8_t assign_n; // To offset on machines uint assign_n : 2; // To offset on machines
uint8_t satisf; uint satisf : 6;
uint8_t fatigue; uint8_t fatigue;
uint8_t name; uint8_t __padding[3];
uint8_t __padding[1];
} Worker; } Worker;

View file

@ -27,20 +27,6 @@ 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];
@ -202,16 +188,6 @@ 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){
@ -220,27 +196,14 @@ void worker_widget_do_event(Widget *widget, Game *game, MTEvent event){
} }
Widget worker_widget = { Widget worker_widget = {
.box = {.x = 40, .y = 40, .width = 350, .height = 600}, .box = {.x = 40, .y = 40, .width = 300, .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
}, },
{.box = {55,90,140,140}, .button_n = 0
.color_0 = GRAY,
.color_1 = BLACK,
.color_txt = WHITE,
.txt = "",
.handler = NULL
},
},
.button_n = 2
}; };
Widget machine_widget = { Widget machine_widget = {
@ -263,12 +226,9 @@ void init_ui(){
// Android exclusive key -> no exit key // Android exclusive key -> no exit key
SetExitKey(KEY_MENU); SetExitKey(KEY_MENU);
gui_info = (GUIInfo){ gui_info = (GUIInfo){{&game_widget, &main_menu, &worker_widget, &machine_widget, &pause_menu},
{&game_widget, &main_menu, &worker_widget, &machine_widget, &pause_menu},
{false, true, false, false, false}, {false, true, false, false, false},
NULL, NULL};
NULL
};
} }
void draw_widgets(Game *game){ void draw_widgets(Game *game){
@ -346,7 +306,6 @@ 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;
} }

View file

@ -72,8 +72,6 @@ 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;