restore CF_FOLLOW_CENTER camera flag functionality (#640)

* restore CF_FOLLOW_CENTER camera flag functionality
* remove useless comments, use IsLara;
* Fix formatting

Co-authored-by: Lwmte <3331699+Lwmte@users.noreply.github.com>
This commit is contained in:
Troye 2022-08-07 05:39:13 -05:00 committed by GitHub
parent 37c4b4e4c2
commit 58be730a31
7 changed files with 27 additions and 22 deletions

1
.gitignore vendored
View file

@ -24,3 +24,4 @@ packages/
*.wav *.wav
*.trc *.trc
*.str *.str
*.ten

View file

@ -14,6 +14,7 @@ Global
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.ActiveCfg = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.ActiveCfg = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x64.Build.0 = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.ActiveCfg = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.ActiveCfg = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.Build.0 = Debug|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Debug|x86.Build.0 = Debug|Win32
{15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.ActiveCfg = Release|Win32 {15AB0220-541C-4DA1-94EB-ED3C47E4582E}.Release|x64.ActiveCfg = Release|Win32

View file

@ -171,7 +171,6 @@ void lara_as_pushable_push(ItemInfo* item, CollisionInfo* coll)
Camera.targetAngle = ANGLE(35.0f); Camera.targetAngle = ANGLE(35.0f);
Camera.targetElevation = -ANGLE(25.0f); Camera.targetElevation = -ANGLE(25.0f);
Camera.flags = CF_FOLLOW_CENTER; Camera.flags = CF_FOLLOW_CENTER;
Camera.laraNode = LM_TORSO;
} }
// State: LS_PUSHABLE_PULL (37) // State: LS_PUSHABLE_PULL (37)
@ -186,7 +185,6 @@ void lara_as_pushable_pull(ItemInfo* item, CollisionInfo* coll)
Camera.targetAngle = ANGLE(35.0f); Camera.targetAngle = ANGLE(35.0f);
Camera.targetElevation = -ANGLE(25.0f); Camera.targetElevation = -ANGLE(25.0f);
Camera.flags = CF_FOLLOW_CENTER; Camera.flags = CF_FOLLOW_CENTER;
Camera.laraNode = LM_TORSO;
} }
// State: LS_PUSHABLE_GRAB (38) // State: LS_PUSHABLE_GRAB (38)

View file

