/// <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; } }
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; }
/// <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); }
protected void SetStageType(SkillStageType stageType) { SpacecraftSkillComponent skillComponent = Context.GetObject <SpacecraftSkillComponent>(); skillComponent.StageType = stageType; }