public void OnEnterMainState(EnumMainState newStateType)
    {
        m_Property.SetIsForceRefreshMotionMode(true);

        m_Property.GetPreviousState().SetState(m_ServerPreviousState);
        m_IsChangeMainState = false;

        SendChangeState();

        BehaviorManager.Instance.LogFormat(m_Agent, string.Format($"OnEnterMainState {newStateType}"));
        //Debug.LogErrorFormat($"OnEnterMainState {newStateType}");
    }
    public void ChangeMainStateTest(EnumMainState state)
    {
        EnumMainState currentMainState = m_Property.GetCurrentState().GetMainState();

        m_Property.GetCurrentState().SetMainState(state);
        ///m_Property.GetPreviousState().SetMainState(currentMainState);
        ulong mstate = (ulong)currentMainState;

        m_ServerPreviousState = mstate << 60;
        m_IsChangeMainState   = m_Property.GetCurrentState().GetMainState() != currentMainState;

        BehaviorManager.Instance.LogFormat(m_Agent, $"OnG2CChangeState PreviousState:{m_Property.GetPreviousState().GetMainState()} currentMainState:{currentMainState} CurrentState:{m_Property.GetCurrentState().GetMainState()}\n");
    }
    private void OnG2CChangeState(IComponentEvent obj)
    {
        G2C_ChangeState g2C_ChangeState = obj as G2C_ChangeState;

        BehaviorManager.Instance.LogFormat(m_Agent, $"OnG2CChangeState Clinet_PreviousState:{m_Property.GetPreviousState().GetState()} Clinet_PreviousMainState:{m_Property.GetPreviousState().GetMainState()} Client_PreviousSubState:{m_Property.GetPreviousState().GetState()}");
        BehaviorManager.Instance.LogFormat(m_Agent, $"OnG2CChangeState Clinet_CurrentState:{m_Property.GetCurrentState().GetState()} Clinet_CurrentMainState:{m_Property.GetCurrentState().GetMainState()} Client_PreviousSubState:{m_Property.GetCurrentState().GetState()}");

        ulong         currentState = m_Property.GetCurrentState().GetState();
        EnumMainState oldMainState = m_Property.GetCurrentState().GetMainState();
        EnumMainState newMainState = HeroState.GetMainState(g2C_ChangeState.CurrentState);

        /// TODO.
        /// 没有人形态行为树,临时过滤
        if ((int)newMainState == 11)
        {
            BehaviorManager.Instance.LogFormat(m_Agent, $"Not have human tree, pass behavior logic.");
            return;
        }
        m_Property.GetCurrentState().SetState(g2C_ChangeState.CurrentState);
        m_ServerPreviousState = g2C_ChangeState.PreviousState;

        m_IsChangeMainState = oldMainState != newMainState;

        BehaviorManager.Instance.LogFormat(m_Agent, $"OnG2CChangeState Server_PreviousState:{g2C_ChangeState.PreviousState} Server_PreviousMainState:{HeroState.GetMainState(g2C_ChangeState.PreviousState)} Server_PreviousSubState:{HeroState.GetString(g2C_ChangeState.PreviousState)}");
        BehaviorManager.Instance.LogFormat(m_Agent, $"OnG2CChangeState Server_CurrentState:{g2C_ChangeState.CurrentState} Server_CurrentMainState:{HeroState.GetMainState(g2C_ChangeState.CurrentState)} Server_CurrentSubState:{HeroState.GetString(g2C_ChangeState.CurrentState)}");

        if (m_IsChangeMainState)
        {
            BehaviorManager.Instance.AddSwitchCommandTable(m_Agent, GetTreeRelativePath());
        }

        if (g2C_ChangeState.ExData != null)
        {
            if (g2C_ChangeState.ExData.DieExMessage != null && !m_ExDataTable.ContainsKey(ExDataType.DeadUIData))
            {
                m_ExDataTable.Add(ExDataType.DeadUIData, g2C_ChangeState.ExData.DieExMessage);
            }
        }

        SendEvent(ComponentEventName.SpacecraftChangeState, new SpacecraftChangeState()
        {
            OldMainState = oldMainState,
            NewMainState = newMainState
        });

        behaviac.Workspace.Instance.Update();
    }
Ejemplo n.º 4
0
    public void OnSpacecraftChangeState(IComponentEvent obj)
    {
        if (m_StateAnimator != null)
        {
            SpacecraftChangeState state        = obj as SpacecraftChangeState;
            EnumMainState         oldMainState = state.OldMainState;
            EnumMainState         newMainState = state.NewMainState;

            if (oldMainState == EnumMainState.Cruise && newMainState == EnumMainState.Fight)
            {
                m_StateAnimator.SetTrigger(Attack.Name);
            }
            else if (oldMainState == EnumMainState.Fight && newMainState == EnumMainState.Cruise)
            {
                m_StateAnimator.SetTrigger(Normal.Name);
            }
        }
    }