@ -445,7 +445,7 @@ void lara_as_slopeclimb(ItemInfo* item, CollisionInfo* coll)
else else
item->Pose.Orientation.x++; item->Pose.Orientation.x++;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
if (Camera.type != CameraType::Chase) if (Camera.type != CameraType::Chase)
return; return;
@ -464,7 +464,7 @@ void lara_as_slopefall(ItemInfo* item, CollisionInfo* coll)
else else
item->Pose.Orientation.x++; item->Pose.Orientation.x++;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
if (Camera.type != CameraType::Chase) if (Camera.type != CameraType::Chase)
return; return;
@ -629,7 +629,7 @@ void lara_as_slopeclimbup(ItemInfo* item, CollisionInfo* coll)
else else
item->Pose.Orientation.x++; item->Pose.Orientation.x++;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
if (Camera.type != CameraType::Chase) if (Camera.type != CameraType::Chase)
return; // If camera mode isn't chase (0) then don't change camera angles. return; // If camera mode isn't chase (0) then don't change camera angles.
@ -660,7 +660,7 @@ void lara_as_slopeclimbdown(ItemInfo* item, CollisionInfo* coll)
else else
item->Pose.Orientation.x++; item->Pose.Orientation.x++;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
if (Camera.type != CameraType::Chase) if (Camera.type != CameraType::Chase)
return; return;
@ -695,7 +695,7 @@ void lara_as_sclimbstart(ItemInfo* item, CollisionInfo* coll)
if (frac > 1.0f) if (frac > 1.0f)
frac = 1.0f; frac = 1.0f;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
int distance = TestLaraWall(item, 0, SECTOR(1.5f), 0) ? SECTOR(1) : CLICK(6.5f); int distance = TestLaraWall(item, 0, SECTOR(1.5f), 0) ? SECTOR(1) : CLICK(6.5f);
@ -717,7 +717,7 @@ void lara_as_sclimbstart(ItemInfo* item, CollisionInfo* coll)
} }
else// if (item->animNumber == LA_OVERHANG_MONKEY_SLOPE_CONCAVE) else// if (item->animNumber == LA_OVERHANG_MONKEY_SLOPE_CONCAVE)
{ {
//Camera.flags = 1; //Camera.flags = CF_FOLLOW_CENTER;
Camera.targetElevation = -ANGLE(11.25f); Camera.targetElevation = -ANGLE(11.25f);
Camera.targetDistance = CLICK(6.5f); Camera.targetDistance = CLICK(6.5f);
Camera.speed = 15; Camera.speed = 15;
@ -736,7 +736,7 @@ void lara_as_sclimbstop(ItemInfo* item, CollisionInfo* coll)
// Following camera effect during the slope to underlying monkey transition. // Following camera effect during the slope to underlying monkey transition.
if (item->Animation.AnimNumber == LA_OVERHANG_SLOPE_MONKEY_CONVEX) if (item->Animation.AnimNumber == LA_OVERHANG_SLOPE_MONKEY_CONVEX)
{ {
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
Camera.targetDistance = CLICK(6.5f); Camera.targetDistance = CLICK(6.5f);
Camera.targetElevation = ANGLE(11.25f); Camera.targetElevation = ANGLE(11.25f);
Camera.targetspeed = 15; Camera.targetspeed = 15;
@ -751,7 +751,7 @@ void lara_as_sclimbstop(ItemInfo* item, CollisionInfo* coll)
if (frac > 1.0f) if (frac > 1.0f)
frac = 1.0f; frac = 1.0f;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
if (item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameEnd) if (item->Animation.FrameNumber < g_Level.Anims[item->Animation.AnimNumber].frameEnd)
{ {

View file

@ -142,7 +142,7 @@ void InitialiseCamera()
Camera.numberFrames = 1; Camera.numberFrames = 1;
Camera.type = CameraType::Chase; Camera.type = CameraType::Chase;
Camera.speed = 1; Camera.speed = 1;
Camera.flags = CF_FOLLOW_CENTER; Camera.flags = CF_NONE;
Camera.bounce = 0; Camera.bounce = 0;
Camera.number = -1; Camera.number = -1;
Camera.fixedCamera = false; Camera.fixedCamera = false;
@ -1544,20 +1544,24 @@ void CalculateCamera()
Camera.target.roomNumber = item->RoomNumber; Camera.target.roomNumber = item->RoomNumber;
Camera.target.y = y; Camera.target.y = y;
auto shift = (bounds->X1 + bounds->X2 + bounds->Z1 + bounds->Z2) / 4; x = item->Pose.Position.x;
x = item->Pose.Position.x + shift * phd_sin(item->Pose.Orientation.y); z = item->Pose.Position.z;
z = item->Pose.Position.z + shift * phd_cos(item->Pose.Orientation.y);
if (Camera.flags == CF_FOLLOW_CENTER) //Troye Aug. 7th 2022
{
auto shift = (bounds->Z1 + bounds->Z2) / 2;
x += shift * phd_sin(item->Pose.Orientation.y);
z += shift * phd_cos(item->Pose.Orientation.y);
}
Camera.target.x = x; Camera.target.x = x;
Camera.target.z = z; Camera.target.z = z;
if (item->ObjectNumber == ID_LARA) // CF_FOLLOW_CENTER sets target on the item, ConfirmCameraTargetPos overrides this target,
{ // hence the flag check. Troye Aug. 7th 2022
if (item->IsLara() && Camera.flags != CF_FOLLOW_CENTER)
ConfirmCameraTargetPos(); ConfirmCameraTargetPos();
x = Camera.target.x;
y = Camera.target.y;
z = Camera.target.z;
}
if (fixedCamera == Camera.fixedCamera) if (fixedCamera == Camera.fixedCamera)
{ {
@ -2125,4 +2129,4 @@ void HandleOptics()
ResetLaraFlex(LaraItem); ResetLaraFlex(LaraItem);
TrInput &= ~IN_LOOK; TrInput &= ~IN_LOOK;
} }

View file

@ -43,6 +43,7 @@ struct CAMERA_INFO
enum CAMERA_FLAGS enum CAMERA_FLAGS
{ {
CF_NONE = 0,
CF_FOLLOW_CENTER = 1, CF_FOLLOW_CENTER = 1,
CF_NO_CHUNKY = 2, CF_NO_CHUNKY = 2,
CF_CHASE_OBJECT = 3, CF_CHASE_OBJECT = 3,

View file

@ -69,7 +69,7 @@ namespace TEN::Entities::TR3
Lara.Control.HandStatus = HandStatus::Busy; Lara.Control.HandStatus = HandStatus::Busy;
Lara.Control.Weapon.GunType = LaraWeaponType::None; Lara.Control.Weapon.GunType = LaraWeaponType::None;
Camera.flags = 1; Camera.flags = CF_FOLLOW_CENTER;
Camera.targetAngle = ANGLE(170.0f); Camera.targetAngle = ANGLE(170.0f);
Camera.targetElevation = -ANGLE(25.0f); Camera.targetElevation = -ANGLE(25.0f);
} }