Skip to content

Commit 0ff999f

Browse files
authored
Merge pull request #48 from jay602/1.x
位置和朝向同步异常 #1171
2 parents 1e2c7bf + 1223a67 commit 0ff999f

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

Plugins/kbengine_ue4_plugins/Source/KBEnginePlugins/Engine/KBEngine.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ KBEngineApp::KBEngineApp() :
3939
serverScriptVersion_(TEXT("")),
4040
clientScriptVersion_(TEXT("")),
4141
serverProtocolMD5_(TEXT("13AF19B0A958067AEB2BC4ED1CD3B46F")),
42-
serverEntitydefMD5_(TEXT("2B445B443EFC9427000733CD39EB2700")),
42+
serverEntitydefMD5_(TEXT("D9BE27DA40153A58EFB4835189190B5D")),
4343
entity_uuid_(0),
4444
entity_id_(0),
4545
entity_type_(TEXT("")),
@@ -81,7 +81,7 @@ KBEngineApp::KBEngineApp(KBEngineArgs* pArgs):
8181
serverScriptVersion_(TEXT("")),
8282
clientScriptVersion_(TEXT("")),
8383
serverProtocolMD5_(TEXT("13AF19B0A958067AEB2BC4ED1CD3B46F")),
84-
serverEntitydefMD5_(TEXT("2B445B443EFC9427000733CD39EB2700")),
84+
serverEntitydefMD5_(TEXT("D9BE27DA40153A58EFB4835189190B5D")),
8585
entity_uuid_(0),
8686
entity_id_(0),
8787
entity_type_(TEXT("")),
@@ -2321,19 +2321,19 @@ void KBEngineApp::_updateVolatileData(ENTITY_ID entityID, float x, float y, floa
23212321
if (roll != KBE_FLT_MAX)
23222322
{
23232323
changeDirection = true;
2324-
entity.direction.X = int82angle((int8)roll, false);
2324+
entity.direction.X = isOptimized ? int82angle((int8)roll, false) : roll;
23252325
}
23262326

23272327
if (pitch != KBE_FLT_MAX)
23282328
{
23292329
changeDirection = true;
2330-
entity.direction.Y = int82angle((int8)pitch, false);
2330+
entity.direction.Y = isOptimized ? int82angle((int8)pitch, false) : pitch;
23312331
}
23322332

23332333
if (yaw != KBE_FLT_MAX)
23342334
{
23352335
changeDirection = true;
2336-
entity.direction.Z = int82angle((int8)yaw, false);
2336+
entity.direction.Z = isOptimized ? int82angle((int8)yaw, false) : yaw;
23372337
}
23382338

23392339
bool done = false;
@@ -2347,10 +2347,10 @@ void KBEngineApp::_updateVolatileData(ENTITY_ID entityID, float x, float y, floa
23472347
done = true;
23482348
}
23492349

2350-
bool positionChanged = x != KBE_FLT_MAX || y != KBE_FLT_MAX || z != KBE_FLT_MAX;
2351-
if (x == KBE_FLT_MAX) x = 0.0f;
2352-
if (y == KBE_FLT_MAX) y = 0.0f;
2353-
if (z == KBE_FLT_MAX) z = 0.0f;
2350+
bool positionChanged = x != KBE_FLT_MAX || y != KBE_FLT_MAX || z != KBE_FLT_MAX;
2351+
if (x == KBE_FLT_MAX) x = isOptimized ? 0.0f : entity.position.X;
2352+
if (y == KBE_FLT_MAX) y = isOptimized ? 0.0f : entity.position.Y;
2353+
if (z == KBE_FLT_MAX) z = isOptimized ? 0.0f : entity.position.Z;
23542354

23552355
if (positionChanged)
23562356
{

Source/kbengine_ue4_demo/GameModeWorld.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Fill out your copyright notice in the Description page of Project Settings.
1+
// Fill out your copyright notice in the Description page of Project Settings.
22

33
#include "GameModeWorld.h"
44
#include "kbengine_ue4_demo.h"
@@ -19,7 +19,7 @@ void AGameModeWorld::installEvents()
1919
Super::installEvents();
2020

2121
// in world
22-
// 这个事件触发时我们需要切换地图到游戏世界地图
22+
// 这个事件触发时我们需要切换地图到游戏世界地图
2323
KBENGINE_REGISTER_EVENT(KBEngine::KBEventTypes::addSpaceGeometryMapping, addSpaceGeometryMapping);
2424
KBENGINE_REGISTER_EVENT(KBEngine::KBEventTypes::onEnterWorld, onEnterWorld);
2525
KBENGINE_REGISTER_EVENT(KBEngine::KBEventTypes::onLeaveWorld, onLeaveWorld);
@@ -57,8 +57,8 @@ void AGameModeWorld::BeginPlay()
5757

5858
check(KBEngine::KBEngineApp::getSingleton().isInitialized());
5959

60-
// 如果已经有被创建的实体,说明他们在上一个场景未来得及跳转之前已经通知创建了,但由于我们的world场景并没有来得及创建,这部分实体进入世界事件已经漏掉
61-
// 此时我们需要再次触发一次onEnterWorld,让表现层能够在游戏场景中创建出所有的实体
60+
// 如果已经有被创建的实体,说明他们在上一个场景未来得及跳转之前已经通知创建了,但由于我们的world场景并没有来得及创建,这部分实体进入世界事件已经漏掉
61+
// 此时我们需要再次触发一次onEnterWorld,让表现层能够在游戏场景中创建出所有的实体
6262
KBEngine::KBEngineApp::ENTITIES_MAP& entities = KBEngine::KBEngineApp::getSingleton().entities();
6363
for (auto& item : entities)
6464
{
@@ -80,7 +80,7 @@ void AGameModeWorld::BeginPlay()
8080

8181
void AGameModeWorld::reqRelive(int reliveType)
8282
{
83-
// 由于玩家的Avatar实体注册了该事件, 如果此时Avatar实体存在那么必然会执行到该事件
83+
// 由于玩家的Avatar实体注册了该事件, 如果此时Avatar实体存在那么必然会执行到该事件
8484
UKBEventData_reqRelive* pEventData = NewObject<UKBEventData_reqRelive>();
8585
pEventData->reliveType = reliveType;
8686
KBENGINE_EVENT_FIRE("relive", pEventData);
@@ -115,6 +115,7 @@ void AGameModeWorld::onEnterWorld_Implementation(const UKBEventData* pEventData)
115115
const UKBEventData_onEnterWorld* pData = Cast<UKBEventData_onEnterWorld>(pEventData);
116116

117117
FRotator Rot(0.f, 0.f, 0.f);
118+
KBDir2UE4Dir(Rot, pData->direction);
118119
FTransform SpawnTransform(Rot, pData->position);
119120

120121
if (pData->isPlayer)
@@ -157,6 +158,7 @@ void AGameModeWorld::onEnterSpace_Implementation(const UKBEventData* pEventData)
157158
const UKBEventData_onEnterSpace* pData = Cast<UKBEventData_onEnterSpace>(pEventData);
158159

159160
FRotator Rot(0.f, 0.f, 0.f);
161+
KBDir2UE4Dir(Rot, pData->direction);
160162
FTransform SpawnTransform(Rot, pData->position);
161163

162164
if (pData->isPlayer)
@@ -280,6 +282,7 @@ void AGameModeWorld::set_modelID_Implementation(const UKBEventData* pEventData)
280282
{
281283
const UKBEventData_set_modelID* pData = Cast<UKBEventData_set_modelID>(pEventData);
282284
AGameEntity* pAGameEntity = findGameEntity(pData->entityID);
285+
283286
if (pAGameEntity)
284287
pAGameEntity->setModelID(pData->modelID);
285288
}

0 commit comments

Comments
 (0)