mirror of
https://github.com/XProger/OpenLara.git
synced 2025-07-31 18:30:19 +02:00
right stick for look
This commit is contained in:
16
src/camera.h
16
src/camera.h
@@ -44,7 +44,7 @@ struct Camera : ICamera {
|
|||||||
Frustum *frustum;
|
Frustum *frustum;
|
||||||
|
|
||||||
float fov, aspect, znear, zfar;
|
float fov, aspect, znear, zfar;
|
||||||
vec3 lookAngle, targetAngle;
|
vec3 lookAngle, targetAngle, viewAngle;
|
||||||
mat4 mViewInv;
|
mat4 mViewInv;
|
||||||
|
|
||||||
float timer;
|
float timer;
|
||||||
@@ -366,6 +366,8 @@ struct Camera : ICamera {
|
|||||||
speed = CAM_SPEED_COMBAT;
|
speed = CAM_SPEED_COMBAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
viewAngle = vec3(0.0f);
|
||||||
|
|
||||||
if (mode == MODE_CUTSCENE) {
|
if (mode == MODE_CUTSCENE) {
|
||||||
ASSERT(level->cameraFramesCount && level->cameraFrames);
|
ASSERT(level->cameraFramesCount && level->cameraFrames);
|
||||||
|
|
||||||
@@ -439,9 +441,17 @@ struct Camera : ICamera {
|
|||||||
if (fabsf(lookAngle.x - CAM_FOLLOW_ANGLE) < EPS) lookAngle.x = CAM_FOLLOW_ANGLE;
|
if (fabsf(lookAngle.x - CAM_FOLLOW_ANGLE) < EPS) lookAngle.x = CAM_FOLLOW_ANGLE;
|
||||||
if (lookAngle.y < EPS) lookAngle.y = 0.0f;
|
if (lookAngle.y < EPS) lookAngle.y = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vec2 R = Input::joy[Core::settings.controls[cameraIndex].joyIndex].R;
|
||||||
|
R.x = sign(R.x) * max(0.0f, (fabsf(R.x) - INPUT_JOY_DZ_STICK) / (1.0f - INPUT_JOY_DZ_STICK));
|
||||||
|
R.y = sign(R.y) * max(0.0f, (fabsf(R.y) - INPUT_JOY_DZ_STICK) / (1.0f - INPUT_JOY_DZ_STICK));
|
||||||
|
|
||||||
|
viewAngle.x = -R.y * PIH;
|
||||||
|
viewAngle.y = R.x * PIH;
|
||||||
|
viewAngle.z = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
targetAngle = owner->angle + lookAngle;
|
targetAngle = owner->angle + lookAngle + viewAngle;
|
||||||
|
|
||||||
targetAngle.x = clampAngle(targetAngle.x);
|
targetAngle.x = clampAngle(targetAngle.x);
|
||||||
targetAngle.y = clampAngle(targetAngle.y);
|
targetAngle.y = clampAngle(targetAngle.y);
|
||||||
@@ -503,7 +513,7 @@ struct Camera : ICamera {
|
|||||||
if (mode == MODE_LOOK)
|
if (mode == MODE_LOOK)
|
||||||
offset = CAM_OFFSET_LOOK;
|
offset = CAM_OFFSET_LOOK;
|
||||||
else
|
else
|
||||||
offset = (mode == MODE_COMBAT ? CAM_OFFSET_COMBAT : CAM_OFFSET_FOLLOW) * cosf(targetAngle.x);
|
offset = (mode == MODE_COMBAT ? CAM_OFFSET_COMBAT : CAM_OFFSET_FOLLOW);
|
||||||
|
|
||||||
vec3 dir = vec3(targetAngle.x, targetAngle.y) * offset;
|
vec3 dir = vec3(targetAngle.x, targetAngle.y) * offset;
|
||||||
to.pos = target.pos - dir;
|
to.pos = target.pos - dir;
|
||||||
|
@@ -1301,7 +1301,7 @@ struct Lara : Character {
|
|||||||
updateTargets();
|
updateTargets();
|
||||||
|
|
||||||
Controller *lookTarget = canLookAt() ? target : NULL;
|
Controller *lookTarget = canLookAt() ? target : NULL;
|
||||||
if (camera->mode == Camera::MODE_LOOK) {
|
if (camera->mode == Camera::MODE_LOOK || (lookTarget == NULL && (camera->viewAngle.x != 0.0f || camera->viewAngle.y != 0.0f))) {
|
||||||
vec3 p = pos + vec3(camera->targetAngle.x, camera->targetAngle.y) * 8192.0f;
|
vec3 p = pos + vec3(camera->targetAngle.x, camera->targetAngle.y) * 8192.0f;
|
||||||
Character::lookAtPos(&p);
|
Character::lookAtPos(&p);
|
||||||
} else
|
} else
|
||||||
|
@@ -1304,7 +1304,6 @@ struct Video {
|
|||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
if (!audioDecoder) return 0;
|
if (!audioDecoder) return 0;
|
||||||
Sound::XA *xa = (Sound::XA*)audioDecoder;
|
|
||||||
|
|
||||||
int ret = audioDecoder->decode(frames, count);
|
int ret = audioDecoder->decode(frames, count);
|
||||||
if (ret < count) {
|
if (ret < count) {
|
||||||
|
Reference in New Issue
Block a user