draw_world_mini + Vieux trucs que j'ai oublié

This commit is contained in:
attilavs2 2025-07-01 14:53:13 +02:00
parent ac266206bc
commit cd15a6802c
10 changed files with 212 additions and 46 deletions

View file

@ -1,18 +1,45 @@
mtprint("hello") mtprint("hello")
machine = add_machine(10, 10) coal = add_machine(320, 320)
mtprint(machine.id) coal.type = 0 -- charbon
machine.type = 2 work = add_worker(300,300)
mtprint(machine.type) work1 = add_worker(300,300)
pos = machine.pos work3 = add_worker(300,300)
machine.pos = pos work4 = add_worker(300,300)
mtprint(pos.x) assign_worker_machine(coal, work)
machine.pos.x = 50 assign_worker_machine(coal, work1)
machine.storage[0] = 1 assign_worker_machine(coal, work3)
worker = add_worker(30, 10) assign_worker_machine(coal, work4)
mtprint(worker.name)
worker.pos.x = 25 iron = add_machine(416,320)
mtprint(worker.pos.x) iron.type = 1 -- fer
work5 = add_worker(300,300)
work6 = add_worker(300,300)
work7 = add_worker(300,300)
work8 = add_worker(300,300)
assign_worker_machine(iron, work5)
assign_worker_machine(iron, work6)
assign_worker_machine(iron, work7)
assign_worker_machine(iron, work8)
furn = add_machine(320, 416)
furn.type = 2 -- fourneau
work9 = add_worker(300, 300)
work10 = add_worker(300, 300)
assign_worker_fetch(coal, furn, work9)
assign_worker_fetch(iron, furn, work10)
--mtprint(machine.id)
--machine.type = 2
--mtprint(machine.type)
--pos = machine.pos
--machine.pos = pos
--mtprint(pos.x)
--machine.pos.x = 50
--machine.storage[0] = 1
--mtprint(work.name)
--work2 = get_worker_from_pos(10,10)
--mtprint(work.name)
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

View file

