/// <summary>
        /// 服务器蓄力索引结果
        /// </summary>
        /// <param name="obj"></param>
        public void OnAccumulationIndexResult(IComponentEvent obj)
        {
            AccumulationIndexResult result = obj as AccumulationIndexResult;

            if (result == null)
            {
                return;
            }

            if (result.skillId != SkillID)
            {
                return;
            }

            SkillData skillData = m_Context.GetObject <SkillData>();
            string    lpc       = string.Empty;

            if (skillData.ReleaseStageData.Value.IsDynamicLoopCount)
            {
                m_RunningData.ReleaseLoopCount = m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetsCount();
                lpc = string.Format("动态loopcout = {0}", m_RunningData.ReleaseLoopCount);
            }

            Leyoutech.Utility.DebugUtility.Log("蓄力", " 蓄力结果  index = " + result.accumulationIndex + lpc);

            m_RunningData.ReleaseStageIndex = result.accumulationIndex;
            StageType = SkillStageType.Release;
        }
        private void OnStateMachineComplete(StateMachine machine)
        {
            Leyoutech.Utility.DebugUtility.LogWarning("技能", string.Format("OnStateMachineComplete->技能释放完成  ------>  Entity = {0} , 主角 = {1},技能类型 = {2} ,{3}, 技能ID ={4}",
                                                                          m_ISpacecraftSkillProperty.EntityId(),
                                                                          m_ISpacecraftSkillProperty.IsMain(),
                                                                          m_Context.GetObject <SkillData>().BaseData.Value.CategoryType,
                                                                          IsWeaponSkill?"武器技能":"飞船技能",
                                                                          SkillID
                                                                          ));



            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillRPC != null)
            {
                skillRPC.Close();
            }
            skillRPC = null;
            m_Context.DeleteObject <SkillRPCNet>();
            m_Context.Clear();
            m_RunningData.Reset();
            if (IsWeaponSkill)
            {
                SendEvent(ComponentEventName.WeaponSkillFinish, new WeaponSkillFinish()
                {
                    IsMain = m_ISpacecraftSkillProperty.IsMain(), skillId = SkillID
                });
            }
            SkillID       = -1;
            IsWeaponSkill = false;
            StageType     = SkillStageType.None;
            m_ISpacecraftSkillProperty.GetPerceptronTarget().ClearSkilltargetEntitys();
        }
        /// <summary>
        /// 释放技能
        /// </summary>
        /// <param name="skillId"></param>
        public void ReleaseSkill(int skillid)
        {
            SkillID       = skillid;
            IsWeaponSkill = IsWeapon(SkillID);

            SkillData skillData = m_CfgEternityProxy.GetSkillData(SkillID);

            m_Context.AddObject <SkillData>(skillData);

            Leyoutech.Utility.DebugUtility.LogWarning("技能", string.Format("OnStateMachineComplete->执行释放技能  ------>  Entity = {0} , 主角 = {1},技能类型 = {2} ,{3}, 技能ID ={4}, IsTrigger = {5} ",
                                                                          m_ISpacecraftSkillProperty.EntityId(),
                                                                          m_ISpacecraftSkillProperty.IsMain(),
                                                                          skillData.BaseData.Value.CategoryType,
                                                                          IsWeaponSkill ? "武器技能" : "飞船技能",
                                                                          SkillID,
                                                                          skillData.BaseData.Value.IsTrigger
                                                                          ));

            PrepareRunningData(SkillID);

            if (m_ISpacecraftSkillProperty.IsMain())
            {
                SkillRPCNet skillRPC = new SkillRPCNet(RpcCloseAction);
                m_Context.AddObject <SkillRPCNet>(skillRPC);
            }

            m_StageType = SkillStageType.Begin;
            m_StateMachine.SetInitialState(SkillStateToken.Begin);

            //进度条隐藏显示
            ShowProgressBar(true);
        }
 /// <summary>
 /// Rpc异常中断
 /// </summary>
 public void RpcCloseAction()
 {
     if (StageType != SkillStageType.None)
     {
         StageType = SkillStageType.None;
     }
 }
