From e3ff5f3dc250e8e1ca8acd59a0cd6e1a619cec07 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 7 Jul 2022 11:13:45 +0200 Subject: [PATCH] ADDED: example: `textures_fog_of_war` --- examples/textures/textures_fog_of_war.c | 152 +++++++ examples/textures/textures_fog_of_war.png | Bin 0 -> 38477 bytes .../examples/textures_fog_of_war.vcxproj | 387 ++++++++++++++++++ projects/VS2022/raylib.sln | 19 + 4 files changed, 558 insertions(+) create mode 100644 examples/textures/textures_fog_of_war.c create mode 100644 examples/textures/textures_fog_of_war.png create mode 100644 projects/VS2022/examples/textures_fog_of_war.vcxproj diff --git a/examples/textures/textures_fog_of_war.c b/examples/textures/textures_fog_of_war.c new file mode 100644 index 000000000..4cbebbb17 --- /dev/null +++ b/examples/textures/textures_fog_of_war.c @@ -0,0 +1,152 @@ +/******************************************************************************************* +* +* raylib [textures] example - Fog of war +* +* This example has been created using raylib 4.2 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2018-2022 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#include // Required for: calloc(), free() + +#define MAP_TILE_SIZE 32 // Tiles size 32x32 pixels +#define PLAYER_SIZE 16 // Player size +#define PLAYER_TILE_VISIBILITY 2 // Player can see 2 tiles around its position + +// Map data type +typedef struct Map { + unsigned int tilesX; // Number of tiles in X axis + unsigned int tilesY; // Number of tiles in Y axis + unsigned char *tileIds; // Tile ids (tilesX*tilesY), defines type of tile to draw + unsigned char *tileFog; // Tile fog state (tilesX*tilesY), defines if a tile has fog or half-fog +} Map; + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + int screenWidth = 800; + int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [textures] example - fog of war"); + + Map map = { 0 }; + map.tilesX = 25; + map.tilesY = 15; + + // NOTE: We can have up to 256 values for tile ids and for tile fog state, + // probably we don't need that many values for fog state, it can be optimized + // to use only 2 bits per fog state (reducing size by 4) but logic will be a bit more complex + map.tileIds = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); + map.tileFog = (unsigned char *)calloc(map.tilesX*map.tilesY, sizeof(unsigned char)); + + // Load map tiles (generating 2 random tile ids for testing) + // NOTE: Map tile ids should be probably loaded from an external map file + for (int i = 0; i < map.tilesY*map.tilesX; i++) map.tileIds[i] = GetRandomValue(0, 1); + + // Player position on the screen (pixel coordinates, not tile coordinates) + Vector2 playerPosition = { 180, 130 }; + int playerTileX = 0; + int playerTileY = 0; + + // Render texture to render fog of war + // NOTE: To get an automatic smooth-fog effect we use a render texture to render fog + // at a smaller size (one pixel per tile) and scale it on drawing with bilinear filtering + RenderTexture2D fogOfWar = LoadRenderTexture(map.tilesX, map.tilesY); + SetTextureFilter(fogOfWar.texture, TEXTURE_FILTER_BILINEAR); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + // Move player around + if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 5; + if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 5; + if (IsKeyDown(KEY_DOWN)) playerPosition.y += 5; + if (IsKeyDown(KEY_UP)) playerPosition.y -= 5; + + // Check player position to avoid moving outside tilemap limits + if (playerPosition.x < 0) playerPosition.x = 0; + else if ((playerPosition.x + PLAYER_SIZE) > (map.tilesX*MAP_TILE_SIZE)) playerPosition.x = map.tilesX*MAP_TILE_SIZE - PLAYER_SIZE; + if (playerPosition.y < 0) playerPosition.y = 0; + else if ((playerPosition.y + PLAYER_SIZE) > (map.tilesY*MAP_TILE_SIZE)) playerPosition.y = map.tilesY*MAP_TILE_SIZE - PLAYER_SIZE; + + // Previous visited tiles are set to partial fog + for (int i = 0; i < map.tilesX*map.tilesY; i++) if (map.tileFog[i] == 1) map.tileFog[i] = 2; + + // Get current tile position from player pixel position + playerTileX = (int)((playerPosition.x + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); + playerTileY = (int)((playerPosition.y + MAP_TILE_SIZE/2)/MAP_TILE_SIZE); + + // Check visibility and update fog + // NOTE: We check tilemap limits to avoid processing tiles out-of-array-bounds (it could crash program) + for (int y = (playerTileY - PLAYER_TILE_VISIBILITY); y < (playerTileY + PLAYER_TILE_VISIBILITY); y++) + for (int x = (playerTileX - PLAYER_TILE_VISIBILITY); x < (playerTileX + PLAYER_TILE_VISIBILITY); x++) + if ((x >= 0) && (x < map.tilesX) && (y >= 0) && (y < map.tilesY)) map.tileFog[y*map.tilesX + x] = 1; + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + // Draw fog of war to a small render texture for automatic smoothing on scaling + BeginTextureMode(fogOfWar); + ClearBackground(BLANK); + for (int y = 0; y < map.tilesY; y++) + for (int x = 0; x < map.tilesX; x++) + if (map.tileFog[y*map.tilesX + x] == 0) DrawRectangle(x, y, 1, 1, BLACK); + else if (map.tileFog[y*map.tilesX + x] == 2) DrawRectangle(x, y, 1, 1, Fade(BLACK, 0.8f)); + EndTextureMode(); + + BeginDrawing(); + + ClearBackground(RAYWHITE); + + for (int y = 0; y < map.tilesY; y++) + { + for (int x = 0; x < map.tilesX; x++) + { + // Draw tiles from id (and tile borders) + DrawRectangle(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, + (map.tileIds[y*map.tilesX + x] == 0)? BLUE : Fade(BLUE, 0.9f)); + DrawRectangleLines(x*MAP_TILE_SIZE, y*MAP_TILE_SIZE, MAP_TILE_SIZE, MAP_TILE_SIZE, Fade(DARKBLUE, 0.5f)); + } + } + + // Draw player + DrawRectangleV(playerPosition, (Vector2){ PLAYER_SIZE, PLAYER_SIZE }, RED); + + + // Draw fog of war (scaled to full map, bilinear filtering) + DrawTexturePro(fogOfWar.texture, (Rectangle){ 0, 0, fogOfWar.texture.width, -fogOfWar.texture.height }, + (Rectangle){ 0, 0, map.tilesX*MAP_TILE_SIZE, map.tilesY*MAP_TILE_SIZE }, + (Vector2){ 0, 0 }, 0.0f, WHITE); + + // Draw player current tile + DrawText(TextFormat("Current tile: [%i,%i]", playerTileX, playerTileY), 10, 10, 20, LIME); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + free(map.tileIds); // Free allocated map tile ids + free(map.tileFog); // Free allocated map tile fog state + + UnloadRenderTexture(fogOfWar); // Unload render texture + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/textures/textures_fog_of_war.png b/examples/textures/textures_fog_of_war.png new file mode 100644 index 0000000000000000000000000000000000000000..6a91316ee53a91cc63262e31e3b1bf615c6220de GIT binary patch literal 38477 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 T{B)9mfq}u()z4*}Q$iB}d0j!0 literal 0 HcmV?d00001 diff --git a/projects/VS2022/examples/textures_fog_of_war.vcxproj b/projects/VS2022/examples/textures_fog_of_war.vcxproj new file mode 100644 index 000000000..aa93c01a8 --- /dev/null +++ b/projects/VS2022/examples/textures_fog_of_war.vcxproj @@ -0,0 +1,387 @@ + + + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + Win32 + + + Release + x64 + + + + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0} + Win32Proj + textures_fog_of_war + 10.0 + textures_fog_of_war + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + + \ No newline at end of file diff --git a/projects/VS2022/raylib.sln b/projects/VS2022/raylib.sln index 66830ce14..ff6681f23 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -249,6 +249,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "text_codepoints_loading", " EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_window_should_close", "examples\core_window_should_close.vcxproj", "{3FE7E9B6-49AC-4246-A789-28DB4644567B}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "textures_fog_of_war", "examples\textures_fog_of_war.vcxproj", "{EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug.DLL|x64 = Debug.DLL|x64 @@ -2081,6 +2083,22 @@ Global {3FE7E9B6-49AC-4246-A789-28DB4644567B}.Release|x64.Build.0 = Release|x64 {3FE7E9B6-49AC-4246-A789-28DB4644567B}.Release|x86.ActiveCfg = Release|Win32 {3FE7E9B6-49AC-4246-A789-28DB4644567B}.Release|x86.Build.0 = Release|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug|x64.ActiveCfg = Debug|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug|x64.Build.0 = Debug|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug|x86.ActiveCfg = Debug|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Debug|x86.Build.0 = Debug|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release|x64.ActiveCfg = Release|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release|x64.Build.0 = Release|x64 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release|x86.ActiveCfg = Release|Win32 + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2207,6 +2225,7 @@ Global {F5FC9279-DE63-4EF3-B31F-CFCEF9B11F71} = {AF5BEC5C-1F2B-4DA8-B12D-D09FE569237C} {F2DB2E59-76BF-4D81-859A-AFC289C046C0} = {8D3C83B7-F1E0-4C2E-9E34-EE5F6AB2502A} {3FE7E9B6-49AC-4246-A789-28DB4644567B} = {6C82BAAE-BDDF-457D-8FA8-7E2490B07035} + {EBBBF4A0-2DA2-4DE6-B4FE-C6654A2417A0} = {DA049009-21FF-4AC0-84E4-830DD1BCD0CE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29}