mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-27 23:31:36 -04:00
Merge branch 'main' of https://github.com/TakaRikka/dusk into better-tools
This commit is contained in:
+50
-10
@@ -29,12 +29,14 @@
|
||||
#endif
|
||||
|
||||
#if TARGET_PC
|
||||
#include "dusk/camera_operators.hpp"
|
||||
#include "dusk/commands.hpp"
|
||||
#include "dusk/frame_interpolation.h"
|
||||
#include "dusk/logging.h"
|
||||
#include "dusk/action_bindings.h"
|
||||
#include "dusk/mouse.h"
|
||||
#include "dusk/settings.h"
|
||||
#include "dusk/touch_camera.h"
|
||||
#include "imgui.h"
|
||||
#endif
|
||||
|
||||
@@ -196,7 +198,7 @@ int dCamMapToolData::Set(s32 param_0, s32 roomNo, fopAc_ac_c* param_2, u16 param
|
||||
return 0;
|
||||
}
|
||||
|
||||
engine_fn dCamera_c::engine_tbl[] = {
|
||||
DUSK_GAME_DATA engine_fn dCamera_c::engine_tbl[] = {
|
||||
&dCamera_c::letCamera, &dCamera_c::chaseCamera, &dCamera_c::lockonCamera,
|
||||
&dCamera_c::talktoCamera, &dCamera_c::subjectCamera, &dCamera_c::fixedPositionCamera,
|
||||
&dCamera_c::fixedFrameCamera, &dCamera_c::towerCamera, &dCamera_c::rideCamera,
|
||||
@@ -1058,7 +1060,7 @@ bool dCamera_c::Run() {
|
||||
mTicks++;
|
||||
return true;
|
||||
}
|
||||
if (executeDebugFlyCam()) {
|
||||
if (executeDebugFlyCam() || dusk::mods::camera_run_operators(this)) {
|
||||
mFrameCounter++;
|
||||
mTicks++;
|
||||
return true;
|
||||
@@ -7505,6 +7507,15 @@ static constexpr s16 FLYCAM_ROLL_SPEED = 256;
|
||||
static ImVec2 sFlyCamLastMousePos = {-1.f, -1.f};
|
||||
|
||||
#if TARGET_PC
|
||||
static constexpr f32 TOUCH_CAMERA_CSTICK_EXIT_THRESHOLD = 0.05f;
|
||||
static bool sTouchFreeCameraActive = false;
|
||||
|
||||
bool dCamera_c::isAimActive() {
|
||||
auto* link = daAlink_getAlinkActorClass();
|
||||
return link != nullptr && link->checkAimInputContext() &&
|
||||
dComIfGp_checkCameraAttentionStatus(link->field_0x317c, 0x10);
|
||||
}
|
||||
|
||||
bool dCamera_c::executeDebugFlyCam() {
|
||||
if (!dusk::getSettings().game.debugFlyCam) {
|
||||
if (mDebugFlyCam.initialized) {
|
||||
@@ -7598,6 +7609,10 @@ bool dCamera_c::executeDebugFlyCam() {
|
||||
sFlyCamLastMousePos = mouseValid ? io.MousePos : ImVec2{-1.0f, -1.0f};
|
||||
}
|
||||
|
||||
if (dusk::getSettings().game.enableMirrorMode) {
|
||||
stickX *= -1.0f;
|
||||
}
|
||||
|
||||
f32 verticalDisp = 0.0f;
|
||||
if (trigR >= FLYCAM_TRIGGER_DEADZONE) {
|
||||
verticalDisp += trigR;
|
||||
@@ -7646,16 +7661,30 @@ void dCamera_c::deactivateDebugFlyCam() {
|
||||
mDebugFlyCam.initialized = false;
|
||||
}
|
||||
|
||||
bool dCamera_c::canUseFreeCam() {
|
||||
return dusk::getSettings().game.freeCamera || dusk::getSettings().game.enableMouseCamera;
|
||||
}
|
||||
|
||||
bool dCamera_c::freeCamera() {
|
||||
if (canUseFreeCam() && mGear == 1) {
|
||||
f32 touchYawDp = 0.0f;
|
||||
f32 touchPitchDp = 0.0f;
|
||||
bool touchCameraMoved = false;
|
||||
const bool touchControlsEnabled = dusk::getSettings().game.enableTouchControls;
|
||||
if (touchControlsEnabled && !isAimActive()) {
|
||||
touchCameraMoved = dusk::touch_camera::consume_delta(touchYawDp, touchPitchDp);
|
||||
}
|
||||
if (!touchControlsEnabled ||
|
||||
mPadInfo.mCStick.mLastValue > TOUCH_CAMERA_CSTICK_EXIT_THRESHOLD)
|
||||
{
|
||||
sTouchFreeCameraActive = false;
|
||||
}
|
||||
if (touchCameraMoved) {
|
||||
sTouchFreeCameraActive = true;
|
||||
}
|
||||
|
||||
const bool useFreeCamera = dusk::getSettings().game.freeCamera ||
|
||||
dusk::getSettings().game.enableMouseCamera || sTouchFreeCameraActive;
|
||||
if (useFreeCamera && mGear == 1) {
|
||||
mGear = 0;
|
||||
}
|
||||
|
||||
if (!canUseFreeCam() || mCamStyle == 70)
|
||||
if (!useFreeCamera || mCamStyle == 70)
|
||||
{
|
||||
mCamParam.mManualMode = 0;
|
||||
return false;
|
||||
@@ -7666,6 +7695,17 @@ bool dCamera_c::freeCamera() {
|
||||
mCamParam.freeYAngle = mViewCache.mDirection.mInclination.Degree();
|
||||
}
|
||||
|
||||
if (touchCameraMoved) {
|
||||
mCamParam.mManualMode = 1;
|
||||
const f32 yawInput = dusk::getSettings().game.invertCameraXAxis ? -touchYawDp : touchYawDp;
|
||||
const f32 pitchInput =
|
||||
touchPitchDp * (dusk::getSettings().game.invertCameraYAxis ? -1.0f : 1.0f);
|
||||
mCamParam.freeXAngle += yawInput * dusk::getSettings().game.touchCameraXSensitivity *
|
||||
dusk::touch_camera::YAW_DEGREES_PER_DP;
|
||||
mCamParam.freeYAngle += pitchInput * dusk::getSettings().game.touchCameraYSensitivity *
|
||||
dusk::touch_camera::PITCH_DEGREES_PER_DP;
|
||||
}
|
||||
|
||||
cXyz camMovement = {mPadInfo.mCStick.mLastPosX, mPadInfo.mCStick.mLastPosY, 0.0f};
|
||||
f32 magnitude = sqrt(mPadInfo.mCStick.mLastPosX * mPadInfo.mCStick.mLastPosX + mPadInfo.mCStick.mLastPosY * mPadInfo.mCStick.mLastPosY);
|
||||
|
||||
@@ -7683,7 +7723,7 @@ bool dCamera_c::freeCamera() {
|
||||
|
||||
f32 yaw_rad = 0.0f;
|
||||
f32 pitch_rad = 0.0f;
|
||||
dusk::mouse::getCameraDeltas(yaw_rad, pitch_rad);
|
||||
dusk::mouse::get_camera_deltas(yaw_rad, pitch_rad);
|
||||
if (dusk::getSettings().game.enableMouseCamera && (yaw_rad != 0.0f || pitch_rad != 0.0f) &&
|
||||
!dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), 0x8))
|
||||
{
|
||||
@@ -11368,7 +11408,7 @@ static int camera_execute(camera_process_class* i_this) {
|
||||
const auto target = get_target_trim_height(i_this);
|
||||
const auto step = dusk::frame_interp::get_interpolation_step();
|
||||
const auto cur = camera->TrimHeight();
|
||||
const auto prev = (4.0f * cur - target) / 3.0f;
|
||||
const auto prev = (4.0f * cur - target) / 3.0f;
|
||||
const auto trim_height = prev + (cur - prev) * step;
|
||||
|
||||
widezoom_correction(i_this, trim_height);
|
||||
|
||||
Reference in New Issue
Block a user