[General] Synchronize player & NPC rotation animations

This commit is contained in:
David Cernat 2017-05-30 12:08:58 +03:00
parent f4cdedd8cb
commit 068a45be87
7 changed files with 34 additions and 20 deletions

View file

@ -1685,17 +1685,30 @@ void CharacterController::update(float duration)
Start of tes3mp addition Start of tes3mp addition
Character movement setting rotations get reset here, so we have to assign movement Character movement setting rotations get reset here, so we have to assign movement
settings to a relevant LocalActor now settings to the LocalPlayer or a LocalActor now
*/ */
if (mwmp::Main::get().getCellController()->isLocalActor(mPtr)) if (MWBase::Environment::get().getWorld()->getPlayerPtr() == mPtr)
{
mwmp::LocalPlayer *localPlayer = mwmp::Main::get().getLocalPlayer();
MWMechanics::Movement &movementSettings = mPtr.getClass().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))
{ {
mwmp::LocalActor *localActor = mwmp::Main::get().getCellController()->getLocalActor(mPtr); mwmp::LocalActor *localActor = mwmp::Main::get().getCellController()->getLocalActor(mPtr);
localActor->direction.pos[0] = cls.getMovementSettings(mPtr).mPosition[0]; MWMechanics::Movement &movementSettings = mPtr.getClass().getMovementSettings(mPtr);
localActor->direction.pos[1] = cls.getMovementSettings(mPtr).mPosition[1]; localActor->direction.pos[0] = movementSettings.mPosition[0];
localActor->direction.pos[2] = cls.getMovementSettings(mPtr).mPosition[2]; localActor->direction.pos[1] = movementSettings.mPosition[1];
localActor->direction.rot[0] = cls.getMovementSettings(mPtr).mRotation[0]; localActor->direction.pos[2] = movementSettings.mPosition[2];
localActor->direction.rot[1] = cls.getMovementSettings(mPtr).mRotation[1]; localActor->direction.rot[0] = movementSettings.mRotation[0];
localActor->direction.rot[2] = cls.getMovementSettings(mPtr).mRotation[2]; localActor->direction.rot[1] = movementSettings.mRotation[1];
localActor->direction.rot[2] = movementSettings.mRotation[2];
} }
/* /*
End of tes3mp addition End of tes3mp addition

View file

@ -104,6 +104,9 @@ void DedicatedActor::setMovementSettings()
move->mPosition[0] = direction.pos[0]; move->mPosition[0] = direction.pos[0];
move->mPosition[1] = direction.pos[1]; move->mPosition[1] = direction.pos[1];
move->mPosition[2] = direction.pos[2]; move->mPosition[2] = direction.pos[2];
move->mRotation[0] = direction.rot[0];
move->mRotation[1] = direction.rot[1];
move->mRotation[2] = direction.rot[2];
} }
void DedicatedActor::setPosition() void DedicatedActor::setPosition()

View file

@ -117,12 +117,16 @@ void DedicatedPlayer::move(float dt)
world->moveObject(ptr, position.pos[0], position.pos[1], position.pos[2]); world->moveObject(ptr, position.pos[0], position.pos[1], position.pos[2]);
} }
world->rotateObject(ptr, position.rot[0], position.rot[1], position.rot[2]);
MWMechanics::Movement *move = &ptr.getClass().getMovementSettings(ptr); MWMechanics::Movement *move = &ptr.getClass().getMovementSettings(ptr);
move->mPosition[0] = direction.pos[0]; move->mPosition[0] = direction.pos[0];
move->mPosition[1] = direction.pos[1]; move->mPosition[1] = direction.pos[1];
move->mPosition[2] = direction.pos[2]; move->mPosition[2] = direction.pos[2];
move->mRotation[0] = direction.rot[0];
move->mRotation[1] = direction.rot[1];
move->mRotation[2] = direction.rot[2];
world->rotateObject(ptr, position.rot[0], position.rot[1], position.rot[2]);
} }
void DedicatedPlayer::setAnimFlags() void DedicatedPlayer::setAnimFlags()

View file

@ -324,10 +324,8 @@ void LocalPlayer::updatePosition(bool forceUpdate)
static bool isJumping = false; static bool isJumping = false;
static bool sentJumpEnd = true; static bool sentJumpEnd = true;
const MWMechanics::Movement &move = player.getClass().getMovementSettings(player); bool posIsChanging = (direction.pos[0] != 0 || direction.pos[1] != 0 || direction.pos[2] != 0 ||
direction.rot[0] != 0 || direction.rot[1] != 0 || direction.rot[2] != 0);
bool posIsChanging = (move.mPosition[0] != 0 || move.mPosition[1] != 0 || move.mPosition[2] != 0 ||
move.mRotation[0] != 0 || move.mRotation[1] != 0 || move.mRotation[2] != 0);
if (forceUpdate || posIsChanging || posWasChanged) if (forceUpdate || posIsChanging || posWasChanged)
{ {
@ -340,10 +338,6 @@ void LocalPlayer::updatePosition(bool forceUpdate)
position = player.getRefData().getPosition(); position = player.getRefData().getPosition();
direction.pos[0] = move.mPosition[0];
direction.pos[1] = move.mPosition[1];
direction.pos[2] = move.mPosition[2];
getNetworking()->getPlayerPacket(ID_PLAYER_POSITION)->setPlayer(this); getNetworking()->getPlayerPacket(ID_PLAYER_POSITION)->setPlayer(this);
getNetworking()->getPlayerPacket(ID_PLAYER_POSITION)->Send(); getNetworking()->getPlayerPacket(ID_PLAYER_POSITION)->Send();
} }

View file

@ -36,7 +36,7 @@ void PacketActorCellChange::Packet(RakNet::BitStream *bs, bool send)
RW(actor.cell.mName, send, 1); RW(actor.cell.mName, send, 1);
RW(actor.position, send, 1); RW(actor.position, send, 1);
RW(actor.direction.pos, send, 1); RW(actor.direction, send, 1);
if (!send) if (!send)
{ {

View file

@ -31,7 +31,7 @@ void PacketActorPosition::Packet(RakNet::BitStream *bs, bool send)
RW(actor.mpNum, send); RW(actor.mpNum, send);
RW(actor.position, send, 1); RW(actor.position, send, 1);
RW(actor.direction.pos, send, 1); RW(actor.direction, send, 1);
actor.hasPositionData = true; actor.hasPositionData = true;

View file

@ -20,5 +20,5 @@ void PacketPlayerPosition::Packet(RakNet::BitStream *bs, bool send)
PlayerPacket::Packet(bs, send); PlayerPacket::Packet(bs, send);
RW(player->position, send, 1); RW(player->position, send, 1);
RW(player->direction.pos, send, 1); RW(player->direction, send, 1);
} }