Ejemplo n.º 5
0
    public string GetBehaviorTreeRelativePath(int id, EnumMainState enumMainState)
    {
        BehaviorStateClient?behaviorStateClient = m_Config.BehaviorStateClientsByKey((uint)id);

        Assert.IsTrue(behaviorStateClient.HasValue, "CfgEternityProxy => GetBehaviorTreeRelativePath not exist Id " + id);

        string path = null;

        switch (enumMainState)
        {
        case EnumMainState.Born:
            path = behaviorStateClient.Value.BornBehavior;
            break;

        case EnumMainState.Cruise:
            path = behaviorStateClient.Value.CruiseBehavior;
            break;

        case EnumMainState.Fight:
            path = behaviorStateClient.Value.FightBehavior;
            break;

        case EnumMainState.Dead:
            path = behaviorStateClient.Value.DeadBehavior;
            break;

        default:
            Debug.LogErrorFormat($"GetBehaviorTreeRelativePath id={id} enumMainState={enumMainState}");
            break;
        }

        if (path == null)
        {
            Debug.LogErrorFormat($"path == null GetBehaviorTreeRelativePath id={id} enumMainState={enumMainState}");
        }

        return(path);
    }
Ejemplo n.º 6
0
    private void OnSpacecraftAvatarLoadFinishEvent(IComponentEvent componentEvent)
    {
        AvatarLoadFinishEvent spacecraftAvatarLoadFinishEvent = componentEvent as AvatarLoadFinishEvent;

        m_SpacecraftHnagingPointList = spacecraftAvatarLoadFinishEvent.SpacecraftPresentation;
        m_Animator = spacecraftAvatarLoadFinishEvent.Animator;
        Animator[] animators = spacecraftAvatarLoadFinishEvent.Animators;
        for (int i = 0; i < animators.Length; i++)
        {
            // TODO.
            // 先以命名为规则
            if (animators[i].transform.name.Contains("_action"))
            {
                m_StateAnimator = animators[i];
                AnimationClip[]            animationClips = m_StateAnimator.runtimeAnimatorController.animationClips;
                AnimatorOverrideController animatorOverrideController;
                animatorOverrideController = new AnimatorOverrideController(m_StateAnimator.runtimeAnimatorController);
                m_StateAnimator.runtimeAnimatorController = animatorOverrideController;
                EnumMainState state = m_SpacecraftPlayerAnimatorProperty.GetCurrentState().GetMainState();
                if (state == EnumMainState.Fight)
                {
                    for (int j = 0; j < animationClips.Length; j++)
                    {
                        // TODO.
                        if (animationClips[j].name.Contains("_attacked"))
                        {
                            animatorOverrideController["DefaultState"] = animationClips[j];
                            break;
                        }
                    }
                }
                else
                {
                    for (int j = 0; j < animationClips.Length; j++)
                    {
                        // TODO.
                        if (animationClips[j].name.Contains("_normal_state"))
                        {
                            animatorOverrideController["DefaultState"] = animationClips[j];
                            break;
                        }
                    }
                }
                break;
            }
        }


        //播放尾焰音效
        if (m_SpacecraftPlayerAnimatorProperty != null)
        {
            WwiseUtil.PlaySound(m_musicComboID, WwiseMusicSpecialType.SpecialType_WarShipEngine_1,
                                m_IsMain ? WwiseMusicPalce.Palce_1st : WwiseMusicPalce.Palce_3st,
                                false, m_SpacecraftPlayerAnimatorProperty.GetRootTransform());
        }

        if (m_IsMain)
        {
            //添加速度线
            if (!m_LeapCamera)
            {
                m_LeapCamera = EffectManager.GetInstance().CreateEffect(
                    Leyoutech.Core.Loader.Config.AssetAddressKey.FX_SOCKET_FX_CAMERA
                    , EffectManager.GetEffectGroupNameInSpace(m_IsMain)
                    , OnLeapCameraCreated, this);
                m_LeapCamera.transform.SetParent(m_SpacecraftPlayerAnimatorProperty.GetOwner().GetSkinRootTransform(), false);
                m_LeapCamera.SetCreateForMainPlayer(m_IsMain);
                m_LeapCamera.SetAutoRecycleWhenNotExistLivingParticles(false);
            }
            m_LeapCamera.PlayFX();
        }
    }
Ejemplo n.º 7
0
    /// <summary>
    /// 设置基础状态
    /// </summary>
    /// <param name="baseState"></param>
    public void SetMainState(EnumMainState baseState)
    {
        ulong state = (ulong)baseState;

        m_HeroState = state << SubStateBit;
    }
 public bool CheckMainState(EnumMainState state)
 {
     return(state == m_Property.GetCurrentState().GetMainState());
 }