Fix some bug related to flying phoenix
This commit is contained in:
@@ -598,6 +598,7 @@ namespace BrewMonster.Scripts
|
||||
{
|
||||
pClone.SetPos(new Vector3(vCurPos.x, vCurPos.y, vCurPos.z));
|
||||
pClone.SetDirAndUp(new A3DVECTOR3(vDir.x, vDir.y, vDir.z), new A3DVECTOR3(vUp.x, vUp.y, vUp.z));
|
||||
pClone.ResetHookPosition();
|
||||
if(pNaviCtrl.GetCurrentNavigateInfo().bezierDir)
|
||||
{
|
||||
pClone.ChangeModelMoveDirAndUp(vDir, vUp);
|
||||
|
||||
@@ -95,6 +95,10 @@ public partial class CECObject : MonoBehaviour, ITickable
|
||||
m_vecGroundNormal = Normalize(m_vecGroundNormal * 0.85f + m_vecGroundNormalSet * 0.15f);
|
||||
return true;
|
||||
}
|
||||
protected virtual void OnDestroy()
|
||||
{
|
||||
TickInvoker.Instance.UnregisterTickable(this);
|
||||
}
|
||||
|
||||
// Set absolute forward and up direction
|
||||
public virtual void SetDirAndUp(Vector3 vDir, Vector3 vUp)
|
||||
|
||||
@@ -371,6 +371,7 @@ public class CECModel
|
||||
protected CECModelStaticData m_pMapModel;
|
||||
public SkeletonBuilder m_skeletonBuilder;
|
||||
private Dictionary<string, Transform> m_hookCache = new Dictionary<string, Transform>();
|
||||
private Dictionary<string, Transform> m_hangerPositionCache = new Dictionary<string, Transform>();
|
||||
private Dictionary<string, CECModel> m_childModels = new Dictionary<string, CECModel>();
|
||||
private Transform m_transform;
|
||||
public bool InheritParentId() => m_bInheritParentId;
|
||||
@@ -603,7 +604,6 @@ public class CECModel
|
||||
|
||||
if (pChild == null)
|
||||
{
|
||||
Debug.LogError($"CECModel::AddChildModel, pChild is null");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -611,7 +611,6 @@ public class CECModel
|
||||
Transform hangger = pChild.m_skeletonBuilder.GetHook(szCCName, true);
|
||||
if (hook == null || hangger == null)
|
||||
{
|
||||
Debug.LogError($"CECModel::AddChildModel, hook or hanger missing (hook={szHookName}, cc={szCCName})");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -620,7 +619,9 @@ public class CECModel
|
||||
Vector3 worldAlign = hook.position - hangger.position;
|
||||
pChild.transform.position += worldAlign;
|
||||
pChild.transform.SetParent(hook.transform, true);
|
||||
|
||||
m_hookCache.Add(szHookName, hook);
|
||||
m_childModels.Add(szHookName, pChild);
|
||||
m_hangerPositionCache.Add(szHookName, hangger);
|
||||
// if (m_pA3DSkinModel && pChild->m_pA3DSkinModel)
|
||||
// {
|
||||
// if (!m_pA3DSkinModel->AddChildModel(
|
||||
@@ -647,6 +648,18 @@ public class CECModel
|
||||
m_childModels[szHangerName] = pChild;
|
||||
return true;
|
||||
}
|
||||
public void ResetHookPosition(string szHookName)
|
||||
{
|
||||
Transform hook = m_hookCache.TryGetValue(szHookName, out Transform cachedHook) ? cachedHook : null;
|
||||
Transform hangger = m_hangerPositionCache.TryGetValue(szHookName, out Transform cachedHangger) ? cachedHangger : null;
|
||||
GameObject childObject = m_childModels.TryGetValue(szHookName, out CECModel child) ? child.m_pPlayerModel : null;
|
||||
|
||||
if (hook != null && hangger != null && child != null)
|
||||
{
|
||||
Vector3 worldAlign = hook.position - hangger.position;
|
||||
child.transform.position += worldAlign;
|
||||
}
|
||||
}
|
||||
public void PlayGfx(string szPath, string szHook, float fScale, bool bFadeOut, A3DVECTOR3 vOffset, float fPitch, float fYaw, float fRot, bool bUseECMHook, uint dwFadeOutTime)
|
||||
{
|
||||
if (!bFadeOut)
|
||||
|
||||
@@ -333,6 +333,13 @@ namespace BrewMonster.Scripts
|
||||
m_bAdjustOrient = false;
|
||||
}
|
||||
}
|
||||
public void ResetHookPosition()
|
||||
{
|
||||
if (m_pNavigateModel != null)
|
||||
{
|
||||
m_pNavigateModel.ResetHookPosition(_hh_ride);
|
||||
}
|
||||
}
|
||||
protected override bool ShouldLoadEquipment(int index)
|
||||
{
|
||||
return index != InventoryConst.EQUIPIVTR_FLYSWORD;
|
||||
@@ -381,7 +388,6 @@ namespace BrewMonster.Scripts
|
||||
|
||||
// PlayAction(GetMoveStandAction(false, IsFighting()), 1.0f, true);
|
||||
PlayNavigateAction();
|
||||
|
||||
m_bNavigateModelApplied = true;
|
||||
|
||||
OnNavigateEvent(0, (int)CECNavigateCtrl.NavigateEvent.EM_BEGIN);
|
||||
|
||||
@@ -97,21 +97,6 @@ namespace BrewMonster
|
||||
}
|
||||
return await Load(player, atOnce);
|
||||
}
|
||||
public override void SetDirAndUp(A3DVECTOR3 vDir, A3DVECTOR3 vUp){
|
||||
base.SetDirAndUp(vDir, vUp);
|
||||
if(m_pPlayerCECModel != null)
|
||||
{
|
||||
Vector3 dir = new Vector3(vDir.x, vDir.y, vDir.z);
|
||||
Vector3 up = new Vector3(vUp.x, vUp.y, vUp.z);
|
||||
if (dir.magnitude > 0.01f)
|
||||
{
|
||||
Quaternion lookRot = Quaternion.LookRotation(dir, up);
|
||||
m_pPlayerCECModel.m_pPlayerModel.transform.rotation = lookRot;
|
||||
}
|
||||
m_bAdjustOrient = false;
|
||||
}
|
||||
//m_pPlayerCECModel.SetDirAndUp(vDir,vUp);
|
||||
}
|
||||
protected async Task<bool> Load(CECPlayer player, bool atOnce){
|
||||
player.CloneSimplePropertyTo(this);
|
||||
OnCloneSimpleProperty();
|
||||
|
||||
Reference in New Issue
Block a user