summaryrefslogtreecommitdiff
path: root/examples/dungeon_crawler
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dungeon_crawler')
-rw-r--r--examples/dungeon_crawler/main.lua147
1 files changed, 147 insertions, 0 deletions
diff --git a/examples/dungeon_crawler/main.lua b/examples/dungeon_crawler/main.lua
new file mode 100644
index 0000000..979b553
--- /dev/null
+++ b/examples/dungeon_crawler/main.lua
@@ -0,0 +1,147 @@
+local pos = { 2, 0.5, 6 }
+local speed = 5.0
+local camera = -1
+local texture = -1
+local mesh = -1
+local textureSize = { 128, 128 }
+local res = { 384, 216 }
+local winSize = RL_GetWindowSize()
+local winScale = 5
+local framebuffer = -1
+
+local TILE_SIZE = 32
+local COLOR_WHITE = { 255, 255, 255 }
+
+local FLOOR = 1
+local CEILING = 2
+local WALL_N = 3
+local WALL_S = 4
+local WALL_W = 5
+local WALL_E = 6
+
+local sprites = {
+ { pos = { 0.5, 0.5 }, tile = { 0, 1 }, dis = 0, size = 0.7 },
+ { pos = { 3.5, 0.5 }, tile = { 0, 1 }, dis = 0, size = 0.7 },
+}
+
+local function getTexCoords( x, y )
+ return {
+ { x * TILE_SIZE / textureSize[1], y * TILE_SIZE / textureSize[2] },
+ { x * TILE_SIZE / textureSize[1], ( y * TILE_SIZE + TILE_SIZE ) / textureSize[2] },
+ { ( x * TILE_SIZE + TILE_SIZE ) / textureSize[1], ( y * TILE_SIZE + TILE_SIZE ) / textureSize[2] },
+ { ( x * TILE_SIZE + TILE_SIZE ) / textureSize[1], y * TILE_SIZE / textureSize[2] },
+ }
+end
+
+local function getTileVer( x, y, type )
+ local types = {
+ { { 0, 0, 0 }, { 0, 0, 1 }, { 1, 0, 1 }, { 1, 0, 0 } }, -- Floor.
+ { { 1, 1, 0 }, { 1, 1, 1 }, { 0, 1, 1 }, { 0, 1, 0 } }, -- Ceiling.
+ { { 0, 1, 0 }, { 0, 0, 0 }, { 1, 0, 0 }, { 1, 1, 0 } }, -- Wall North.
+ { { 1, 1, 1 }, { 1, 0, 1 }, { 0, 0, 1 }, { 0, 1, 1 } }, -- Wall South.
+ { { 0, 1, 1 }, { 0, 0, 1 }, { 0, 0, 0 }, { 0, 1, 0 } }, -- Wall West.
+ { { 1, 1, 0 }, { 1, 0, 0 }, { 1, 0, 1 }, { 1, 1, 1 } }, -- Wall East.
+ }
+ local verts = types[ type ]
+
+ for i = 1, 4 do
+ verts[i][1] = verts[i][1] + x
+ verts[i][3] = verts[i][3] + y
+ end
+
+ return verts
+end
+
+function drawSprites()
+ for _, sprite in ipairs( sprites ) do
+ sprite.dis = RL_Vector2Distance( { pos[1], pos[3] }, { sprite.pos[1], sprite.pos[2] } )
+ end
+
+ table.sort( sprites, function( a, b ) return a.dis > b.dis end )
+
+ for _, sprite in ipairs( sprites ) do
+ RL_DrawBillboardRec( camera, texture, { sprite.tile[1] * TILE_SIZE, sprite.tile[2] * TILE_SIZE, TILE_SIZE, TILE_SIZE },
+ { sprite.pos[1], 0.5 * sprite.size, sprite.pos[2] }, { sprite.size, sprite.size }, COLOR_WHITE )
+ end
+end
+
+function init()
+ local monitor = 0
+ local mPos = RL_GetMonitorPosition( monitor )
+ local mSize = RL_GetMonitorSize( monitor )
+ -- RL_SetWindowSize( { 1920, 1080 } )
+ winSize = { res[1] * winScale, res[2] * winScale }
+ -- winSize = { 1920, 1080 }
+ RL_SetWindowSize( winSize )
+ RL_SetExitKey( KEY_ESCAPE )
+ -- framebuffer = RL_LoadRenderTexture( res )
+ RL_SetWindowState( FLAG_WINDOW_RESIZABLE )
+ RL_SetWindowPosition( { mPos[1] + mSize[1] / 2 - winSize[1] / 2, mPos[2] + mSize[2] / 2 - winSize[2] / 2 } )
+
+ texture = RL_LoadTexture( RL_GetBasePath().."../resources/images/tiles.png" )
+ camera = RL_CreateCamera3D()
+ mesh = RL_GenMeshCube( { 1, 2, 1 } )
+ RL_SetCamera3DPosition( camera, pos )
+ RL_SetCamera3DTarget( camera, { 0, 0, 0 } )
+ RL_SetCamera3DUp( camera, { 0, 1, 0 } )
+ RL_SetCamera3DMode( camera, CAMERA_FIRST_PERSON )
+ -- RL_SetCamera3DMode( camera, CAMERA_ORBITAL )
+
+ -- for x = 0, 3 do
+ -- for y = 0, 9 do
+ -- table.insert( sprites, { pos = { x + 0.5, y + 0.5 + 1 }, tile = { 1, 1 }, dis = 0, size = 0.8 } )
+ -- end
+ -- end
+ table.insert( sprites, { pos = { 2.5, 2.5 }, tile = { 1, 1 }, dis = 0, size = 0.8 } )
+
+ -- for x = 0, 1 do
+ -- for y = 0, 1 do
+ -- table.insert( sprites, { pos = { 1.25 + x * 0.5, 2.25 + y * 0.5 }, tile = { 3, 0 }, dis = 0, size = 0.6 } )
+ -- end
+ -- end
+ table.insert( sprites, { pos = { 1.5, 3.5 }, tile = { 3, 1 }, dis = 0, size = 0.5 } )
+ table.insert( sprites, { pos = { 0.5, 3.5 }, tile = { 3, 0 }, dis = 0, size = 0.7 } )
+end
+
+function process( delta )
+ -- RL_SetCamera3DPosition( camera, pos )
+end
+
+function draw()
+ RL_UpdateCamera3D( camera )
+ pos = RL_GetCamera3DPosition( camera )
+
+ -- RL_BeginTextureMode( framebuffer )
+ RL_ClearBackground( { 100, 150, 150 } )
+
+ RL_BeginMode3D( camera )
+
+ -- Floor and ceiling.
+ for x = 0, 3 do
+ for y = 0, 10 do
+ RL_DrawQuad3DTexture( texture, getTileVer( x, y, FLOOR ), getTexCoords( 1, 0 ), COLOR_WHITE )
+ RL_DrawQuad3DTexture( texture, getTileVer( x, y, CEILING ), getTexCoords( 2, 0 ), COLOR_WHITE )
+ end
+ end
+ -- Walls.
+ RL_DrawQuad3DTexture( texture, getTileVer( 0, 0, WALL_N ), getTexCoords( 0, 0 ), COLOR_WHITE )
+ RL_DrawQuad3DTexture( texture, getTileVer( 1, 0, WALL_N ), getTexCoords( 0, 2 ), COLOR_WHITE )
+ RL_DrawQuad3DTexture( texture, getTileVer( 2, 0, WALL_N ), getTexCoords( 2, 2 ), COLOR_WHITE )
+ RL_DrawQuad3DTexture( texture, getTileVer( 3, 0, WALL_N ), getTexCoords( 0, 0 ), COLOR_WHITE )
+
+ for x = 0, 3 do
+ RL_DrawQuad3DTexture( texture, getTileVer( x, 10, WALL_S ), getTexCoords( 0, 0 ), COLOR_WHITE )
+ end
+ for y = 0, 10 do
+ RL_DrawQuad3DTexture( texture, getTileVer( 0, y, WALL_W ), getTexCoords( 0, 0 ), COLOR_WHITE )
+ RL_DrawQuad3DTexture( texture, getTileVer( 3, y, WALL_E ), getTexCoords( 0, 0 ), COLOR_WHITE )
+ end
+
+ drawSprites()
+ RL_EndMode3D()
+ -- RL_EndTextureMode()
+
+ -- RL_SetTextureSource( TEXTURE_SOURCE_RENDER_TEXTURE )
+ -- RL_DrawTexturePro( framebuffer, { 0, 0, res[1], -res[2] }, { 0, 0, winSize[1], winSize[2] }, { 0, 0 }, 0.0, COLOR_WHITE )
+ -- RL_SetTextureSource( TEXTURE_SOURCE_TEXTURE )
+end