/// <summary> /// 主角正在释放武器技能 /// </summary> /// <returns></returns> public bool IsMainPlayerUsingWeaponSkill() { SpacecraftEntity mainPlayer = m_GameplayProxy.GetEntityById <SpacecraftEntity>(m_GameplayProxy.GetMainPlayerUID()); if (mainPlayer == null) { return(false); } int skillID = mainPlayer.GetCurrSkillId(); if (skillID > 0 && m_CfgSkillProxy.IsWeaponSkill(skillID) && (mainPlayer.GetCurrentSkillState() == SkillState.Channelling || mainPlayer.GetCurrentSkillState() == SkillState.ManualChannelling || mainPlayer.GetCurrentSkillState() == SkillState.AutoChannelling || mainPlayer.GetCurrentSkillState() == SkillState.RapidFire)) { return(true); } if (mainPlayer.IsReleasingTriggerSkill() && mainPlayer.GetTriggerSkillID() > 0 && m_CfgSkillProxy.IsWeaponSkill(mainPlayer.GetTriggerSkillID())) { return(true); } return(false); }
/// <summary> /// 技能释放不成功, 客户端检查没过. 如果是武器技能, 清空武器状态 /// </summary> private void OnUnsuccessfulReleaseOfSkill(IComponentEvent entityEvent) { UnsuccessfulReleaseOfSkillEvent skillEvent = entityEvent as UnsuccessfulReleaseOfSkillEvent; if (m_CfgSkillProxy.IsWeaponSkill(skillEvent.SkillID)) { ResetRuntimeDataOfAllWeapons(); } }
private void OnSkillHotkeyImplementation(SkillCastEvent skillCast) { PlayerSkillVO skillVO; if (skillCast.IsWeaponSkill) { if (m_SkillProxy.UsingReformer()) { skillVO = m_SkillProxy.GetReformerSkill(); } else { skillVO = m_SkillProxy.GetCurrentWeaponSkill(); if (skillVO != null && !m_CfgSkillProxy.IsWeaponSkill(skillVO.GetID())) { Debug.LogErrorFormat("技能 {0} 被配置在武器上, 但它并不是一个武器技能! 找策划确认一下技能表和武器表", skillVO.GetID()); } } } else { skillVO = m_SkillProxy.GetSkillByIndex(skillCast.SkillIndex); if (skillVO != null && m_CfgSkillProxy.IsWeaponSkill(skillVO.GetID())) { Debug.LogErrorFormat("技能 {0} 被配置在飞船上, 但它其实是一个武器技能! 找策划确认一下技能表和武器表", skillVO.GetID()); } } if (skillVO != null) { int skillID = skillVO.GetID(); bool keyPressed = skillCast.KeyPressed; if (keyPressed && !IsReleasingSkill(skillID)) { // 释放Trigger技能的过程中, 可以释放非Trigger技能. 此时Trigger技能中断, 等非Trigger技能结束后继续放 // 不是Trigger技能的话, 每次技能按键按下, 只能释放一次 if ((m_CfgSkillProxy.IsTriggerSkill(skillID) && !OneOfReleasingSkillsIsNotTriggerSkill()) || (!m_CfgSkillProxy.IsTriggerSkill(skillID) && !SkillHasReleasedDuringPress(skillID))) { ReleaseSkillByClientInput(skillID); SetSkillReleaseDuringPress(skillID, true); if (m_CfgSkillProxy.IsTriggerSkill(skillID)) { m_Property.SetTriggerSkillID(skillID); m_Property.SetReleasingTriggerSkill(true); } } } else { SkillControlEvent skillEvent = keyPressed ? SkillControlEvent.Event_SkillButtonPress : SkillControlEvent.Event_SkillButtonRelease; SendEventToSkill(skillID, skillEvent, null); if (!keyPressed) { SetSkillReleaseDuringPress(skillID, false); m_Property.SetReleasingTriggerSkill(false); m_Property.SetTriggerSkillID(-1); } } } }