1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-13 16:44:50 +02:00

#3 fix chest & head rotations; #15 fix WebGL build

This commit is contained in:
XProger
2017-09-01 03:50:12 +03:00
parent 3a1156cff2
commit 78fd04c061
5 changed files with 16 additions and 5 deletions

View File

@@ -42,7 +42,7 @@ struct Camera : Controller {
bool firstPerson; bool firstPerson;
bool isVR; bool isVR;
Camera(IGame *game, Character *owner) : Controller(game, owner ? owner->entity : 0), owner(owner), frustum(new Frustum()), timer(-1.0f), viewIndex(-1), viewIndexLast(-1), viewTarget(NULL), reflectPlane(NULL), isVR(false) { Camera(IGame *game, Character *owner) : Controller(game, owner ? owner->entity : 0), owner(owner), frustum(new Frustum()), timer(-1.0f), reflectPlane(NULL), viewIndex(-1), viewIndexLast(-1), viewTarget(NULL), isVR(false) {
changeView(false); changeView(false);
if (owner->getEntity().type != TR::Entity::LARA && level->cameraFrames) { if (owner->getEntity().type != TR::Entity::LARA && level->cameraFrames) {
state = STATE_CUTSCENE; state = STATE_CUTSCENE;

View File

@@ -29,6 +29,8 @@ struct Character : Controller {
Controller *viewTarget; Controller *viewTarget;
int jointChest; int jointChest;
int jointHead; int jointHead;
vec4 rangeChest;
vec4 rangeHead;
vec3 velocity; vec3 velocity;
float angleExt; float angleExt;
@@ -47,6 +49,9 @@ struct Character : Controller {
stepHeight = 256; stepHeight = 256;
dropHeight = -256; dropHeight = -256;
rangeChest = vec4(-0.80f, 0.80f, -0.75f, 0.75f) * PI;
rangeHead = vec4(-0.25f, 0.25f, -0.50f, 0.50f) * PI;
animation.initOverrides(); animation.initOverrides();
rotHead = rotChest = quat(0, 0, 0, 1); rotHead = rotChest = quat(0, 0, 0, 1);
@@ -202,7 +207,7 @@ struct Character : Controller {
quat rot; quat rot;
if (jointChest > -1) { if (jointChest > -1) {
if (aim(target, jointChest, vec4(-PI * 0.8f, PI * 0.8f, -PI * 0.75f, PI * 0.75f), rot)) if (aim(target, jointChest, rangeChest, rot))
rotChest = rotChest.slerp(quat(0, 0, 0, 1).slerp(rot, 0.5f), speed); rotChest = rotChest.slerp(quat(0, 0, 0, 1).slerp(rot, 0.5f), speed);
else else
rotChest = rotChest.slerp(quat(0, 0, 0, 1), speed); rotChest = rotChest.slerp(quat(0, 0, 0, 1), speed);
@@ -210,7 +215,7 @@ struct Character : Controller {
} }
if (jointHead > -1) { if (jointHead > -1) {
if (aim(target, jointHead, vec4(-PI * 0.25f, PI * 0.25f, -PI * 0.5f, PI * 0.5f), rot)) if (aim(target, jointHead, rangeHead, rot))
rotHead = rotHead.slerp(rot, speed); rotHead = rotHead.slerp(rot, speed);
else else
rotHead = rotHead.slerp(quat(0, 0, 0, 1), speed); rotHead = rotHead.slerp(quat(0, 0, 0, 1), speed);

View File

@@ -221,7 +221,7 @@ namespace TR {
ANIM_CMD_EFFECT , ANIM_CMD_EFFECT ,
}; };
enum Effect : uint32 { enum Effect : int32 {
NONE = -1, NONE = -1,
ROTATE_180 , ROTATE_180 ,
FLOOR_SHAKE , FLOOR_SHAKE ,

View File

@@ -406,6 +406,9 @@ struct Lara : Character {
jointChest = 7; jointChest = 7;
jointHead = 14; jointHead = 14;
rangeChest = vec4(-0.40f, 0.40f, -0.90f, 0.90f) * PI;
rangeHead = vec4(-0.25f, 0.25f, -0.50f, 0.50f) * PI;
oxygen = LARA_MAX_OXYGEN; oxygen = LARA_MAX_OXYGEN;
hitDir = -1; hitDir = -1;
damageTime = LARA_DAMAGE_TIME; damageTime = LARA_DAMAGE_TIME;
@@ -437,7 +440,7 @@ struct Lara : Character {
//reset(14, vec3(40448, 3584, 60928), PI * 0.5f, STAND_ONWATER); // gym (pool) //reset(14, vec3(40448, 3584, 60928), PI * 0.5f, STAND_ONWATER); // gym (pool)
//reset(14, vec3(20215, 6656, 52942), PI); // level 1 (bridge) //reset(14, vec3(20215, 6656, 52942), PI); // level 1 (bridge)
//reset(33, vec3(48229, 4608, 78420), 270 * DEG2RAD); // level 1 (end) //reset(33, vec3(48229, 4608, 78420), 270 * DEG2RAD); // level 1 (end)
reset(15, vec3(70067, -256, 29104), -0.68f); // level 2 (pool) //reset(15, vec3(70067, -256, 29104), -0.68f); // level 2 (pool)
//reset(26, vec3(71980, 1546, 19000), 270 * DEG2RAD); // level 2 (underwater switch) //reset(26, vec3(71980, 1546, 19000), 270 * DEG2RAD); // level 2 (underwater switch)
//reset(61, vec3(27221, -1024, 29205), PI * 0.5f); // level 2 (blade) //reset(61, vec3(27221, -1024, 29205), PI * 0.5f); // level 2 (blade)
//reset(43, vec3(31400, -2560, 25200), PI); // level 2 (reach) //reset(43, vec3(31400, -2560, 25200), PI); // level 2 (reach)

View File

@@ -192,6 +192,9 @@ struct Level : IGame {
} }
virtual void playTrack(int track, bool restart = false) { virtual void playTrack(int track, bool restart = false) {
#ifndef WIN32
return;
#endif
if (track == 0) if (track == 0)
track = TR::LEVEL_INFO[level.id].ambientTrack; track = TR::LEVEL_INFO[level.id].ambientTrack;