mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-01 09:18:00 +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)
|
void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
|
||||||
{
|
{
|
||||||
auto& zipLineItem = g_Level.Items[itemNumber];
|
auto& zipLineItem = g_Level.Items[itemNumber];
|
||||||
auto& lara = *GetLaraInfo(laraItem);
|
auto& player = GetLaraInfo(*laraItem);
|
||||||
|
|
||||||
if (zipLineItem.Status != ITEM_NOT_ACTIVE)
|
if (zipLineItem.Status != ITEM_NOT_ACTIVE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!(TrInput & IN_ACTION) ||
|
if (!IsHeld(In::Action) ||
|
||||||
laraItem->Animation.ActiveState != LS_IDLE ||
|
laraItem->Animation.ActiveState != LS_IDLE ||
|
||||||
laraItem->Animation.IsAirborne ||
|
laraItem->Animation.IsAirborne ||
|
||||||
lara.Control.HandStatus != HandStatus::Free)
|
player.Control.HandStatus != HandStatus::Free)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
|
||||||
if (TestLaraPosition(ZipLineMountBasis, &zipLineItem, laraItem))
|
if (TestLaraPosition(ZipLineMountBasis, &zipLineItem, laraItem))
|
||||||
{
|
{
|
||||||
AlignLaraPosition(ZipLineMountedOffset, &zipLineItem, laraItem);
|
AlignLaraPosition(ZipLineMountedOffset, &zipLineItem, laraItem);
|
||||||
lara.Control.HandStatus = HandStatus::Busy;
|
player.Control.HandStatus = HandStatus::Busy;
|
||||||
|
|
||||||
laraItem->Animation.TargetState = LS_ZIP_LINE;
|
laraItem->Animation.TargetState = LS_ZIP_LINE;
|
||||||
do
|
do
|
||||||
|
@ -72,82 +72,82 @@ void ZipLineCollision(short itemNumber, ItemInfo* laraItem, CollisionInfo* coll)
|
||||||
zipLineItem.Status = ITEM_ACTIVE;
|
zipLineItem.Status = ITEM_ACTIVE;
|
||||||
zipLineItem.Flags |= IFLAG_INVISIBLE;
|
zipLineItem.Flags |= IFLAG_INVISIBLE;
|
||||||
|
|
||||||
lara.Control.IsMoving = false;
|
player.Control.IsMoving = false;
|
||||||
lara.Control.HandStatus = HandStatus::Busy;
|
player.Control.HandStatus = HandStatus::Busy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlZipLine(short itemNumber)
|
void ControlZipLine(short itemNumber)
|
||||||
{
|
{
|
||||||
auto* zipLineItem = &g_Level.Items[itemNumber];
|
auto& zipLineItem = g_Level.Items[itemNumber];
|
||||||
auto* laraItem = LaraItem;
|
auto& laraItem = *LaraItem;
|
||||||
|
|
||||||
if (zipLineItem->Status != ITEM_ACTIVE)
|
if (zipLineItem.Status != ITEM_ACTIVE)
|
||||||
return;
|
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)
|
if (prevPos.RoomNumber != zipLineItem.RoomNumber)
|
||||||
ItemNewRoom(itemNumber, prevPos->RoomNumber);
|
ItemNewRoom(itemNumber, prevPos.RoomNumber);
|
||||||
|
|
||||||
zipLineItem->Status = ITEM_NOT_ACTIVE;
|
zipLineItem.Status = ITEM_NOT_ACTIVE;
|
||||||
SetAnimation(zipLineItem, 0);
|
SetAnimation(zipLineItem, 0);
|
||||||
|
|
||||||
RemoveActiveItem(itemNumber);
|
RemoveActiveItem(itemNumber);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (zipLineItem->Animation.ActiveState == 1)
|
if (zipLineItem.Animation.ActiveState == 1)
|
||||||
{
|
{
|
||||||
AnimateItem(zipLineItem);
|
AnimateItem(&zipLineItem);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AnimateItem(zipLineItem);
|
AnimateItem(&zipLineItem);
|
||||||
|
|
||||||
// Accelerate.
|
// Accelerate.
|
||||||
if (zipLineItem->Animation.Velocity.y < ZIP_LINE_VELOCITY_MAX)
|
if (zipLineItem.Animation.Velocity.y < ZIP_LINE_VELOCITY_MAX)
|
||||||
zipLineItem->Animation.Velocity.y += ZIP_LINE_VELOCITY_ACCEL;
|
zipLineItem.Animation.Velocity.y += ZIP_LINE_VELOCITY_ACCEL;
|
||||||
|
|
||||||
// Translate.
|
// Translate.
|
||||||
auto headingOrient = EulerAngles(ZIP_LINE_STEEPNESS_ANGLE, zipLineItem->Pose.Orientation.y, 0);
|
auto headingOrient = EulerAngles(ZIP_LINE_STEEPNESS_ANGLE, zipLineItem.Pose.Orientation.y, 0);
|
||||||
TranslateItem(zipLineItem, headingOrient, zipLineItem->Animation.Velocity.y);
|
TranslateItem(&zipLineItem, headingOrient, zipLineItem.Animation.Velocity.y);
|
||||||
|
|
||||||
int vPos = zipLineItem->Pose.Position.y + CLICK(0.25f);
|
int vPos = zipLineItem.Pose.Position.y + CLICK(0.25f);
|
||||||
auto pointColl = GetCollision(zipLineItem, zipLineItem->Pose.Orientation.y, zipLineItem->Animation.Velocity.y);
|
auto pointColl = GetCollision(&zipLineItem, zipLineItem.Pose.Orientation.y, zipLineItem.Animation.Velocity.y);
|
||||||
|
|
||||||
// Update zip line room number.
|
// Update zip line room number.
|
||||||
if (pointColl.RoomNumber != zipLineItem->RoomNumber)
|
if (pointColl.RoomNumber != zipLineItem.RoomNumber)
|
||||||
ItemNewRoom(itemNumber, pointColl.RoomNumber);
|
ItemNewRoom(itemNumber, pointColl.RoomNumber);
|
||||||
|
|
||||||
if (pointColl.Position.Floor <= (vPos + CLICK(1)) || pointColl.Position.Ceiling >= (vPos - CLICK(1)))
|
if (pointColl.Position.Floor <= (vPos + CLICK(1)) || pointColl.Position.Ceiling >= (vPos - CLICK(1)))
|
||||||
{
|
{
|
||||||
// Dismount.
|
// Dismount.
|
||||||
if (laraItem->Animation.ActiveState == LS_ZIP_LINE)
|
if (laraItem.Animation.ActiveState == LS_ZIP_LINE)
|
||||||
{
|
{
|
||||||
laraItem->Animation.TargetState = LS_JUMP_FORWARD;
|
laraItem.Animation.TargetState = LS_JUMP_FORWARD;
|
||||||
AnimateItem(laraItem);
|
AnimateItem(&laraItem);
|
||||||
laraItem->Animation.IsAirborne = true;
|
laraItem.Animation.IsAirborne = true;
|
||||||
laraItem->Animation.Velocity.y = zipLineItem->Animation.Velocity.y / 4;
|
laraItem.Animation.Velocity.y = zipLineItem.Animation.Velocity.y / 4;
|
||||||
laraItem->Animation.Velocity.z = zipLineItem->Animation.Velocity.y;
|
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);
|
RemoveActiveItem(itemNumber);
|
||||||
zipLineItem->Status = ITEM_NOT_ACTIVE;
|
zipLineItem.Status = ITEM_NOT_ACTIVE;
|
||||||
zipLineItem->Flags -= IFLAG_INVISIBLE;
|
zipLineItem.Flags -= IFLAG_INVISIBLE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// "Parent" player to zip line.
|
// "Parent" player to zip line.
|
||||||
if (laraItem->Animation.ActiveState == LS_ZIP_LINE)
|
if (laraItem.Animation.ActiveState == LS_ZIP_LINE)
|
||||||
laraItem->Pose.Position = zipLineItem->Pose.Position;
|
laraItem.Pose.Position = zipLineItem.Pose.Position;
|
||||||
|
|
||||||
// Whizz sound.
|
// 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