Texture baking
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
-- ── Runners ─────────────────────────────────────────────
|
-- ── Runners ─────────────────────────────────────────────
|
||||||
-- :Run — picker, :Run <name> [args] — specific command,
|
-- :Run — picker, :Run <name> [args] — specific command,
|
||||||
-- <leader>dr = :Run run.
|
|
||||||
require("custom.runner").setup({
|
require("custom.runner").setup({
|
||||||
commands = {
|
commands = {
|
||||||
run = function()
|
run = function()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Scene :: struct {
|
|||||||
camera: rl.Camera2D,
|
camera: rl.Camera2D,
|
||||||
enemies: hm.Static_Handle_Map(128, Enemy, ent_handle),
|
enemies: hm.Static_Handle_Map(128, Enemy, ent_handle),
|
||||||
atlas: Atlas,
|
atlas: Atlas,
|
||||||
tiles: [MAX_TILES]Tile,
|
map_tex: rl.RenderTexture2D,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -66,11 +66,29 @@ create_scene :: proc() -> Scene {
|
|||||||
draw_scene :: proc(scene: ^Scene) {
|
draw_scene :: proc(scene: ^Scene) {
|
||||||
rl.BeginMode2D(scene.camera)
|
rl.BeginMode2D(scene.camera)
|
||||||
|
|
||||||
|
rl.DrawTexturePro(
|
||||||
|
scene.map_tex.texture,
|
||||||
|
rl.Rectangle {
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
cast(f32)scene.map_tex.texture.width,
|
||||||
|
cast(f32)scene.map_tex.texture.height,
|
||||||
|
},
|
||||||
|
rl.Rectangle {
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
cast(f32)scene.map_tex.texture.width * TILE_MULT,
|
||||||
|
cast(f32)scene.map_tex.texture.height * TILE_MULT,
|
||||||
|
},
|
||||||
|
rl.Vector2{0, 0},
|
||||||
|
0,
|
||||||
|
rl.WHITE,
|
||||||
|
)
|
||||||
|
|
||||||
for tile in scene.tiles {
|
// for tile in scene.tiles {
|
||||||
if tile.atlas == nil do continue
|
// if tile.atlas == nil do continue
|
||||||
draw_tile(tile)
|
// draw_tile(tile)
|
||||||
}
|
// }
|
||||||
|
|
||||||
rl.DrawCircle(
|
rl.DrawCircle(
|
||||||
cast(i32)scene.player.position.x,
|
cast(i32)scene.player.position.x,
|
||||||
@@ -89,6 +107,57 @@ draw_scene :: proc(scene: ^Scene) {
|
|||||||
rl.EndMode2D()
|
rl.EndMode2D()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
render_map :: proc(atlas: ^Atlas) -> rl.RenderTexture2D {
|
||||||
|
map_data := [16][16]i32 {
|
||||||
|
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
||||||
|
{16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18},
|
||||||
|
}
|
||||||
|
width := i32(atlas.tile_size.x) * 16
|
||||||
|
height := i32(atlas.tile_size.y) * 16
|
||||||
|
tex := rl.LoadRenderTexture(width, height)
|
||||||
|
rl.BeginTextureMode(tex)
|
||||||
|
for row, i in map_data {
|
||||||
|
for col, j in row {
|
||||||
|
offset := get_offset(atlas, col)
|
||||||
|
fmt.printf("offset: %v, frame: %v\n", offset, col)
|
||||||
|
rl.DrawTexturePro(
|
||||||
|
atlas^.tex,
|
||||||
|
rl.Rectangle {
|
||||||
|
offset.x,
|
||||||
|
offset.y,
|
||||||
|
atlas.tile_size.x,
|
||||||
|
atlas.tile_size.y,
|
||||||
|
},
|
||||||
|
rl.Rectangle {
|
||||||
|
f32(j) * atlas.tile_size.x,
|
||||||
|
f32(i) * atlas.tile_size.y,
|
||||||
|
atlas.tile_size.x,
|
||||||
|
atlas.tile_size.y,
|
||||||
|
},
|
||||||
|
rl.Vector2{0, 0},
|
||||||
|
0,
|
||||||
|
rl.WHITE,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rl.EndTextureMode()
|
||||||
|
return tex
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
update_scene :: proc(scene: ^Scene, dt: f32) {
|
update_scene :: proc(scene: ^Scene, dt: f32) {
|
||||||
update_player(&scene.player, dt)
|
update_player(&scene.player, dt)
|
||||||
@@ -116,35 +185,7 @@ main :: proc() {
|
|||||||
|
|
||||||
//WARN: Add a destructor to free (handlemap dangling)
|
//WARN: Add a destructor to free (handlemap dangling)
|
||||||
scene := create_scene()
|
scene := create_scene()
|
||||||
|
scene.map_tex = render_map(&scene.atlas)
|
||||||
map_data := [16][16]i32 {
|
|
||||||
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10},
|
|
||||||
{16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18},
|
|
||||||
}
|
|
||||||
for row, i in map_data {
|
|
||||||
for col, j in row {
|
|
||||||
scene.tiles[i * 16 + j] = Tile {
|
|
||||||
atlas = &scene.atlas,
|
|
||||||
pos = rl.Vector2{f32(j) * 16, f32(i) * 16},
|
|
||||||
frame = col,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for !rl.WindowShouldClose() {
|
for !rl.WindowShouldClose() {
|
||||||
dt := rl.GetFrameTime()
|
dt := rl.GetFrameTime()
|
||||||
|
|||||||
Reference in New Issue
Block a user