The magazines for each weapon except the rifles have been drawn.feature/data-structs
@@ -6,6 +6,7 @@ project(izanagi C) | |||||
set(CMAKE_C_STANDARD 11) | set(CMAKE_C_STANDARD 11) | ||||
if (WIN32) | if (WIN32) | ||||
# TODO set arch on target instead of generator | |||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8) | if (CMAKE_SIZEOF_VOID_P EQUAL 8) | ||||
set(PROJECT_ARCH x64) | set(PROJECT_ARCH x64) | ||||
else () | else () | ||||
@@ -26,6 +27,8 @@ endif() | |||||
include_directories( | include_directories( | ||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/include" | "${PROJECT_SOURCE_DIR}/dependencies/SDL2/include" | ||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/include" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/include" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/minIni/dev" | "${PROJECT_SOURCE_DIR}/dependencies/minIni/dev" | ||||
"${PROJECT_SOURCE_DIR}/dependencies/bdd-for-c" | "${PROJECT_SOURCE_DIR}/dependencies/bdd-for-c" | ||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/pm_common" | "${PROJECT_SOURCE_DIR}/dependencies/portmidi/pm_common" | ||||
@@ -38,6 +41,8 @@ include_directories( | |||||
link_directories( | link_directories( | ||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}" | "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}" | ||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/lib/${PROJECT_ARCH}" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/lib/${PROJECT_ARCH}" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release" | "${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release" | ||||
"${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/lib/Release" | "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/lib/Release" | ||||
"${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/lib" | "${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/lib" | ||||
@@ -96,6 +101,8 @@ target_link_libraries( | |||||
game | game | ||||
SDL2main | SDL2main | ||||
SDL2 | SDL2 | ||||
SDL2_image | |||||
SDL2_ttf | |||||
portmidi | portmidi | ||||
libcrypto | libcrypto | ||||
libssl | libssl | ||||
@@ -229,6 +236,16 @@ if (WIN32) | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}/SDL2.dll" # <--this is in-file | "${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}/SDL2.dll" # <--this is in-file | ||||
$<TARGET_FILE_DIR:game>) # <--this is out-file path | $<TARGET_FILE_DIR:game>) # <--this is out-file path | ||||
add_custom_command(TARGET game POST_BUILD | |||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2_image/lib/${PROJECT_ARCH}/SDL2_image.dll" # <--this is in-file | |||||
$<TARGET_FILE_DIR:game>) # <--this is out-file path | |||||
add_custom_command(TARGET game POST_BUILD | |||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2_ttf/lib/${PROJECT_ARCH}/SDL2_ttf.dll" # <--this is in-file | |||||
$<TARGET_FILE_DIR:game>) # <--this is out-file path | |||||
add_custom_command(TARGET game POST_BUILD | add_custom_command(TARGET game POST_BUILD | ||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | ||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release/portmidi.dll" # <--this is in-file | "${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release/portmidi.dll" # <--this is in-file | ||||
@@ -249,6 +266,11 @@ if (WIN32) | |||||
"${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/bin/libcrypto-1_1-x64.dll" # <--this is in-file | "${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/bin/libcrypto-1_1-x64.dll" # <--this is in-file | ||||
$<TARGET_FILE_DIR:game>) # <--this is out-file path | $<TARGET_FILE_DIR:game>) # <--this is out-file path | ||||
add_custom_command(TARGET server POST_BUILD | |||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}/SDL2.dll" # <--this is in-file | |||||
$<TARGET_FILE_DIR:server>) # <--this is out-file path | |||||
add_custom_command(TARGET server POST_BUILD | add_custom_command(TARGET server POST_BUILD | ||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | ||||
"${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/bin/Release/websockets.dll" # <--this is in-file | "${PROJECT_SOURCE_DIR}/dependencies/libwebsockets/build/bin/Release/websockets.dll" # <--this is in-file | ||||
@@ -264,3 +286,8 @@ if (WIN32) | |||||
"${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/bin/libcrypto-1_1-x64.dll" # <--this is in-file | "${PROJECT_SOURCE_DIR}/dependencies/openssl/${PROJECT_ARCH}/bin/libcrypto-1_1-x64.dll" # <--this is in-file | ||||
$<TARGET_FILE_DIR:server>) # <--this is out-file path | $<TARGET_FILE_DIR:server>) # <--this is out-file path | ||||
endif () | endif () | ||||
add_custom_command(TARGET game POST_BUILD | |||||
COMMAND ${CMAKE_COMMAND} -E copy_directory # which executes "cmake - E copy_if_different..." | |||||
"${PROJECT_SOURCE_DIR}/assets" # <--this is in-file | |||||
$<TARGET_FILE_DIR:game>/assets) # <--this is out-file path |
@@ -114,13 +114,38 @@ void IZ_VideoUpdate(IZ_VideoState* video_state) { | |||||
// Update window | // Update window | ||||
SDL_SetRenderDrawColor(video_state->renderer, 0x00, 0x00, 0x00, 0xff); | SDL_SetRenderDrawColor(video_state->renderer, 0x00, 0x00, 0x00, 0xff); | ||||
SDL_RenderClear(video_state->renderer); | SDL_RenderClear(video_state->renderer); | ||||
u8 sprite_index; | |||||
u16 sprite_index; | |||||
for (sprite_index = 0; sprite_index < MAX_ACTIVE_SPRITES; sprite_index += 1) { | for (sprite_index = 0; sprite_index < MAX_ACTIVE_SPRITES; sprite_index += 1) { | ||||
if (!video_state->active_sprites[sprite_index]) { | if (!video_state->active_sprites[sprite_index]) { | ||||
continue; | continue; | ||||
} | } | ||||
// TODO draw sprites | // TODO draw sprites | ||||
} | } | ||||
FILE* f = fopen("assets/gfx/beretta-test.svg", "r"); | |||||
static const u16 sprite_length_bytes = 15316 + 1; | |||||
static const f32 sprite_size = 271.25f; | |||||
u8 sprite[sprite_length_bytes] = ""; | |||||
fread(sprite, 1, sprite_length_bytes, f); | |||||
SDL_SetRenderDrawBlendMode(video_state->renderer, SDL_BLENDMODE_ADD); | |||||
SDL_Surface* test_surface = IMG_LoadSVG_RW(SDL_RWFromConstMem(sprite, sprite_length_bytes)); | |||||
if (test_surface) { | |||||
SDL_Texture* test_texture = SDL_CreateTextureFromSurface(video_state->renderer, test_surface); | |||||
SDL_RenderCopyExF(video_state->renderer, test_texture, NULL, &(SDL_FRect) { | |||||
.x = 0, | |||||
.y = 0, | |||||
.w = sprite_size, | |||||
.h = sprite_size, | |||||
}, 180, &(SDL_FPoint) { | |||||
.x = sprite_size / 2, | |||||
.y = sprite_size / 2, | |||||
}, SDL_FLIP_NONE); | |||||
SDL_DestroyTexture(test_texture); | |||||
// our goal is to render the svg files and apply custom transforms to some SVG groups if ever. | |||||
// TODO perhaps we can parse the SVG for easier transforms? | |||||
} | |||||
SDL_FreeSurface(test_surface); | |||||
IZ_VideoUpdateForDebugTicks(video_state, ticks); | IZ_VideoUpdateForDebugTicks(video_state, ticks); | ||||
IZ_VideoUpdateForDebugInput(video_state, input_state); | IZ_VideoUpdateForDebugInput(video_state, input_state); | ||||
IZ_VideoUpdateForDebugNet(video_state, net_state); | IZ_VideoUpdateForDebugNet(video_state, net_state); | ||||
@@ -1,6 +1,7 @@ | |||||
#ifndef IZ_APP_VIDEO_H | #ifndef IZ_APP_VIDEO_H | ||||
#define IZ_APP_VIDEO_H | #define IZ_APP_VIDEO_H | ||||
#include <math.h> | |||||
#include "output/video/IZ_video.h" | #include "output/video/IZ_video.h" | ||||
#include "IZ_subsystem.h" | #include "IZ_subsystem.h" | ||||
@@ -87,10 +87,14 @@ IZ_ProcedureResult IZ_VideoInitialize(IZ_VideoState* state, void* user_data, con | |||||
} | } | ||||
state->window = window; | state->window = window; | ||||
state->renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); | state->renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); | ||||
return 0; | return 0; | ||||
} | } | ||||
void IZ_VideoTeardown(IZ_VideoState* state) { | void IZ_VideoTeardown(IZ_VideoState* state) { | ||||
SDL_DestroyWindow(state->window); | SDL_DestroyWindow(state->window); | ||||
} | } | ||||
void IZ_VideoLoadTexture(IZ_VideoState* state, const char* path, SDL_Texture** out) { | |||||
out = NULL; | |||||
} |
@@ -4,16 +4,38 @@ | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include "minIni.h" | #include "minIni.h" | ||||
#include "SDL_render.h" | #include "SDL_render.h" | ||||
#include <SDL_image.h> | |||||
#include "../../../net/IZ_net_client.h" | #include "../../../net/IZ_net_client.h" | ||||
#include "../../../config/IZ_config.h" | #include "../../../config/IZ_config.h" | ||||
#include "../../input/IZ_input.h" | |||||
#include "../../../common/IZ_common.h" | #include "../../../common/IZ_common.h" | ||||
#include "../../input/IZ_input.h" | |||||
#define MAX_ACTIVE_SPRITES 512u | |||||
#define MAX_ACTIVE_SPRITES 32 | |||||
typedef enum { | |||||
// eyecandy, e.g. sparks | |||||
IZ_VIDEO_SPRITE_PRIORITY_LOWEST, | |||||
// bottom backgrounds | |||||
IZ_VIDEO_SPRITE_PRIORITY_LOWER, | |||||
// top backgrounds | |||||
IZ_VIDEO_SPRITE_PRIORITY_LOW, | |||||
// projectiles | |||||
IZ_VIDEO_SPRITE_PRIORITY_MEDIUM, | |||||
// foreground objects | |||||
IZ_VIDEO_SPRITE_PRIORITY_HIGH, | |||||
// pickups | |||||
IZ_VIDEO_SPRITE_PRIORITY_HIGHER, | |||||
// player, enemies, weapons | |||||
IZ_VIDEO_SPRITE_PRIORITY_HIGHEST, | |||||
} IZ_VideoSpritePriority; | |||||
// TODO properly define sprites | // TODO properly define sprites | ||||
typedef char IZ_Sprite; | |||||
typedef struct { | |||||
SDL_Texture* texture; | |||||
f32 scale_factor; | |||||
f32 rotate_degrees; | |||||
} IZ_Sprite; | |||||
typedef struct { | typedef struct { | ||||
u16 width; | u16 width; | ||||
@@ -27,7 +49,7 @@ typedef struct { | |||||
u64 last_update_at; | u64 last_update_at; | ||||
SDL_Window* window; | SDL_Window* window; | ||||
SDL_Renderer* renderer; | SDL_Renderer* renderer; | ||||
IZ_Sprite active_sprites[MAX_ACTIVE_SPRITES]; | |||||
IZ_Sprite* active_sprites[MAX_ACTIVE_SPRITES]; | |||||
} IZ_VideoState; | } IZ_VideoState; | ||||
static const IZ_VideoState IZ_VIDEO_DEFAULT_STATE = { | static const IZ_VideoState IZ_VIDEO_DEFAULT_STATE = { | ||||
@@ -47,6 +69,9 @@ IZ_ProcedureResult IZ_VideoInitialize(IZ_VideoState*, void*, const char*, u8, co | |||||
IZ_ProcedureResult IZ_VideoSaveConfig(IZ_VideoState*, const char*); | IZ_ProcedureResult IZ_VideoSaveConfig(IZ_VideoState*, const char*); | ||||
// TODO implement | |||||
void IZ_VideoLoadTexture(IZ_VideoState*, const char*, SDL_Texture**); | |||||
void IZ_VideoTeardown(IZ_VideoState*); | void IZ_VideoTeardown(IZ_VideoState*); | ||||
#endif | #endif |