diff --git a/.gitignore b/.gitignore index cc0eb7a..336790b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,8 @@ -.vscode -.cache -compile_commands/ -bin/ -build/ -intermediate/ -packages/ -*.vcxproj -*.vcxproj.user -compile_commands.json +.cache/clangd/index +bin +maps/fencer.tiled-session +fencer +build/obj/Debug +build/Makefile Makefile -.vs -.idea -*.sln +compile_commands.json diff --git a/Build.lua b/Build.lua deleted file mode 100644 index 339cff8..0000000 --- a/Build.lua +++ /dev/null @@ -1,26 +0,0 @@ -workspace "Fencer-Template" - architecture "x64" - configurations { "Debug", "Release", "Dist" } - language "C" - startproject "Game" - - filter "system:windows" - defines { "SDL_MAIN_HANDLED", "_CRT_SECURE_NO_WARNINGS" } - buildoptions { "/EHsc", "/Zc:preprocessor" } - - OutputDir = "%{cfg.system}-%{cfg.architecture}/%{cfg.buildcfg}" - - - group "Core" - include "core/Build-Core.lua" - group "" - - libdirs { - os.findlib("SDL2"), - os.findlib("SDL2_image"), - os.findlib("SDL2_ttf"), - os.findlib("m"), - os.findlib("cJSON") - } - - include "game/Build-Game.lua" diff --git a/SDL2.dll b/SDL2.dll deleted file mode 100644 index e26bcb1..0000000 Binary files a/SDL2.dll and /dev/null differ diff --git a/SDL2.lib b/SDL2.lib deleted file mode 100644 index 99c5321..0000000 Binary files a/SDL2.lib and /dev/null differ diff --git a/SDL2_image.dll b/SDL2_image.dll deleted file mode 100644 index 277e981..0000000 Binary files a/SDL2_image.dll and /dev/null differ diff --git a/SDL2_image.lib b/SDL2_image.lib deleted file mode 100644 index b29fee0..0000000 Binary files a/SDL2_image.lib and /dev/null differ diff --git a/SDL2main.lib b/SDL2main.lib deleted file mode 100644 index 241e7c3..0000000 Binary files a/SDL2main.lib and /dev/null differ diff --git a/SDL2test.lib b/SDL2test.lib deleted file mode 100644 index 1fa2ecb..0000000 Binary files a/SDL2test.lib and /dev/null differ diff --git a/core/Build-Core.lua b/core/Build-Core.lua deleted file mode 100644 index 8bdb34e..0000000 --- a/core/Build-Core.lua +++ /dev/null @@ -1,34 +0,0 @@ -project "Engine-Core" - kind "StaticLib" - language "C" - targetdir "bin/%{cfg.buildcfg}" - staticruntime "off" - - defines { "VMATH_SDL" } - - files { "src/**.c", "src/**.h" } - includedirs { "src/" } - - targetdir ( "../bin/" .. OutputDir .. "/%{prj.name}" ) - objdir ( "../intermediate/" .. OutputDir .. "/%{prj.name}" ) - - filter "system:windows" - systemversion "latest" - defines {} - - filter "configurations:Debug" - defines { "DEBUG" } - runtime "Debug" - symbols "On" - - filter "configurations:Release" - defines { "RELEASE" } - runtime "Release" - optimize "On" - symbols "On" - - filter "configurations:Dist" - defines { "DIST" } - runtime "Release" - optimize "On" - symbols "Off" diff --git a/core/src/animation_sprite.c b/core/src/animation_sprite.c deleted file mode 100644 index 692721b..0000000 --- a/core/src/animation_sprite.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "animation_sprite.h" -#include "debug.h" -#include "program.h" - -struct AnimationSprite { - Spritesheet* sheet; - Sprite* sprite; - - AnimationSpriteLoopMode loop_mode; - - float frame_interval; - float start_time; -}; - -AnimationSprite* animation_sprite_new(Spritesheet* sheet, float framerate) { - AnimationSprite* self = malloc(sizeof(AnimationSprite)); - ASSERT_RETURN(self != NULL, NULL, "Failed to allocate memory for AnimationSprite"); - *self = (AnimationSprite){ - .sheet = sheet, - .frame_interval = 1.0f / framerate, - .loop_mode = LoopMode_Loop, - .start_time = game_time(), - .sprite = sprite_from_spritesheet(sheet, 0) - }; - - return self; -} - -void animation_sprite_destroy(AnimationSprite* self) { - sprite_destroy(self->sprite); - spritesheet_destroy(self->sheet); - free(self); -} - -void animation_sprite_play_from(AnimationSprite* self, float normalized_time) { - self->start_time = game_time() - normalized_time * animation_sprite_get_length(self); -} - -void animation_sprite_draw(AnimationSprite* self, Transform* transform) { - const float time = game_time() - self->start_time; - const size_t frame = time / self->frame_interval; - - sprite_set_spritesheet(self->sprite, self->sheet); - sprite_set_tile(self->sprite, frame); - sprite_draw(self->sprite, *transform); -} - -float animation_sprite_get_length(AnimationSprite* self) { - return (float)spritesheet_get_tile_count(self->sheet) * self->frame_interval; -} - -void animation_sprite_set_framerate(AnimationSprite* self, float framerate) { - self->frame_interval = 1.0f / framerate; -} - -float animation_sprite_get_framerate(const AnimationSprite* self) { - return 1.0f / self->frame_interval; -} diff --git a/core/src/animation_sprite.h b/core/src/animation_sprite.h deleted file mode 100644 index 135e440..0000000 --- a/core/src/animation_sprite.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _fencer_animation_sprite_h -#define _fencer_animation_sprite_h - -#include "sprite.h" -#include "spritesheet.h" - -typedef enum AnimationSpriteLoopMode { - LoopMode_Stop, - LoopMode_Hide, - LoopMode_Loop, - LoopMode_PingPong, -} AnimationSpriteLoopMode; - -typedef struct AnimationSprite AnimationSprite; - -extern AnimationSprite* animation_sprite_new(Spritesheet* sheet, float framerate); -extern void animation_sprite_destroy(AnimationSprite* self); - -extern void animation_sprite_play_from(AnimationSprite* self, float normalized_time); -extern void animation_sprite_draw(AnimationSprite* self, Transform* transform); - -extern float animation_sprite_get_length(AnimationSprite* self); -extern void animation_sprite_set_framerate(AnimationSprite* self, float framerate); -extern float animation_sprite_get_framerate(const AnimationSprite* self); - -#endif // !_fencer_animation_sprite_h \ No newline at end of file diff --git a/core/src/drop.c b/core/src/drop.c deleted file mode 100644 index 7bd372a..0000000 --- a/core/src/drop.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "drop.h" -#include "stdlib.h" - -void default_drop(void* data) { - free(data); -} diff --git a/core/src/state.h b/core/src/state.h deleted file mode 100644 index ebaea05..0000000 --- a/core/src/state.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef _fencer_state_h -#define _fencer_state_h - -#include "typeclass_helpers.h" - -typedef struct State State; - -struct State { - void (*const enter)(void* data); - void (*const exit)(void* data); - const State* (*const update)(void* data, float dt); -}; - -#define DefineState(_StateName, _DataType, enter_fn, exit_fn, update_fn)\ -static inline const State* _StateName() {\ - TC_FN_TYPECHECK(void, enter_fn, _DataType*);\ - TC_FN_TYPECHECK(void, exit_fn, _DataType*);\ - TC_FN_TYPECHECK(const State*, update_fn, _DataType*, float);\ - static const State instance = {\ - .enter = (void(*const)(void*)) enter_fn,\ - .exit = (void(*const)(void*)) exit_fn,\ - .update = (const State*(*const)(void*, float)) update_fn,\ - };\ - return &instance;\ -} - -#endif // !_fencer_state_h diff --git a/core/src/state_machine.c b/core/src/state_machine.c deleted file mode 100644 index 4e18ad8..0000000 --- a/core/src/state_machine.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "state_machine.h" -#include "stdlib.h" -#include "debug.h" - -struct StateMachine { - const State* current_state; - void* data; -}; - -static inline -void internal_state_machine_set_state(StateMachine* self, const State* state) { - self->current_state->exit(self->data); - self->current_state = state; - self->current_state->enter(self->data); -} - -StateMachine* state_machine_init(void* data, const State* start_state) { - StateMachine* self = malloc(sizeof(StateMachine)); - ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for StateMachine instance"); - *self = (StateMachine){ - .current_state = start_state, - .data = data - }; - - self->current_state->enter(self->data); - return self; -} - -void state_machine_destroy(StateMachine* self) { - self->current_state->exit(self->data); - free(self); -} - -void state_machine_update(StateMachine* self, float dt) { - const State* next = self->current_state->update(self->data, dt); - if(next != self->current_state) - internal_state_machine_set_state(self, next); -} - -const State* state_machine_get_current_state(StateMachine* self) { - return self->current_state; -} diff --git a/core/src/state_machine.h b/core/src/state_machine.h deleted file mode 100644 index 0d5c2fb..0000000 --- a/core/src/state_machine.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _fencer_state_machine_h -#define _fencer_state_machine_h - -#include "state.h" - -typedef struct StateMachine StateMachine; - -extern StateMachine* state_machine_init(void* data, const State* start_state); -extern void state_machine_destroy(StateMachine* self); - -extern void state_machine_update(StateMachine* self, float dt); - -extern const State* state_machine_get_current_state(StateMachine* self); - -#endif // !_fencer_state_machine_h diff --git a/design/Core.md b/design/Core.md new file mode 100644 index 0000000..01cc239 --- /dev/null +++ b/design/Core.md @@ -0,0 +1,26 @@ +# Mechanics + +## Movement + +Slow and considered. +The walking speed is slow, the running speed slightly less so. +Walkable parts of environments are relatively small. + +## Combat + + + +## Exploration + +Resources are scattered throughout the environment. +It should be rewarding to stop and gather them. + +## Upgrades + + + +# Dynamics + +## Careful Progress + +The player should be careful and considered during second to second gameplay. diff --git a/game/Build-Game.lua b/game/Build-Game.lua deleted file mode 100644 index 8fb6e6a..0000000 --- a/game/Build-Game.lua +++ /dev/null @@ -1,48 +0,0 @@ -project "Game" - kind "WindowedApp" - language "C" - staticruntime "Off" - targetdir "bin/%{cfg.buildcfg}" - debugdir "." - - defines { "VMATH_SDL" } - - files { "src/**.c", "src/**.h" } - includedirs { - "src/", - "../core/src/" - } - links { - "Engine-Core" - } - - postbuildcommands { - "{COPYDIR} assets/ %{cfg.targetdir}/assets" - } - - targetdir ("../bin/" .. OutputDir .. "/%{prj.name}" ) - objdir ("../intermediate/" .. OutputDir .. "/%{prj.name}" ) - - filter "system:linux" - links { "SDL2", "SDL2_image", "SDL2_ttf", "m", "cjson"} - - filter "system:windows" - linkoptions { "/ENTRY:mainCRTStartup" } - links { "../SDL2.dll", "../SDL2_image.dll" } - - filter "configurations:Debug" - defines { "DEBUG" } - runtime "Debug" - symbols "On" - - filter "configurations:Release" - defines { "RELEASE" } - runtime "Release" - optimize "On" - symbols "On" - - filter "configurations:Dist" - defines { "DIST" } - runtime "Release" - optimize "On" - symbols "Off" diff --git a/premake5.lua b/premake5.lua new file mode 100644 index 0000000..e97d585 --- /dev/null +++ b/premake5.lua @@ -0,0 +1,20 @@ +workspace "fencer" + configurations { "Debug", "Release" } + location "." + +project "fencer" + kind "WindowedApp" + language "C" + location "build/" + files { "src/**.c" } + links { "SDL2", "SDL2_image", "cjson", "m" } + buildoptions { "-Wall", "-DVMATH_SDL=1" } + targetdir "bin/" + filter "configurations:Debug" + defines { "DEBUG" } + buildoptions { "-g3" } + symbols "On" + filter "configurations:Release" + buildoptions { "-g0" } + defines { "NDEBUG" } + optimize "On" diff --git a/core/src/asset.h b/src/asset.h similarity index 96% rename from core/src/asset.h rename to src/asset.h index f5739b7..c113ed5 100644 --- a/core/src/asset.h +++ b/src/asset.h @@ -23,7 +23,7 @@ static inline Asset T##_as_Asset(T* x) {\ TC_FN_TYPECHECK(asset_id, get_id_f, T*);\ TC_FN_TYPECHECK(void, set_id_f, T*, asset_id);\ TC_FN_TYPECHECK(Drop, T##_as_Drop, T*);\ - static IAsset const tc = {\ + static IAsset tc = (IAsset){\ .get_id = (asset_id(*const)(void*)) get_id_f,\ .set_id = (void(*const)(void*,asset_id)) set_id_f,\ };\ diff --git a/core/src/assets.c b/src/assets.c similarity index 94% rename from core/src/assets.c rename to src/assets.c index 0f90a1d..6473d2c 100644 --- a/core/src/assets.c +++ b/src/assets.c @@ -10,16 +10,16 @@ static asset_id _next_id = 0; static size_t file_length(FILE* fp) { - long start = ftell(fp); + size_t start = ftell(fp); fseek(fp, 0, SEEK_END); - long r = ftell(fp); + size_t r = ftell(fp); fseek(fp, start, SEEK_SET); - return (size_t)r; + return r; } static void read_file(FILE* fp, char* out_buffer, size_t out_size) { - long start = ftell(fp); + size_t start = ftell(fp); fread(out_buffer, 1, out_size, fp); fseek(fp, start, SEEK_SET); } @@ -88,13 +88,15 @@ asset_id get_asset_id(void* asset) { } void free_asset(asset_id id) { - Asset* found = NULL; - size_t found_index = _assets.len; + Asset* found; + size_t found_index; for(size_t i = 0; i < _assets.len; ++i) { found = list_at_as(Asset, &_assets, i); if(found->tc->get_id(found->data) == id) { found_index = i; break; + } else { + found = NULL; } } ASSERT_RETURN(found != NULL,, "Attempt to free nonexistent asset."); diff --git a/core/src/assets.h b/src/assets.h similarity index 92% rename from core/src/assets.h rename to src/assets.h index 579254a..8f6a11b 100644 --- a/core/src/assets.h +++ b/src/assets.h @@ -31,8 +31,8 @@ size_t json_array_len(cJSON* array); static inline Vector json_array_to_vector(cJSON* array) { return (Vector) { - (float)cJSON_GetArrayItem(array, 0)->valuedouble, - (float)cJSON_GetArrayItem(array, 1)->valuedouble, + cJSON_GetArrayItem(array, 0)->valuedouble, + cJSON_GetArrayItem(array, 1)->valuedouble, }; } static inline diff --git a/core/src/behaviour_entity.h b/src/behaviour_entity.h similarity index 100% rename from core/src/behaviour_entity.h rename to src/behaviour_entity.h diff --git a/core/src/camera.c b/src/camera.c similarity index 84% rename from core/src/camera.c rename to src/camera.c index c9c896b..80b7946 100644 --- a/core/src/camera.c +++ b/src/camera.c @@ -21,7 +21,7 @@ SDL_FRect camera_world_to_pixel_rect(Camera* self, SDL_FRect* world_space) { t.scale = OneVector; t = transform_invert(t); - Vector tl = {world_space->x + (self->fov / 2.0f), world_space->y + (_camera_height(self) / 2.0f)}; + Vector tl = {world_space->x + (self->fov / 2.0), world_space->y + (_camera_height(self) / 2.0)}; Vector size = {world_space->w, world_space->h}; tl = vmulff(transform_point(&t, tl), g_render_resolution.x / self->fov); @@ -40,7 +40,7 @@ Vector camera_world_to_pixel_point(Camera* self, Vector point) { t.scale = OneVector; t = transform_invert(t); - point = (Vector){point.x + (self->fov / 2.0f), point.y + (_camera_height(self) / 2.0f)}; + point = (Vector){point.x + (self->fov / 2.0), point.y + (_camera_height(self) / 2.0)}; return vmulff(transform_point(&t, point), g_render_resolution.x / self->fov); } diff --git a/core/src/camera.h b/src/camera.h similarity index 100% rename from core/src/camera.h rename to src/camera.h diff --git a/core/src/collision.c b/src/collision.c similarity index 100% rename from core/src/collision.c rename to src/collision.c diff --git a/core/src/collision.h b/src/collision.h similarity index 100% rename from core/src/collision.h rename to src/collision.h diff --git a/core/src/debug.c b/src/debug.c similarity index 100% rename from core/src/debug.c rename to src/debug.c diff --git a/core/src/debug.h b/src/debug.h similarity index 100% rename from core/src/debug.h rename to src/debug.h diff --git a/core/src/drop.h b/src/drop.h similarity index 72% rename from core/src/drop.h rename to src/drop.h index c5a9936..e5aaef4 100644 --- a/core/src/drop.h +++ b/src/drop.h @@ -19,13 +19,8 @@ static inline Drop T##_as_Drop(T* x) {\ return (Drop){.tc = &tc, .data = x};\ } -extern void default_drop(void*); - #define impl_default_Drop_for(T)\ -static inline Drop T##_as_Drop(T* x) {\ - static IDrop const tc = {\ - .drop = default_drop,\ - };\ - return (Drop){.tc = &tc, .data = x};\ -} + static void default_drop_##T(T* v) { free(v); }\ + impl_Drop_for(T, default_drop_##T) + #endif // !_fencer_drop_h diff --git a/game/src/fencer.c b/src/fencer.c similarity index 85% rename from game/src/fencer.c rename to src/fencer.c index 050c644..47ab192 100644 --- a/game/src/fencer.c +++ b/src/fencer.c @@ -1,7 +1,10 @@ +#include "camera.h" #include "program.h" static -void play() {} +void play() { + g_camera.fov = 40; +} static void tick() {} diff --git a/core/src/game_world.c b/src/game_world.c similarity index 98% rename from core/src/game_world.c rename to src/game_world.c index b93a029..8dfa86f 100644 --- a/core/src/game_world.c +++ b/src/game_world.c @@ -73,7 +73,7 @@ void game_world_update() { _internal_clear_removed(); } -void game_world_draw() { +void game_word_draw() { list_foreach(BehaviourEntity*, entity, &_game_entities) { entity->tc->draw(entity->data); } diff --git a/core/src/game_world.h b/src/game_world.h similarity index 100% rename from core/src/game_world.h rename to src/game_world.h diff --git a/core/src/input.c b/src/input.c similarity index 100% rename from core/src/input.c rename to src/input.c diff --git a/core/src/input.h b/src/input.h similarity index 100% rename from core/src/input.h rename to src/input.h diff --git a/core/src/input_axis.c b/src/input_axis.c similarity index 93% rename from core/src/input_axis.c rename to src/input_axis.c index 162a897..36ee80f 100644 --- a/core/src/input_axis.c +++ b/src/input_axis.c @@ -4,7 +4,6 @@ KeyBind* keybind_new(SDL_Scancode key) { KeyBind* self = malloc(sizeof(KeyBind)); - ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for KeyBind instance"); *self = (KeyBind) { .device = NULL, .scancode = key, @@ -32,7 +31,6 @@ void keybind_set_device(KeyBind* self, InputDevice* device) { ControllerAxis* controlleraxis_new(int axis) { ControllerAxis* self = malloc(sizeof(ControllerAxis)); - ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for ControllerAxis instance"); *self = (ControllerAxis){ .axis = axis, .device = NULL @@ -50,6 +48,7 @@ int controlleraxis_is_changed_by(ControllerAxis* self, SDL_Event event) { InputEvent controlleraxis_evaluate(ControllerAxis* self, SDL_Event event) { float result = (float)event.caxis.value / 32767.0; + LOG_INFO("axis %f", result); return (InputEvent) { .type = InputEvent_Float, .as_float = result @@ -62,7 +61,6 @@ void controlleraxis_set_device(ControllerAxis* self, InputDevice* device) { ControllerButton* controllerbutton_new(int button) { ControllerButton* self = malloc(sizeof(ControllerButton)); - ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for ControllerButton instance"); *self = (ControllerButton) { .button = button, .device = NULL @@ -90,7 +88,6 @@ void controllerbutton_set_device(ControllerButton* self, InputDevice* device) { CompositeAxis1D* compositeaxis1d_new(InputAxis left, InputAxis right, InputEventType type) { CompositeAxis1D* self = malloc(sizeof(CompositeAxis1D)); - ASSERT_RETURN(self != NULL, NULL, "Failed to allocate space for CompositeAxis1D instance"); *self = (CompositeAxis1D) { .left = left, .right = right, diff --git a/core/src/input_axis.h b/src/input_axis.h similarity index 100% rename from core/src/input_axis.h rename to src/input_axis.h diff --git a/core/src/list.c b/src/list.c similarity index 100% rename from core/src/list.c rename to src/list.c diff --git a/core/src/list.h b/src/list.h similarity index 100% rename from core/src/list.h rename to src/list.h diff --git a/core/src/physics_entity.c b/src/physics_entity.c similarity index 96% rename from core/src/physics_entity.c rename to src/physics_entity.c index 4d2f5bb..5b7b45d 100644 --- a/core/src/physics_entity.c +++ b/src/physics_entity.c @@ -18,11 +18,11 @@ void physics_entity_debug_draw(PhysicsEntity self) { lhs = camera_world_to_pixel_point(&g_camera, lhs); rhs = camera_world_to_pixel_point(&g_camera, rhs); SDL_SetRenderDrawColor(g_renderer, 0, 255, 0, 255); - SDL_RenderDrawLineF(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y); + SDL_RenderDrawLine(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y); rhs = camera_world_to_pixel_point(&g_camera, vaddf(transform->position, rigidbody_get_force(body))); SDL_SetRenderDrawColor(g_renderer, 0, 255, 255, 255); - SDL_RenderDrawLineF(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y); + SDL_RenderDrawLine(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y); } static inline Vector _internal_calculate_contact_force(RigidBody* self, Contact* contact) { diff --git a/core/src/physics_entity.h b/src/physics_entity.h similarity index 100% rename from core/src/physics_entity.h rename to src/physics_entity.h diff --git a/core/src/physics_world.c b/src/physics_world.c similarity index 100% rename from core/src/physics_world.c rename to src/physics_world.c diff --git a/core/src/physics_world.h b/src/physics_world.h similarity index 100% rename from core/src/physics_world.h rename to src/physics_world.h diff --git a/core/src/player_input.c b/src/player_input.c similarity index 91% rename from core/src/player_input.c rename to src/player_input.c index 55d1efc..d8220f8 100644 --- a/core/src/player_input.c +++ b/src/player_input.c @@ -1,9 +1,7 @@ #include "player_input.h" -#include "debug.h" PlayerInput* playerinput_new(void* target, int device) { PlayerInput* self = malloc(sizeof(PlayerInput)); - ASSERT_RETURN(self != NULL, NULL, "Could not allocate memory for PlayerInput instance"); self->listeners = list_from_type(InputListener); self->device = input_get_device_by_id(device); self->target = target; diff --git a/core/src/player_input.h b/src/player_input.h similarity index 100% rename from core/src/player_input.h rename to src/player_input.h diff --git a/core/src/program.c b/src/program.c similarity index 94% rename from core/src/program.c rename to src/program.c index 538c960..62a7220 100644 --- a/core/src/program.c +++ b/src/program.c @@ -25,7 +25,7 @@ double tstos(struct timespec ts) { struct timespec get_time() { struct timespec ts; - (void)timespec_get(&ts, TIME_UTC); + timespec_get(&ts, TIME_UTC); return ts; } @@ -80,7 +80,6 @@ void program_run(const struct ProgramSettings* settings) { physics_world_tick(); } settings->on_draw(); - game_world_draw(); SDL_Delay(1); } @@ -133,10 +132,10 @@ void program_handle_windowevent(SDL_WindowEvent* event) { inline float delta_time() { - return (float)(_target_delta_time == 0 ? _delta_time : _target_delta_time); + return _target_delta_time == 0 ? _delta_time : _target_delta_time; } inline float game_time() { - return (float)(get_time_s() - _game_start_time); + return get_time_s() - _game_start_time; } diff --git a/core/src/program.h b/src/program.h similarity index 100% rename from core/src/program.h rename to src/program.h diff --git a/core/src/render.c b/src/render.c similarity index 100% rename from core/src/render.c rename to src/render.c diff --git a/core/src/render.h b/src/render.h similarity index 100% rename from core/src/render.h rename to src/render.h diff --git a/core/src/rigidbody.c b/src/rigidbody.c similarity index 100% rename from core/src/rigidbody.c rename to src/rigidbody.c diff --git a/core/src/rigidbody.h b/src/rigidbody.h similarity index 100% rename from core/src/rigidbody.h rename to src/rigidbody.h diff --git a/core/src/shape.c b/src/shape.c similarity index 100% rename from core/src/shape.c rename to src/shape.c diff --git a/core/src/shape.h b/src/shape.h similarity index 100% rename from core/src/shape.h rename to src/shape.h diff --git a/core/src/sprite.c b/src/sprite.c similarity index 94% rename from core/src/sprite.c rename to src/sprite.c index 3524502..ac86bd8 100644 --- a/core/src/sprite.c +++ b/src/sprite.c @@ -42,10 +42,10 @@ void sprite_draw(Sprite* self, Transform transform) { Vector origin = self->origin; if(self->flip_state && SDL_FLIP_HORIZONTAL) { - origin.x = 1.0f-origin.x; + origin.x = 1.0-origin.x; } if((self->flip_state & SDL_FLIP_VERTICAL) != 0) { - origin.y = 1.0f-origin.y; + origin.y = 1.0-origin.y; } Vector left_top = transform_point(&transform, vinvf(origin)); @@ -75,7 +75,8 @@ size_t sprite_get_tile(const Sprite* self) { } void sprite_set_tile(Sprite* self, size_t frame) { - self->tile_index = frame % spritesheet_get_tile_count(self->spritesheet); + frame = frame % spritesheet_get_tile_count(self->spritesheet); + self->tile_index = frame; } Spritesheet* sprite_get_spritesheet(const Sprite* self) { diff --git a/core/src/sprite.h b/src/sprite.h similarity index 100% rename from core/src/sprite.h rename to src/sprite.h diff --git a/core/src/sprite_entity.c b/src/sprite_entity.c similarity index 100% rename from core/src/sprite_entity.c rename to src/sprite_entity.c diff --git a/core/src/sprite_entity.h b/src/sprite_entity.h similarity index 100% rename from core/src/sprite_entity.h rename to src/sprite_entity.h diff --git a/core/src/spritesheet.c b/src/spritesheet.c similarity index 89% rename from core/src/spritesheet.c rename to src/spritesheet.c index 554fa6f..777492a 100644 --- a/core/src/spritesheet.c +++ b/src/spritesheet.c @@ -43,8 +43,8 @@ Spritesheet* spritesheet_from_texture(SDL_Texture* texture, IVector tile_size) { SDL_QueryTexture(self->texture, NULL, NULL, &self->resolution.x, &self->resolution.y); self->tile_size = tile_size; - self->tile_shear = (size_t)self->resolution.x / self->tile_size.x; - self->tile_count = (size_t)self->resolution.x / self->tile_size.x * self->resolution.y / self->tile_size.y; + self->tile_shear = self->resolution.x / self->tile_size.x; + self->tile_count = self->resolution.x / self->tile_size.x * self->resolution.y / self->tile_size.y; return self; } @@ -57,7 +57,7 @@ SDL_Texture* spritesheet_get_texture(const Spritesheet* self) { } SDL_Rect spritesheet_get_tile_rect(const Spritesheet* self, size_t index) { - IVector tile_coord = {(int)(index % self->tile_shear), (int)(index / self->tile_shear)}; + IVector tile_coord = {index % self->tile_shear, index / self->tile_shear}; tile_coord = vmuli(tile_coord, self->tile_size); return (SDL_Rect) { diff --git a/core/src/spritesheet.h b/src/spritesheet.h similarity index 97% rename from core/src/spritesheet.h rename to src/spritesheet.h index 6d56887..8d76e38 100644 --- a/core/src/spritesheet.h +++ b/src/spritesheet.h @@ -25,7 +25,7 @@ impl_Drop_for(Spritesheet, _internal_spritesheet_destroy ) -impl_Asset_for(Spritesheet, +impl_Asset_for(Spritesheet, spritesheet_get_asset_id, spritesheet_set_asset_id ) diff --git a/core/src/transform.h b/src/transform.h similarity index 100% rename from core/src/transform.h rename to src/transform.h diff --git a/core/src/transformable.c b/src/transformable.c similarity index 100% rename from core/src/transformable.c rename to src/transformable.c diff --git a/core/src/transformable.h b/src/transformable.h similarity index 100% rename from core/src/transformable.h rename to src/transformable.h diff --git a/core/src/typeclass_helpers.h b/src/typeclass_helpers.h similarity index 100% rename from core/src/typeclass_helpers.h rename to src/typeclass_helpers.h diff --git a/core/src/vmath.h b/src/vmath.h similarity index 89% rename from core/src/vmath.h rename to src/vmath.h index 029463f..3504882 100644 --- a/core/src/vmath.h +++ b/src/vmath.h @@ -1,14 +1,8 @@ #ifndef _fencer_vmath_h #define _fencer_vmath_h -#include "stddef.h" #include -#if defined _WIN32 && ! defined isnanf -# define isnanf(x) _isnanf(x) -# define HAVE_ISNANF -#endif - #if VMATH_SDL == 1 #include @@ -39,9 +33,6 @@ typedef struct IVector { #define LeftVector (Vector){-1.0f,0.0f} #define DownVector (Vector){0.0f,1.0f} -#define MakeVector(__X, __Y) (Vector){__X, __Y} -#define VectorFrom(__A) (Vector){__A, __A} - // Integer Vector Constant Macros #define ZeroIVector (IVector){0,0} #define OneIVector (IVector){1,1} @@ -51,9 +42,6 @@ typedef struct IVector { #define RightIVector (IVector){1,0} #define LeftIVector (IVector){-1,0} -#define MakeIVector(__X, __Y) (IVector){__X, __Y} -#define IVectorFrom(__A) (IVector){__A, __A} - /// // Floating point vector maths functions. /// @@ -106,7 +94,7 @@ float vsqrmagnitudef(Vector a) { static inline Vector vnormalizedf(Vector a) { if(veqf(a, ZeroVector)) return ZeroVector; - return vmulff(a, 1.0f/vmagnitudef(a)); + return vmulff(a, 1.0/vmagnitudef(a)); } static inline float vdotf(Vector a, Vector b) { @@ -122,7 +110,7 @@ float vsqrdistf(Vector a, Vector b) { } static inline Vector vreciprocalf(Vector a) { - return (Vector){1.0f/a.x, 1.0f/a.y}; + return (Vector){1.0/a.x, 1.0/a.y}; } static inline Vector vrotatef(Vector a, float t) { @@ -157,7 +145,7 @@ Vector vaveragef(Vector* array, size_t count) { for(size_t i = 0; i < count; ++i) { acc = vaddf(acc, array[i]); } - return vmulff(acc, 1.0f/(float)count); + return vmulff(acc, 1.0/(float)count); } static inline