/// <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);
    }
Exemple #2
0
    /// <summary>
    /// 技能释放不成功, 客户端检查没过. 如果是武器技能, 清空武器状态
    /// </summary>
    private void OnUnsuccessfulReleaseOfSkill(IComponentEvent entityEvent)
    {
        UnsuccessfulReleaseOfSkillEvent skillEvent = entityEvent as UnsuccessfulReleaseOfSkillEvent;

        if (m_CfgSkillProxy.IsWeaponSkill(skillEvent.SkillID))
        {
            ResetRuntimeDataOfAllWeapons();
        }
    }
Exemple #3
0
    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);
                }
            }
        }
    }