mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-30 08:47:58 +03:00
Use references in zip line code; call IsHeld()
This commit is contained in:
parent
366ead88f2
commit
2078d0d0b2
1 changed files with 37 additions and 37 deletions
|
@ -43,15 +43,15 @@ void InitializeZipLine(short itemNumber)
|
|||
void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
|
||||
{
|
||||
auto& zipLineItem = g_Level.Items[itemNumber];
|
||||
auto& lara = *GetLaraInfo(laraItem);
|
||||
auto& player = GetLaraInfo(*laraItem);
|
||||
|
||||
if (zipLineItem.Status != ITEM_NOT_ACTIVE)
|
||||
return;
|
||||
|
||||
if (!(TrInput & IN_ACTION) ||
|
||||
if (!IsHeld(In::Action) ||
|
||||
laraItem->Animation.ActiveState != LS_IDLE ||
|
||||
laraItem->Animation.IsAirborne ||
|
||||
lara.Control.HandStatus != HandStatus::Free)
|
||||
player.Control.HandStatus != HandStatus::Free)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
|
|||
if (TestLaraPosition(ZipLineMountBasis, &zipLineItem, laraItem))
|
||||
{
|
||||
AlignLaraPosition(ZipLineMountedOffset, &zipLineItem, laraItem);
|
||||
lara.Control.HandStatus = HandStatus::Busy;
|
||||
player.Control.HandStatus = HandStatus::Busy;
|
||||
|
||||
laraItem->Animation.TargetState = LS_ZIP_LINE;
|
||||
do
|
||||
|
@ -72,82 +72,82 @@ void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
|
|||
zipLineItem.Status = ITEM_ACTIVE;
|
||||
zipLineItem.Flags |= IFLAG_INVISIBLE;
|
||||
|
||||
lara.Control.IsMoving = false;
|
||||
lara.Control.HandStatus = HandStatus::Busy;
|
||||
player.Control.IsMoving = false;
|
||||
player.Control.HandStatus = HandStatus::Busy;
|
||||
}
|
||||
}
|
||||
|
||||
void ControlZipLine(short itemNumber)
|
||||
{
|
||||
auto* zipLineItem = &g_Level.Items[itemNumber];
|
||||
auto* laraItem = LaraItem;
|
||||
auto& zipLineItem = g_Level.Items[itemNumber];
|
||||
auto& laraItem = *LaraItem;
|
||||
|
||||
if (zipLineItem->Status != ITEM_ACTIVE)
|
||||
if (zipLineItem.Status != ITEM_ACTIVE)
|
||||
return;
|
||||
|
||||
if (!(zipLineItem->Flags & IFLAG_INVISIBLE))
|
||||
if (!(zipLineItem.Flags & IFLAG_INVISIBLE))
|
||||
{
|
||||
auto* prevPos = (GameVector*)zipLineItem->Data;
|
||||
auto& prevPos = *(GameVector*)zipLineItem.Data;
|
||||
|
||||
zipLineItem->Pose.Position = prevPos->ToVector3i();
|
||||
zipLineItem.Pose.Position = prevPos.ToVector3i();
|
||||
|
||||
if (prevPos->RoomNumber != zipLineItem->RoomNumber)
|
||||
ItemNewRoom(itemNumber, prevPos->RoomNumber);
|
||||
if (prevPos.RoomNumber != zipLineItem.RoomNumber)
|
||||
ItemNewRoom(itemNumber, prevPos.RoomNumber);
|
||||
|
||||
zipLineItem->Status = ITEM_NOT_ACTIVE;
|
||||
zipLineItem.Status = ITEM_NOT_ACTIVE;
|
||||
SetAnimation(zipLineItem, 0);
|
||||
|
||||
RemoveActiveItem(itemNumber);
|
||||
return;
|
||||
}
|
||||
|
||||
if (zipLineItem->Animation.ActiveState == 1)
|
||||
if (zipLineItem.Animation.ActiveState == 1)
|
||||
{
|
||||
AnimateItem(zipLineItem);
|
||||
AnimateItem(&zipLineItem);
|
||||
return;
|
||||
}
|
||||
|
||||
AnimateItem(zipLineItem);
|
||||
AnimateItem(&zipLineItem);
|
||||
|
||||
// Accelerate.
|
||||
if (zipLineItem->Animation.Velocity.y < ZIP_LINE_VELOCITY_MAX)
|
||||
zipLineItem->Animation.Velocity.y += ZIP_LINE_VELOCITY_ACCEL;
|
||||
if (zipLineItem.Animation.Velocity.y < ZIP_LINE_VELOCITY_MAX)
|
||||
zipLineItem.Animation.Velocity.y += ZIP_LINE_VELOCITY_ACCEL;
|
||||
|
||||
// Translate.
|
||||
auto headingOrient = EulerAngles(ZIP_LINE_STEEPNESS_ANGLE, zipLineItem->Pose.Orientation.y, 0);
|
||||
TranslateItem(zipLineItem, headingOrient, zipLineItem->Animation.Velocity.y);
|
||||
auto headingOrient = EulerAngles(ZIP_LINE_STEEPNESS_ANGLE, zipLineItem.Pose.Orientation.y, 0);
|
||||
TranslateItem(&zipLineItem, headingOrient, zipLineItem.Animation.Velocity.y);
|
||||
|
||||
int vPos = zipLineItem->Pose.Position.y + CLICK(0.25f);
|
||||
auto pointColl = GetCollision(zipLineItem, zipLineItem->Pose.Orientation.y, zipLineItem->Animation.Velocity.y);
|
||||
int vPos = zipLineItem.Pose.Position.y + CLICK(0.25f);
|
||||
auto pointColl = GetCollision(&zipLineItem, zipLineItem.Pose.Orientation.y, zipLineItem.Animation.Velocity.y);
|
||||
|
||||
// Update zip line room number.
|
||||
if (pointColl.RoomNumber != zipLineItem->RoomNumber)
|
||||
if (pointColl.RoomNumber != zipLineItem.RoomNumber)
|
||||
ItemNewRoom(itemNumber, pointColl.RoomNumber);
|
||||
|
||||
if (pointColl.Position.Floor <= (vPos + CLICK(1)) || pointColl.Position.Ceiling >= (vPos - CLICK(1)))
|
||||
{
|
||||
// Dismount.
|
||||
if (laraItem->Animation.ActiveState == LS_ZIP_LINE)
|
||||
if (laraItem.Animation.ActiveState == LS_ZIP_LINE)
|
||||
{
|
||||
laraItem->Animation.TargetState = LS_JUMP_FORWARD;
|
||||
AnimateItem(laraItem);
|
||||
laraItem->Animation.IsAirborne = true;
|
||||
laraItem->Animation.Velocity.y = zipLineItem->Animation.Velocity.y / 4;
|
||||
laraItem->Animation.Velocity.z = zipLineItem->Animation.Velocity.y;
|
||||
laraItem.Animation.TargetState = LS_JUMP_FORWARD;
|
||||
AnimateItem(&laraItem);
|
||||
laraItem.Animation.IsAirborne = true;
|
||||
laraItem.Animation.Velocity.y = zipLineItem.Animation.Velocity.y / 4;
|
||||
laraItem.Animation.Velocity.z = zipLineItem.Animation.Velocity.y;
|
||||
}
|
||||
|
||||
SoundEffect(SFX_TR4_VONCROY_KNIFE_SWISH, &zipLineItem->Pose);
|
||||
SoundEffect(SFX_TR4_VONCROY_KNIFE_SWISH, &zipLineItem.Pose);
|
||||
RemoveActiveItem(itemNumber);
|
||||
zipLineItem->Status = ITEM_NOT_ACTIVE;
|
||||
zipLineItem->Flags -= IFLAG_INVISIBLE;
|
||||
zipLineItem.Status = ITEM_NOT_ACTIVE;
|
||||
zipLineItem.Flags -= IFLAG_INVISIBLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// "Parent" player to zip line.
|
||||
if (laraItem->Animation.ActiveState == LS_ZIP_LINE)
|
||||
laraItem->Pose.Position = zipLineItem->Pose.Position;
|
||||
if (laraItem.Animation.ActiveState == LS_ZIP_LINE)
|
||||
laraItem.Pose.Position = zipLineItem.Pose.Position;
|
||||
|
||||
// Whizz sound.
|
||||
SoundEffect(SFX_TR4_TRAIN_DOOR_CLOSE, &zipLineItem->Pose);
|
||||
SoundEffect(SFX_TR4_TRAIN_DOOR_CLOSE, &zipLineItem.Pose);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue