fp: Rename String8 to Str8
This commit is contained in:
parent
6febed1d08
commit
511c2d715f
2
External/tely
vendored
2
External/tely
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 4c979bbf759e6795a4d164ef4f7b7e8676cea3f7
|
Subproject commit 690696e60e846f27c5ccc60b50c64dbbc43c197a
|
194
feely_pona.cpp
194
feely_pona.cpp
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Dqn_V2 const FP_TARGET_VIEWPORT_SIZE = Dqn_V2_InitNx2(1824, 1046);
|
Dqn_V2 const FP_TARGET_VIEWPORT_SIZE = Dqn_V2_InitNx2(1824, 1046);
|
||||||
|
|
||||||
static FP_ParticleDescriptor FP_DefaultFloatUpParticleDescriptor(Dqn_String8 anim_name, Dqn_usize duration_ms)
|
static FP_ParticleDescriptor FP_DefaultFloatUpParticleDescriptor(Dqn_Str8 anim_name, Dqn_usize duration_ms)
|
||||||
{
|
{
|
||||||
FP_ParticleDescriptor result = {};
|
FP_ParticleDescriptor result = {};
|
||||||
result.anim_name = anim_name;
|
result.anim_name = anim_name;
|
||||||
@ -26,7 +26,7 @@ static void FP_EmitParticle(FP_Game *game, FP_ParticleDescriptor descriptor, Dqn
|
|||||||
if (particle->alive)
|
if (particle->alive)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
particle->anim_name = Dqn_String8_Copy(Dqn_Arena_Allocator(game->frame_arena), descriptor.anim_name);
|
particle->anim_name = Dqn_Str8_Copy(Dqn_Arena_Allocator(game->frame_arena), descriptor.anim_name);
|
||||||
particle->alive = true;
|
particle->alive = true;
|
||||||
particle->pos = descriptor.pos;
|
particle->pos = descriptor.pos;
|
||||||
particle->velocity.x = descriptor.velocity.x + (descriptor.velocity_variance.x * (Dqn_PCG32_NextF32(&game->play.rng) - 0.5f));
|
particle->velocity.x = descriptor.velocity.x + (descriptor.velocity_variance.x * (Dqn_PCG32_NextF32(&game->play.rng) - 0.5f));
|
||||||
@ -38,7 +38,7 @@ static void FP_EmitParticle(FP_Game *game, FP_ParticleDescriptor descriptor, Dqn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static TELY_AssetSpriteSheet FP_LoadSpriteSheetFromSpec(TELY_Platform *platform, TELY_Assets *assets, Dqn_Arena *arena, Dqn_String8 sheet_name)
|
static TELY_AssetSpriteSheet FP_LoadSpriteSheetFromSpec(TELY_Platform *platform, TELY_Assets *assets, Dqn_Arena *arena, Dqn_Str8 sheet_name)
|
||||||
{
|
{
|
||||||
TELY_AssetSpriteSheet result = {};
|
TELY_AssetSpriteSheet result = {};
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(arena);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(arena);
|
||||||
@ -46,32 +46,32 @@ static TELY_AssetSpriteSheet FP_LoadSpriteSheetFromSpec(TELY_Platform *platform,
|
|||||||
result.type = TELY_AssetSpriteSheetType_Rects;
|
result.type = TELY_AssetSpriteSheetType_Rects;
|
||||||
|
|
||||||
// NOTE: Load the sprite meta file =========================================================
|
// NOTE: Load the sprite meta file =========================================================
|
||||||
Dqn_String8 sprite_spec_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s.txt", DQN_STRING_FMT(assets->textures_dir), DQN_STRING_FMT(sheet_name));
|
Dqn_Str8 sprite_spec_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s.txt", DQN_STR_FMT(assets->textures_dir), DQN_STR_FMT(sheet_name));
|
||||||
Dqn_String8 sprite_spec_buffer = platform->func_load_file(scratch.arena, sprite_spec_path);
|
Dqn_Str8 sprite_spec_buffer = platform->func_load_file(scratch.arena, sprite_spec_path);
|
||||||
Dqn_String8SplitAllocResult lines = Dqn_String8_SplitAlloc(scratch.allocator, sprite_spec_buffer, DQN_STRING8("\n"));
|
Dqn_Str8SplitAllocResult lines = Dqn_Str8_SplitAlloc(scratch.allocator, sprite_spec_buffer, DQN_STR8("\n"));
|
||||||
Dqn_usize sprite_rect_index = 0;
|
Dqn_usize sprite_rect_index = 0;
|
||||||
Dqn_usize sprite_anim_index = 0;
|
Dqn_usize sprite_anim_index = 0;
|
||||||
|
|
||||||
DQN_FOR_UINDEX(line_index, lines.size) {
|
DQN_FOR_UINDEX(line_index, lines.size) {
|
||||||
Dqn_String8 line = lines.data[line_index];
|
Dqn_Str8 line = lines.data[line_index];
|
||||||
Dqn_String8SplitAllocResult line_splits = Dqn_String8_SplitAlloc(scratch.allocator, line, DQN_STRING8(";"));
|
Dqn_Str8SplitAllocResult line_splits = Dqn_Str8_SplitAlloc(scratch.allocator, line, DQN_STR8(";"));
|
||||||
|
|
||||||
if (line_index == 0) {
|
if (line_index == 0) {
|
||||||
DQN_ASSERTF(line_splits.size == 4, "Expected 4 splits for @file lines");
|
DQN_ASSERTF(line_splits.size == 4, "Expected 4 splits for @file lines");
|
||||||
DQN_ASSERT(Dqn_String8_StartsWith(line_splits.data[0], DQN_STRING8("@file"), Dqn_String8EqCase_Sensitive));
|
DQN_ASSERT(Dqn_Str8_StartsWith(line_splits.data[0], DQN_STR8("@file"), Dqn_Str8EqCase_Sensitive));
|
||||||
|
|
||||||
// NOTE: Sprite sheet path
|
// NOTE: Sprite sheet path
|
||||||
Dqn_String8 sprite_sheet_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s", DQN_STRING_FMT(assets->textures_dir), DQN_STRING_FMT(line_splits.data[1]));
|
Dqn_Str8 sprite_sheet_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s", DQN_STR_FMT(assets->textures_dir), DQN_STR_FMT(line_splits.data[1]));
|
||||||
result.tex_handle = platform->func_load_texture(assets, sheet_name, sprite_sheet_path);
|
result.tex_handle = platform->func_load_texture(assets, sheet_name, sprite_sheet_path);
|
||||||
DQN_ASSERTF(Dqn_Fs_Exists(sprite_sheet_path), "Required file does not exist '%.*s'", DQN_STRING_FMT(sprite_sheet_path));
|
DQN_ASSERTF(Dqn_Fs_Exists(sprite_sheet_path), "Required file does not exist '%.*s'", DQN_STR_FMT(sprite_sheet_path));
|
||||||
|
|
||||||
// NOTE: Total sprite frame count
|
// NOTE: Total sprite frame count
|
||||||
Dqn_String8ToU64Result total_frame_count = Dqn_String8_ToU64(line_splits.data[2], 0);
|
Dqn_Str8ToU64Result total_frame_count = Dqn_Str8_ToU64(line_splits.data[2], 0);
|
||||||
DQN_ASSERT(total_frame_count.success);
|
DQN_ASSERT(total_frame_count.success);
|
||||||
result.rects = Dqn_Slice_Alloc<Dqn_Rect>(arena, total_frame_count.value, Dqn_ZeroMem_No);
|
result.rects = Dqn_Slice_Alloc<Dqn_Rect>(arena, total_frame_count.value, Dqn_ZeroMem_No);
|
||||||
|
|
||||||
// NOTE: Total animation count
|
// NOTE: Total animation count
|
||||||
Dqn_String8ToU64Result total_anim_count = Dqn_String8_ToU64(line_splits.data[3], 0);
|
Dqn_Str8ToU64Result total_anim_count = Dqn_Str8_ToU64(line_splits.data[3], 0);
|
||||||
DQN_ASSERT(total_anim_count.success);
|
DQN_ASSERT(total_anim_count.success);
|
||||||
result.anims = Dqn_Slice_Alloc<TELY_AssetSpriteAnimation>(arena, total_anim_count.value, Dqn_ZeroMem_No);
|
result.anims = Dqn_Slice_Alloc<TELY_AssetSpriteAnimation>(arena, total_anim_count.value, Dqn_ZeroMem_No);
|
||||||
|
|
||||||
@ -81,11 +81,11 @@ static TELY_AssetSpriteSheet FP_LoadSpriteSheetFromSpec(TELY_Platform *platform,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Dqn_String8_StartsWith(line, DQN_STRING8("@anim"))) {
|
if (Dqn_Str8_StartsWith(line, DQN_STR8("@anim"))) {
|
||||||
DQN_ASSERTF(line_splits.size == 4, "Expected 4 splits for @anim lines");
|
DQN_ASSERTF(line_splits.size == 4, "Expected 4 splits for @anim lines");
|
||||||
Dqn_String8 anim_name = line_splits.data[1];
|
Dqn_Str8 anim_name = line_splits.data[1];
|
||||||
Dqn_String8ToU64Result frames_per_second = Dqn_String8_ToU64(line_splits.data[2], 0);
|
Dqn_Str8ToU64Result frames_per_second = Dqn_Str8_ToU64(line_splits.data[2], 0);
|
||||||
Dqn_String8ToU64Result frame_count = Dqn_String8_ToU64(line_splits.data[3], 0);
|
Dqn_Str8ToU64Result frame_count = Dqn_Str8_ToU64(line_splits.data[3], 0);
|
||||||
|
|
||||||
DQN_ASSERT(anim_name.size);
|
DQN_ASSERT(anim_name.size);
|
||||||
DQN_ASSERT(frame_count.success);
|
DQN_ASSERT(frame_count.success);
|
||||||
@ -93,17 +93,17 @@ static TELY_AssetSpriteSheet FP_LoadSpriteSheetFromSpec(TELY_Platform *platform,
|
|||||||
|
|
||||||
Dqn_Allocator allocator = Dqn_Arena_Allocator(arena);
|
Dqn_Allocator allocator = Dqn_Arena_Allocator(arena);
|
||||||
TELY_AssetSpriteAnimation *anim = result.anims.data + sprite_anim_index++;
|
TELY_AssetSpriteAnimation *anim = result.anims.data + sprite_anim_index++;
|
||||||
anim->label = Dqn_String8_Copy(allocator, anim_name);
|
anim->label = Dqn_Str8_Copy(allocator, anim_name);
|
||||||
anim->index = DQN_CAST(uint16_t)sprite_rect_index;
|
anim->index = DQN_CAST(uint16_t)sprite_rect_index;
|
||||||
anim->count = DQN_CAST(uint16_t)frame_count.value;
|
anim->count = DQN_CAST(uint16_t)frame_count.value;
|
||||||
anim->ms_per_frame = DQN_CAST(uint32_t)(1000.f / frames_per_second.value);
|
anim->ms_per_frame = DQN_CAST(uint32_t)(1000.f / frames_per_second.value);
|
||||||
DQN_ASSERT(anim->ms_per_frame != 0);
|
DQN_ASSERT(anim->ms_per_frame != 0);
|
||||||
} else {
|
} else {
|
||||||
DQN_ASSERTF(line_splits.size == 5, "Expected 5 splits for sprite frame lines");
|
DQN_ASSERTF(line_splits.size == 5, "Expected 5 splits for sprite frame lines");
|
||||||
Dqn_String8ToU64Result x = Dqn_String8_ToU64(line_splits.data[0], 0);
|
Dqn_Str8ToU64Result x = Dqn_Str8_ToU64(line_splits.data[0], 0);
|
||||||
Dqn_String8ToU64Result y = Dqn_String8_ToU64(line_splits.data[1], 0);
|
Dqn_Str8ToU64Result y = Dqn_Str8_ToU64(line_splits.data[1], 0);
|
||||||
Dqn_String8ToU64Result w = Dqn_String8_ToU64(line_splits.data[2], 0);
|
Dqn_Str8ToU64Result w = Dqn_Str8_ToU64(line_splits.data[2], 0);
|
||||||
Dqn_String8ToU64Result h = Dqn_String8_ToU64(line_splits.data[3], 0);
|
Dqn_Str8ToU64Result h = Dqn_Str8_ToU64(line_splits.data[3], 0);
|
||||||
|
|
||||||
DQN_ASSERT(x.success);
|
DQN_ASSERT(x.success);
|
||||||
DQN_ASSERT(y.success);
|
DQN_ASSERT(y.success);
|
||||||
@ -252,22 +252,22 @@ static void FP_PlayReset(FP_Game *game, TELY_Platform *platform)
|
|||||||
Dqn_f32 half_wall_thickness = wall_thickness * .5f;
|
Dqn_f32 half_wall_thickness = wall_thickness * .5f;
|
||||||
|
|
||||||
FP_Entity_CreateWallAtPos(game,
|
FP_Entity_CreateWallAtPos(game,
|
||||||
DQN_STRING8("Left Wall"),
|
DQN_STR8("Left Wall"),
|
||||||
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(0.f, 0.5f)) - Dqn_V2_InitNx2(half_wall_thickness, 0.f),
|
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(0.f, 0.5f)) - Dqn_V2_InitNx2(half_wall_thickness, 0.f),
|
||||||
Dqn_V2_InitNx2(wall_thickness, map_hit_box.size.h));
|
Dqn_V2_InitNx2(wall_thickness, map_hit_box.size.h));
|
||||||
|
|
||||||
FP_Entity_CreateWallAtPos(game,
|
FP_Entity_CreateWallAtPos(game,
|
||||||
DQN_STRING8("Right Wall"),
|
DQN_STR8("Right Wall"),
|
||||||
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(1.f, 0.5f)) + Dqn_V2_InitNx2(half_wall_thickness, 0.f),
|
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(1.f, 0.5f)) + Dqn_V2_InitNx2(half_wall_thickness, 0.f),
|
||||||
Dqn_V2_InitNx2(wall_thickness, map_hit_box.size.h));
|
Dqn_V2_InitNx2(wall_thickness, map_hit_box.size.h));
|
||||||
|
|
||||||
FP_Entity_CreateWallAtPos(game,
|
FP_Entity_CreateWallAtPos(game,
|
||||||
DQN_STRING8("Top Wall"),
|
DQN_STR8("Top Wall"),
|
||||||
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(0.5f, 0.f)) - Dqn_V2_InitNx2(0.f, half_wall_thickness),
|
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(0.5f, 0.f)) - Dqn_V2_InitNx2(0.f, half_wall_thickness),
|
||||||
Dqn_V2_InitNx2(map_hit_box.size.w, wall_thickness));
|
Dqn_V2_InitNx2(map_hit_box.size.w, wall_thickness));
|
||||||
|
|
||||||
FP_Entity_CreateWallAtPos(game,
|
FP_Entity_CreateWallAtPos(game,
|
||||||
DQN_STRING8("Bottom Wall"),
|
DQN_STR8("Bottom Wall"),
|
||||||
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(0.5f, 1.f)) + Dqn_V2_InitNx2(0.f, half_wall_thickness),
|
Dqn_Rect_InterpolatedPoint(map_hit_box, Dqn_V2_InitNx2(0.5f, 1.f)) + Dqn_V2_InitNx2(0.f, half_wall_thickness),
|
||||||
Dqn_V2_InitNx2(map_hit_box.size.w, wall_thickness));
|
Dqn_V2_InitNx2(map_hit_box.size.w, wall_thickness));
|
||||||
}
|
}
|
||||||
@ -404,7 +404,7 @@ void TELY_DLL_Reload(void *user_data)
|
|||||||
{
|
{
|
||||||
TELY_Platform *platform = DQN_CAST(TELY_Platform *)user_data;
|
TELY_Platform *platform = DQN_CAST(TELY_Platform *)user_data;
|
||||||
Dqn_Library_SetPointer(platform->core.dqn_lib);
|
Dqn_Library_SetPointer(platform->core.dqn_lib);
|
||||||
platform->func_set_window_title(DQN_STRING8("Terry Cherry"));
|
platform->func_set_window_title(DQN_STR8("Terry Cherry"));
|
||||||
}
|
}
|
||||||
|
|
||||||
FP_DLL_FUNCTION
|
FP_DLL_FUNCTION
|
||||||
@ -421,32 +421,32 @@ void TELY_DLL_Init(void *user_data)
|
|||||||
|
|
||||||
Dqn_f32 font_scalar = FP_TARGET_VIEWPORT_SIZE.w / DQN_CAST(Dqn_f32)platform->core.window_size.x;
|
Dqn_f32 font_scalar = FP_TARGET_VIEWPORT_SIZE.w / DQN_CAST(Dqn_f32)platform->core.window_size.x;
|
||||||
uint16_t font_size = DQN_CAST(uint16_t)(18 * font_scalar);
|
uint16_t font_size = DQN_CAST(uint16_t)(18 * font_scalar);
|
||||||
game->inter_regular_font_large = platform->func_load_font(assets, DQN_STRING8("Inter (Regular)"), DQN_STRING8("Data/Fonts/Inter-Regular.otf"), DQN_CAST(uint16_t)(font_size * 5.f));
|
game->inter_regular_font_large = platform->func_load_font(assets, DQN_STR8("Inter (Regular)"), DQN_STR8("Data/Fonts/Inter-Regular.otf"), DQN_CAST(uint16_t)(font_size * 5.f));
|
||||||
game->inter_regular_font = platform->func_load_font(assets, DQN_STRING8("Inter (Regular)"), DQN_STRING8("Data/Fonts/Inter-Regular.otf"), DQN_CAST(uint16_t)(font_size));
|
game->inter_regular_font = platform->func_load_font(assets, DQN_STR8("Inter (Regular)"), DQN_STR8("Data/Fonts/Inter-Regular.otf"), DQN_CAST(uint16_t)(font_size));
|
||||||
game->inter_italic_font = platform->func_load_font(assets, DQN_STRING8("Inter (Italic)"), DQN_STRING8("Data/Fonts/Inter-Italic.otf"), font_size);
|
game->inter_italic_font = platform->func_load_font(assets, DQN_STR8("Inter (Italic)"), DQN_STR8("Data/Fonts/Inter-Italic.otf"), font_size);
|
||||||
game->jetbrains_mono_font = platform->func_load_font(assets, DQN_STRING8("JetBrains Mono NL (Regular)"), DQN_STRING8("Data/Fonts/JetBrainsMonoNL-Regular.ttf"), font_size);
|
game->jetbrains_mono_font = platform->func_load_font(assets, DQN_STR8("JetBrains Mono NL (Regular)"), DQN_STR8("Data/Fonts/JetBrainsMonoNL-Regular.ttf"), font_size);
|
||||||
game->talkco_font = platform->func_load_font(assets, DQN_STRING8("Talkco"), DQN_STRING8("Data/Fonts/Talkco.otf"), font_size);
|
game->talkco_font = platform->func_load_font(assets, DQN_STR8("Talkco"), DQN_STR8("Data/Fonts/Talkco.otf"), font_size);
|
||||||
game->talkco_font_large = platform->func_load_font(assets, DQN_STRING8("Talkco"), DQN_STRING8("Data/Fonts/Talkco.otf"), DQN_CAST(uint16_t)(font_size * 1.5f));
|
game->talkco_font_large = platform->func_load_font(assets, DQN_STR8("Talkco"), DQN_STR8("Data/Fonts/Talkco.otf"), DQN_CAST(uint16_t)(font_size * 1.5f));
|
||||||
game->talkco_font_xlarge = platform->func_load_font(assets, DQN_STRING8("Talkco"), DQN_STRING8("Data/Fonts/Talkco.otf"), DQN_CAST(uint16_t)(font_size * 2.f));
|
game->talkco_font_xlarge = platform->func_load_font(assets, DQN_STR8("Talkco"), DQN_STR8("Data/Fonts/Talkco.otf"), DQN_CAST(uint16_t)(font_size * 2.f));
|
||||||
game->audio[FP_GameAudio_TerryHit] = platform->func_load_audio(assets, DQN_STRING8("Terry Hit"), DQN_STRING8("Data/Audio/terry_hit.ogg"));
|
game->audio[FP_GameAudio_TerryHit] = platform->func_load_audio(assets, DQN_STR8("Terry Hit"), DQN_STR8("Data/Audio/terry_hit.ogg"));
|
||||||
game->audio[FP_GameAudio_Ching] = platform->func_load_audio(assets, DQN_STRING8("Ching"), DQN_STRING8("Data/Audio/ching.ogg"));
|
game->audio[FP_GameAudio_Ching] = platform->func_load_audio(assets, DQN_STR8("Ching"), DQN_STR8("Data/Audio/ching.ogg"));
|
||||||
game->audio[FP_GameAudio_Church] = platform->func_load_audio(assets, DQN_STRING8("Church"), DQN_STRING8("Data/Audio/church.ogg"));
|
game->audio[FP_GameAudio_Church] = platform->func_load_audio(assets, DQN_STR8("Church"), DQN_STR8("Data/Audio/church.ogg"));
|
||||||
game->audio[FP_GameAudio_Club] = platform->func_load_audio(assets, DQN_STRING8("Club"), DQN_STRING8("Data/Audio/club_terry.ogg"));
|
game->audio[FP_GameAudio_Club] = platform->func_load_audio(assets, DQN_STR8("Club"), DQN_STR8("Data/Audio/club_terry.ogg"));
|
||||||
game->audio[FP_GameAudio_Dog] = platform->func_load_audio(assets, DQN_STRING8("Dog"), DQN_STRING8("Data/Audio/dog.ogg"));
|
game->audio[FP_GameAudio_Dog] = platform->func_load_audio(assets, DQN_STR8("Dog"), DQN_STR8("Data/Audio/dog.ogg"));
|
||||||
game->audio[FP_GameAudio_MerchantGhost] = platform->func_load_audio(assets, DQN_STRING8("Ghost"), DQN_STRING8("Data/Audio/merchant_ghost.ogg"));
|
game->audio[FP_GameAudio_MerchantGhost] = platform->func_load_audio(assets, DQN_STR8("Ghost"), DQN_STR8("Data/Audio/merchant_ghost.ogg"));
|
||||||
game->audio[FP_GameAudio_MerchantGym] = platform->func_load_audio(assets, DQN_STRING8("Gym"), DQN_STRING8("Data/Audio/merchant_gym.ogg"));
|
game->audio[FP_GameAudio_MerchantGym] = platform->func_load_audio(assets, DQN_STR8("Gym"), DQN_STR8("Data/Audio/merchant_gym.ogg"));
|
||||||
game->audio[FP_GameAudio_MerchantPhone] = platform->func_load_audio(assets, DQN_STRING8("Phone"), DQN_STRING8("Data/Audio/merchant_tech.ogg"));
|
game->audio[FP_GameAudio_MerchantPhone] = platform->func_load_audio(assets, DQN_STR8("Phone"), DQN_STR8("Data/Audio/merchant_tech.ogg"));
|
||||||
game->audio[FP_GameAudio_MerchantTerry] = platform->func_load_audio(assets, DQN_STRING8("Door"), DQN_STRING8("Data/Audio/merchant_terry.ogg"));
|
game->audio[FP_GameAudio_MerchantTerry] = platform->func_load_audio(assets, DQN_STR8("Door"), DQN_STR8("Data/Audio/merchant_terry.ogg"));
|
||||||
game->audio[FP_GameAudio_Message] = platform->func_load_audio(assets, DQN_STRING8("Message"), DQN_STRING8("Data/Audio/message.ogg"));
|
game->audio[FP_GameAudio_Message] = platform->func_load_audio(assets, DQN_STR8("Message"), DQN_STR8("Data/Audio/message.ogg"));
|
||||||
game->audio[FP_GameAudio_Monkey] = platform->func_load_audio(assets, DQN_STRING8("Monkey"), DQN_STRING8("Data/Audio/monkey.ogg"));
|
game->audio[FP_GameAudio_Monkey] = platform->func_load_audio(assets, DQN_STR8("Monkey"), DQN_STR8("Data/Audio/monkey.ogg"));
|
||||||
game->audio[FP_GameAudio_Plane] = platform->func_load_audio(assets, DQN_STRING8("Plane"), DQN_STRING8("Data/Audio/airport.ogg"));
|
game->audio[FP_GameAudio_Plane] = platform->func_load_audio(assets, DQN_STR8("Plane"), DQN_STR8("Data/Audio/airport.ogg"));
|
||||||
game->audio[FP_GameAudio_PortalDestroy] = platform->func_load_audio(assets, DQN_STRING8("Portal Destroy"), DQN_STRING8("Data/Audio/portal_destroy.ogg"));
|
game->audio[FP_GameAudio_PortalDestroy] = platform->func_load_audio(assets, DQN_STR8("Portal Destroy"), DQN_STR8("Data/Audio/portal_destroy.ogg"));
|
||||||
game->audio[FP_GameAudio_Smooch] = platform->func_load_audio(assets, DQN_STRING8("Smooch"), DQN_STRING8("Data/Audio/smooch.ogg"));
|
game->audio[FP_GameAudio_Smooch] = platform->func_load_audio(assets, DQN_STR8("Smooch"), DQN_STR8("Data/Audio/smooch.ogg"));
|
||||||
game->audio[FP_GameAudio_Woosh] = platform->func_load_audio(assets, DQN_STRING8("Woosh"), DQN_STRING8("Data/Audio/woosh.ogg"));
|
game->audio[FP_GameAudio_Woosh] = platform->func_load_audio(assets, DQN_STR8("Woosh"), DQN_STR8("Data/Audio/woosh.ogg"));
|
||||||
|
|
||||||
// NOTE: Load sprite sheets ====================================================================
|
// NOTE: Load sprite sheets ====================================================================
|
||||||
platform->user_data = game;
|
platform->user_data = game;
|
||||||
game->atlas_sprite_sheet = FP_LoadSpriteSheetFromSpec(platform, assets, &platform->arena, DQN_STRING8("atlas"));
|
game->atlas_sprite_sheet = FP_LoadSpriteSheetFromSpec(platform, assets, &platform->arena, DQN_STR8("atlas"));
|
||||||
FP_PlayReset(game, platform);
|
FP_PlayReset(game, platform);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1306,7 +1306,7 @@ static void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput
|
|||||||
Dqn_Profiler_ZoneScopeWithIndex("FP_Update", FP_ProfileZone_FPUpdate);
|
Dqn_Profiler_ZoneScopeWithIndex("FP_Update", FP_ProfileZone_FPUpdate);
|
||||||
|
|
||||||
game->play.update_counter++;
|
game->play.update_counter++;
|
||||||
Dqn_ProfilerZone update_zone = Dqn_Profiler_BeginZoneWithIndex(DQN_STRING8("FP_Update: Entity loop"), FP_ProfileZone_FPUpdate_EntityLoop);
|
Dqn_ProfilerZone update_zone = Dqn_Profiler_BeginZoneWithIndex(DQN_STR8("FP_Update: Entity loop"), FP_ProfileZone_FPUpdate_EntityLoop);
|
||||||
if (game->play.state == FP_GameState_Play && game->play.perry_joined != FP_GamePerryJoins_Enters) {
|
if (game->play.state == FP_GameState_Play && game->play.perry_joined != FP_GamePerryJoins_Enters) {
|
||||||
game->play.clock_ms = DQN_CAST(uint64_t)(platform->input.timer_s * 1000.f);
|
game->play.clock_ms = DQN_CAST(uint64_t)(platform->input.timer_s * 1000.f);
|
||||||
|
|
||||||
@ -2320,28 +2320,28 @@ static void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput
|
|||||||
Dqn_Profiler_EndZone(update_zone);
|
Dqn_Profiler_EndZone(update_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Dqn_String8 FP_ScanCodeToLabel(Dqn_Arena *arena, TELY_PlatformInputScanCode scan_code)
|
static Dqn_Str8 FP_ScanCodeToLabel(Dqn_Arena *arena, TELY_PlatformInputScanCode scan_code)
|
||||||
{
|
{
|
||||||
Dqn_String8 result = {};
|
Dqn_Str8 result = {};
|
||||||
Dqn_Allocator allocator = Dqn_Arena_Allocator(arena);
|
Dqn_Allocator allocator = Dqn_Arena_Allocator(arena);
|
||||||
if (scan_code >= TELY_PlatformInputScanCode_A && scan_code <= TELY_PlatformInputScanCode_Z) {
|
if (scan_code >= TELY_PlatformInputScanCode_A && scan_code <= TELY_PlatformInputScanCode_Z) {
|
||||||
char scan_code_ch = DQN_CAST(char)('A' + (scan_code - TELY_PlatformInputScanCode_A));
|
char scan_code_ch = DQN_CAST(char)('A' + (scan_code - TELY_PlatformInputScanCode_A));
|
||||||
result = Dqn_String8_InitF(allocator, "[%c]", scan_code_ch);
|
result = Dqn_Str8_InitF(allocator, "[%c]", scan_code_ch);
|
||||||
} else {
|
} else {
|
||||||
if (scan_code == TELY_PlatformInputScanCode_Up) {
|
if (scan_code == TELY_PlatformInputScanCode_Up) {
|
||||||
result = Dqn_String8_InitF(allocator, "[Up]");
|
result = Dqn_Str8_InitF(allocator, "[Up]");
|
||||||
} else if (scan_code == TELY_PlatformInputScanCode_Down) {
|
} else if (scan_code == TELY_PlatformInputScanCode_Down) {
|
||||||
result = Dqn_String8_InitF(allocator, "[Down]");
|
result = Dqn_Str8_InitF(allocator, "[Down]");
|
||||||
} else if (scan_code == TELY_PlatformInputScanCode_Left) {
|
} else if (scan_code == TELY_PlatformInputScanCode_Left) {
|
||||||
result = Dqn_String8_InitF(allocator, "[Left]");
|
result = Dqn_Str8_InitF(allocator, "[Left]");
|
||||||
} else if (scan_code == TELY_PlatformInputScanCode_Right) {
|
} else if (scan_code == TELY_PlatformInputScanCode_Right) {
|
||||||
result = Dqn_String8_InitF(allocator, "[Right]");
|
result = Dqn_Str8_InitF(allocator, "[Right]");
|
||||||
} else if (scan_code == TELY_PlatformInputScanCode_Semicolon) {
|
} else if (scan_code == TELY_PlatformInputScanCode_Semicolon) {
|
||||||
result = Dqn_String8_InitF(allocator, "[;]");
|
result = Dqn_Str8_InitF(allocator, "[;]");
|
||||||
} else if (scan_code == TELY_PlatformInputScanCode_Apostrophe) {
|
} else if (scan_code == TELY_PlatformInputScanCode_Apostrophe) {
|
||||||
result = Dqn_String8_InitF(allocator, "[']");
|
result = Dqn_Str8_InitF(allocator, "[']");
|
||||||
} else if (scan_code == TELY_PlatformInputScanCode_Backslash) {
|
} else if (scan_code == TELY_PlatformInputScanCode_Backslash) {
|
||||||
result = Dqn_String8_InitF(allocator, "[/]");
|
result = Dqn_Str8_InitF(allocator, "[/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -2357,12 +2357,12 @@ static void FP_DrawBillboardKeyBindHint(TELY_Renderer *renderer,
|
|||||||
bool draw_player_prefix)
|
bool draw_player_prefix)
|
||||||
{
|
{
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
Dqn_String8 player_prefix = {};
|
Dqn_Str8 player_prefix = {};
|
||||||
if (draw_player_prefix)
|
if (draw_player_prefix)
|
||||||
player_prefix = Dqn_String8_InitF(scratch.allocator, "P%zu ", player_index);
|
player_prefix = Dqn_Str8_InitF(scratch.allocator, "P%zu ", player_index);
|
||||||
|
|
||||||
if (mode == FP_GameControlMode_Gamepad) {
|
if (mode == FP_GameControlMode_Gamepad) {
|
||||||
Dqn_String8 tex_name = {};
|
Dqn_Str8 tex_name = {};
|
||||||
if (key_bind.gamepad_key == TELY_PlatformInputGamepadKey_A)
|
if (key_bind.gamepad_key == TELY_PlatformInputGamepadKey_A)
|
||||||
tex_name = g_anim_names.merchant_button_a;
|
tex_name = g_anim_names.merchant_button_a;
|
||||||
else if (key_bind.gamepad_key == TELY_PlatformInputGamepadKey_B)
|
else if (key_bind.gamepad_key == TELY_PlatformInputGamepadKey_B)
|
||||||
@ -2392,8 +2392,8 @@ static void FP_DrawBillboardKeyBindHint(TELY_Renderer *renderer,
|
|||||||
TELY_COLOUR_WHITE_V4);
|
TELY_COLOUR_WHITE_V4);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Dqn_String8 key_bind_label = FP_ScanCodeToLabel(scratch.arena, key_bind.scan_code);
|
Dqn_Str8 key_bind_label = FP_ScanCodeToLabel(scratch.arena, key_bind.scan_code);
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0, +1.f), "%.*s%.*s", DQN_STRING_FMT(player_prefix), DQN_STRING_FMT(key_bind_label));
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0, +1.f), "%.*s%.*s", DQN_STR_FMT(player_prefix), DQN_STR_FMT(key_bind_label));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2797,19 +2797,19 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
Dqn_V2I player_tile = Dqn_V2I_InitNx2(world_pos.x / game->play.tile_size, world_pos.y / game->play.tile_size);
|
Dqn_V2I player_tile = Dqn_V2I_InitNx2(world_pos.x / game->play.tile_size, world_pos.y / game->play.tile_size);
|
||||||
Dqn_f32 line_height = TELY_Render_FontHeight(renderer, &platform->assets);
|
Dqn_f32 line_height = TELY_Render_FontHeight(renderer, &platform->assets);
|
||||||
Dqn_V2 draw_p = world_mouse_p;
|
Dqn_V2 draw_p = world_mouse_p;
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "%.*s", DQN_STRING_FMT(entity->name)); draw_p.y += line_height;
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "%.*s", DQN_STR_FMT(entity->name)); draw_p.y += line_height;
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "World Pos: (%.1f, %.1f)", world_pos.x, world_pos.y); draw_p.y += line_height;
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "World Pos: (%.1f, %.1f)", world_pos.x, world_pos.y); draw_p.y += line_height;
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "Hit Box Size: %.1fx%.1f", world_hit_box.size.x, world_hit_box.size.y); draw_p.y += line_height;
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "Hit Box Size: %.1fx%.1f", world_hit_box.size.x, world_hit_box.size.y); draw_p.y += line_height;
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "Tile: %I32dx%I32d", player_tile.x, player_tile.y); draw_p.y += line_height;
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "Tile: %I32dx%I32d", player_tile.x, player_tile.y); draw_p.y += line_height;
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "World Mouse Pos: (%.1f, %.1f)", world_mouse_p.x, world_mouse_p.y); draw_p.y += line_height;
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "World Mouse Pos: (%.1f, %.1f)", world_mouse_p.x, world_mouse_p.y); draw_p.y += line_height;
|
||||||
|
|
||||||
Dqn_String8 faction = {};
|
Dqn_Str8 faction = {};
|
||||||
switch (entity->faction) {
|
switch (entity->faction) {
|
||||||
case FP_GameEntityFaction_Nil: faction = DQN_STRING8("Nil"); break;
|
case FP_GameEntityFaction_Nil: faction = DQN_STR8("Nil"); break;
|
||||||
case FP_GameEntityFaction_Friendly: faction = DQN_STRING8("Friendly"); break;
|
case FP_GameEntityFaction_Friendly: faction = DQN_STR8("Friendly"); break;
|
||||||
case FP_GameEntityFaction_Foe: faction = DQN_STRING8("Foe"); break;
|
case FP_GameEntityFaction_Foe: faction = DQN_STR8("Foe"); break;
|
||||||
}
|
}
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "Faction: %.*s", DQN_STRING_FMT(faction)); draw_p.y += line_height;
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_InitNx2(0.f, 1), "Faction: %.*s", DQN_STR_FMT(faction)); draw_p.y += line_height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3019,15 +3019,15 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
};
|
};
|
||||||
|
|
||||||
FP_GameEntity *first_player = FP_Game_GetEntity(game, game->play.players.data[0]);
|
FP_GameEntity *first_player = FP_Game_GetEntity(game, game->play.players.data[0]);
|
||||||
Dqn_String8 join_game_key = {};
|
Dqn_Str8 join_game_key = {};
|
||||||
if (first_player->controls.mode == FP_GameControlMode_Keyboard)
|
if (first_player->controls.mode == FP_GameControlMode_Keyboard)
|
||||||
join_game_key = DQN_STRING8("<Gamepad: Start>");
|
join_game_key = DQN_STR8("<Gamepad: Start>");
|
||||||
else
|
else
|
||||||
join_game_key = DQN_STRING8("<Gamepad: B>");
|
join_game_key = DQN_STR8("<Gamepad: B>");
|
||||||
|
|
||||||
Dqn_f32 font_height = TELY_Render_FontHeight(renderer, assets);
|
Dqn_f32 font_height = TELY_Render_FontHeight(renderer, assets);
|
||||||
Dqn_V2 base_p = player_avatar_base_pos[game->play.players.size];
|
Dqn_V2 base_p = player_avatar_base_pos[game->play.players.size];
|
||||||
TELY_Render_TextF(renderer, base_p, Dqn_V2_Zero, "Press %.*s", DQN_STRING_FMT(join_game_key)); base_p.y += font_height;
|
TELY_Render_TextF(renderer, base_p, Dqn_V2_Zero, "Press %.*s", DQN_STR_FMT(join_game_key)); base_p.y += font_height;
|
||||||
FP_ListenForNewPlayer(input, game);
|
FP_ListenForNewPlayer(input, game);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3044,9 +3044,9 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
struct FP_MerchantToMenuMapping {
|
struct FP_MerchantToMenuMapping {
|
||||||
FP_GameEntityHandle merchant;
|
FP_GameEntityHandle merchant;
|
||||||
Dqn_V2 *menu_pos;
|
Dqn_V2 *menu_pos;
|
||||||
Dqn_String8 upgrade_icon;
|
Dqn_Str8 upgrade_icon;
|
||||||
Dqn_String8 menu_anim;
|
Dqn_Str8 menu_anim;
|
||||||
Dqn_String8 building;
|
Dqn_Str8 building;
|
||||||
Dqn_V2 building_offset01;
|
Dqn_V2 building_offset01;
|
||||||
uint8_t *inventory_count;
|
uint8_t *inventory_count;
|
||||||
uint32_t *building_base_price;
|
uint32_t *building_base_price;
|
||||||
@ -3179,7 +3179,7 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
} else {
|
} else {
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
TELY_AssetFont const *font = TELY_Render_Font(renderer, assets);
|
TELY_AssetFont const *font = TELY_Render_Font(renderer, assets);
|
||||||
Dqn_String8 key_bind_label = FP_ScanCodeToLabel(scratch.arena, key_bind.scan_code);
|
Dqn_Str8 key_bind_label = FP_ScanCodeToLabel(scratch.arena, key_bind.scan_code);
|
||||||
interact_btn_rect.size = TELY_Asset_MeasureText(font, key_bind_label);
|
interact_btn_rect.size = TELY_Asset_MeasureText(font, key_bind_label);
|
||||||
|
|
||||||
Dqn_Rect key_bind_rect = interact_btn_rect;
|
Dqn_Rect key_bind_rect = interact_btn_rect;
|
||||||
@ -3294,7 +3294,7 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
} else {
|
} else {
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
TELY_AssetFont const *font = TELY_Render_Font(renderer, assets);
|
TELY_AssetFont const *font = TELY_Render_Font(renderer, assets);
|
||||||
Dqn_String8 key_bind_label = FP_ScanCodeToLabel(scratch.arena, key_bind.scan_code);
|
Dqn_Str8 key_bind_label = FP_ScanCodeToLabel(scratch.arena, key_bind.scan_code);
|
||||||
interact_btn_rect.size = TELY_Asset_MeasureText(font, key_bind_label);
|
interact_btn_rect.size = TELY_Asset_MeasureText(font, key_bind_label);
|
||||||
|
|
||||||
Dqn_Rect key_bind_rect = interact_btn_rect;
|
Dqn_Rect key_bind_rect = interact_btn_rect;
|
||||||
@ -3995,7 +3995,7 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
TELY_RFui_PushMargin(rfui, Dqn_V2_InitNx1(1));
|
TELY_RFui_PushMargin(rfui, Dqn_V2_InitNx1(1));
|
||||||
DQN_DEFER { TELY_RFui_PopMargin(rfui); };
|
DQN_DEFER { TELY_RFui_PopMargin(rfui); };
|
||||||
|
|
||||||
TELY_RFuiResult info_column = TELY_RFui_ColumnReverse(rfui, DQN_STRING8("Info Column"));
|
TELY_RFuiResult info_column = TELY_RFui_ColumnReverse(rfui, DQN_STR8("Info Column"));
|
||||||
TELY_RFui_PushParent(rfui, info_column.widget);
|
TELY_RFui_PushParent(rfui, info_column.widget);
|
||||||
DQN_DEFER { TELY_RFui_PopParent(rfui); };
|
DQN_DEFER { TELY_RFui_PopParent(rfui); };
|
||||||
|
|
||||||
@ -4009,20 +4009,20 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
info_column.widget->semantic_position[TELY_RFuiAxis_Y].value = platform->core.window_size.h - TELY_Render_FontHeight(renderer, assets);
|
info_column.widget->semantic_position[TELY_RFuiAxis_Y].value = platform->core.window_size.h - TELY_Render_FontHeight(renderer, assets);
|
||||||
|
|
||||||
{
|
{
|
||||||
TELY_RFuiResult row = TELY_RFui_Row(rfui, DQN_STRING8("Info Bar"));
|
TELY_RFuiResult row = TELY_RFui_Row(rfui, DQN_STR8("Info Bar"));
|
||||||
TELY_RFui_PushParent(rfui, row.widget);
|
TELY_RFui_PushParent(rfui, row.widget);
|
||||||
DQN_DEFER { TELY_RFui_PopParent(rfui); };
|
DQN_DEFER { TELY_RFui_PopParent(rfui); };
|
||||||
|
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
Dqn_String8Builder builder = {};
|
Dqn_Str8Builder builder = {};
|
||||||
builder.allocator = scratch.allocator;
|
builder.allocator = scratch.allocator;
|
||||||
|
|
||||||
Dqn_String8Builder_AppendF(&builder, "TELY");
|
Dqn_Str8Builder_AppendF(&builder, "TELY");
|
||||||
if (Dqn_String8_IsValid(platform->core.os_name)) {
|
if (Dqn_Str8_IsValid(platform->core.os_name)) {
|
||||||
Dqn_String8Builder_AppendF(&builder, " | %.*s", DQN_STRING_FMT(platform->core.os_name));
|
Dqn_Str8Builder_AppendF(&builder, " | %.*s", DQN_STR_FMT(platform->core.os_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
Dqn_String8Builder_AppendF(&builder,
|
Dqn_Str8Builder_AppendF(&builder,
|
||||||
" | %dx%d %.1fHz | TSC %.1f GHz",
|
" | %dx%d %.1fHz | TSC %.1f GHz",
|
||||||
platform->core.window_size.w,
|
platform->core.window_size.w,
|
||||||
platform->core.window_size.h,
|
platform->core.window_size.h,
|
||||||
@ -4030,9 +4030,9 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
platform->core.tsc_per_second / 1'000'000'000.0);
|
platform->core.tsc_per_second / 1'000'000'000.0);
|
||||||
|
|
||||||
if (platform->core.ram_mb)
|
if (platform->core.ram_mb)
|
||||||
Dqn_String8Builder_AppendF(&builder, " | RAM %.1fGB", platform->core.ram_mb / 1024.0);
|
Dqn_Str8Builder_AppendF(&builder, " | RAM %.1fGB", platform->core.ram_mb / 1024.0);
|
||||||
|
|
||||||
Dqn_String8Builder_AppendF(&builder,
|
Dqn_Str8Builder_AppendF(&builder,
|
||||||
" | Work %04.1fms/f (%04.1f%%) | %05.1f FPS | Frame %'I64u | Timer %.1fs",
|
" | Work %04.1fms/f (%04.1f%%) | %05.1f FPS | Frame %'I64u | Timer %.1fs",
|
||||||
input->work_ms,
|
input->work_ms,
|
||||||
input->work_ms * 100.0 / input->delta_ms,
|
input->work_ms * 100.0 / input->delta_ms,
|
||||||
@ -4040,8 +4040,8 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
input->frame_counter,
|
input->frame_counter,
|
||||||
input->timer_s);
|
input->timer_s);
|
||||||
|
|
||||||
Dqn_String8 text = Dqn_String8Builder_Build(&builder, scratch.allocator);
|
Dqn_Str8 text = Dqn_Str8Builder_Build(&builder, scratch.allocator);
|
||||||
TELY_RFui_TextBackgroundF(rfui, "%.*s", DQN_STRING_FMT(text));
|
TELY_RFui_TextBackgroundF(rfui, "%.*s", DQN_STR_FMT(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
TELY_RFui_TextBackgroundF(rfui, "Mouse: %.1f, %.1f", input->mouse_p.x, input->mouse_p.y);
|
TELY_RFui_TextBackgroundF(rfui, "Mouse: %.1f, %.1f", input->mouse_p.x, input->mouse_p.y);
|
||||||
@ -4116,7 +4116,7 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
|
|
||||||
if (0) {
|
if (0) {
|
||||||
next_y += TELY_Asset_GetFont(assets, TELY_RFui_ActiveFont(rfui))->pixel_height;
|
next_y += TELY_Asset_GetFont(assets, TELY_RFui_ActiveFont(rfui))->pixel_height;
|
||||||
TELY_RFuiResult bar = TELY_RFui_Column(rfui, DQN_STRING8("Memory bar"));
|
TELY_RFuiResult bar = TELY_RFui_Column(rfui, DQN_STR8("Memory bar"));
|
||||||
bar.widget->semantic_position[TELY_RFuiAxis_X].kind = TELY_RFuiPositionKind_Absolute;
|
bar.widget->semantic_position[TELY_RFuiAxis_X].kind = TELY_RFuiPositionKind_Absolute;
|
||||||
bar.widget->semantic_position[TELY_RFuiAxis_X].value = 10.f;
|
bar.widget->semantic_position[TELY_RFuiAxis_X].value = 10.f;
|
||||||
bar.widget->semantic_position[TELY_RFuiAxis_Y].kind = TELY_RFuiPositionKind_Absolute;
|
bar.widget->semantic_position[TELY_RFuiAxis_Y].kind = TELY_RFuiPositionKind_Absolute;
|
||||||
@ -4144,7 +4144,7 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
Dqn_ArenaInfo arena_info = Dqn_Arena_Info(arena);
|
Dqn_ArenaInfo arena_info = Dqn_Arena_Info(arena);
|
||||||
TELY_RFui_TextF(rfui,
|
TELY_RFui_TextF(rfui,
|
||||||
"%.*s[%I64u]: %_$$d/%_$$d (HWM %_$$d, COMMIT %_$$d)",
|
"%.*s[%I64u]: %_$$d/%_$$d (HWM %_$$d, COMMIT %_$$d)",
|
||||||
DQN_STRING_FMT(arena->label),
|
DQN_STR_FMT(arena->label),
|
||||||
arena->blocks,
|
arena->blocks,
|
||||||
arena_info.used,
|
arena_info.used,
|
||||||
arena_info.capacity,
|
arena_info.capacity,
|
||||||
@ -4156,7 +4156,7 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
// NOTE: Profiler
|
// NOTE: Profiler
|
||||||
if (0) {
|
if (0) {
|
||||||
next_y += TELY_Asset_GetFont(assets, TELY_RFui_ActiveFont(rfui))->pixel_height;
|
next_y += TELY_Asset_GetFont(assets, TELY_RFui_ActiveFont(rfui))->pixel_height;
|
||||||
TELY_RFuiResult profiler_layout = TELY_RFui_Column(rfui, DQN_STRING8("Profiler Bar"));
|
TELY_RFuiResult profiler_layout = TELY_RFui_Column(rfui, DQN_STR8("Profiler Bar"));
|
||||||
profiler_layout.widget->semantic_position[TELY_RFuiAxis_X].kind = TELY_RFuiPositionKind_Absolute;
|
profiler_layout.widget->semantic_position[TELY_RFuiAxis_X].kind = TELY_RFuiPositionKind_Absolute;
|
||||||
profiler_layout.widget->semantic_position[TELY_RFuiAxis_X].value = 10.f;
|
profiler_layout.widget->semantic_position[TELY_RFuiAxis_X].value = 10.f;
|
||||||
profiler_layout.widget->semantic_position[TELY_RFuiAxis_Y].kind = TELY_RFuiPositionKind_Absolute;
|
profiler_layout.widget->semantic_position[TELY_RFuiAxis_Y].kind = TELY_RFuiPositionKind_Absolute;
|
||||||
@ -4181,14 +4181,14 @@ static void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *ren
|
|||||||
if (tsc_exclusive == tsc_inclusive) {
|
if (tsc_exclusive == tsc_inclusive) {
|
||||||
TELY_RFui_TextF(rfui,
|
TELY_RFui_TextF(rfui,
|
||||||
"%.*s[%u]: %.1fms",
|
"%.*s[%u]: %.1fms",
|
||||||
DQN_STRING_FMT(anchor->name),
|
DQN_STR_FMT(anchor->name),
|
||||||
anchor->hit_count,
|
anchor->hit_count,
|
||||||
tsc_exclusive_milliseconds);
|
tsc_exclusive_milliseconds);
|
||||||
} else {
|
} else {
|
||||||
Dqn_f64 tsc_inclusive_milliseconds = tsc_inclusive * 1000 / tsc_frequency;
|
Dqn_f64 tsc_inclusive_milliseconds = tsc_inclusive * 1000 / tsc_frequency;
|
||||||
TELY_RFui_TextF(rfui,
|
TELY_RFui_TextF(rfui,
|
||||||
"%.*s[%u]: %.1f/%.1fms",
|
"%.*s[%u]: %.1f/%.1fms",
|
||||||
DQN_STRING_FMT(anchor->name),
|
DQN_STR_FMT(anchor->name),
|
||||||
anchor->hit_count,
|
anchor->hit_count,
|
||||||
tsc_exclusive_milliseconds,
|
tsc_exclusive_milliseconds,
|
||||||
tsc_inclusive_milliseconds);
|
tsc_inclusive_milliseconds);
|
||||||
|
220
feely_pona.h
220
feely_pona.h
@ -23,140 +23,140 @@ struct FP_Meters
|
|||||||
|
|
||||||
struct FP_GlobalAnimations
|
struct FP_GlobalAnimations
|
||||||
{
|
{
|
||||||
Dqn_String8 airport_terry = DQN_STRING8("airport_terry");
|
Dqn_Str8 airport_terry = DQN_STR8("airport_terry");
|
||||||
Dqn_String8 airport_terry_plane = DQN_STRING8("airport_terry_plane");
|
Dqn_Str8 airport_terry_plane = DQN_STR8("airport_terry_plane");
|
||||||
|
|
||||||
Dqn_String8 catfish_attack_down = DQN_STRING8("catfish_attack_down");
|
Dqn_Str8 catfish_attack_down = DQN_STR8("catfish_attack_down");
|
||||||
Dqn_String8 catfish_attack_side = DQN_STRING8("catfish_attack_side");
|
Dqn_Str8 catfish_attack_side = DQN_STR8("catfish_attack_side");
|
||||||
Dqn_String8 catfish_attack_up = DQN_STRING8("catfish_attack_up");
|
Dqn_Str8 catfish_attack_up = DQN_STR8("catfish_attack_up");
|
||||||
Dqn_String8 catfish_death = DQN_STRING8("catfish_death");
|
Dqn_Str8 catfish_death = DQN_STR8("catfish_death");
|
||||||
Dqn_String8 catfish_walk_up = DQN_STRING8("catfish_walk_up");
|
Dqn_Str8 catfish_walk_up = DQN_STR8("catfish_walk_up");
|
||||||
Dqn_String8 catfish_walk_side = DQN_STRING8("catfish_walk_side");
|
Dqn_Str8 catfish_walk_side = DQN_STR8("catfish_walk_side");
|
||||||
Dqn_String8 catfish_walk_down = DQN_STRING8("catfish_walk_down");
|
Dqn_Str8 catfish_walk_down = DQN_STR8("catfish_walk_down");
|
||||||
|
|
||||||
Dqn_String8 clinger_attack_down = DQN_STRING8("clinger_attack_down");
|
Dqn_Str8 clinger_attack_down = DQN_STR8("clinger_attack_down");
|
||||||
Dqn_String8 clinger_attack_side = DQN_STRING8("clinger_attack_side");
|
Dqn_Str8 clinger_attack_side = DQN_STR8("clinger_attack_side");
|
||||||
Dqn_String8 clinger_attack_up = DQN_STRING8("clinger_attack_up");
|
Dqn_Str8 clinger_attack_up = DQN_STR8("clinger_attack_up");
|
||||||
Dqn_String8 clinger_death = DQN_STRING8("clinger_death");
|
Dqn_Str8 clinger_death = DQN_STR8("clinger_death");
|
||||||
Dqn_String8 clinger_walk_up = DQN_STRING8("clinger_walk_up");
|
Dqn_Str8 clinger_walk_up = DQN_STR8("clinger_walk_up");
|
||||||
Dqn_String8 clinger_walk_down = DQN_STRING8("clinger_walk_down");
|
Dqn_Str8 clinger_walk_down = DQN_STR8("clinger_walk_down");
|
||||||
|
|
||||||
Dqn_String8 church_terry_alive = DQN_STRING8("church_terry_alive");
|
Dqn_Str8 church_terry_alive = DQN_STR8("church_terry_alive");
|
||||||
Dqn_String8 church_terry_dark = DQN_STRING8("church_terry_dark");
|
Dqn_Str8 church_terry_dark = DQN_STR8("church_terry_dark");
|
||||||
|
|
||||||
Dqn_String8 club_terry_alive = DQN_STRING8("club_terry_alive");
|
Dqn_Str8 club_terry_alive = DQN_STR8("club_terry_alive");
|
||||||
Dqn_String8 club_terry_dark = DQN_STRING8("club_terry_dark");
|
Dqn_Str8 club_terry_dark = DQN_STR8("club_terry_dark");
|
||||||
|
|
||||||
Dqn_String8 end_screen = DQN_STRING8("end_screen");
|
Dqn_Str8 end_screen = DQN_STR8("end_screen");
|
||||||
|
|
||||||
Dqn_String8 heart = DQN_STRING8("heart");
|
Dqn_Str8 heart = DQN_STR8("heart");
|
||||||
Dqn_String8 heart_bleed = DQN_STRING8("heart_bleed");
|
Dqn_Str8 heart_bleed = DQN_STR8("heart_bleed");
|
||||||
|
|
||||||
Dqn_String8 icon_attack = DQN_STRING8("icon_attack");
|
Dqn_Str8 icon_attack = DQN_STR8("icon_attack");
|
||||||
Dqn_String8 icon_health = DQN_STRING8("icon_health");
|
Dqn_Str8 icon_health = DQN_STR8("icon_health");
|
||||||
Dqn_String8 icon_money = DQN_STRING8("icon_money");
|
Dqn_Str8 icon_money = DQN_STR8("icon_money");
|
||||||
Dqn_String8 icon_phone = DQN_STRING8("icon_phone");
|
Dqn_Str8 icon_phone = DQN_STR8("icon_phone");
|
||||||
Dqn_String8 icon_stamina = DQN_STRING8("icon_stamina");
|
Dqn_Str8 icon_stamina = DQN_STR8("icon_stamina");
|
||||||
|
|
||||||
Dqn_String8 intro_screen_arrows = DQN_STRING8("intro_screen_arrows");
|
Dqn_Str8 intro_screen_arrows = DQN_STR8("intro_screen_arrows");
|
||||||
Dqn_String8 intro_screen_subtitle = DQN_STRING8("intro_screen_subtitle");
|
Dqn_Str8 intro_screen_subtitle = DQN_STR8("intro_screen_subtitle");
|
||||||
Dqn_String8 intro_screen_terry = DQN_STRING8("intro_screen_terry");
|
Dqn_Str8 intro_screen_terry = DQN_STR8("intro_screen_terry");
|
||||||
Dqn_String8 intro_screen_title = DQN_STRING8("intro_screen_title");
|
Dqn_Str8 intro_screen_title = DQN_STR8("intro_screen_title");
|
||||||
Dqn_String8 intro_screen_perry_joins_the_fight = DQN_STRING8("intro_screen_perry_joins_the_fight");
|
Dqn_Str8 intro_screen_perry_joins_the_fight = DQN_STR8("intro_screen_perry_joins_the_fight");
|
||||||
|
|
||||||
Dqn_String8 kennel_terry = DQN_STRING8("kennel_terry");
|
Dqn_Str8 kennel_terry = DQN_STR8("kennel_terry");
|
||||||
|
|
||||||
Dqn_String8 map = DQN_STRING8("map");
|
Dqn_Str8 map = DQN_STR8("map");
|
||||||
Dqn_String8 map_billboard_attack = DQN_STRING8("map_billboard_attack");
|
Dqn_Str8 map_billboard_attack = DQN_STR8("map_billboard_attack");
|
||||||
Dqn_String8 map_billboard_dash = DQN_STRING8("map_billboard_dash");
|
Dqn_Str8 map_billboard_dash = DQN_STR8("map_billboard_dash");
|
||||||
Dqn_String8 map_billboard_monkey = DQN_STRING8("map_billboard_monkey");
|
Dqn_Str8 map_billboard_monkey = DQN_STR8("map_billboard_monkey");
|
||||||
Dqn_String8 map_billboard_range_attack = DQN_STRING8("map_billboard_range_attack");
|
Dqn_Str8 map_billboard_range_attack = DQN_STR8("map_billboard_range_attack");
|
||||||
Dqn_String8 map_billboard_strafe = DQN_STRING8("map_billboard_strafe");
|
Dqn_Str8 map_billboard_strafe = DQN_STR8("map_billboard_strafe");
|
||||||
Dqn_String8 map_billboard_build = DQN_STRING8("map_billboard_build");
|
Dqn_Str8 map_billboard_build = DQN_STR8("map_billboard_build");
|
||||||
Dqn_String8 map_police = DQN_STRING8("map_police");
|
Dqn_Str8 map_police = DQN_STR8("map_police");
|
||||||
|
|
||||||
Dqn_String8 merchant_button_a = DQN_STRING8("merchant_button_a");
|
Dqn_Str8 merchant_button_a = DQN_STR8("merchant_button_a");
|
||||||
Dqn_String8 merchant_button_b = DQN_STRING8("merchant_button_b");
|
Dqn_Str8 merchant_button_b = DQN_STR8("merchant_button_b");
|
||||||
Dqn_String8 merchant_button_x = DQN_STRING8("merchant_button_x");
|
Dqn_Str8 merchant_button_x = DQN_STR8("merchant_button_x");
|
||||||
Dqn_String8 merchant_button_y = DQN_STRING8("merchant_button_y");
|
Dqn_Str8 merchant_button_y = DQN_STR8("merchant_button_y");
|
||||||
|
|
||||||
Dqn_String8 merchant_graveyard = DQN_STRING8("merchant_graveyard");
|
Dqn_Str8 merchant_graveyard = DQN_STR8("merchant_graveyard");
|
||||||
Dqn_String8 merchant_graveyard_menu = DQN_STRING8("merchant_graveyard_menu");
|
Dqn_Str8 merchant_graveyard_menu = DQN_STR8("merchant_graveyard_menu");
|
||||||
Dqn_String8 merchant_gym = DQN_STRING8("merchant_gym");
|
Dqn_Str8 merchant_gym = DQN_STR8("merchant_gym");
|
||||||
Dqn_String8 merchant_gym_menu = DQN_STRING8("merchant_gym_menu");
|
Dqn_Str8 merchant_gym_menu = DQN_STR8("merchant_gym_menu");
|
||||||
Dqn_String8 merchant_phone_company = DQN_STRING8("merchant_phone_company");
|
Dqn_Str8 merchant_phone_company = DQN_STR8("merchant_phone_company");
|
||||||
Dqn_String8 merchant_phone_company_menu = DQN_STRING8("merchant_phone_company_menu");
|
Dqn_Str8 merchant_phone_company_menu = DQN_STR8("merchant_phone_company_menu");
|
||||||
Dqn_String8 merchant_terry = DQN_STRING8("merchant_terry");
|
Dqn_Str8 merchant_terry = DQN_STR8("merchant_terry");
|
||||||
Dqn_String8 merchant_terry_menu = DQN_STRING8("merchant_terry_menu");
|
Dqn_Str8 merchant_terry_menu = DQN_STR8("merchant_terry_menu");
|
||||||
|
|
||||||
Dqn_String8 particle_church_halo = DQN_STRING8("particle_church_halo");
|
Dqn_Str8 particle_church_halo = DQN_STR8("particle_church_halo");
|
||||||
Dqn_String8 particle_church_cross = DQN_STRING8("particle_church_cross");
|
Dqn_Str8 particle_church_cross = DQN_STR8("particle_church_cross");
|
||||||
Dqn_String8 particle_drunk = DQN_STRING8("particle_drunk");
|
Dqn_Str8 particle_drunk = DQN_STR8("particle_drunk");
|
||||||
Dqn_String8 particle_drunk_bottle = DQN_STRING8("particle_drunk_bottle");
|
Dqn_Str8 particle_drunk_bottle = DQN_STR8("particle_drunk_bottle");
|
||||||
Dqn_String8 particle_drunk_martini = DQN_STRING8("particle_drunk_martini");
|
Dqn_Str8 particle_drunk_martini = DQN_STR8("particle_drunk_martini");
|
||||||
Dqn_String8 particle_heart = DQN_STRING8("particle_heart");
|
Dqn_Str8 particle_heart = DQN_STR8("particle_heart");
|
||||||
Dqn_String8 particle_hit_1 = DQN_STRING8("particle_hit_1");
|
Dqn_Str8 particle_hit_1 = DQN_STR8("particle_hit_1");
|
||||||
Dqn_String8 particle_hit_2 = DQN_STRING8("particle_hit_2");
|
Dqn_Str8 particle_hit_2 = DQN_STR8("particle_hit_2");
|
||||||
Dqn_String8 particle_hit_3 = DQN_STRING8("particle_hit_3");
|
Dqn_Str8 particle_hit_3 = DQN_STR8("particle_hit_3");
|
||||||
Dqn_String8 particle_purchase = DQN_STRING8("particle_purchase");
|
Dqn_Str8 particle_purchase = DQN_STR8("particle_purchase");
|
||||||
|
|
||||||
Dqn_String8 portal = DQN_STRING8("portal");
|
Dqn_Str8 portal = DQN_STR8("portal");
|
||||||
Dqn_String8 portal_break = DQN_STRING8("portal_break");
|
Dqn_Str8 portal_break = DQN_STR8("portal_break");
|
||||||
Dqn_String8 portal_monk = DQN_STRING8("portal_monk");
|
Dqn_Str8 portal_monk = DQN_STR8("portal_monk");
|
||||||
|
|
||||||
Dqn_String8 shadow_long_circle = DQN_STRING8("shadow_long_circle");
|
Dqn_Str8 shadow_long_circle = DQN_STR8("shadow_long_circle");
|
||||||
Dqn_String8 shadow_tight_circle = DQN_STRING8("shadow_tight_circle");
|
Dqn_Str8 shadow_tight_circle = DQN_STR8("shadow_tight_circle");
|
||||||
|
|
||||||
Dqn_String8 shrubbery_bush_1 = DQN_STRING8("shrubbery_bush_1");
|
Dqn_Str8 shrubbery_bush_1 = DQN_STR8("shrubbery_bush_1");
|
||||||
Dqn_String8 shrubbery_bush_2 = DQN_STRING8("shrubbery_bush_2");
|
Dqn_Str8 shrubbery_bush_2 = DQN_STR8("shrubbery_bush_2");
|
||||||
Dqn_String8 shrubbery_island_1 = DQN_STRING8("shrubbery_island_1");
|
Dqn_Str8 shrubbery_island_1 = DQN_STR8("shrubbery_island_1");
|
||||||
Dqn_String8 shrubbery_island_2 = DQN_STRING8("shrubbery_island_2");
|
Dqn_Str8 shrubbery_island_2 = DQN_STR8("shrubbery_island_2");
|
||||||
Dqn_String8 shrubbery_island_3 = DQN_STRING8("shrubbery_island_3");
|
Dqn_Str8 shrubbery_island_3 = DQN_STR8("shrubbery_island_3");
|
||||||
|
|
||||||
Dqn_String8 smoochie_walk_up = DQN_STRING8("smoochie_walk_up");
|
Dqn_Str8 smoochie_walk_up = DQN_STR8("smoochie_walk_up");
|
||||||
Dqn_String8 smoochie_walk_down = DQN_STRING8("smoochie_walk_down");
|
Dqn_Str8 smoochie_walk_down = DQN_STR8("smoochie_walk_down");
|
||||||
Dqn_String8 smoochie_walk_left = DQN_STRING8("smoochie_walk_left");
|
Dqn_Str8 smoochie_walk_left = DQN_STR8("smoochie_walk_left");
|
||||||
Dqn_String8 smoochie_walk_right = DQN_STRING8("smoochie_walk_right");
|
Dqn_Str8 smoochie_walk_right = DQN_STR8("smoochie_walk_right");
|
||||||
Dqn_String8 smoochie_attack_down = DQN_STRING8("smoochie_attack_down");
|
Dqn_Str8 smoochie_attack_down = DQN_STR8("smoochie_attack_down");
|
||||||
Dqn_String8 smoochie_hurt_side = DQN_STRING8("smoochie_hurt_side");
|
Dqn_Str8 smoochie_hurt_side = DQN_STR8("smoochie_hurt_side");
|
||||||
Dqn_String8 smoochie_attack_heart = DQN_STRING8("smoochie_attack_heart");
|
Dqn_Str8 smoochie_attack_heart = DQN_STR8("smoochie_attack_heart");
|
||||||
Dqn_String8 smoochie_death = DQN_STRING8("smoochie_death");
|
Dqn_Str8 smoochie_death = DQN_STR8("smoochie_death");
|
||||||
|
|
||||||
Dqn_String8 terry_attack_up = DQN_STRING8("terry_attack_up");
|
Dqn_Str8 terry_attack_up = DQN_STR8("terry_attack_up");
|
||||||
Dqn_String8 terry_attack_side = DQN_STRING8("terry_attack_side");
|
Dqn_Str8 terry_attack_side = DQN_STR8("terry_attack_side");
|
||||||
Dqn_String8 terry_attack_down = DQN_STRING8("terry_attack_down");
|
Dqn_Str8 terry_attack_down = DQN_STR8("terry_attack_down");
|
||||||
Dqn_String8 terry_attack_phone_up = DQN_STRING8("terry_attack_phone_up");
|
Dqn_Str8 terry_attack_phone_up = DQN_STR8("terry_attack_phone_up");
|
||||||
Dqn_String8 terry_attack_phone_side = DQN_STRING8("terry_attack_phone_side");
|
Dqn_Str8 terry_attack_phone_side = DQN_STR8("terry_attack_phone_side");
|
||||||
Dqn_String8 terry_attack_phone_down = DQN_STRING8("terry_attack_phone_down");
|
Dqn_Str8 terry_attack_phone_down = DQN_STR8("terry_attack_phone_down");
|
||||||
Dqn_String8 terry_attack_phone_message = DQN_STRING8("terry_attack_phone_message");
|
Dqn_Str8 terry_attack_phone_message = DQN_STR8("terry_attack_phone_message");
|
||||||
Dqn_String8 terry_death = DQN_STRING8("terry_death");
|
Dqn_Str8 terry_death = DQN_STR8("terry_death");
|
||||||
Dqn_String8 terry_pat_dog = DQN_STRING8("terry_pat_dog");
|
Dqn_Str8 terry_pat_dog = DQN_STR8("terry_pat_dog");
|
||||||
Dqn_String8 terry_ghost = DQN_STRING8("terry_ghost");
|
Dqn_Str8 terry_ghost = DQN_STR8("terry_ghost");
|
||||||
Dqn_String8 terry_walk_idle = DQN_STRING8("terry_walk_idle");
|
Dqn_Str8 terry_walk_idle = DQN_STR8("terry_walk_idle");
|
||||||
Dqn_String8 terry_walk_up = DQN_STRING8("terry_walk_up");
|
Dqn_Str8 terry_walk_up = DQN_STR8("terry_walk_up");
|
||||||
Dqn_String8 terry_walk_down = DQN_STRING8("terry_walk_down");
|
Dqn_Str8 terry_walk_down = DQN_STR8("terry_walk_down");
|
||||||
Dqn_String8 terry_walk_left = DQN_STRING8("terry_walk_left");
|
Dqn_Str8 terry_walk_left = DQN_STR8("terry_walk_left");
|
||||||
Dqn_String8 terry_walk_right = DQN_STRING8("terry_walk_right");
|
Dqn_Str8 terry_walk_right = DQN_STR8("terry_walk_right");
|
||||||
|
|
||||||
Dqn_String8 perry_attack_up = DQN_STRING8("perry_attack_up");
|
Dqn_Str8 perry_attack_up = DQN_STR8("perry_attack_up");
|
||||||
Dqn_String8 perry_attack_side = DQN_STRING8("perry_attack_side");
|
Dqn_Str8 perry_attack_side = DQN_STR8("perry_attack_side");
|
||||||
Dqn_String8 perry_attack_down = DQN_STRING8("perry_attack_down");
|
Dqn_Str8 perry_attack_down = DQN_STR8("perry_attack_down");
|
||||||
Dqn_String8 perry_attack_phone_up = DQN_STRING8("perry_attack_phone_up");
|
Dqn_Str8 perry_attack_phone_up = DQN_STR8("perry_attack_phone_up");
|
||||||
Dqn_String8 perry_attack_phone_side = DQN_STRING8("perry_attack_phone_side");
|
Dqn_Str8 perry_attack_phone_side = DQN_STR8("perry_attack_phone_side");
|
||||||
Dqn_String8 perry_attack_phone_down = DQN_STRING8("perry_attack_phone_down");
|
Dqn_Str8 perry_attack_phone_down = DQN_STR8("perry_attack_phone_down");
|
||||||
Dqn_String8 perry_death = DQN_STRING8("perry_death");
|
Dqn_Str8 perry_death = DQN_STR8("perry_death");
|
||||||
Dqn_String8 perry_pat_dog = DQN_STRING8("perry_pat_dog");
|
Dqn_Str8 perry_pat_dog = DQN_STR8("perry_pat_dog");
|
||||||
Dqn_String8 perry_ghost = DQN_STRING8("perry_ghost");
|
Dqn_Str8 perry_ghost = DQN_STR8("perry_ghost");
|
||||||
Dqn_String8 perry_walk_idle = DQN_STRING8("perry_walk_idle");
|
Dqn_Str8 perry_walk_idle = DQN_STR8("perry_walk_idle");
|
||||||
Dqn_String8 perry_walk_up = DQN_STRING8("perry_walk_up");
|
Dqn_Str8 perry_walk_up = DQN_STR8("perry_walk_up");
|
||||||
Dqn_String8 perry_walk_down = DQN_STRING8("perry_walk_down");
|
Dqn_Str8 perry_walk_down = DQN_STR8("perry_walk_down");
|
||||||
Dqn_String8 perry_walk_right = DQN_STRING8("perry_walk_right");
|
Dqn_Str8 perry_walk_right = DQN_STR8("perry_walk_right");
|
||||||
}
|
}
|
||||||
g_anim_names;
|
g_anim_names;
|
||||||
|
|
||||||
struct FP_ParticleDescriptor
|
struct FP_ParticleDescriptor
|
||||||
{
|
{
|
||||||
Dqn_String8 anim_name;
|
Dqn_Str8 anim_name;
|
||||||
Dqn_V2 pos;
|
Dqn_V2 pos;
|
||||||
Dqn_V2 velocity;
|
Dqn_V2 velocity;
|
||||||
Dqn_V2 velocity_variance;
|
Dqn_V2 velocity_variance;
|
||||||
|
@ -12,15 +12,15 @@
|
|||||||
void RebuildProgramIfRequired(int argc, char const **argv)
|
void RebuildProgramIfRequired(int argc, char const **argv)
|
||||||
{
|
{
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
Dqn_String8 const exe_dir = Dqn_OS_EXEDir(scratch.arena);
|
Dqn_Str8 const exe_dir = Dqn_OS_EXEDir(scratch.arena);
|
||||||
Dqn_String8 build_program_path = Dqn_OS_EXEPath(scratch.arena);
|
Dqn_Str8 build_program_path = Dqn_OS_EXEPath(scratch.arena);
|
||||||
Dqn_FsInfo build_program_info = Dqn_Fs_GetInfo(build_program_path);
|
Dqn_FsInfo build_program_info = Dqn_Fs_GetInfo(build_program_path);
|
||||||
Dqn_FsInfo source_path = Dqn_Fs_GetInfo(Dqn_String8_InitCString8(__FILE__));
|
Dqn_FsInfo source_path = Dqn_Fs_GetInfo(Dqn_Str8_InitCStr8(__FILE__));
|
||||||
|
|
||||||
if (!build_program_info.exists) {
|
if (!build_program_info.exists) {
|
||||||
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
||||||
Dqn_Log_WarningF("Failed to get the last write time of the build program '%.*s', skipping rebuild (%d): %.*s",
|
Dqn_Log_WarningF("Failed to get the last write time of the build program '%.*s', skipping rebuild (%d): %.*s",
|
||||||
DQN_STRING_FMT(build_program_path), error.code, DQN_STRING_FMT(error.msg));
|
DQN_STR_FMT(build_program_path), error.code, DQN_STR_FMT(error.msg));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ void RebuildProgramIfRequired(int argc, char const **argv)
|
|||||||
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
||||||
Dqn_Log_WarningF(
|
Dqn_Log_WarningF(
|
||||||
"Failed to get the last write time of the build program's source code '%s', skipping rebuild (%d): %.*s",
|
"Failed to get the last write time of the build program's source code '%s', skipping rebuild (%d): %.*s",
|
||||||
__FILE__, error.code, DQN_STRING_FMT(error.msg));
|
__FILE__, error.code, DQN_STR_FMT(error.msg));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,19 +41,19 @@ void RebuildProgramIfRequired(int argc, char const **argv)
|
|||||||
source_path.last_write_time_in_s,
|
source_path.last_write_time_in_s,
|
||||||
build_program_info.last_write_time_in_s);
|
build_program_info.last_write_time_in_s);
|
||||||
|
|
||||||
Dqn_String8 temp_build_program_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s.old", DQN_STRING_FMT(build_program_path));
|
Dqn_Str8 temp_build_program_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s.old", DQN_STR_FMT(build_program_path));
|
||||||
if (!Dqn_Fs_Move(build_program_path, temp_build_program_path, true)) {
|
if (!Dqn_Fs_Move(build_program_path, temp_build_program_path, true)) {
|
||||||
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
||||||
Dqn_Log_WarningF("Failed to backup the build program for rebuilding, skipping rebuild (%d): %.*s", error.code, DQN_STRING_FMT(error.msg));
|
Dqn_Log_WarningF("Failed to backup the build program for rebuilding, skipping rebuild (%d): %.*s", error.code, DQN_STR_FMT(error.msg));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Rebuild the build program because a change was detected ===============
|
// NOTE: Rebuild the build program because a change was detected ===============
|
||||||
Dqn_String8 rebuild_cmd = Dqn_String8_InitF(scratch.allocator, "cl /Z7 /W4 /nologo %s /incremental:no /link", __FILE__);
|
Dqn_Str8 rebuild_cmd = Dqn_Str8_InitF(scratch.allocator, "cl /Z7 /W4 /nologo %s /incremental:no /link", __FILE__);
|
||||||
Dqn_OSExecResult rebuild_result = Dqn_OS_Exec(rebuild_cmd, exe_dir /*working_dir*/);
|
Dqn_OSExecResult rebuild_result = Dqn_OS_Exec(rebuild_cmd, exe_dir /*working_dir*/);
|
||||||
if (rebuild_result.os_error_code) {
|
if (rebuild_result.os_error_code) {
|
||||||
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
||||||
Dqn_Log_ErrorF("Detected change in the build program's source code '%s' but the OS failed to rebuild the program, skipping rebuild (%d): %.*s", __FILE__, error.code, DQN_STRING_FMT(error.msg));
|
Dqn_Log_ErrorF("Detected change in the build program's source code '%s' but the OS failed to rebuild the program, skipping rebuild (%d): %.*s", __FILE__, error.code, DQN_STR_FMT(error.msg));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,16 +62,16 @@ void RebuildProgramIfRequired(int argc, char const **argv)
|
|||||||
exit(rebuild_result.exit_code);
|
exit(rebuild_result.exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
Dqn_String8Builder builder = {};
|
Dqn_Str8Builder builder = {};
|
||||||
builder.allocator = scratch.allocator;
|
builder.allocator = scratch.allocator;
|
||||||
DQN_FOR_UINDEX (arg_index, argc)
|
DQN_FOR_UINDEX (arg_index, argc)
|
||||||
Dqn_String8Builder_AppendF(&builder, "%s%s", arg_index ? " " : "", argv[arg_index]);
|
Dqn_Str8Builder_AppendF(&builder, "%s%s", arg_index ? " " : "", argv[arg_index]);
|
||||||
|
|
||||||
Dqn_String8 rebootstrap_cmd = Dqn_String8Builder_Build(&builder, scratch.allocator);
|
Dqn_Str8 rebootstrap_cmd = Dqn_Str8Builder_Build(&builder, scratch.allocator);
|
||||||
Dqn_OSExecResult exec_result = Dqn_OS_Exec(rebootstrap_cmd, exe_dir /*working_dir*/);
|
Dqn_OSExecResult exec_result = Dqn_OS_Exec(rebootstrap_cmd, exe_dir /*working_dir*/);
|
||||||
if (exec_result.os_error_code) {
|
if (exec_result.os_error_code) {
|
||||||
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
Dqn_WinError error = Dqn_Win_LastError(scratch.arena);
|
||||||
Dqn_Log_ErrorF("Detected change in the build program's source code '%s' but the OS failed to rebuild the program, skipping rebuild (%d): %.*s", __FILE__, error.code, DQN_STRING_FMT(error.msg));
|
Dqn_Log_ErrorF("Detected change in the build program's source code '%s' but the OS failed to rebuild the program, skipping rebuild (%d): %.*s", __FILE__, error.code, DQN_STR_FMT(error.msg));
|
||||||
Dqn_Fs_Move(temp_build_program_path, build_program_path, true);
|
Dqn_Fs_Move(temp_build_program_path, build_program_path, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -88,13 +88,13 @@ int main(int argc, char const **argv)
|
|||||||
bool dry_run = false;
|
bool dry_run = false;
|
||||||
bool target_web = false;
|
bool target_web = false;
|
||||||
for (Dqn_usize arg_index = 1; arg_index < argc; arg_index++) {
|
for (Dqn_usize arg_index = 1; arg_index < argc; arg_index++) {
|
||||||
Dqn_String8 arg = Dqn_String8_InitCString8(argv[arg_index]);
|
Dqn_Str8 arg = Dqn_Str8_InitCStr8(argv[arg_index]);
|
||||||
if (arg == DQN_STRING8("--help")) {
|
if (arg == DQN_STR8("--help")) {
|
||||||
PRINT_HELP;
|
PRINT_HELP;
|
||||||
return 0;
|
return 0;
|
||||||
} else if (arg == DQN_STRING8("--dry-run")) {
|
} else if (arg == DQN_STR8("--dry-run")) {
|
||||||
dry_run = true;
|
dry_run = true;
|
||||||
} else if (arg == DQN_STRING8("--web")) {
|
} else if (arg == DQN_STR8("--web")) {
|
||||||
target_web = true;
|
target_web = true;
|
||||||
} else {
|
} else {
|
||||||
PRINT_HELP;
|
PRINT_HELP;
|
||||||
@ -111,23 +111,23 @@ int main(int argc, char const **argv)
|
|||||||
uint64_t build_timings[2] = {};
|
uint64_t build_timings[2] = {};
|
||||||
build_timings[0] = Dqn_OS_PerfCounterNow();
|
build_timings[0] = Dqn_OS_PerfCounterNow();
|
||||||
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
Dqn_ThreadScratch scratch = Dqn_Thread_GetScratch(nullptr);
|
||||||
Dqn_String8 const exe_dir = Dqn_OS_EXEDir(scratch.arena);
|
Dqn_Str8 const exe_dir = Dqn_OS_EXEDir(scratch.arena);
|
||||||
Dqn_String8 const code_dir = exe_dir;
|
Dqn_Str8 const code_dir = exe_dir;
|
||||||
Dqn_String8 const build_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/Build", DQN_STRING_FMT(exe_dir));
|
Dqn_Str8 const build_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/Build", DQN_STR_FMT(exe_dir));
|
||||||
Dqn_String8 const tely_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/tely", DQN_STRING_FMT(exe_dir));
|
Dqn_Str8 const tely_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/tely", DQN_STR_FMT(exe_dir));
|
||||||
|
|
||||||
Dqn_Slice<Dqn_String8> common_compile_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
Dqn_Slice<Dqn_Str8> common_compile_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
DQN_STRING8("cl"),
|
DQN_STR8("cl"),
|
||||||
DQN_STRING8("/W4"),
|
DQN_STR8("/W4"),
|
||||||
DQN_STRING8("/Z7"),
|
DQN_STR8("/Z7"),
|
||||||
DQN_STRING8("/MT"),
|
DQN_STR8("/MT"),
|
||||||
DQN_STRING8("/EHsc"),
|
DQN_STR8("/EHsc"),
|
||||||
DQN_STRING8("/nologo"),
|
DQN_STR8("/nologo"),
|
||||||
});
|
});
|
||||||
|
|
||||||
Dqn_Slice<Dqn_String8> common_link_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
Dqn_Slice<Dqn_Str8> common_link_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
DQN_STRING8("/link"),
|
DQN_STR8("/link"),
|
||||||
DQN_STRING8("/incremental:no"),
|
DQN_STR8("/incremental:no"),
|
||||||
});
|
});
|
||||||
|
|
||||||
// NOTE: Assets ================================================================================
|
// NOTE: Assets ================================================================================
|
||||||
@ -135,33 +135,33 @@ int main(int argc, char const **argv)
|
|||||||
{
|
{
|
||||||
robocopy_timings[0] = Dqn_OS_PerfCounterNow();
|
robocopy_timings[0] = Dqn_OS_PerfCounterNow();
|
||||||
DQN_DEFER { robocopy_timings[1] = Dqn_OS_PerfCounterNow(); };
|
DQN_DEFER { robocopy_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||||
Dqn_String8 robocopy_cmd[] = {
|
Dqn_Str8 robocopy_cmd[] = {
|
||||||
Dqn_String8_InitF(scratch.allocator, "robocopy /NJH /NJS /NDL /NP %.*s\\Data\\Textures %.*s\\Data\\Textures atlas.*", DQN_STRING_FMT(exe_dir), DQN_STRING_FMT(build_dir)),
|
Dqn_Str8_InitF(scratch.allocator, "robocopy /NJH /NJS /NDL /NP %.*s\\Data\\Textures %.*s\\Data\\Textures atlas.*", DQN_STR_FMT(exe_dir), DQN_STR_FMT(build_dir)),
|
||||||
Dqn_String8_InitF(scratch.allocator, "robocopy /MIR /NJH /NJS /NDL /NP %.*s\\Data\\Fonts %.*s\\Data\\Fonts", DQN_STRING_FMT(exe_dir), DQN_STRING_FMT(build_dir)),
|
Dqn_Str8_InitF(scratch.allocator, "robocopy /MIR /NJH /NJS /NDL /NP %.*s\\Data\\Fonts %.*s\\Data\\Fonts", DQN_STR_FMT(exe_dir), DQN_STR_FMT(build_dir)),
|
||||||
Dqn_String8_InitF(scratch.allocator, "robocopy /MIR /NJH /NJS /NDL /NP %.*s\\Data\\Audio %.*s\\Data\\Audio", DQN_STRING_FMT(exe_dir), DQN_STRING_FMT(build_dir)),
|
Dqn_Str8_InitF(scratch.allocator, "robocopy /MIR /NJH /NJS /NDL /NP %.*s\\Data\\Audio %.*s\\Data\\Audio", DQN_STR_FMT(exe_dir), DQN_STR_FMT(build_dir)),
|
||||||
};
|
};
|
||||||
|
|
||||||
for (Dqn_String8 cmd : robocopy_cmd) {
|
for (Dqn_Str8 cmd : robocopy_cmd) {
|
||||||
if (dry_run)
|
if (dry_run)
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
else
|
else
|
||||||
Dqn_OS_Exec(cmd, /*working_dir*/ {});
|
Dqn_OS_Exec(cmd, /*working_dir*/ {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Raylib ================================================================================
|
// NOTE: Raylib ================================================================================
|
||||||
Dqn_String8 const raylib_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/tely/external/raylib", DQN_STRING_FMT(exe_dir));
|
Dqn_Str8 const raylib_dir = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/tely/external/raylib", DQN_STR_FMT(exe_dir));
|
||||||
Dqn_Slice<Dqn_String8> const raylib_base_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
Dqn_Slice<Dqn_Str8> const raylib_base_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rcore.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rcore.c", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/utils.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/utils.c", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/raudio.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/raudio.c", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rmodels.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rmodels.c", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rtext.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rtext.c", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rtextures.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rtextures.c", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rshapes.c", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rshapes.c", DQN_STR_FMT(raylib_dir)),
|
||||||
});
|
});
|
||||||
|
|
||||||
Dqn_List<Dqn_String8> raylib_pc_output_files = Dqn_List_Init<Dqn_String8>(scratch.arena, 16);
|
Dqn_List<Dqn_Str8> raylib_pc_output_files = Dqn_List_Init<Dqn_Str8>(scratch.arena, 16);
|
||||||
uint64_t raylib_pc_timings[2] = {};
|
uint64_t raylib_pc_timings[2] = {};
|
||||||
{
|
{
|
||||||
raylib_pc_timings[0] = Dqn_OS_PerfCounterNow();
|
raylib_pc_timings[0] = Dqn_OS_PerfCounterNow();
|
||||||
@ -171,39 +171,39 @@ int main(int argc, char const **argv)
|
|||||||
Dqn_CPPBuildContext build_context = {};
|
Dqn_CPPBuildContext build_context = {};
|
||||||
{
|
{
|
||||||
build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/external/glfw/include", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/external/glfw/include", DQN_STR_FMT(raylib_dir)),
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/glfw/deps/mingw", DQN_STRING_FMT(raylib_dir)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/glfw/deps/mingw", DQN_STR_FMT(raylib_dir)),
|
||||||
});
|
});
|
||||||
|
|
||||||
build_context.compile_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
build_context.compile_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
DQN_STRING8("cl"),
|
DQN_STR8("cl"),
|
||||||
DQN_STRING8("/w"),
|
DQN_STR8("/w"),
|
||||||
DQN_STRING8("/c"),
|
DQN_STR8("/c"),
|
||||||
DQN_STRING8("/D _DEFAULT_SOURCE"),
|
DQN_STR8("/D _DEFAULT_SOURCE"),
|
||||||
DQN_STRING8("/D PLATFORM_DESKTOP"),
|
DQN_STR8("/D PLATFORM_DESKTOP"),
|
||||||
DQN_STRING8("/Z7"),
|
DQN_STR8("/Z7"),
|
||||||
DQN_STRING8("/MT"),
|
DQN_STR8("/MT"),
|
||||||
DQN_STRING8("/EHsc"),
|
DQN_STR8("/EHsc"),
|
||||||
DQN_STRING8("/nologo"),
|
DQN_STR8("/nologo"),
|
||||||
});
|
});
|
||||||
build_context.build_dir = build_dir;
|
build_context.build_dir = build_dir;
|
||||||
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Compile each file separately with a custom output name ============================
|
// NOTE: Compile each file separately with a custom output name ============================
|
||||||
for (Dqn_String8 base_file : raylib_base_files) {
|
for (Dqn_Str8 base_file : raylib_base_files) {
|
||||||
Dqn_String8 file_stem = Dqn_String8_FileNameNoExtension(base_file);
|
Dqn_Str8 file_stem = Dqn_Str8_FileNameNoExtension(base_file);
|
||||||
|
|
||||||
Dqn_CPPBuildCompileFile build_file = {};
|
Dqn_CPPBuildCompileFile build_file = {};
|
||||||
build_file.input_file_path = base_file;
|
build_file.input_file_path = base_file;
|
||||||
build_file.output_file_path = Dqn_String8_InitF(scratch.allocator, "raylib_%.*s.obj", DQN_STRING_FMT(file_stem));
|
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_%.*s.obj", DQN_STR_FMT(file_stem));
|
||||||
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {build_file});
|
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {build_file});
|
||||||
Dqn_List_Add(&raylib_pc_output_files, build_file.output_file_path);
|
Dqn_List_Add(&raylib_pc_output_files, build_file.output_file_path);
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
||||||
}
|
}
|
||||||
@ -212,14 +212,14 @@ int main(int argc, char const **argv)
|
|||||||
// NOTE: Build rlgfw =======================================================================
|
// NOTE: Build rlgfw =======================================================================
|
||||||
{
|
{
|
||||||
Dqn_CPPBuildCompileFile build_file = {};
|
Dqn_CPPBuildCompileFile build_file = {};
|
||||||
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rglfw.c", DQN_STRING_FMT(raylib_dir));
|
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/rglfw.c", DQN_STR_FMT(raylib_dir));
|
||||||
build_file.output_file_path = Dqn_String8_InitF(scratch.allocator, "raylib_rglfw.obj");
|
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_rglfw.obj");
|
||||||
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {build_file});
|
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {build_file});
|
||||||
Dqn_List_Add(&raylib_pc_output_files, build_file.output_file_path);
|
Dqn_List_Add(&raylib_pc_output_files, build_file.output_file_path);
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
||||||
}
|
}
|
||||||
@ -235,17 +235,17 @@ int main(int argc, char const **argv)
|
|||||||
Dqn_CPPBuildContext build_context = {};
|
Dqn_CPPBuildContext build_context = {};
|
||||||
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
||||||
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
Dqn_CPPBuildCompileFile{{}, Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/qoiconv.c", DQN_STRING_FMT(code_dir)) },
|
Dqn_CPPBuildCompileFile{{}, Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/qoiconv.c", DQN_STR_FMT(code_dir)) },
|
||||||
});
|
});
|
||||||
|
|
||||||
build_context.compile_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STRING8("cl"), DQN_STRING8("-O2"), DQN_STRING8("-MT"), DQN_STRING8("/nologo")});
|
build_context.compile_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STR8("cl"), DQN_STR8("-O2"), DQN_STR8("-MT"), DQN_STR8("/nologo")});
|
||||||
build_context.link_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STRING8("/link"), DQN_STRING8("/incremental:no")});
|
build_context.link_flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STR8("/link"), DQN_STR8("/incremental:no")});
|
||||||
build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/stb", DQN_STRING_FMT(tely_dir))});
|
build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {Dqn_FsPath_ConvertF(scratch.arena, "%.*s/External/stb", DQN_STR_FMT(tely_dir))});
|
||||||
build_context.build_dir = build_dir;
|
build_context.build_dir = build_dir;
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
||||||
}
|
}
|
||||||
@ -260,7 +260,7 @@ int main(int argc, char const **argv)
|
|||||||
Dqn_CPPBuildContext build_context = {};
|
Dqn_CPPBuildContext build_context = {};
|
||||||
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
||||||
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
Dqn_CPPBuildCompileFile{{}, Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_sprite_packer.cpp", DQN_STRING_FMT(code_dir)) },
|
Dqn_CPPBuildCompileFile{{}, Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_sprite_packer.cpp", DQN_STR_FMT(code_dir)) },
|
||||||
});
|
});
|
||||||
|
|
||||||
build_context.compile_flags = common_compile_flags;
|
build_context.compile_flags = common_compile_flags;
|
||||||
@ -268,8 +268,8 @@ int main(int argc, char const **argv)
|
|||||||
build_context.build_dir = build_dir;
|
build_context.build_dir = build_dir;
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
||||||
}
|
}
|
||||||
@ -283,8 +283,8 @@ int main(int argc, char const **argv)
|
|||||||
DQN_DEFER { feely_pona_no_dll_timings[1] = Dqn_OS_PerfCounterNow(); };
|
DQN_DEFER { feely_pona_no_dll_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||||
|
|
||||||
Dqn_CPPBuildCompileFile build_file = {};
|
Dqn_CPPBuildCompileFile build_file = {};
|
||||||
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity_nodll.h", DQN_STRING_FMT(code_dir));
|
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity_nodll.h", DQN_STR_FMT(code_dir));
|
||||||
build_file.flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STRING8("/Tp")});
|
build_file.flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STR8("/Tp")});
|
||||||
feely_pona_no_dll_build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
feely_pona_no_dll_build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
||||||
feely_pona_no_dll_build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {build_file});
|
feely_pona_no_dll_build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {build_file});
|
||||||
feely_pona_no_dll_build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {raylib_dir});
|
feely_pona_no_dll_build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {raylib_dir});
|
||||||
@ -292,21 +292,21 @@ int main(int argc, char const **argv)
|
|||||||
feely_pona_no_dll_build_context.build_dir = build_dir;
|
feely_pona_no_dll_build_context.build_dir = build_dir;
|
||||||
|
|
||||||
// NOTE: Link to raylib object files and windows libs ======================================
|
// NOTE: Link to raylib object files and windows libs ======================================
|
||||||
Dqn_List<Dqn_String8> link_flags = Dqn_List_InitSliceCopy(scratch.arena, 128, common_link_flags);
|
Dqn_List<Dqn_Str8> link_flags = Dqn_List_InitSliceCopy(scratch.arena, 128, common_link_flags);
|
||||||
{
|
{
|
||||||
for (Dqn_ListIterator<Dqn_String8> it = {}; Dqn_List_Iterate(&raylib_pc_output_files, &it, 0); )
|
for (Dqn_ListIterator<Dqn_Str8> it = {}; Dqn_List_Iterate(&raylib_pc_output_files, &it, 0); )
|
||||||
Dqn_List_Add(&link_flags, *it.data);
|
Dqn_List_Add(&link_flags, *it.data);
|
||||||
Dqn_List_Add(&link_flags, DQN_STRING8("gdi32.lib"));
|
Dqn_List_Add(&link_flags, DQN_STR8("gdi32.lib"));
|
||||||
Dqn_List_Add(&link_flags, DQN_STRING8("opengl32.lib"));
|
Dqn_List_Add(&link_flags, DQN_STR8("opengl32.lib"));
|
||||||
Dqn_List_Add(&link_flags, DQN_STRING8("winmm.lib"));
|
Dqn_List_Add(&link_flags, DQN_STR8("winmm.lib"));
|
||||||
Dqn_List_Add(&link_flags, DQN_STRING8("user32.lib"));
|
Dqn_List_Add(&link_flags, DQN_STR8("user32.lib"));
|
||||||
Dqn_List_Add(&link_flags, DQN_STRING8("shell32.lib"));
|
Dqn_List_Add(&link_flags, DQN_STR8("shell32.lib"));
|
||||||
}
|
}
|
||||||
feely_pona_no_dll_build_context.link_flags = Dqn_List_ToSliceCopy(&link_flags, scratch.arena);
|
feely_pona_no_dll_build_context.link_flags = Dqn_List_ToSliceCopy(&link_flags, scratch.arena);
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(feely_pona_no_dll_build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(feely_pona_no_dll_build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(feely_pona_no_dll_build_context, Dqn_CPPBuildMode_AlwaysRebuild);
|
Dqn_CPPBuild_ExecOrAbort(feely_pona_no_dll_build_context, Dqn_CPPBuildMode_AlwaysRebuild);
|
||||||
}
|
}
|
||||||
@ -319,13 +319,13 @@ int main(int argc, char const **argv)
|
|||||||
DQN_DEFER { feely_pona_dll_timings[1] = Dqn_OS_PerfCounterNow(); };
|
DQN_DEFER { feely_pona_dll_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||||
|
|
||||||
Dqn_CPPBuildCompileFile build_file = {};
|
Dqn_CPPBuildCompileFile build_file = {};
|
||||||
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity.h", DQN_STRING_FMT(code_dir));
|
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity.h", DQN_STR_FMT(code_dir));
|
||||||
build_file.output_file_path = Dqn_FsPath_ConvertF(scratch.arena, "tely_dll_msvc", DQN_STRING_FMT(code_dir));
|
build_file.output_file_path = Dqn_FsPath_ConvertF(scratch.arena, "tely_dll_msvc", DQN_STR_FMT(code_dir));
|
||||||
build_file.flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STRING8("/Tp")});
|
build_file.flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STR8("/Tp")});
|
||||||
|
|
||||||
Dqn_List<Dqn_String8> compile_flags = Dqn_List_InitSliceCopy(scratch.arena, 128, common_compile_flags);
|
Dqn_List<Dqn_Str8> compile_flags = Dqn_List_InitSliceCopy(scratch.arena, 128, common_compile_flags);
|
||||||
Dqn_List_Add(&compile_flags, DQN_STRING8("/LD"));
|
Dqn_List_Add(&compile_flags, DQN_STR8("/LD"));
|
||||||
Dqn_List_Add(&compile_flags, DQN_STRING8("/Fetely_dll_msvc"));
|
Dqn_List_Add(&compile_flags, DQN_STR8("/Fetely_dll_msvc"));
|
||||||
|
|
||||||
Dqn_CPPBuildContext build_context = {};
|
Dqn_CPPBuildContext build_context = {};
|
||||||
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
||||||
@ -335,8 +335,8 @@ int main(int argc, char const **argv)
|
|||||||
build_context.build_dir = build_dir;
|
build_context.build_dir = build_dir;
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_AlwaysRebuild);
|
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_AlwaysRebuild);
|
||||||
}
|
}
|
||||||
@ -349,12 +349,12 @@ int main(int argc, char const **argv)
|
|||||||
DQN_DEFER { feely_pona_platform_timings[1] = Dqn_OS_PerfCounterNow(); };
|
DQN_DEFER { feely_pona_platform_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||||
|
|
||||||
Dqn_CPPBuildCompileFile build_file = {};
|
Dqn_CPPBuildCompileFile build_file = {};
|
||||||
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/tely_platform_raylib_unity.h", DQN_STRING_FMT(tely_dir));
|
build_file.input_file_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/tely_platform_raylib_unity.h", DQN_STR_FMT(tely_dir));
|
||||||
build_file.output_file_path = Dqn_FsPath_ConvertF(scratch.arena, "feely_pona_msvc", DQN_STRING_FMT(code_dir));
|
build_file.output_file_path = Dqn_FsPath_ConvertF(scratch.arena, "feely_pona_msvc", DQN_STR_FMT(code_dir));
|
||||||
build_file.flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STRING8("/Tp")});
|
build_file.flags = Dqn_Slice_InitCArrayCopy(scratch.arena, {DQN_STR8("/Tp")});
|
||||||
|
|
||||||
Dqn_List<Dqn_String8> compile_flags = Dqn_List_InitSliceCopy(scratch.arena, 128, common_compile_flags);
|
Dqn_List<Dqn_Str8> compile_flags = Dqn_List_InitSliceCopy(scratch.arena, 128, common_compile_flags);
|
||||||
Dqn_List_Add(&compile_flags, DQN_STRING8("/Fefeely_pona_msvc"));
|
Dqn_List_Add(&compile_flags, DQN_STR8("/Fefeely_pona_msvc"));
|
||||||
|
|
||||||
Dqn_CPPBuildContext build_context = {};
|
Dqn_CPPBuildContext build_context = {};
|
||||||
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
build_context.compiler = Dqn_CPPBuildCompiler_MSVC;
|
||||||
@ -365,10 +365,10 @@ int main(int argc, char const **argv)
|
|||||||
build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {raylib_dir});
|
build_context.include_dirs = Dqn_Slice_InitCArrayCopy(scratch.arena, {raylib_dir});
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_String8 exe_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_msvc.exe", DQN_STRING_FMT(build_dir));
|
Dqn_Str8 exe_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_msvc.exe", DQN_STR_FMT(build_dir));
|
||||||
bool exe_is_locked = false;
|
bool exe_is_locked = false;
|
||||||
if (Dqn_Fs_Exists(exe_path)) {
|
if (Dqn_Fs_Exists(exe_path)) {
|
||||||
Dqn_FsFile exe_file = Dqn_Fs_OpenFile(exe_path, Dqn_FsFileOpen_OpenIfExist, Dqn_FsFileAccess_Read | Dqn_FsFileAccess_Write);
|
Dqn_FsFile exe_file = Dqn_Fs_OpenFile(exe_path, Dqn_FsFileOpen_OpenIfExist, Dqn_FsFileAccess_Read | Dqn_FsFileAccess_Write);
|
||||||
@ -386,21 +386,21 @@ int main(int argc, char const **argv)
|
|||||||
uint64_t raylib_emscripten_timings[2] = {};
|
uint64_t raylib_emscripten_timings[2] = {};
|
||||||
uint64_t feely_pona_emscripten_timings[2] = {};
|
uint64_t feely_pona_emscripten_timings[2] = {};
|
||||||
if (target_web) {
|
if (target_web) {
|
||||||
Dqn_String8 const raylib_emscripten_lib_name = DQN_STRING8("raylib_emscripten.a");
|
Dqn_Str8 const raylib_emscripten_lib_name = DQN_STR8("raylib_emscripten.a");
|
||||||
bool debug_build = false;
|
bool debug_build = false;
|
||||||
|
|
||||||
Dqn_List<Dqn_String8> build_specific_compile_flags = {};
|
Dqn_List<Dqn_Str8> build_specific_compile_flags = {};
|
||||||
if (debug_build) {
|
if (debug_build) {
|
||||||
build_specific_compile_flags = Dqn_List_InitCArrayCopy<Dqn_String8>(scratch.arena, 32, {
|
build_specific_compile_flags = Dqn_List_InitCArrayCopy<Dqn_Str8>(scratch.arena, 32, {
|
||||||
DQN_STRING8("-s"), DQN_STRING8("ASSERTIONS=2"),
|
DQN_STR8("-s"), DQN_STR8("ASSERTIONS=2"),
|
||||||
DQN_STRING8("-s"), DQN_STRING8("SAFE_HEAP=0"),
|
DQN_STR8("-s"), DQN_STR8("SAFE_HEAP=0"),
|
||||||
DQN_STRING8("-s"), DQN_STRING8("STACK_OVERFLOW_CHECK=2"),
|
DQN_STR8("-s"), DQN_STR8("STACK_OVERFLOW_CHECK=2"),
|
||||||
DQN_STRING8("--profiling-funcs"), // Expose function names in stack trace
|
DQN_STR8("--profiling-funcs"), // Expose function names in stack trace
|
||||||
DQN_STRING8("-g"), // Debug symbols
|
DQN_STR8("-g"), // Debug symbols
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
build_specific_compile_flags = Dqn_List_InitCArrayCopy<Dqn_String8>(scratch.arena, 32, {
|
build_specific_compile_flags = Dqn_List_InitCArrayCopy<Dqn_Str8>(scratch.arena, 32, {
|
||||||
DQN_STRING8("-Os"), // Optimise for size
|
DQN_STR8("-Os"), // Optimise for size
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,27 +410,27 @@ int main(int argc, char const **argv)
|
|||||||
DQN_DEFER { raylib_emscripten_timings[1] = Dqn_OS_PerfCounterNow(); };
|
DQN_DEFER { raylib_emscripten_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||||
|
|
||||||
// NOTE: Setup build context ===========================================================
|
// NOTE: Setup build context ===========================================================
|
||||||
Dqn_List<Dqn_String8> raylib_emscripten_output_files = Dqn_List_Init<Dqn_String8>(scratch.arena, 16);
|
Dqn_List<Dqn_Str8> raylib_emscripten_output_files = Dqn_List_Init<Dqn_Str8>(scratch.arena, 16);
|
||||||
Dqn_CPPBuildContext raylib_emscripten_build_context = {};
|
Dqn_CPPBuildContext raylib_emscripten_build_context = {};
|
||||||
raylib_emscripten_build_context.compiler = Dqn_CPPBuildCompiler_GCC;
|
raylib_emscripten_build_context.compiler = Dqn_CPPBuildCompiler_GCC;
|
||||||
|
|
||||||
for (Dqn_String8 base_file : raylib_base_files) {
|
for (Dqn_Str8 base_file : raylib_base_files) {
|
||||||
Dqn_String8 file_stem = Dqn_String8_FileNameNoExtension(base_file);
|
Dqn_Str8 file_stem = Dqn_Str8_FileNameNoExtension(base_file);
|
||||||
|
|
||||||
// NOTE: Append "emscripten" suffix to the object files
|
// NOTE: Append "emscripten" suffix to the object files
|
||||||
Dqn_CPPBuildCompileFile build_file = {};
|
Dqn_CPPBuildCompileFile build_file = {};
|
||||||
build_file.input_file_path = base_file;
|
build_file.input_file_path = base_file;
|
||||||
build_file.output_file_path = Dqn_String8_InitF(scratch.allocator, "raylib_%.*s_emscripten.o", DQN_STRING_FMT(file_stem));
|
build_file.output_file_path = Dqn_Str8_InitF(scratch.allocator, "raylib_%.*s_emscripten.o", DQN_STR_FMT(file_stem));
|
||||||
|
|
||||||
Dqn_List<Dqn_String8> compile_flags = Dqn_List_InitCArrayCopy(scratch.arena, 32, {
|
Dqn_List<Dqn_Str8> compile_flags = Dqn_List_InitCArrayCopy(scratch.arena, 32, {
|
||||||
DQN_STRING8("cmd"),
|
DQN_STR8("cmd"),
|
||||||
DQN_STRING8("/C"),
|
DQN_STR8("/C"),
|
||||||
DQN_STRING8("emcc.bat"),
|
DQN_STR8("emcc.bat"),
|
||||||
DQN_STRING8("-c"), // Compile and assemble, but do not link
|
DQN_STR8("-c"), // Compile and assemble, but do not link
|
||||||
DQN_STRING8("-Wall"),
|
DQN_STR8("-Wall"),
|
||||||
DQN_STRING8("-Os"), // Optimize for size
|
DQN_STR8("-Os"), // Optimize for size
|
||||||
DQN_STRING8("-D PLATFORM_WEB"),
|
DQN_STR8("-D PLATFORM_WEB"),
|
||||||
DQN_STRING8("-D GRAPHICS_API_OPENGL_ES2"),
|
DQN_STR8("-D GRAPHICS_API_OPENGL_ES2"),
|
||||||
});
|
});
|
||||||
Dqn_List_AddList(&compile_flags, build_specific_compile_flags);
|
Dqn_List_AddList(&compile_flags, build_specific_compile_flags);
|
||||||
|
|
||||||
@ -440,8 +440,8 @@ int main(int argc, char const **argv)
|
|||||||
Dqn_List_Add(&raylib_emscripten_output_files, build_file.output_file_path);
|
Dqn_List_Add(&raylib_emscripten_output_files, build_file.output_file_path);
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(raylib_emscripten_build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(raylib_emscripten_build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(raylib_emscripten_build_context, Dqn_CPPBuildMode_CacheBuild);
|
Dqn_CPPBuild_ExecOrAbort(raylib_emscripten_build_context, Dqn_CPPBuildMode_CacheBuild);
|
||||||
}
|
}
|
||||||
@ -449,16 +449,16 @@ int main(int argc, char const **argv)
|
|||||||
|
|
||||||
// NOTE: Build the wasm raylib library =================================================
|
// NOTE: Build the wasm raylib library =================================================
|
||||||
{
|
{
|
||||||
Dqn_String8Builder builder = {};
|
Dqn_Str8Builder builder = {};
|
||||||
builder.allocator = scratch.allocator;
|
builder.allocator = scratch.allocator;
|
||||||
Dqn_String8Builder_AppendF(&builder, "cmd /C emar.bat rcs %.*s", DQN_STRING_FMT(raylib_emscripten_lib_name));
|
Dqn_Str8Builder_AppendF(&builder, "cmd /C emar.bat rcs %.*s", DQN_STR_FMT(raylib_emscripten_lib_name));
|
||||||
|
|
||||||
for (Dqn_ListIterator<Dqn_String8> it = {}; Dqn_List_Iterate(&raylib_emscripten_output_files, &it, 0); )
|
for (Dqn_ListIterator<Dqn_Str8> it = {}; Dqn_List_Iterate(&raylib_emscripten_output_files, &it, 0); )
|
||||||
Dqn_String8Builder_AppendF(&builder, " %.*s", DQN_STRING_FMT(*it.data));
|
Dqn_Str8Builder_AppendF(&builder, " %.*s", DQN_STR_FMT(*it.data));
|
||||||
|
|
||||||
Dqn_String8 cmd = Dqn_String8Builder_Build(&builder, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_Str8Builder_Build(&builder, scratch.allocator);
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_OS_ExecOrAbort(cmd, build_dir);
|
Dqn_OS_ExecOrAbort(cmd, build_dir);
|
||||||
}
|
}
|
||||||
@ -471,44 +471,44 @@ int main(int argc, char const **argv)
|
|||||||
DQN_DEFER { feely_pona_emscripten_timings[1] = Dqn_OS_PerfCounterNow(); };
|
DQN_DEFER { feely_pona_emscripten_timings[1] = Dqn_OS_PerfCounterNow(); };
|
||||||
|
|
||||||
// NOTE: feely pona emscripten shell =======================================================
|
// NOTE: feely pona emscripten shell =======================================================
|
||||||
Dqn_String8 html_shell_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_emscripten_shell.html", DQN_STRING_FMT(build_dir));
|
Dqn_Str8 html_shell_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_emscripten_shell.html", DQN_STR_FMT(build_dir));
|
||||||
{
|
{
|
||||||
Dqn_String8 html_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_emscripten_shell.html", DQN_STRING_FMT(code_dir));
|
Dqn_Str8 html_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_emscripten_shell.html", DQN_STR_FMT(code_dir));
|
||||||
Dqn_String8 html_buffer = Dqn_Fs_Read(html_path, scratch.allocator);
|
Dqn_Str8 html_buffer = Dqn_Fs_Read(html_path, scratch.allocator);
|
||||||
if (!DQN_CHECKF(html_buffer.size,
|
if (!DQN_CHECKF(html_buffer.size,
|
||||||
"Failed to read Emscripten HTML shell file. The file at\n\n '%.*s'\n\ndoes not exist or is not readable",
|
"Failed to read Emscripten HTML shell file. The file at\n\n '%.*s'\n\ndoes not exist or is not readable",
|
||||||
DQN_STRING_FMT(html_path)))
|
DQN_STR_FMT(html_path)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
Dqn_String8 version_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_version.txt", DQN_STRING_FMT(code_dir));
|
Dqn_Str8 version_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_version.txt", DQN_STR_FMT(code_dir));
|
||||||
Dqn_String8 version_buffer = Dqn_Fs_Read(version_path, scratch.allocator);
|
Dqn_Str8 version_buffer = Dqn_Fs_Read(version_path, scratch.allocator);
|
||||||
Dqn_String8SplitAllocResult version_parts = Dqn_String8_SplitAlloc(scratch.allocator, version_buffer, DQN_STRING8("\n"));
|
Dqn_Str8SplitAllocResult version_parts = Dqn_Str8_SplitAlloc(scratch.allocator, version_buffer, DQN_STR8("\n"));
|
||||||
|
|
||||||
if (!DQN_CHECKF(version_parts.size == 3,
|
if (!DQN_CHECKF(version_parts.size == 3,
|
||||||
"Version file '%.*s' must have 3 lines containing, date, commit hash and number of commits. The buffer we tried extracting information from was\n\n%.*s\n\n",
|
"Version file '%.*s' must have 3 lines containing, date, commit hash and number of commits. The buffer we tried extracting information from was\n\n%.*s\n\n",
|
||||||
DQN_STRING_FMT(version_path),
|
DQN_STR_FMT(version_path),
|
||||||
DQN_STRING_FMT(version_buffer))) {
|
DQN_STR_FMT(version_buffer))) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dqn_String8 date = Dqn_String8_TrimWhitespaceAround(version_parts.data[0]);
|
Dqn_Str8 date = Dqn_Str8_TrimWhitespaceAround(version_parts.data[0]);
|
||||||
Dqn_String8 commit_hash = Dqn_String8_TrimWhitespaceAround(version_parts.data[1]);
|
Dqn_Str8 commit_hash = Dqn_Str8_TrimWhitespaceAround(version_parts.data[1]);
|
||||||
Dqn_String8 commit_count = Dqn_String8_TrimWhitespaceAround(version_parts.data[2]);
|
Dqn_Str8 commit_count = Dqn_Str8_TrimWhitespaceAround(version_parts.data[2]);
|
||||||
Dqn_String8 version_text = Dqn_String8_InitF(scratch.allocator,
|
Dqn_Str8 version_text = Dqn_Str8_InitF(scratch.allocator,
|
||||||
"%.*s edition rev. %.*s-%.*s",
|
"%.*s edition rev. %.*s-%.*s",
|
||||||
DQN_STRING_FMT(date),
|
DQN_STR_FMT(date),
|
||||||
DQN_STRING_FMT(commit_count),
|
DQN_STR_FMT(commit_count),
|
||||||
DQN_STRING_FMT(commit_hash));
|
DQN_STR_FMT(commit_hash));
|
||||||
|
|
||||||
Dqn_String8 html_buffer_processed = Dqn_String8_Replace(html_buffer,
|
Dqn_Str8 html_buffer_processed = Dqn_Str8_Replace(html_buffer,
|
||||||
DQN_STRING8("@version@"),
|
DQN_STR8("@version@"),
|
||||||
version_text,
|
version_text,
|
||||||
0 /*start_index*/,
|
0 /*start_index*/,
|
||||||
scratch.allocator);
|
scratch.allocator);
|
||||||
if (!DQN_CHECKF(Dqn_Fs_Write(html_shell_path,
|
if (!DQN_CHECKF(Dqn_Fs_Write(html_shell_path,
|
||||||
html_buffer_processed),
|
html_buffer_processed),
|
||||||
"Failed to write Emscripten HTML shell with the project version inserted into it. We were unable to write to the target location\n\n '%.*s'\n",
|
"Failed to write Emscripten HTML shell with the project version inserted into it. We were unable to write to the target location\n\n '%.*s'\n",
|
||||||
DQN_STRING_FMT(html_shell_path)))
|
DQN_STR_FMT(html_shell_path)))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,23 +516,23 @@ int main(int argc, char const **argv)
|
|||||||
Dqn_CPPBuildContext build_context = {};
|
Dqn_CPPBuildContext build_context = {};
|
||||||
build_context.compile_file_obj_suffix = DQN_CPP_BUILD_OBJ_SUFFIX_O;
|
build_context.compile_file_obj_suffix = DQN_CPP_BUILD_OBJ_SUFFIX_O;
|
||||||
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
build_context.compile_files = Dqn_Slice_InitCArrayCopy(scratch.arena, {
|
||||||
Dqn_CPPBuildCompileFile{{}, Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity_nodll.cpp", DQN_STRING_FMT(code_dir)) },
|
Dqn_CPPBuildCompileFile{{}, Dqn_FsPath_ConvertF(scratch.arena, "%.*s/feely_pona_unity_nodll.cpp", DQN_STR_FMT(code_dir)) },
|
||||||
});
|
});
|
||||||
|
|
||||||
Dqn_String8 output_name = DQN_STRING8("Terry_Cherry");
|
Dqn_Str8 output_name = DQN_STR8("Terry_Cherry");
|
||||||
Dqn_List<Dqn_String8> compile_flags = Dqn_List_InitCArrayCopy(scratch.arena, 32, {
|
Dqn_List<Dqn_Str8> compile_flags = Dqn_List_InitCArrayCopy(scratch.arena, 32, {
|
||||||
DQN_STRING8("cmd"), DQN_STRING8("/C"), DQN_STRING8("emcc.bat"),
|
DQN_STR8("cmd"), DQN_STR8("/C"), DQN_STR8("emcc.bat"),
|
||||||
DQN_STRING8("-o"), Dqn_String8_InitF(scratch.allocator, "%.*s.html", DQN_STRING_FMT(output_name)),
|
DQN_STR8("-o"), Dqn_Str8_InitF(scratch.allocator, "%.*s.html", DQN_STR_FMT(output_name)),
|
||||||
DQN_STRING8("-Wall"),
|
DQN_STR8("-Wall"),
|
||||||
DQN_STRING8("--shell-file"), html_shell_path,
|
DQN_STR8("--shell-file"), html_shell_path,
|
||||||
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s", DQN_STRING_FMT(build_dir), DQN_STRING_FMT(raylib_emscripten_lib_name)),
|
Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s", DQN_STR_FMT(build_dir), DQN_STR_FMT(raylib_emscripten_lib_name)),
|
||||||
DQN_STRING8("-s"), DQN_STRING8("USE_GLFW=3"),
|
DQN_STR8("-s"), DQN_STR8("USE_GLFW=3"),
|
||||||
DQN_STRING8("-s"), DQN_STRING8("TOTAL_MEMORY=512MB"),
|
DQN_STR8("-s"), DQN_STR8("TOTAL_MEMORY=512MB"),
|
||||||
DQN_STRING8("-s"), DQN_STRING8("TOTAL_STACK=32MB"),
|
DQN_STR8("-s"), DQN_STR8("TOTAL_STACK=32MB"),
|
||||||
DQN_STRING8("-s"), DQN_STRING8("ALLOW_MEMORY_GROWTH"),
|
DQN_STR8("-s"), DQN_STR8("ALLOW_MEMORY_GROWTH"),
|
||||||
DQN_STRING8("--preload-file"), DQN_STRING8("Data"),
|
DQN_STR8("--preload-file"), DQN_STR8("Data"),
|
||||||
DQN_STRING8("-msimd128"),
|
DQN_STR8("-msimd128"),
|
||||||
DQN_STRING8("-msse2"),
|
DQN_STR8("-msse2"),
|
||||||
});
|
});
|
||||||
Dqn_List_AddList(&compile_flags, build_specific_compile_flags);
|
Dqn_List_AddList(&compile_flags, build_specific_compile_flags);
|
||||||
|
|
||||||
@ -540,32 +540,32 @@ int main(int argc, char const **argv)
|
|||||||
build_context.build_dir = build_dir;
|
build_context.build_dir = build_dir;
|
||||||
|
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_String8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
Dqn_Str8 cmd = Dqn_CPPBuild_ToCommandLine(build_context, Dqn_CPPBuildMode_AlwaysRebuild, scratch.allocator);
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
Dqn_CPPBuild_ExecOrAbort(build_context, Dqn_CPPBuildMode_CacheBuild);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Move the files to a directory
|
// NOTE: Move the files to a directory
|
||||||
Dqn_String8 folder_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s_Emscripten", DQN_STRING_FMT(build_dir), DQN_STRING_FMT(output_name));
|
Dqn_Str8 folder_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s_Emscripten", DQN_STR_FMT(build_dir), DQN_STR_FMT(output_name));
|
||||||
if (!Dqn_Fs_DirExists(folder_path)) {
|
if (!Dqn_Fs_DirExists(folder_path)) {
|
||||||
Dqn_String8 mkdir_cmd = Dqn_String8_InitF(scratch.allocator, "mkdir %.*s", DQN_STRING_FMT(folder_path));
|
Dqn_Str8 mkdir_cmd = Dqn_Str8_InitF(scratch.allocator, "mkdir %.*s", DQN_STR_FMT(folder_path));
|
||||||
Dqn_OS_ExecOrAbort(mkdir_cmd, {});
|
Dqn_OS_ExecOrAbort(mkdir_cmd, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
Dqn_String8 const generated_file_extension[] = {
|
Dqn_Str8 const generated_file_extension[] = {
|
||||||
DQN_STRING8("data"),
|
DQN_STR8("data"),
|
||||||
DQN_STRING8("html"),
|
DQN_STR8("html"),
|
||||||
DQN_STRING8("js"),
|
DQN_STR8("js"),
|
||||||
DQN_STRING8("wasm"),
|
DQN_STR8("wasm"),
|
||||||
};
|
};
|
||||||
|
|
||||||
for (Dqn_String8 file_ext : generated_file_extension) {
|
for (Dqn_Str8 file_ext : generated_file_extension) {
|
||||||
Dqn_String8 src_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s.%.*s", DQN_STRING_FMT(build_dir), DQN_STRING_FMT(output_name), DQN_STRING_FMT(file_ext));
|
Dqn_Str8 src_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s.%.*s", DQN_STR_FMT(build_dir), DQN_STR_FMT(output_name), DQN_STR_FMT(file_ext));
|
||||||
Dqn_String8 dest_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s.%.*s", DQN_STRING_FMT(folder_path), DQN_STRING_FMT(output_name), DQN_STRING_FMT(file_ext));
|
Dqn_Str8 dest_path = Dqn_FsPath_ConvertF(scratch.arena, "%.*s/%.*s.%.*s", DQN_STR_FMT(folder_path), DQN_STR_FMT(output_name), DQN_STR_FMT(file_ext));
|
||||||
Dqn_String8 cmd = Dqn_String8_InitF(scratch.allocator, "cmd /C move /Y %.*s %.*s", DQN_STRING_FMT(src_path), DQN_STRING_FMT(dest_path));
|
Dqn_Str8 cmd = Dqn_Str8_InitF(scratch.allocator, "cmd /C move /Y %.*s %.*s", DQN_STR_FMT(src_path), DQN_STR_FMT(dest_path));
|
||||||
if (dry_run) {
|
if (dry_run) {
|
||||||
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STRING_FMT(cmd));
|
Dqn_Print_StdLnF(Dqn_PrintStd_Out, "%.*s\n", DQN_STR_FMT(cmd));
|
||||||
} else {
|
} else {
|
||||||
Dqn_OS_ExecOrAbort(cmd, build_dir);
|
Dqn_OS_ExecOrAbort(cmd, build_dir);
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ struct FP_EntityRenderData
|
|||||||
{
|
{
|
||||||
FP_Meters height;
|
FP_Meters height;
|
||||||
TELY_AssetFlip flip;
|
TELY_AssetFlip flip;
|
||||||
Dqn_String8 anim_name;
|
Dqn_Str8 anim_name;
|
||||||
TELY_AssetSpriteSheet *sheet;
|
TELY_AssetSpriteSheet *sheet;
|
||||||
Dqn_Rect sheet_rect;
|
Dqn_Rect sheet_rect;
|
||||||
Dqn_V2 render_size;
|
Dqn_V2 render_size;
|
||||||
|
@ -14,7 +14,7 @@ static void FP_Entity_AddDebugEditorFlags(FP_Game *game, FP_GameEntityHandle han
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateWaypointF(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateWaypointF(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -29,7 +29,7 @@ static FP_GameEntityHandle FP_Entity_CreateWaypointF(FP_Game *game, Dqn_V2 pos,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateClinger(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateClinger(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -57,7 +57,7 @@ static FP_GameEntityHandle FP_Entity_CreateClinger(FP_Game *game, Dqn_V2 pos, DQ
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateSmoochie(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateSmoochie(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -85,7 +85,7 @@ static FP_GameEntityHandle FP_Entity_CreateSmoochie(FP_Game *game, Dqn_V2 pos, D
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateCatfish(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateCatfish(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -112,7 +112,7 @@ static FP_GameEntityHandle FP_Entity_CreateCatfish(FP_Game *game, Dqn_V2 pos, DQ
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateWallAtPos(FP_Game *game, Dqn_String8 name, Dqn_V2 pos, Dqn_V2 size)
|
static FP_GameEntityHandle FP_Entity_CreateWallAtPos(FP_Game *game, Dqn_Str8 name, Dqn_V2 pos, Dqn_V2 size)
|
||||||
{
|
{
|
||||||
FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, name.data);
|
FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, name.data);
|
||||||
FP_GameEntityHandle result = entity->handle;
|
FP_GameEntityHandle result = entity->handle;
|
||||||
@ -128,7 +128,7 @@ static FP_GameEntityHandle FP_Entity_CreateWallAtPos(FP_Game *game, Dqn_String8
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreatePermittedBuildZone(FP_Game *game, Dqn_V2 pos, Dqn_V2 size, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreatePermittedBuildZone(FP_Game *game, Dqn_V2 pos, Dqn_V2 size, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -167,7 +167,7 @@ static FP_GameEntityHandle FP_Entity_CreateMobSpawner(FP_Game *game, Dqn_V2 pos,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateTerryInternal(FP_Game *game, Dqn_V2 pos, bool is_perry, DQN_FMT_STRING_ANNOTATE char const *fmt, va_list args)
|
static FP_GameEntityHandle FP_Entity_CreateTerryInternal(FP_Game *game, Dqn_V2 pos, bool is_perry, DQN_FMT_ATTRIB char const *fmt, va_list args)
|
||||||
{
|
{
|
||||||
FP_GameEntity *entity = FP_Game_MakeEntityPointerFV(game, fmt, args);
|
FP_GameEntity *entity = FP_Game_MakeEntityPointerFV(game, fmt, args);
|
||||||
FP_GameEntityHandle result = entity->handle;
|
FP_GameEntityHandle result = entity->handle;
|
||||||
@ -197,7 +197,7 @@ static FP_GameEntityHandle FP_Entity_CreateTerryInternal(FP_Game *game, Dqn_V2 p
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -206,7 +206,7 @@ static FP_GameEntityHandle FP_Entity_CreateTerry(FP_Game *game, Dqn_V2 pos, DQN_
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreatePerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreatePerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -215,7 +215,7 @@ static FP_GameEntityHandle FP_Entity_CreatePerry(FP_Game *game, Dqn_V2 pos, DQN_
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateMerchantTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateMerchantTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -244,7 +244,7 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantTerry(FP_Game *game, Dqn_V2 p
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateMerchantGraveyard(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateMerchantGraveyard(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -273,7 +273,7 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantGraveyard(FP_Game *game, Dqn_
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateMerchantGym(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateMerchantGym(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -302,7 +302,7 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantGym(FP_Game *game, Dqn_V2 pos
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateMerchantPhoneCompany(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateMerchantPhoneCompany(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -331,7 +331,7 @@ static FP_GameEntityHandle FP_Entity_CreateMerchantPhoneCompany(FP_Game *game, D
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateClubTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateClubTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -360,7 +360,7 @@ static FP_GameEntityHandle FP_Entity_CreateClubTerry(FP_Game *game, Dqn_V2 pos,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateHeart(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateHeart(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -395,7 +395,7 @@ static FP_GameEntityHandle FP_Entity_CreateHeart(FP_Game *game, Dqn_V2 pos, DQN_
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateChurchTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateChurchTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -424,7 +424,7 @@ static FP_GameEntityHandle FP_Entity_CreateChurchTerry(FP_Game *game, Dqn_V2 pos
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateKennelTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateKennelTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -453,7 +453,7 @@ static FP_GameEntityHandle FP_Entity_CreateKennelTerry(FP_Game *game, Dqn_V2 pos
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateAirportTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateAirportTerry(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -482,7 +482,7 @@ static FP_GameEntityHandle FP_Entity_CreateAirportTerry(FP_Game *game, Dqn_V2 po
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreatePhoneMessageProjectile(FP_Game *game, FP_GameEntityHandle owner, Dqn_V2 pos, Dqn_V2 velocity, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreatePhoneMessageProjectile(FP_Game *game, FP_GameEntityHandle owner, Dqn_V2 pos, Dqn_V2 velocity, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -513,7 +513,7 @@ static FP_GameEntityHandle FP_Entity_CreatePhoneMessageProjectile(FP_Game *game,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreatePortalMonkey(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreatePortalMonkey(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -537,7 +537,7 @@ static FP_GameEntityHandle FP_Entity_CreatePortalMonkey(FP_Game *game, Dqn_V2 po
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateAirportTerryPlane(FP_Game *game, Dqn_V2 pos, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateAirportTerryPlane(FP_Game *game, Dqn_V2 pos, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -561,7 +561,7 @@ static FP_GameEntityHandle FP_Entity_CreateAirportTerryPlane(FP_Game *game, Dqn_
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Entity_CreateBillboard(FP_Game *game, Dqn_V2 pos, FP_EntityBillboardState state, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Entity_CreateBillboard(FP_Game *game, Dqn_V2 pos, FP_EntityBillboardState state, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
@ -214,7 +214,7 @@ static FP_GameEntity *FP_Game_ActiveParentEntityPointer(FP_Game const *game)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntity *FP_Game_MakeEntityPointerFV(FP_Game *game, DQN_FMT_STRING_ANNOTATE char const *fmt, va_list args)
|
static FP_GameEntity *FP_Game_MakeEntityPointerFV(FP_Game *game, DQN_FMT_ATTRIB char const *fmt, va_list args)
|
||||||
{
|
{
|
||||||
FP_GameEntity *result = nullptr;
|
FP_GameEntity *result = nullptr;
|
||||||
if (!game)
|
if (!game)
|
||||||
@ -276,7 +276,7 @@ static FP_GameEntity *FP_Game_MakeEntityPointerFV(FP_Game *game, DQN_FMT_STRING_
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntity *FP_Game_MakeEntityPointerF(FP_Game *game, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntity *FP_Game_MakeEntityPointerF(FP_Game *game, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -285,7 +285,7 @@ static FP_GameEntity *FP_Game_MakeEntityPointerF(FP_Game *game, DQN_FMT_STRING_A
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FP_GameEntityHandle FP_Game_MakeEntityF(FP_Game *game, DQN_FMT_STRING_ANNOTATE char const *fmt, ...)
|
static FP_GameEntityHandle FP_Game_MakeEntityF(FP_Game *game, DQN_FMT_ATTRIB char const *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
@ -561,7 +561,7 @@ static Dqn_Slice<Dqn_V2I> FP_Game_AStarPathFind(FP_Game *game,
|
|||||||
|
|
||||||
// NOTE: Enumerate the entities that are collidable ============================================
|
// NOTE: Enumerate the entities that are collidable ============================================
|
||||||
bool dest_tile_is_non_traversable = false;
|
bool dest_tile_is_non_traversable = false;
|
||||||
auto zone_enum_collidables = Dqn_Profiler_BeginZoneWithIndex(DQN_STRING8("FP_Update: A* enumerate collidables"), FP_ProfileZone_FPUpdate_AStarEnumerateCollidables);
|
auto zone_enum_collidables = Dqn_Profiler_BeginZoneWithIndex(DQN_STR8("FP_Update: A* enumerate collidables"), FP_ProfileZone_FPUpdate_AStarEnumerateCollidables);
|
||||||
for (FP_GameEntityIterator it = {}; FP_Game_DFSPreOrderWalkEntityTree(game, &it, game->play.root_entity); ) {
|
for (FP_GameEntityIterator it = {}; FP_Game_DFSPreOrderWalkEntityTree(game, &it, game->play.root_entity); ) {
|
||||||
FP_GameEntity const *walk_entity = it.entity;
|
FP_GameEntity const *walk_entity = it.entity;
|
||||||
if (entity == walk_entity->handle)
|
if (entity == walk_entity->handle)
|
||||||
@ -605,7 +605,7 @@ static Dqn_Slice<Dqn_V2I> FP_Game_AStarPathFind(FP_Game *game,
|
|||||||
Dqn_usize last_successful_manhattan_dist = DQN_USIZE_MAX;
|
Dqn_usize last_successful_manhattan_dist = DQN_USIZE_MAX;
|
||||||
Dqn_V2I last_successful_tile = src_tile;
|
Dqn_V2I last_successful_tile = src_tile;
|
||||||
|
|
||||||
auto zone_astar_expand = Dqn_Profiler_BeginZoneWithIndex(DQN_STRING8("FP_Update: A* expand"), FP_ProfileZone_FPUpdate_AStarExpand);
|
auto zone_astar_expand = Dqn_Profiler_BeginZoneWithIndex(DQN_STR8("FP_Update: A* expand"), FP_ProfileZone_FPUpdate_AStarExpand);
|
||||||
while (frontier.size) {
|
while (frontier.size) {
|
||||||
Dqn_Profiler_ZoneScopeWithIndex("FP_Update: A* neighbours", FP_ProfileZone_FPUpdate_AStarExploreNeighbours);
|
Dqn_Profiler_ZoneScopeWithIndex("FP_Update: A* neighbours", FP_ProfileZone_FPUpdate_AStarExploreNeighbours);
|
||||||
Dqn_V2I curr_tile = Dqn_FArray_PopFront(&frontier, 1);
|
Dqn_V2I curr_tile = Dqn_FArray_PopFront(&frontier, 1);
|
||||||
|
@ -206,7 +206,7 @@ struct FP_GameEntity
|
|||||||
FP_GameEntity *parent;
|
FP_GameEntity *parent;
|
||||||
|
|
||||||
FP_EntityType type;
|
FP_EntityType type;
|
||||||
Dqn_String8 name;
|
Dqn_Str8 name;
|
||||||
FP_GameEntityHandle handle;
|
FP_GameEntityHandle handle;
|
||||||
|
|
||||||
// The target size to render the sprite in meters. The width of the sprite
|
// The target size to render the sprite in meters. The width of the sprite
|
||||||
@ -355,7 +355,7 @@ enum FP_GamePerryJoined
|
|||||||
|
|
||||||
struct FP_Particle
|
struct FP_Particle
|
||||||
{
|
{
|
||||||
Dqn_String8 anim_name;
|
Dqn_Str8 anim_name;
|
||||||
bool alive;
|
bool alive;
|
||||||
Dqn_V2 pos;
|
Dqn_V2 pos;
|
||||||
Dqn_V2 velocity;
|
Dqn_V2 velocity;
|
||||||
|
Loading…
Reference in New Issue
Block a user