Fix some bug related to flying phoenix

This commit is contained in:
Chomper9981
2026-04-06 14:31:09 +07:00
parent 131fb322f2
commit 47a219866b
5 changed files with 28 additions and 19 deletions
@@ -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)
+16 -3
View File
@@ -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();