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> /// 蓄力---->按下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> ///吟唱,前摇 ,验证目标,技能是否可继续释放 /// </summary> private void ToCastSingSkill(SkillData skillData) { MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>(); float d = skillData.BaseData.Value.MaxDistance;//* SceneController.SKILL_PRECISION; Vector3 direction = Vector3.zero; List <Crucis.Protocol.TargetInfo> targetInfos = m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(true, out direction, true, skillData.BaseData.Value.TagercalculationType); SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>(); if (skillRPC == null) { return; } Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d); skillRPC.CreatListenerCastSkill((uint)m_ISpacecraftSkillProperty.EntityId(), (uint)skillData.Id, targetInfos, vec4); }
/// <summary> /// 角色Entiy 被销毁时 /// </summary> public override void OnDestroy() { base.OnDestroy(); m_ISpacecraftSkillProperty.SetChangeGuideSkillTargetAction(null); m_ISpacecraftSkillProperty.SetSkillBttonIsDown(false); SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>(); if (skillRPC != null) { skillRPC.Close(); } skillRPC = null; m_Context.Clear(true); m_RunningData = null; m_CfgEternityProxy = null; m_Context = null; m_StateMachine = null; m_ISpacecraftSkillProperty = null; }
/// <summary> /// 释放引导技能 guidState : 1 按下,2 改变 ,3 抬起 /// </summary> private void ToCastGuideSkill(SkillData skillData, int guidState) { SkillRPCNet skillRPC = m_Context.GetObject <SkillRPCNet>(); if (skillData.ByteBuffer == null || skillRPC == null) { return; } uint entityId = (uint)m_ISpacecraftSkillProperty.EntityId(); uint skillId = (uint)skillData.Id; switch (guidState) { case 1: //按下 { Leyoutech.Utility.DebugUtility.Log("引导技能", " 按下"); GuideSkill guideSkill = new GuideSkill(); guideSkill.GuideSkill_ = new global::Crucis.Protocol.SkillSelectTargetInfo(); guideSkill.GuideSkill_.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId(); guideSkill.GuideSkill_.SkillId = (uint)skillData.Id; Vector3 direction = Vector3.zero; guideSkill.GuideSkill_.TargetList.Add(m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(false, out direction, true, skillData.BaseData.Value.TagercalculationType)); if (guideSkill.GuideSkill_.TargetList.Count == 0) { Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----按下 :Null "); } for (int i = 0; i < guideSkill.GuideSkill_.TargetList.Count; i++) { Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----按下 :" + guideSkill.GuideSkill_.TargetList[i].TargetId); } MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>(); float d = skillData.BaseData.Value.MaxDistance; // * SceneController.SKILL_PRECISION; Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d); guideSkill.GuideSkill_.Quat = vec4; skillRPC.CreatListenerCastGuideSkill(entityId, skillId); skillRPC.CastGuideSkillWright(entityId, skillId, guideSkill); } break; case 2: //目标改变 { Leyoutech.Utility.DebugUtility.Log(" 引导技能", "目标改变"); GuideSkill guideSkill = new GuideSkill(); guideSkill.ChangeTarget = new global::Crucis.Protocol.ChangeGuideSkillTargetInfo(); guideSkill.ChangeTarget.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId(); guideSkill.ChangeTarget.SkillId = (uint)skillData.Id; Vector3 direction = Vector3.zero; guideSkill.ChangeTarget.TargetList.Add(m_ISpacecraftSkillProperty.GetPerceptronTarget().GetCurrentTargetInfos(false, out direction, false)); if (guideSkill.ChangeTarget.TargetList.Count == 0) { Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----目标改变 :Null "); } for (int i = 0; i < guideSkill.ChangeTarget.TargetList.Count; i++) { Leyoutech.Utility.DebugUtility.Log(" 引导技能", "------%%%%%%%----目标改变 :" + guideSkill.ChangeTarget.TargetList[i].TargetId); } MainCameraComponent mainCamComponent = m_Context.GetObject <MainCameraComponent>(); float d = skillData.BaseData.Value.MaxDistance; // * SceneController.SKILL_PRECISION; Crucis.Protocol.Vec4 vec4 = GetCameraQuaternion(mainCamComponent, direction, d); guideSkill.ChangeTarget.Quat = vec4; skillRPC.CastGuideSkillWright(entityId, skillId, guideSkill); } break; case 3: //抬起 { Leyoutech.Utility.DebugUtility.Log("引导技能", " 抬起"); GuideSkill guideSkill = new GuideSkill(); guideSkill.GuideEnd = new global::Crucis.Protocol.GuideSkillEnd(); guideSkill.GuideEnd.CasterId = (uint)m_ISpacecraftSkillProperty.EntityId(); guideSkill.GuideEnd.SkillId = (uint)skillData.Id; skillRPC.CastGuideSkillWright(entityId, skillId, guideSkill); } break; default: break; } }