Exemplo n.º 5
0
        protected override void OnStageChanged(ActionToken action, object data)
        {
            SkillStageType stageType = (SkillStageType)data;

            if (stageType == SkillStageType.BreakEnd)
            {
                ChangeState(SkillStateToken.BreakEnd);
            }
            else
            {
                Debug.LogError($"SkillEndState::OnStageChange->Stage type is {stageType}");
            }
        }
        /// <summary>
        /// 蓄力---->按下begin,抬起通信release,end
        /// </summary>
        /// <param name="skillData"></param>
        private void ToCastAccumulationSkill(SkillData skillData, bool isdown)
        {
            uint        entityId = (uint)m_ISpacecraftSkillProperty.EntityId();
            uint        skillId  = (uint)skillData.Id;
            SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>();

            if (skillRPC == null)
            {
                return;
            }

            if (isdown) //按下
            {
                Leyoutech.Utility.DebugUtility.Log("蓄力", " 按下");

                AccumulationSkill skillA = new AccumulationSkill();
                skillA.AccumulationSkillBegin          = new global::Crucis.Protocol.AccumulationSkillBegin();
                skillA.AccumulationSkillBegin.CasterId = entityId;
                skillA.AccumulationSkillBegin.SkillId  = skillId;
                skillRPC.CreatListenerCastAccumulationSkill(entityId, skillId);
                skillRPC.CastAccumulationSkillWright(entityId, skillId, skillA);
            }
            else //抬起
            {
                Leyoutech.Utility.DebugUtility.Log("蓄力", " 抬起");
                Vector3 direction = Vector3.zero;
                List <Crucis.Protocol.TargetInfo> targetList = m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(false, out direction, true, skillData.BaseData.Value.TagercalculationType);
                AccumulationSkill skillA = new AccumulationSkill();
                skillA.AccumulationSkillEnd          = new global::Crucis.Protocol.SkillSelectTargetInfo();
                skillA.AccumulationSkillEnd.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId();
                skillA.AccumulationSkillEnd.SkillId  = (uint)skillData.Id;
                skillA.AccumulationSkillEnd.TargetList.Add(targetList);

                MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>();
                float d = skillData.BaseData.Value.MaxDistance; //* SceneController.SKILL_PRECISION;
                Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d);
                skillA.AccumulationSkillEnd.Quat = vec4;

                skillRPC.CastAccumulationSkillWright(entityId, skillId, skillA);

                if (skillData.BaseData.Value.IsNeedTarget && (targetList == null || targetList.Count == 0))
                {
                    StageType = SkillStageType.None;
                }
            }
        }
        /// <summary>
        /// 结束技能,切入break阶段
        /// </summary>
        /// <param name="obj"></param>
        private void OnStopSkillResult(IComponentEvent obj)
        {
            StopSkillResult result = obj as StopSkillResult;

            if (result == null)
            {
                return;
            }

            if (SkillID != result.skillId)
            {
                return;
            }

            Leyoutech.Utility.DebugUtility.LogWarning("技能", string.Format("停止技能,由 {0} 状态切入Break ! ", StageType));
            StageType = ChangedSkillStageToBreak();
        }
        /// <summary>
        /// 结束技能,切入end 阶段
        /// </summary>
        /// <param name="obj"></param>
        private void OnEndSkillResult(IComponentEvent obj)
        {
            EndSkillResult result = obj as EndSkillResult;

            if (result == null)
            {
                return;
            }

            if (SkillID != result.skillId)
            {
                return;
            }

            Leyoutech.Utility.DebugUtility.LogWarning("技能", string.Format("停止技能,由 {0} 状态切入End ! ", StageType));
            StageType = SkillStageType.End;
        }
Exemplo n.º 9
0
    /// <summary>
    /// 根据所处阶段,获取对应轨道组
    /// </summary>
    /// <param name="skillId"></param>
    /// <param name="stageType"></param>
    /// <param name="childIndex"></param>
    /// <returns></returns>
    public TrackGroup GetTrackGroup(int skillId, SkillStageType stageType, int childIndex = 0)
    {
        TrackGroup?trackGroup = null;

        if (stageType == SkillStageType.Begin)
        {
            trackGroup = GetSkillBeginStageData(skillId).Group;
        }
        else if (stageType == SkillStageType.Release)
        {
            SkillReleaseChildData childData = GetSkillReleaseChildData(skillId, childIndex);
            trackGroup = childData.Group;
        }
        else if (stageType == SkillStageType.End)
        {
            trackGroup = GetSkillEndStageData(skillId).Group;
        }
        Assert.IsTrue(trackGroup.HasValue, $"CfgEternityProxy::GetTrackGroup->data not exist.id =  {skillId},stageType = {stageType} ,index = {childIndex}");
        return(trackGroup.Value);
    }
Exemplo n.º 10
0
        protected void SetStageType(SkillStageType stageType)
        {
            SpacecraftSkillComponent skillComponent = Context.GetObject <SpacecraftSkillComponent>();

            skillComponent.StageType = stageType;
        }