@ -12,7 +12,7 @@
#include "draw.h" #include "draw.h"
#include "ui.h" #include "ui.h"
#define TEX_N 9 #define TEX_N 12
#define TILE_N 3 #define TILE_N 3
char *tex_files[TEX_N] = { char *tex_files[TEX_N] = {
@ -24,9 +24,29 @@ char *tex_files[TEX_N] = {
"assets/tex/blobrouge3.png", "assets/tex/blobrouge3.png",
"assets/tex/blobvert1.png", "assets/tex/blobvert1.png",
"assets/tex/blobvert2.png", "assets/tex/blobvert2.png",
"assets/tex/blobvert3.png" "assets/tex/blobvert3.png",
"assets/tex/coalmine.png",
"assets/tex/ironmine.png",
"assets/tex/furnace.png",
}; };
enum TexIds {
T_Blobb1,
T_Blobb2,
T_Blobb3,
T_Blobr1,
T_Blobr2,
T_Blobr3,
T_Blobv1,
T_Blobv2,
T_Blobv3,
T_Coalm,
T_Ironm,
T_Furna,
};
#define T_MBase T_Coalm
char *tile_files[TILE_N] = { char *tile_files[TILE_N] = {
"assets/tiles/tile_grass.png", "assets/tiles/tile_grass.png",
"assets/tiles/tile_grass.png", "assets/tiles/tile_grass.png",
@ -45,7 +65,7 @@ int init_draw(){
SetTargetFPS(60); SetTargetFPS(60);
char *cwd = GetApplicationDirectory(); const char *cwd = GetApplicationDirectory();
puts(cwd); puts(cwd);
for(int i = 0; i < TEX_N; i++){ for(int i = 0; i < TEX_N; i++){
@ -96,7 +116,15 @@ void draw_workers(Game *game){
Workers *workers = &game->workers; Workers *workers = &game->workers;
for(int i = 0; i < workers->worker_n; i++){ for(int i = 0; i < workers->worker_n; i++){
Worker *worker = &workers->worker_stack[i]; Worker *worker = &workers->worker_stack[i];
Camera2D *cam = &game->camera;
V2d pos = worker->pos; V2d pos = worker->pos;
float screenX = pos.x - cam->target.x;
float screenY = pos.y - cam->target.y;
float xmax = 1280/cam->zoom;
float ymax = 720/cam->zoom;
if(screenX < -64 || screenY < -64 || screenX > xmax || screenY > ymax)
continue;
if(worker->ai.status == S_Operating){ if(worker->ai.status == S_Operating){
pos = Vector2Add(pos, pos = Vector2Add(pos,
machine_dict[worker->ai.mtype].offsets[worker->assign_n]); machine_dict[worker->ai.mtype].offsets[worker->assign_n]);
@ -110,8 +138,15 @@ void draw_machines(Game *game){
Machines *machines = &game->machines; Machines *machines = &game->machines;
for(int i = 0; i < machines->machine_n; i++){ for(int i = 0; i < machines->machine_n; i++){
Machine *machine = &machines->machine_stack[i]; Machine *machine = &machines->machine_stack[i];
float active_per = Remap((float)machine->active,0,255,0.2,1); Camera2D *cam = &game->camera;
DrawRectangleV(machine->pos, (V2d){.x=64,.y=64}, Fade(BLUE,active_per)); float screenX = machine->pos.x - cam->target.x;
float screenY = machine->pos.y - cam->target.y;
float xmax = 1280/cam->zoom;
float ymax = 720/cam->zoom;
if(screenX < -64 || screenY < -64 || screenX > xmax || screenY > ymax)
continue;
float active_per = Remap((float)machine->active,0,255,0.5,1);
DrawTextureV(tex_index[T_MBase + machine->type], machine->pos, Fade(WHITE, active_per));
} }
} }
@ -129,6 +164,27 @@ void draw_game(Game *game){
EndMode2D(); EndMode2D();
} }
void draw_game_mini(Game *game, Rectangle screen_box, Rectangle world_box){
Camera2D ncam = {
.offset = {.x = screen_box.x, .y = screen_box.y},
.target = {
.x = world_box.x,
.y = world_box.y
},
.rotation = 0,
.zoom = screen_box.width/world_box.width
};
BeginMode2D(ncam);
BeginScissorMode(screen_box.x, screen_box.y, screen_box.width,
screen_box.height);
draw_map(game);
draw_machines(game);
draw_workers(game);
EndScissorMode();
EndMode2D();
}
void draw(Game *game){ void draw(Game *game){
draw_widgets(game); draw_widgets(game);

View file

@ -22,4 +22,6 @@ Texture2D mkmap_tex(Map *map);
void draw_game(Game *game); void draw_game(Game *game);
void draw_game_mini(Game *game, Rectangle screen_box, Rectangle world_box);
void draw(Game *game); void draw(Game *game);

View file

@ -15,9 +15,12 @@
#include "lua_inter.h" #include "lua_inter.h"
MachineDef machine_dict[] = { MachineDef machine_dict[] = {
{{{0,0},{32,0},{0,32},{32,32}}, {}, 0, R_Coal, 4}, // MT_CoalMine // MT_CoalMine
{{{0,0},{32,0},{0,32},{32,32}}, {}, 0, R_Iron, 4}, // MT_IronMine {{{0,0},{32,0},{0,32},{32,32}}, {}, 0, R_Coal, 4},
{{{0,0},{32,0},{0,32},{32,32}}, {R_Coal, R_Iron}, 2, R_Steel, 0}, // MT_Furnace // MT_IronMine
{{{0,0},{32,0},{0,32},{32,32}}, {}, 0, R_Iron, 4},
// MT_Furnace
{{{0,0},{32,0},{0,32},{32,32}}, {R_Coal, R_Iron}, 2, R_Steel, 0},
}; };
char *worker_names[] = { char *worker_names[] = {
@ -71,8 +74,8 @@ int init_game(Game *game){
int c_worker = 0; int c_worker = 0;
for(int k = 0; k < 16; k++){ for(int k = 0; k < 20; k++){
for(int j = 0; j < 16; j++){ for(int j = 0; j < 40; 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; int coal_id = coal_mine->id;
@ -84,7 +87,7 @@ int init_game(Game *game){
// The adresses may have changed // The adresses may have changed
coal_mine = get_machine_from_id(&game->machines, coal_id); coal_mine = get_machine_from_id(&game->machines, coal_id);
iron_mine = get_machine_from_id(&game->machines, coal_id); iron_mine = get_machine_from_id(&game->machines, iron_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});
@ -96,8 +99,6 @@ int init_game(Game *game){
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; 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))
printf("%d\n",furnace->id);
} }
} }

View file

@ -16,10 +16,8 @@ Game *gl_game;
typedef void (lua_affect_t)(lua_State*, void *, int); typedef void (lua_affect_t)(lua_State*, void *, int);
struct LuaAffect { struct LuaAffect {
lua_affect_t *func; lua_affect_t *func;
int arg; int arg;
}; };
struct TypeMap { struct TypeMap {
@ -353,7 +351,7 @@ static int lua_worker_newindex(lua_State *L){
return 1; return 1;
} }
// add_machine(x, y) // add_machine(x, y) -> Machine
static int lua_add_machine(lua_State *L){ static int lua_add_machine(lua_State *L){
lua_Number x = luaL_checknumber(L, 1); lua_Number x = luaL_checknumber(L, 1);
lua_Number y = luaL_checknumber(L, 2); lua_Number y = luaL_checknumber(L, 2);
@ -369,12 +367,14 @@ static int lua_add_machine(lua_State *L){
return 1; return 1;
} }
// get_machine_from_id(id) // get_machine_from_id(id) -> Machine or nil
static int lua_get_machine_from_id(lua_State *L){ static int lua_get_machine_from_id(lua_State *L){
int id = luaL_checkinteger(L, 1) & 0xFFFF; int id = luaL_checkinteger(L, 1) & 0xFFFF;
Machine *mach = get_machine_from_id(&gl_game->machines, id); Machine *mach = get_machine_from_id(&gl_game->machines, id);
if(!mach) if(!mach){
return 0; lua_pushnil(L);
return 1;
}
Machine **buf = lua_newuserdatauv(L, sizeof(void*), 0); Machine **buf = lua_newuserdatauv(L, sizeof(void*), 0);
*buf = mach; *buf = mach;
luaL_newmetatable(L, "Machine"); luaL_newmetatable(L, "Machine");
@ -383,7 +383,7 @@ static int lua_get_machine_from_id(lua_State *L){
return 1; return 1;
} }
// add_worker(x, y) // add_worker(x, y) -> Machine
static int lua_add_worker(lua_State *L){ static int lua_add_worker(lua_State *L){
lua_Number x = luaL_checknumber(L, 1); lua_Number x = luaL_checknumber(L, 1);
lua_Number y = luaL_checknumber(L, 2); lua_Number y = luaL_checknumber(L, 2);
@ -394,6 +394,54 @@ static int lua_add_worker(lua_State *L){
*buf = work; *buf = work;
luaL_newmetatable(L, "Worker"); luaL_newmetatable(L, "Worker");
lua_setmetatable(L, -2); lua_setmetatable(L, -2);
return 1;
}
// get_worker_from_pos(x, y) -> Machine or nil
static int lua_get_worker_from_pos(lua_State *L){
lua_Number x = luaL_checknumber(L, 1);
lua_Number y = luaL_checknumber(L, 2);
Worker *work = get_worker_from_pos(&gl_game->workers, (V2d){.x=x,.y=y});
if(!work){
lua_pushnil(L);
return 1;
}
Worker **buf = lua_newuserdatauv(L, sizeof(void*), 0);
*buf = work;
luaL_newmetatable(L, "Worker");
lua_setmetatable(L, -2);
return 1;
}
// assign_worker_machine(machine, worker) -> Int
static int lua_assign_worker_machine(lua_State *L){
Machine **buf0 = luaL_checkudata(L, 1, "Machine");
Machine *mach = *buf0;
Worker **buf1 = luaL_checkudata(L, 2, "Worker");
Worker *work = *buf1;
int res = assign_worker_machine(mach, work);
lua_pushinteger(L, res);
return 1;
}
// A vers B
// assign_worker_fetch(machine_a, machine_b, worker) -> Int
static int lua_assign_worker_fetch(lua_State *L){
Machine **buf0 = luaL_checkudata(L, 1, "Machine");
Machine *mach_a = *buf0;
buf0 = luaL_checkudata(L, 2, "Machine");
Machine *mach_b = *buf0;
Worker **buf1 = luaL_checkudata(L, 3, "Worker");
Worker *work = *buf1;
int res = assign_worker_fetch(mach_a, mach_b, work);
lua_pushinteger(L, res);
return 1;
} }
// mtprint(str) // mtprint(str)
@ -413,6 +461,9 @@ struct LuaFn exported_funcs[] = {
{"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}, {"add_worker", lua_add_worker},
{"get_worker_from_pos", lua_get_worker_from_pos},
{"assign_worker_machine", lua_assign_worker_machine},
{"assign_worker_fetch", lua_assign_worker_fetch},
}; };
int lstate_n; int lstate_n;

View file

@ -21,8 +21,8 @@
/* TODO /* TODO
* UI worker/machine : * UI worker/machine :
* map : * map :
* - Textures : ~ * - Textures : x
* - Affichage : * - Génération :
*/ */
#if DEBUG #if DEBUG

View file

@ -23,9 +23,14 @@ int generate_coll(Game *game, int mapn){
V2d pos = mach->machine_stack[i].pos; V2d pos = mach->machine_stack[i].pos;
pos.x /= 32; pos.x /= 32;
pos.y /= 32; pos.y /= 32;
if(pos.x >= lmap->width || pos.y >= lmap->height)
continue;
lmap->coll[(int)(pos.y * lmap->width + pos.x)] = 1; lmap->coll[(int)(pos.y * lmap->width + pos.x)] = 1;
if(pos.x+1 < lmap->width)
lmap->coll[(int)(pos.y * lmap->width + pos.x+1)] = 1; lmap->coll[(int)(pos.y * lmap->width + pos.x+1)] = 1;
if(pos.y+1 < lmap->height)
lmap->coll[(int)((pos.y+1) * lmap->width + pos.x)] = 1; lmap->coll[(int)((pos.y+1) * lmap->width + pos.x)] = 1;
if(pos.x+1 < lmap->width && pos.y+1 < lmap->height)
lmap->coll[(int)((pos.y+1) * lmap->width + pos.x+1)] = 1; lmap->coll[(int)((pos.y+1) * lmap->width + pos.x+1)] = 1;
} }
return 0; return 0;

12
src/mapgen.c Normal file
View file

@ -0,0 +1,12 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include <raylib.h>
#include <raymath.h>
#include "config.h"
#include "types.h"
#include "mapgen.h"

13
src/mapgen.h Normal file
View file

@ -0,0 +1,13 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include <raylib.h>
#include <raymath.h>
#include "config.h"
#include "types.h"
#pragma once

View file

@ -206,6 +206,12 @@ void worker_widget_draw(Widget *widget, Game *game){
draw_buttons(widget); draw_buttons(widget);
Worker *work = gui_info.widg_target; Worker *work = gui_info.widg_target;
Rectangle screen_box = {55,90,140,140};
Rectangle world_box = {work->pos.x-4, work->pos.y-4, 40, 40};
draw_game_mini(game, screen_box, world_box);
draw_print(205, 100, 17, BLACK, "Name : %s", worker_names[work->name]); draw_print(205, 100, 17, BLACK, "Name : %s", worker_names[work->name]);
draw_print(205, 120, 17, BLACK, "Traits : TODO"); draw_print(205, 120, 17, BLACK, "Traits : TODO");
draw_print(205, 140, 17, BLACK, "Satisfaction : %.0f%%", draw_print(205, 140, 17, BLACK, "Satisfaction : %.0f%%",
@ -232,15 +238,8 @@ Widget worker_widget = {
.txt = "X", .txt = "X",
.handler = NULL .handler = NULL
}, },
{.box = {55,90,140,140},
.color_0 = GRAY,
.color_1 = BLACK,
.color_txt = WHITE,
.txt = "",
.handler = NULL
}, },
}, .button_n = 1
.button_n = 2
}; };
Widget machine_widget = { Widget machine_widget = {