From bff3fc759d188ebf135ba987a933eb5bc3ada84d Mon Sep 17 00:00:00 2001 From: doyle Date: Sun, 24 Sep 2023 18:16:14 +1000 Subject: [PATCH] fp: Move some structs to entity.h --- feely_pona.cpp | 120 ++++++++++++++++++++++---------------------- feely_pona_entity.h | 38 ++++++++++++++ feely_pona_game.cpp | 2 +- feely_pona_game.h | 36 +------------ feely_pona_unity.h | 1 + 5 files changed, 100 insertions(+), 97 deletions(-) create mode 100644 feely_pona_entity.h diff --git a/feely_pona.cpp b/feely_pona.cpp index 4ebf06f..1ed4363 100644 --- a/feely_pona.cpp +++ b/feely_pona.cpp @@ -204,7 +204,6 @@ void TELY_DLL_Init(void *user_data) // NOTE: Hero { - TELY_AssetSpriteSheet *sheet = &game->terry_sprite_sheet; FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, "Terry"); entity->local_pos = Dqn_V2_InitNx2(1334, 396); entity->action_to_anim_mapping = game->terry_action_mappings; @@ -223,7 +222,7 @@ void TELY_DLL_Init(void *user_data) // NOTE: Merchant { FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, "Merchant"); - entity->type = FP_GameEntityType_Merchant; + entity->type = FP_EntityType_Merchant; entity->local_pos = Dqn_V2_InitNx2(1000, 124); entity->local_hit_box_size = Dqn_V2_InitNx2(50, 50); entity->size_scale = Dqn_V2_InitNx1(0.25f); @@ -248,7 +247,6 @@ void TELY_DLL_Init(void *user_data) { - int32_t const base_width = right_wall_tile_pos.x - left_wall_top_tile.x; Dqn_V2I const vert_wall_part_tile_size = Dqn_V2I_InitNx2(1, (vert_wall_tile_size.y / 2) - 2); FP_Game_EntityAddWallAtTile(game, DQN_STRING8("Base left-top wall"), left_wall_top_tile, vert_wall_part_tile_size); @@ -323,12 +321,12 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat FP_ActionToAnimationMapping result = {}; switch (entity->type) { - case FP_GameEntityType_Terry: { - FP_GameTerryState *state = DQN_CAST(FP_GameTerryState *)&action->state; - if (*state == FP_GameTerryState_Nil) - FP_Game_EntityActionSetState(action, FP_GameTerryState_Idle); + case FP_EntityType_Terry: { + FP_EntityTerryState *state = DQN_CAST(FP_EntityTerryState *)&action->state; + if (*state == FP_EntityTerryState_Nil) + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Idle); - if (*state == FP_GameTerryState_Idle) { + if (*state == FP_EntityTerryState_Idle) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.terry_walk_idle); if (action->flags & FP_GameEntityActionFlag_StateTransition) { @@ -338,35 +336,35 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat TELY_Platform_InputGamepadButtonCodeIsPressed(input, 0, TELY_PlatformInputGamepadButtonCode_X)) { switch (entity->direction) { case FP_GameDirection_Up: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackUp); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackUp); } break; case FP_GameDirection_Left: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackSide); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackSide); } break; case FP_GameDirection_Right: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackSide); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackSide); } break; case FP_GameDirection_Down: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackDown); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackDown); } break; } } else if (dir_vector.x || dir_vector.y) { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Run); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Run); } } } - if (*state == FP_GameTerryState_AttackSide) { + if (*state == FP_EntityTerryState_AttackSide) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.terry_attack_side); action->flip_on_x = entity->direction == FP_GameDirection_Right; if (action->flags & FP_GameEntityActionFlag_StateTransition) { FP_Game_EntityActionReset(action, result.anim.count * result.anim.seconds_per_frame, result); } else if (action_has_finished) { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Idle); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Idle); action->flip_on_x = false; } @@ -376,7 +374,7 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat TELY_Platform_InputGamepadButtonCodeIsPressed(input, 0, TELY_PlatformInputGamepadButtonCode_X)) { Dqn_f32 t01 = action->timer_s / action->end_at_s; if (t01 > 0.5f) - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackB); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackB); else action->flags |= FP_GameEntityActionFlag_Failed; } @@ -384,25 +382,25 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat #endif } - if (*state == FP_GameTerryState_AttackUp) { + if (*state == FP_EntityTerryState_AttackUp) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.terry_attack_up); if (action->flags & FP_GameEntityActionFlag_StateTransition) { FP_Game_EntityActionReset(action, result.anim.count * result.anim.seconds_per_frame, result); } else if (action_has_finished) { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Idle); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Idle); } } - if (*state == FP_GameTerryState_AttackDown) { + if (*state == FP_EntityTerryState_AttackDown) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.terry_attack_down); if (action->flags & FP_GameEntityActionFlag_StateTransition) { FP_Game_EntityActionReset(action, result.anim.count * result.anim.seconds_per_frame, result); } else if (action_has_finished) { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Idle); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Idle); } } - if (*state == FP_GameTerryState_Run) { + if (*state == FP_EntityTerryState_Run) { Dqn_String8 desired_action_name = {}; switch (entity->direction) { case FP_GameDirection_Up: desired_action_name = g_anim_names.terry_walk_up; break; @@ -417,24 +415,24 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat TELY_Platform_InputGamepadButtonCodeIsPressed(input, 0, TELY_PlatformInputGamepadButtonCode_X)) { switch (entity->direction) { case FP_GameDirection_Up: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackUp); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackUp); } break; case FP_GameDirection_Left: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackSide); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackSide); } break; case FP_GameDirection_Right: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackSide); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackSide); } break; case FP_GameDirection_Down: { - FP_Game_EntityActionSetState(action, FP_GameTerryState_AttackDown); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_AttackDown); } break; } } else if (TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_LeftShift) || TELY_Platform_InputGamepadButtonCodeIsPressed(input, 0, TELY_PlatformInputGamepadButtonCode_A)) { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Dash); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Dash); } } @@ -444,11 +442,11 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat } if (!entity_has_velocity /*&& !has_collision*/) { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Idle); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Idle); } } - if (*state == FP_GameTerryState_Dash) { + if (*state == FP_EntityTerryState_Dash) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.terry_walk_right); if (action->flags & FP_GameEntityActionFlag_StateTransition) { @@ -469,16 +467,16 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat } else if (action_has_finished) { if (entity_has_velocity) { // TODO(doyle): Not sure if this branch triggers properly. - FP_Game_EntityActionSetState(action, FP_GameTerryState_Run); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Run); } else { - FP_Game_EntityActionSetState(action, FP_GameTerryState_Idle); + FP_Game_EntityActionSetState(action, FP_EntityTerryState_Idle); } } } - if (*state == FP_GameTerryState_AttackUp || - *state == FP_GameTerryState_AttackDown || - *state == FP_GameTerryState_AttackSide) { + if (*state == FP_EntityTerryState_AttackUp || + *state == FP_EntityTerryState_AttackDown || + *state == FP_EntityTerryState_AttackSide) { entity->attack_box_size = entity->local_hit_box_size; // NOTE: Position the attack box @@ -494,12 +492,12 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat } } break; - case FP_GameEntityType_Smoochie: { - FP_GameSmoochieState *state = DQN_CAST(FP_GameSmoochieState *)&action->state; - if (*state == FP_GameSmoochieState_Nil) - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_Idle); + case FP_EntityType_Smoochie: { + FP_EntitySmoochieState *state = DQN_CAST(FP_EntitySmoochieState *)&action->state; + if (*state == FP_EntitySmoochieState_Nil) + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_Idle); - if (*state == FP_GameSmoochieState_Idle) { + if (*state == FP_EntitySmoochieState_Idle) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.smoochie_walk_down); if (action->flags & FP_GameEntityActionFlag_StateTransition) { @@ -512,40 +510,40 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat case FP_GameDirection_Up: /*FALLTHRU*/ case FP_GameDirection_Right: /*FALLTHRU*/ case FP_GameDirection_Left: { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_AttackSide); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_AttackSide); } break; case FP_GameDirection_Down: { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_AttackDown); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_AttackDown); } break; } } else if (dir_vector.x || dir_vector.y) { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_Run); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_Run); } } } - if (*state == FP_GameSmoochieState_AttackDown) { + if (*state == FP_EntitySmoochieState_AttackDown) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.smoochie_attack_down); if (action->flags & FP_GameEntityActionFlag_StateTransition) { FP_Game_EntityActionReset(action, result.anim.count * result.anim.seconds_per_frame, result); } else if (action_has_finished) { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_Idle); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_Idle); } } - if (*state == FP_GameSmoochieState_AttackSide) { + if (*state == FP_EntitySmoochieState_AttackSide) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.smoochie_attack_side); action->flip_on_x = entity->direction == FP_GameDirection_Right; if (action->flags & FP_GameEntityActionFlag_StateTransition) { FP_Game_EntityActionReset(action, result.anim.count * result.anim.seconds_per_frame, result); } else if (action_has_finished) { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_Idle); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_Idle); action->flip_on_x = false; } } - if (*state == FP_GameSmoochieState_Run) { + if (*state == FP_EntitySmoochieState_Run) { Dqn_String8 desired_action_name = {}; switch (entity->direction) { case FP_GameDirection_Up: desired_action_name = g_anim_names.smoochie_walk_up; break; @@ -563,11 +561,11 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat case FP_GameDirection_Up: /*FALLTHRU*/ case FP_GameDirection_Right: /*FALLTHRU*/ case FP_GameDirection_Left: { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_AttackSide); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_AttackSide); } break; case FP_GameDirection_Down: { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_AttackDown); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_AttackDown); } break; } } @@ -579,11 +577,11 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat } if (!entity_has_velocity /*&& !has_collision*/) { - FP_Game_EntityActionSetState(action, FP_GameSmoochieState_Idle); + FP_Game_EntityActionSetState(action, FP_EntitySmoochieState_Idle); } } - if (*state == FP_GameSmoochieState_AttackSide || *state == FP_GameSmoochieState_AttackDown) { + if (*state == FP_EntitySmoochieState_AttackSide || *state == FP_EntitySmoochieState_AttackDown) { entity->attack_box_size = entity->local_hit_box_size; // NOTE: Position the attack box if (entity->direction == FP_GameDirection_Left) { @@ -599,12 +597,12 @@ FP_ActionToAnimationMapping FP_EntityActionStateMachine(FP_Game *game, TELY_Plat } break; - case FP_GameEntityType_Merchant: { - FP_GameTerryMerchantState *state = DQN_CAST(FP_GameTerryMerchantState *)&action->state; - if (*state == FP_GameTerryMerchantState_Nil) - FP_Game_EntityActionSetState(action, FP_GameTerryMerchantState_Idle); + case FP_EntityType_Merchant: { + FP_EntityTerryMerchantState *state = DQN_CAST(FP_EntityTerryMerchantState *)&action->state; + if (*state == FP_EntityTerryMerchantState_Nil) + FP_Game_EntityActionSetState(action, FP_EntityTerryMerchantState_Idle); - if (*state == FP_GameTerryMerchantState_Idle) { + if (*state == FP_EntityTerryMerchantState_Idle) { result = FP_Game_GetActionAnimMappingWithName(game, entity->handle, g_anim_names.terry_merchant); if (action->flags & FP_GameEntityActionFlag_StateTransition) { FP_Game_EntityActionReset(action, FP_GAME_ENTITY_ACTION_INFINITE_TIMER, result); @@ -669,14 +667,14 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_Renderer *renderer, if (entity->flags & (FP_GameEntityFlag_MoveByKeyboard | FP_GameEntityFlag_MoveByGamepad)) { bool move_entity = false; switch (entity->type) { - case FP_GameEntityType_Terry: { - FP_GameTerryState *state = DQN_CAST(FP_GameTerryState *)&entity->action.state; - move_entity = *state == FP_GameTerryState_Run || *state == FP_GameTerryState_Idle; + case FP_EntityType_Terry: { + FP_EntityTerryState *state = DQN_CAST(FP_EntityTerryState *)&entity->action.state; + move_entity = *state == FP_EntityTerryState_Run || *state == FP_EntityTerryState_Idle; } break; - case FP_GameEntityType_Smoochie: { - FP_GameSmoochieState *state = DQN_CAST(FP_GameSmoochieState *)&entity->action.state; - move_entity = *state == FP_GameSmoochieState_Run || *state == FP_GameSmoochieState_Idle; + case FP_EntityType_Smoochie: { + FP_EntitySmoochieState *state = DQN_CAST(FP_EntitySmoochieState *)&entity->action.state; + move_entity = *state == FP_EntitySmoochieState_Run || *state == FP_EntitySmoochieState_Idle; } break; } diff --git a/feely_pona_entity.h b/feely_pona_entity.h new file mode 100644 index 0000000..0affe4f --- /dev/null +++ b/feely_pona_entity.h @@ -0,0 +1,38 @@ +#if defined(__clang__) +#pragma once +#include "feely_pona_unity.h" +#endif + +enum FP_EntityType +{ + FP_EntityType_Terry, + FP_EntityType_Smoochie, + FP_EntityType_Merchant, +}; + +enum FP_EntityTerryState +{ + FP_EntityTerryState_Nil, + FP_EntityTerryState_Idle, + FP_EntityTerryState_AttackUp, + FP_EntityTerryState_AttackDown, + FP_EntityTerryState_AttackSide, + FP_EntityTerryState_Run, + FP_EntityTerryState_Dash, +}; + +enum FP_EntitySmoochieState +{ + FP_EntitySmoochieState_Nil, + FP_EntitySmoochieState_Idle, + FP_EntitySmoochieState_AttackDown, + FP_EntitySmoochieState_AttackSide, + FP_EntitySmoochieState_AttackHeart, + FP_EntitySmoochieState_Run, +}; + +enum FP_EntityTerryMerchantState +{ + FP_EntityTerryMerchantState_Nil, + FP_EntityTerryMerchantState_Idle, +}; diff --git a/feely_pona_game.cpp b/feely_pona_game.cpp index 1178cad..b8bbf6c 100644 --- a/feely_pona_game.cpp +++ b/feely_pona_game.cpp @@ -668,7 +668,7 @@ static FP_GameEntityHandle FP_Game_EntityAddWallAtTile(FP_Game *game, Dqn_String static FP_GameEntityHandle FP_Game_EntityAddMob(FP_Game *game, Dqn_V2 pos) { FP_GameEntity *entity = FP_Game_MakeEntityPointerF(game, "Mob"); - entity->type = FP_GameEntityType_Smoochie; + entity->type = FP_EntityType_Smoochie; entity->local_pos = pos; entity->size_scale = Dqn_V2_InitNx1(.25f); entity->action_to_anim_mapping = game->smoochie_action_mappings; diff --git a/feely_pona_game.h b/feely_pona_game.h index 99d5510..3584bf3 100644 --- a/feely_pona_game.h +++ b/feely_pona_game.h @@ -83,40 +83,6 @@ enum FP_GameDirection FP_GameDirection_Right, }; -enum FP_GameEntityType -{ - FP_GameEntityType_Terry, - FP_GameEntityType_Smoochie, - FP_GameEntityType_Merchant, -}; - -enum FP_GameTerryState -{ - FP_GameTerryState_Nil, - FP_GameTerryState_Idle, - FP_GameTerryState_AttackUp, - FP_GameTerryState_AttackDown, - FP_GameTerryState_AttackSide, - FP_GameTerryState_Run, - FP_GameTerryState_Dash, -}; - -enum FP_GameSmoochieState -{ - FP_GameSmoochieState_Nil, - FP_GameSmoochieState_Idle, - FP_GameSmoochieState_AttackDown, - FP_GameSmoochieState_AttackSide, - FP_GameSmoochieState_AttackHeart, - FP_GameSmoochieState_Run, -}; - -enum FP_GameTerryMerchantState -{ - FP_GameTerryMerchantState_Nil, - FP_GameTerryMerchantState_Idle, -}; - struct FP_GameEntity { FP_GameEntity *next; @@ -125,7 +91,7 @@ struct FP_GameEntity FP_GameEntity *last_child; FP_GameEntity *parent; - FP_GameEntityType type; + FP_EntityType type; Dqn_String8 name; FP_GameEntityHandle handle; diff --git a/feely_pona_unity.h b/feely_pona_unity.h index f8a9995..2f80954 100644 --- a/feely_pona_unity.h +++ b/feely_pona_unity.h @@ -61,6 +61,7 @@ DQN_MSVC_WARNING_DISABLE(4505) // warning C4505: unreferenced function with inte #include "External/tely/tely_rfui.cpp" // NOTE: feely_pona ================================================================================ +#include "feely_pona_entity.h" #include "feely_pona_game.h" #include "feely_pona.h"