From a77bd6652fc8bf3ae3612f35479c0b184103a835 Mon Sep 17 00:00:00 2001 From: David Cernat <davidcernat@gmail.com> Date: Mon, 1 May 2017 21:55:50 +0300 Subject: [PATCH] [Client] Read ActorPosition packets sent from Lua script cell loads --- apps/openmw/mwmp/Cell.cpp | 12 ++++++++++++ apps/openmw/mwmp/DedicatedActor.cpp | 9 ++++++++- apps/openmw/mwmp/DedicatedActor.hpp | 3 ++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwmp/Cell.cpp b/apps/openmw/mwmp/Cell.cpp index dd9211d31..edf8e40ad 100644 --- a/apps/openmw/mwmp/Cell.cpp +++ b/apps/openmw/mwmp/Cell.cpp @@ -99,6 +99,18 @@ void Cell::readPositions(ActorList& actorList) DedicatedActor *actor = dedicatedActors[mapIndex]; actor->position = baseActor.position; actor->direction = baseActor.direction; + + if (!actor->hasPositionData) + { + actor->hasPositionData = true; + + // If this is our first packet about this actor's position, force an update + // now instead of waiting for its frame + // + // That way, if this actor is about to become a LocalActor, initial data about it + // received from the server still gets set + actor->setPosition(); + } } } } diff --git a/apps/openmw/mwmp/DedicatedActor.cpp b/apps/openmw/mwmp/DedicatedActor.cpp index 09c4996bc..5e95d47cb 100644 --- a/apps/openmw/mwmp/DedicatedActor.cpp +++ b/apps/openmw/mwmp/DedicatedActor.cpp @@ -29,6 +29,7 @@ DedicatedActor::DedicatedActor() animation.groupname = ""; sound = ""; + hasPositionData = false; hasStatsDynamicData = false; hasChangedCell = true; @@ -77,7 +78,7 @@ void DedicatedActor::move(float dt) } else { - world->moveObject(ptr, position.pos[0], position.pos[1], position.pos[2]); + setPosition(); hasChangedCell = false; } @@ -89,6 +90,12 @@ void DedicatedActor::move(float dt) world->rotateObject(ptr, position.rot[0], position.rot[1], position.rot[2]); } +void DedicatedActor::setPosition() +{ + MWBase::World *world = MWBase::Environment::get().getWorld(); + world->moveObject(ptr, position.pos[0], position.pos[1], position.pos[2]); +} + void DedicatedActor::setAnimFlags() { using namespace MWMechanics; diff --git a/apps/openmw/mwmp/DedicatedActor.hpp b/apps/openmw/mwmp/DedicatedActor.hpp index d2623c543..059101751 100644 --- a/apps/openmw/mwmp/DedicatedActor.hpp +++ b/apps/openmw/mwmp/DedicatedActor.hpp @@ -15,8 +15,9 @@ namespace mwmp virtual ~DedicatedActor(); void update(float dt); - void setCell(MWWorld::CellStore *cellStore); void move(float dt); + void setCell(MWWorld::CellStore *cellStore); + void setPosition(); void setAnimFlags(); void playAnimation(); void playSound();