mirror of
https://github.com/TES3MP/TES3MP.git
synced 2025-09-26 14:36:40 -04:00
[General] Temporarily revert to original rotation animation sync
I originally added rotation animation sync as part of commit 068a45be8799b36bf47086767245fe86eb473af5. Unfortunately, it meant the PlayerPosition packets were now twice as large as they had been before, which was less than ideal for such a frequently sent packet, which is why Koncord switched to a more optimized approach in commits 5f30dfd5db19da0faf12fc09fae34968e61ec4d4 and d67db1a9bdbda521ccc57aa4fa386e040197fc09. Recently, there have since been some rotation animation problems in OpenMW, which have broken the way Koncord's approach looks. My original approach still looks somewhat okay, so I'm switching back to it until we can figure out how to reuse it under the current circumstances.
This commit is contained in:
parent
3944c8aec6
commit
038757b91a
@ -1871,6 +1871,10 @@ void CharacterController::update(float duration)
|
||||
MWMechanics::Movement &movementSettings = cls.getMovementSettings(mPtr);
|
||||
localPlayer->direction.pos[0] = movementSettings.mPosition[0];
|
||||
localPlayer->direction.pos[1] = movementSettings.mPosition[1];
|
||||
localPlayer->direction.pos[2] = movementSettings.mPosition[2];
|
||||
localPlayer->direction.rot[0] = movementSettings.mRotation[0];
|
||||
localPlayer->direction.rot[1] = movementSettings.mRotation[1];
|
||||
localPlayer->direction.rot[2] = movementSettings.mRotation[2];
|
||||
}
|
||||
else if (mwmp::Main::get().getCellController()->isLocalActor(mPtr))
|
||||
{
|
||||
|
@ -133,14 +133,20 @@ void DedicatedPlayer::move(float dt)
|
||||
else
|
||||
world->moveObject(ptr, position.pos[0], position.pos[1], position.pos[2]);
|
||||
|
||||
float oldZ = ptr.getRefData().getPosition().rot[2];
|
||||
world->rotateObject(ptr, position.rot[0], 0, oldZ);
|
||||
world->rotateObject(ptr, position.rot[0], 0, position.rot[2]);
|
||||
|
||||
MWMechanics::Movement *move = &ptr.getClass().getMovementSettings(ptr);
|
||||
move->mPosition[0] = direction.pos[0];
|
||||
move->mPosition[1] = direction.pos[1];
|
||||
move->mPosition[2] = direction.pos[2];
|
||||
|
||||
MWMechanics::zTurn(ptr, position.rot[2], osg::DegreesToRadians(1.0));
|
||||
// Make sure the values are valid, or we'll get an infinite error loop
|
||||
if (!isnan(direction.rot[0]) && !isnan(direction.rot[1]) && !isnan(direction.rot[2]))
|
||||
{
|
||||
move->mRotation[0] = direction.rot[0];
|
||||
move->mRotation[1] = direction.rot[1];
|
||||
move->mRotation[2] = direction.rot[2];
|
||||
}
|
||||
}
|
||||
|
||||
void DedicatedPlayer::setBaseInfo()
|
||||
|
@ -383,7 +383,7 @@ void LocalPlayer::updatePosition(bool forceUpdate)
|
||||
position = ptrPlayer.getRefData().getPosition();
|
||||
|
||||
bool posIsChanging = (direction.pos[0] != 0 || direction.pos[1] != 0 ||
|
||||
position.rot[0] != oldRot[0] || position.rot[2] != oldRot[1]);
|
||||
direction.rot[0] != 0 || direction.rot[1] != 0 || direction.rot[2] != 0);
|
||||
|
||||
// Animations can change a player's position without actually creating directional movement,
|
||||
// so update positions accordingly
|
||||
|
@ -19,27 +19,6 @@ void PacketPlayerPosition::Packet(RakNet::BitStream *bs, bool send)
|
||||
{
|
||||
PlayerPacket::Packet(bs, send);
|
||||
|
||||
float rot[2];
|
||||
unsigned char dir;
|
||||
if (send)
|
||||
{
|
||||
rot[0] = player->position.rot[0] * 0.1f;
|
||||
rot[1] = player->position.rot[2] * 0.1f;
|
||||
|
||||
dir = (player->direction.pos[0] >= 0 ? (unsigned char)(player->direction.pos[0]) : (unsigned char) 0x3) << 2; // pack direction
|
||||
dir += (player->direction.pos[1] >= 0 ? (unsigned char)(player->direction.pos[1]) : (unsigned char) 0x3);
|
||||
}
|
||||
RW(rot[0], send, true);
|
||||
RW(rot[1], send, true);
|
||||
|
||||
RW(player->position.pos, send, true);
|
||||
RW(dir, send);
|
||||
|
||||
if (!send)
|
||||
{
|
||||
player->position.rot[0] = rot[0] / 0.1f;
|
||||
player->position.rot[2] = rot[1] / 0.1f;
|
||||
player->direction.pos[0] = (dir >> 2) == 0x3 ? -1 : dir >> 2; // unpack direction
|
||||
player->direction.pos[1] = (dir & 0x3) == 0x3 ? -1 : dir & 0x3;
|
||||
}
|
||||
RW(player->position, send, 1);
|
||||
RW(player->direction, send, 1);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user