diff --git a/code/game/src/renderer_v0.c b/code/game/src/renderer_v0.c index e6f63fd..89d2ee2 100644 --- a/code/game/src/renderer_v0.c +++ b/code/game/src/renderer_v0.c @@ -19,7 +19,7 @@ void DEBUG_draw_ground(uint64_t key, entity_view * data) { float y = data->y * size + offset; RenderTexture2D tex = GetChunkTexture(key); - DrawTextureRec(tex.texture, (Rectangle){0, 0, tex.texture.width, -tex.texture.height}, (Vector2){x, y}, ColorAlpha(WHITE, data->tran_time)); + DrawTextureEx(tex.texture, (Vector2){x, y}, 0.0f, size / (float)tex.texture.width, ColorAlpha(WHITE, data->tran_time)); if (zoom_overlay_tran > 0.02f) { DrawRectangleEco(x, y, size-offset, size-offset, ColorAlpha(ColorFromHSV(data->color, 0.13f, 0.89f), data->tran_time*zoom_overlay_tran*0.75f)); diff --git a/code/game/src/world/blocks.c b/code/game/src/world/blocks.c index 2689414..d41f5b1 100644 --- a/code/game/src/world/blocks.c +++ b/code/game/src/world/blocks.c @@ -1,142 +1,143 @@ -#define ZPL_NANO -#include "zpl.h" -#include "world/world.h" -#include "world/blocks.h" -#include "raylib.h" -#include "gen/texgen.h" -#include "world_view.h" -#include "perlin.h" - -#define BLOCKS_COUNT (sizeof(blocks)/sizeof(block)) - -ZPL_TABLE(static, blocks__chunk_tbl, blocks__chunk_tbl_, RenderTexture2D); - -static blocks__chunk_tbl baked_chunks; - -static void chunks_unload_textures(uint64_t key, RenderTexture2D *value) { - (void)key; - UnloadRenderTexture(*value); -} - -typedef struct { - char *name; - uint32_t flags; - uint32_t kind; - uint32_t biome; - char symbol; - float drag; - float friction; - float bounce; - - // NOTE(zaklaus): viewer data - Texture2D img; -} block; - -#include "blocks_list.c" - -int32_t blocks_setup(void) { - for (uint32_t i=0; iimg = texgen_build_block(b->biome, b->kind); - } - - blocks__chunk_tbl_init(&baked_chunks, zpl_heap()); - return 0; -} - -void blocks_destroy(void) { - for (uint32_t i=0; ichunk_size; - RenderTexture2D canvas = LoadRenderTexture(dims, dims); - BeginTextureMode(canvas); - ClearBackground(WHITE); - for (int y = 0; y < view->chunk_size; y += 1) { - for (int x = 0; x < view->chunk_size; x += 1) { -#if 0 - Texture2D blk = blocks[chunk_blocks[(y*view->chunk_size)+x]].img; - Rectangle src = {0, 0, WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE}; - Rectangle dst = {x*WORLD_BLOCK_SIZE, y*WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE}; - DrawTexturePro(blk, src, dst, (Vector2){0.0f,0.0f}, 0.0f, WHITE); -#else - static float rots[] = { 0.0f, 90.0f, 180.f, 270.0f }; - float rot = rots[(int32_t)(perlin_fbm(view->seed, x, y, 1.2f, 3) * 4.0f) % 4]; - float half_block = WORLD_BLOCK_SIZE / 2.0f; - Texture2D blk = blocks[chunk_blocks[(y*view->chunk_size)+x]].img; - Rectangle src = {0, 0, WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE}; - Rectangle dst = {x*WORLD_BLOCK_SIZE + half_block, y*WORLD_BLOCK_SIZE + half_block, WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE}; - DrawTexturePro(blk, src, dst, (Vector2){half_block, half_block}, rot, WHITE); - - if (outer_chunk_blocks[(y*view->chunk_size)+x] != 0) { - Texture2D blk2 = blocks[outer_chunk_blocks[(y*view->chunk_size)+x]].img; - DrawTexturePro(blk2, src, dst, (Vector2){half_block, half_block}, rot, WHITE); - } -#endif - } - } - EndTextureMode(); - blocks__chunk_tbl_set(&baked_chunks, id, canvas); -} - -void *blocks_get_chunk_tex(uint64_t id) { - return blocks__chunk_tbl_get(&baked_chunks, id); -} - -void blocks_remove_chunk_tex(uint64_t id) { - RenderTexture2D *tex = blocks__chunk_tbl_get(&baked_chunks, id); - if (!tex) return; - UnloadRenderTexture(*tex); - blocks__chunk_tbl_remove(&baked_chunks, id); +#define ZPL_NANO +#include "zpl.h" +#include "world/world.h" +#include "world/blocks.h" +#include "raylib.h" +#include "gen/texgen.h" +#include "world_view.h" +#include "perlin.h" + +#define BLOCKS_COUNT (sizeof(blocks)/sizeof(block)) + +ZPL_TABLE(static, blocks__chunk_tbl, blocks__chunk_tbl_, RenderTexture2D); + +static blocks__chunk_tbl baked_chunks; + +static void chunks_unload_textures(uint64_t key, RenderTexture2D *value) { + (void)key; + UnloadRenderTexture(*value); +} + +typedef struct { + char *name; + uint32_t flags; + uint32_t kind; + uint32_t biome; + char symbol; + float drag; + float friction; + float bounce; + + // NOTE(zaklaus): viewer data + Texture2D img; +} block; + +#include "blocks_list.c" + +int32_t blocks_setup(void) { + for (uint32_t i=0; iimg = texgen_build_block(b->biome, b->kind); + } + + blocks__chunk_tbl_init(&baked_chunks, zpl_heap()); + return 0; +} + +void blocks_destroy(void) { + for (uint32_t i=0; ichunk_size; + RenderTexture2D canvas = LoadRenderTexture(dims, dims); + BeginTextureMode(canvas); + ClearBackground(WHITE); + for (int y = 0; y < view->chunk_size; y += 1) { + for (int x = 0; x < view->chunk_size; x += 1) { +#if 0 + Texture2D blk = blocks[chunk_blocks[(y*view->chunk_size)+x]].img; + Rectangle src = {0, 0, WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE}; + Rectangle dst = {x*blk_dims, y*blk_dims, blk_dims, blk_dims}; + DrawTexturePro(blk, src, dst, (Vector2){0.0f,0.0f}, 0.0f, WHITE); +#else + static float rots[] = { 0.0f, 90.0f, 180.f, 270.0f }; + float rot = rots[(int32_t)(perlin_fbm(view->seed, x, y, 1.2f, 3) * 4.0f) % 4]; + float half_block = blk_dims / 2.0f; + Texture2D blk = blocks[chunk_blocks[(y*view->chunk_size)+x]].img; + Rectangle src = {0, 0, WORLD_BLOCK_SIZE, WORLD_BLOCK_SIZE}; + Rectangle dst = {x*blk_dims + half_block, y*blk_dims + half_block, blk_dims, blk_dims}; + DrawTexturePro(blk, src, dst, (Vector2){half_block, half_block}, rot, WHITE); + + if (outer_chunk_blocks[(y*view->chunk_size)+x] != 0) { + Texture2D blk2 = blocks[outer_chunk_blocks[(y*view->chunk_size)+x]].img; + DrawTexturePro(blk2, src, dst, (Vector2){half_block, half_block}, rot, WHITE); + } +#endif + } + } + EndTextureMode(); + blocks__chunk_tbl_set(&baked_chunks, id, canvas); +} + +void *blocks_get_chunk_tex(uint64_t id) { + return blocks__chunk_tbl_get(&baked_chunks, id); +} + +void blocks_remove_chunk_tex(uint64_t id) { + RenderTexture2D *tex = blocks__chunk_tbl_get(&baked_chunks, id); + if (!tex) return; + UnloadRenderTexture(*tex); + blocks__chunk_tbl_remove(&baked_chunks, id); } \ No newline at end of file