fp: Add camera smoothing movement
This commit is contained in:
parent
46bf26a7c3
commit
0044b05130
@ -1996,7 +1996,7 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput *input
|
|||||||
|
|
||||||
if (entity->flags & FP_GameEntityFlag_CameraTracking) {
|
if (entity->flags & FP_GameEntityFlag_CameraTracking) {
|
||||||
FP_GameCamera *camera = &game->play.camera;
|
FP_GameCamera *camera = &game->play.camera;
|
||||||
camera->world_pos = FP_Game_CalcEntityWorldPos(game, entity->handle) * camera->scale;
|
camera->world_pos_target = FP_Game_CalcEntityWorldPos(game, entity->handle) * camera->scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
FP_GamePlaceableBuilding placeable_building = PLACEABLE_BUILDINGS[game->play.build_mode_building_index];
|
FP_GamePlaceableBuilding placeable_building = PLACEABLE_BUILDINGS[game->play.build_mode_building_index];
|
||||||
@ -2290,11 +2290,12 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput *input
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: Camera ================================================================================
|
||||||
|
FP_GamePlay *play = &game->play;
|
||||||
|
FP_GameCamera *camera = &play->camera;
|
||||||
if (!FP_Game_IsNilEntityHandle(game, game->play.clicked_entity)) {
|
if (!FP_Game_IsNilEntityHandle(game, game->play.clicked_entity)) {
|
||||||
Dqn_V2 window_size = Dqn_V2_InitV2I(platform->core.window_size);
|
Dqn_V2 window_size = Dqn_V2_InitV2I(platform->core.window_size);
|
||||||
FP_GamePlay *play = &game->play;
|
|
||||||
|
|
||||||
FP_GameCamera *camera = &play->camera;
|
|
||||||
camera->scale = window_size / camera->size;
|
camera->scale = window_size / camera->size;
|
||||||
Dqn_V2 camera_size_screen = camera->size * camera->scale;
|
Dqn_V2 camera_size_screen = camera->size * camera->scale;
|
||||||
|
|
||||||
@ -2302,12 +2303,13 @@ void FP_Update(TELY_Platform *platform, FP_Game *game, TELY_PlatformInput *input
|
|||||||
Dqn_V2 map_screen_size = map_world_size * camera->scale;
|
Dqn_V2 map_screen_size = map_world_size * camera->scale;
|
||||||
Dqn_V2 half_map_screen_size = map_screen_size * .5f;
|
Dqn_V2 half_map_screen_size = map_screen_size * .5f;
|
||||||
|
|
||||||
camera->world_pos.x = DQN_MIN(camera->world_pos.x, half_map_screen_size.w - (camera_size_screen.w * .5f));
|
camera->world_pos_target.x = DQN_MIN(camera->world_pos_target.x, half_map_screen_size.w - (camera_size_screen.w * .5f));
|
||||||
camera->world_pos.x = DQN_MAX(camera->world_pos.x, -half_map_screen_size.w + (camera_size_screen.w * .5f));
|
camera->world_pos_target.x = DQN_MAX(camera->world_pos_target.x, -half_map_screen_size.w + (camera_size_screen.w * .5f));
|
||||||
camera->world_pos.y = DQN_MAX(camera->world_pos.y, -half_map_screen_size.h + (camera_size_screen.h * .5f));
|
camera->world_pos_target.y = DQN_MAX(camera->world_pos_target.y, -half_map_screen_size.h + (camera_size_screen.h * .5f));
|
||||||
camera->world_pos.y = DQN_MIN(camera->world_pos.y, half_map_screen_size.h - (camera_size_screen.h * .5f));
|
camera->world_pos_target.y = DQN_MIN(camera->world_pos_target.y, half_map_screen_size.h - (camera_size_screen.h * .5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
camera->world_pos += (camera->world_pos_target - camera->world_pos) * (5.f * DQN_CAST(Dqn_f32)input->delta_s);
|
||||||
Dqn_Profiler_EndZone(update_zone);
|
Dqn_Profiler_EndZone(update_zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3600,8 +3602,8 @@ void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *renderer,
|
|||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F9 %s god mode", game->play.god_mode ? "Disable" : "Enable"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F9 %s god mode", game->play.god_mode ? "Disable" : "Enable"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F10 %s noclip", player->flags & FP_GameEntityFlag_NoClip ? "Disable" : "Enable"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F10 %s noclip", player->flags & FP_GameEntityFlag_NoClip ? "Disable" : "Enable"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F11 Building inventory +1"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F11 Building inventory +1"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " F12 %s by enemies", player->faction == FP_GameEntityFaction_Nil ? "Attacked" : "Ignored"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
|
||||||
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " 1 %s HUD", game->play.debug_hide_hud ? "Show" : "Hide"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " 1 %s HUD", game->play.debug_hide_hud ? "Show" : "Hide"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
||||||
|
TELY_Render_TextF(renderer, draw_p, Dqn_V2_Zero, " 2 %s by enemies", player->faction == FP_GameEntityFaction_Nil ? "Attacked" : "Ignored"); draw_p.y += TELY_Render_FontHeight(renderer, assets);
|
||||||
TELY_Render_PopFont(renderer);
|
TELY_Render_PopFont(renderer);
|
||||||
TELY_Render_PopColourV4(renderer);
|
TELY_Render_PopColourV4(renderer);
|
||||||
|
|
||||||
@ -3656,14 +3658,15 @@ void FP_Render(FP_Game *game, TELY_Platform *platform, TELY_Renderer *renderer,
|
|||||||
player->inventory.kennels += 1;
|
player->inventory.kennels += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_F12)) {
|
if (TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_1))
|
||||||
|
game->play.debug_hide_hud = !game->play.debug_hide_hud;
|
||||||
|
|
||||||
|
if (TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_2)) {
|
||||||
player->faction = player->faction == FP_GameEntityFaction_Nil
|
player->faction = player->faction == FP_GameEntityFaction_Nil
|
||||||
? FP_GameEntityFaction_Friendly
|
? FP_GameEntityFaction_Friendly
|
||||||
: FP_GameEntityFaction_Nil;
|
: FP_GameEntityFaction_Nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TELY_Platform_InputScanCodeIsPressed(input, TELY_PlatformInputScanCode_1))
|
|
||||||
game->play.debug_hide_hud = !game->play.debug_hide_hud;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,6 +257,7 @@ struct FP_GameCamera
|
|||||||
{
|
{
|
||||||
Dqn_V2 size;
|
Dqn_V2 size;
|
||||||
Dqn_V2 world_pos;
|
Dqn_V2 world_pos;
|
||||||
|
Dqn_V2 world_pos_target;
|
||||||
Dqn_f32 rotate_rads;
|
Dqn_f32 rotate_rads;
|
||||||
Dqn_V2 scale;
|
Dqn_V2 scale;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user