TombEngine/TR5Main/Game/Lara/lara_surface.cpp

226 lines
3.9 KiB
C++
Raw Normal View History

#include "framework.h"
2020-08-09 22:09:14 -03:00
#include "lara_surface.h"
#include "lara_tests.h"
2021-09-19 23:41:26 +03:00
#include "control/control.h"
2019-11-21 07:43:34 +01:00
#include "camera.h"
#include "collide.h"
#include "items.h"
#include "Lara.h"
#include "level.h"
#include "input.h"
#include "lara_collide.h"
#include "lara_swim.h"
2021-09-25 11:27:47 +02:00
void lara_col_surftread(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
Lara.moveAngle = item->pos.yRot;
2019-11-21 07:43:34 +01:00
LaraSurfaceCollision(item, coll);
}
2021-02-03 01:50:59 -03:00
void lara_col_surfright(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
Lara.moveAngle = item->pos.yRot + ANGLE(90);
2019-11-21 07:43:34 +01:00
LaraSurfaceCollision(item, coll);
}
2021-02-03 01:50:59 -03:00
void lara_col_surfleft(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
Lara.moveAngle = item->pos.yRot - ANGLE(90);
2019-11-21 07:43:34 +01:00
LaraSurfaceCollision(item, coll);
}
2021-02-03 01:50:59 -03:00
void lara_col_surfback(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
Lara.moveAngle = item->pos.yRot + ANGLE(180);
2019-11-21 07:43:34 +01:00
LaraSurfaceCollision(item, coll);
}
2021-02-03 01:50:59 -03:00
void lara_col_surfswim(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
2021-09-19 17:48:32 +03:00
coll->Setup.BadHeightUp = -STEPUP_HEIGHT;
Lara.moveAngle = item->pos.yRot;
2019-11-21 07:43:34 +01:00
LaraSurfaceCollision(item, coll);
TestLaraWaterClimbOut(item, coll);
TestLaraLadderClimbOut(item, coll);
2019-11-21 07:43:34 +01:00
}
2021-02-03 01:50:59 -03:00
void lara_as_surftread(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
item->fallspeed -= 4;
if (item->fallspeed < 0)
item->fallspeed = 0;
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_WATER_DEATH;
2019-11-21 07:43:34 +01:00
return;
}
if (TrInput & IN_LOOK)
{
LookUpDown();
return;
}
if (TrInput & IN_LEFT)
{
item->pos.yRot -= ANGLE(4);
2019-11-21 07:43:34 +01:00
}
else if (TrInput & IN_RIGHT)
{
item->pos.yRot += ANGLE(4);
2019-11-21 07:43:34 +01:00
}
if (TrInput & IN_FORWARD)
{
item->goalAnimState = LS_ONWATER_FORWARD;
2019-11-21 07:43:34 +01:00
}
else if (TrInput & IN_BACK)
{
item->goalAnimState = LS_ONWATER_BACK;
2019-11-21 07:43:34 +01:00
}
if (TrInput & IN_LSTEP)
{
item->goalAnimState = LS_ONWATER_LEFT;
2019-11-21 07:43:34 +01:00
}
else if (TrInput & IN_RSTEP)
{
item->goalAnimState = LS_ONWATER_RIGHT;
2019-11-21 07:43:34 +01:00
}
if (TrInput & IN_JUMP)
{
2019-12-05 07:23:30 +01:00
Lara.diveCount++;
if (Lara.diveCount == 10)
SwimDive(item);
2019-11-21 07:43:34 +01:00
}
else
Lara.diveCount = 0;
}
2021-02-03 01:50:59 -03:00
void lara_as_surfright(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_WATER_DEATH;
2019-11-21 07:43:34 +01:00
return;
}
Lara.diveCount = 0;
if (TrInput & IN_LEFT)
{
item->pos.yRot -= ANGLE(2);
2019-11-21 07:43:34 +01:00
}
else if (TrInput & IN_RIGHT)
{
item->pos.yRot += ANGLE(2);
2019-11-21 07:43:34 +01:00
}
if (!(TrInput & IN_RSTEP))
{
item->goalAnimState = LS_ONWATER_STOP;
2019-11-21 07:43:34 +01:00
}
item->fallspeed += 8;
if (item->fallspeed > 60)
item->fallspeed = 60;
}
2021-02-03 01:50:59 -03:00
void lara_as_surfleft(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_WATER_DEATH;
2019-11-21 07:43:34 +01:00
return;
}
Lara.diveCount = 0;
if (TrInput & IN_LEFT)
{
item->pos.yRot -= ANGLE(2);
2019-11-21 07:43:34 +01:00
}
else if (TrInput & IN_RIGHT)
{
item->pos.yRot += ANGLE(2);
2019-11-21 07:43:34 +01:00
}
if (!(TrInput & IN_LSTEP))
{
item->goalAnimState = LS_ONWATER_STOP;
2019-11-21 07:43:34 +01:00
}
item->fallspeed += 8;
if (item->fallspeed > 60)
item->fallspeed = 60;
}
2021-02-03 01:50:59 -03:00
void lara_as_surfback(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_WATER_DEATH;
2019-11-21 07:43:34 +01:00
return;
}
Lara.diveCount = 0;
if (TrInput & IN_LEFT)
{
item->pos.yRot -= ANGLE(2);
2019-11-21 07:43:34 +01:00
}
else if (TrInput & IN_RIGHT)
{
item->pos.yRot += ANGLE(2);
2019-11-21 07:43:34 +01:00
}
if (!(TrInput & IN_BACK))
{
item->goalAnimState = LS_ONWATER_STOP;
2019-11-21 07:43:34 +01:00
}
item->fallspeed += 8;
if (item->fallspeed > 60)
item->fallspeed = 60;
}
2021-02-03 01:50:59 -03:00
void lara_as_surfswim(ITEM_INFO* item, COLL_INFO* coll)
2019-11-21 07:43:34 +01:00
{
if (item->hitPoints <= 0)
{
item->goalAnimState = LS_WATER_DEATH;
2019-11-21 07:43:34 +01:00
return;
}
Lara.diveCount = 0;
if (TrInput & IN_LEFT)
{
item->pos.yRot -= ANGLE(4);
}
else if (TrInput & IN_RIGHT)
{
item->pos.yRot += ANGLE(4);
}
if (!(TrInput & IN_FORWARD))
item->goalAnimState = LS_ONWATER_STOP;
2019-11-21 07:43:34 +01:00
if (TrInput & IN_JUMP)
item->goalAnimState = LS_ONWATER_STOP;
2019-11-21 07:43:34 +01:00
item->fallspeed += 8;
if (item->fallspeed > 60)
item->fallspeed = 60;
}
2021-02-03 01:50:59 -03:00
void lara_as_waterout(ITEM_INFO* item, COLL_INFO* coll)
{
2021-09-10 00:20:59 +03:00
coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpaz = false;
Camera.flags = CF_FOLLOW_CENTER;
Camera.laraNode = LM_HIPS; //forces the camera to follow Lara instead of snapping
}