Beispiel #1
0
    /// <summary>
    /// 热键按下
    /// </summary>
    public override void OnHotKeyDown(int skillID)
    {
        base.OnHotKeyDown(skillID);

        if (!m_FiredDuringThisPress && m_PlayerSkillProxy.CanCurrentWeaponRelease())
        {
            //Leyoutech.Utility.DebugUtility.Log("武器", "热键按下,请求释放技能");

            //执行释放
            SkillCastEvent castSkillEvent = new SkillCastEvent();
            castSkillEvent.IsWeaponSkill = true;
            castSkillEvent.SkillIndex    = skillID;
            castSkillEvent.KeyPressed    = true;
            m_MainPlayer.SendEvent(ComponentEventName.SkillButtonResponse, castSkillEvent);
            m_FiredDuringThisPress = true;
        }
        else if (!m_FiredDuringThisPress && !m_PlayerSkillProxy.CanCurrentWeaponRelease())
        {
            //开火失败
            GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponFireFail);
        }
        else
        {
            // 已经放过技能了, 不再发送释放技能消息. 解决武器过热以后还会继续射击的问题
        }
    }
Beispiel #2
0
    private void OnSkillHotkey(IComponentEvent componentEvent)
    {
        m_SkillCastEvent = componentEvent as SkillCastEvent;

        OnSkillHotkeyImplementation(m_SkillCastEvent);

        // 不是武器技能的持续释放才在这里模拟, 否则在武器模拟
        m_SkillKeyPressed = m_SkillCastEvent.KeyPressed && !m_SkillCastEvent.IsWeaponSkill;
    }
Beispiel #3
0
    public void SendSpacecraftSkillCastEvent(HotkeyCallback callbackContext, int skillIndex)
    {
        SkillCastEvent skillCastEvent = new SkillCastEvent();

        skillCastEvent.IsWeaponSkill = false;
        skillCastEvent.SkillIndex    = skillIndex;
        skillCastEvent.KeyPressed    = callbackContext.started;

        SendEvent(ComponentEventName.CastSkill, skillCastEvent);
    }
Beispiel #4
0
    public override void OnHotKeyUp(int skillID)
    {
        base.OnHotKeyUp(skillID);

        SkillCastEvent castSkillEvent = new SkillCastEvent();

        castSkillEvent.IsWeaponSkill = true;
        castSkillEvent.SkillIndex    = skillID;
        castSkillEvent.KeyPressed    = false;
        m_MainPlayer.SendEvent(ComponentEventName.SkillButtonResponse, castSkillEvent);
    }
    /// <summary>
    /// 机枪武器对应的技能是一个持续引导技能, 按键按下后, 在松开之前, 只记做一次技能发射
    /// </summary>
    /// <param name="hotkey"></param>
    public override void WeaponOperationImplementation(SkillHotkey skillHotkey)
    {
        bool press = skillHotkey.ActionPhase == HotkeyPhase.Started;

        if (press)
        {
            if (!m_FiredDuringThisPress && m_PlayerSkillProxy.CanCurrentWeaponRelease())
            {
                SkillCastEvent castSkillEvent = new SkillCastEvent();
                castSkillEvent.IsWeaponSkill = true;
                castSkillEvent.SkillIndex    = skillHotkey.SkillIndex;
                castSkillEvent.KeyPressed    = true;

// #if NewSkill
// #else
                m_MainPlayer.SendEvent(ComponentEventName.CastSkill, castSkillEvent);
//#endif

                m_FiredDuringThisPress = true;
                m_State           = GunState.Fire;
                m_TimeOfStartFire = Time.time;
            }
            else if (!m_FiredDuringThisPress && !m_PlayerSkillProxy.CanCurrentWeaponRelease())
            {
                GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponFireFail);
            }
            else
            {
                // 已经放过技能了, 不再发送释放技能消息. 解决武器过热以后还会继续射击的问题
            }
        }
        else
        {
            if (m_State == GunState.Fire)
            {
                SkillCastEvent castSkillEvent = new SkillCastEvent();
                castSkillEvent.IsWeaponSkill = true;
                castSkillEvent.SkillIndex    = skillHotkey.SkillIndex;
                castSkillEvent.KeyPressed    = false;

// #if NewSkill
// #else
                m_MainPlayer.SendEvent(ComponentEventName.CastSkill, castSkillEvent);
//#endif

                m_FiredDuringThisPress = false;
                m_State                   = GunState.Stop;
                m_TimeOfStopFire          = Time.time;
                m_BulletCountWhenStopFire = m_CurrentBulletCount;
            }
        }
    }
Beispiel #6
0
    /// <summary>
    /// 热键抬起
    /// </summary>
    /// <param name="skillindex"></param>
    public override void OnHotKeyUp(int skillID)
    {
        base.OnHotKeyUp(skillID);
        //Leyoutech.Utility.DebugUtility.Log("武器", "热键抬起,请求释放技能结束");

        SkillCastEvent castSkillEvent = new SkillCastEvent();

        castSkillEvent.IsWeaponSkill = true;
        castSkillEvent.SkillIndex    = skillID;
        castSkillEvent.KeyPressed    = false;

        m_MainPlayer.SendEvent(ComponentEventName.SkillButtonResponse, castSkillEvent);
        m_FiredDuringThisPress = false;
    }
Beispiel #7
0
    /// <summary>
    /// 释放技能攻击所有已经锁定的目标
    /// </summary>
    private void CastSkill()
    {
        SLog("释放技能. ");

        SkillCastEvent skillCastEvent = new SkillCastEvent();

        skillCastEvent.IsWeaponSkill = true;
        skillCastEvent.KeyPressed    = true;

//#if NewSkill
//#else
        m_MainPlayer.SendEvent(ComponentEventName.CastSkill, skillCastEvent);
//#endif
    }
Beispiel #8
0
    public void SendNewSpacecraftSkillCastEvent(HotkeyCallback callbackContext, int skillIndex)
    {
        if (m_SpacecraftInputProperty.GetCurrentState().IsHasSubState(EnumSubState.Peerless))  //转化炉模式只允许释放武器技能
        {
            return;
        }

        SkillCastEvent skillCastEvent = new SkillCastEvent();

        skillCastEvent.IsWeaponSkill = false;
        skillCastEvent.SkillIndex    = skillIndex;
        skillCastEvent.KeyPressed    = callbackContext.started;

        SendEvent(ComponentEventName.SkillButtonResponse, skillCastEvent);
    }
    public virtual void WeaponOperationImplementation(SkillHotkey skillHotkey)
    {
        bool press = skillHotkey.ActionPhase == HotkeyPhase.Started;

        if (m_PlayerSkillProxy.CanCurrentWeaponRelease() || !press)
        {
            SkillCastEvent castSkillEvent = new SkillCastEvent();
            castSkillEvent.IsWeaponSkill = true;
            castSkillEvent.SkillIndex    = skillHotkey.SkillIndex;
            castSkillEvent.KeyPressed    = press;

            m_MainPlayer.SendEvent(ComponentEventName.CastSkill, castSkillEvent);
        }

        if (!m_PlayerSkillProxy.CanCurrentWeaponRelease())
        {
            GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponFireFail);
        }
    }
    public void WeaponOperationByHotKey(SkillHotkey skillHotkey)
    {
        if (m_PlayerSkillProxy.UsingReformer())
        {
            SkillCastEvent castSkillEvent = new SkillCastEvent();
            castSkillEvent.IsWeaponSkill = true;
            castSkillEvent.SkillIndex    = skillHotkey.SkillIndex;
            castSkillEvent.KeyPressed    = skillHotkey.ActionPhase == HotkeyPhase.Started;

//#if NewSkill
//#else
            m_MainPlayer.SendEvent(ComponentEventName.CastSkill, castSkillEvent);
//#endif
        }
        else
        {
            WeaponOperationImplementation(skillHotkey);
        }
    }
Beispiel #11
0
    /// <summary>
    /// 热键按下
    /// </summary>
    public override void OnHotKeyDown(int skillID)
    {
        if (!m_PlayerSkillProxy.CanCurrentWeaponRelease())
        {
            //开火失败
            GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponFireFail);
            return;
        }

        base.OnHotKeyDown(skillID);
        m_LockTargeMap.Clear();
        NetworkManager.Instance.GetSkillController().SendMissileLockTarget(true);

        SkillCastEvent castSkillEvent = new SkillCastEvent();

        castSkillEvent.IsWeaponSkill = true;
        castSkillEvent.SkillIndex    = skillID;
        castSkillEvent.KeyPressed    = true;
        m_MainPlayer.SendEvent(ComponentEventName.SkillButtonResponse, castSkillEvent);
    }
Beispiel #12
0
    public override void OnHotKeyDown(int skillID)
    {
        if (!m_PlayerSkillProxy.CanCurrentWeaponRelease())
        {
            //开火失败
            GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponFireFail);
            return;
        }

        base.OnHotKeyDown(skillID);
        SetAreas();

        SkillCastEvent castSkillEvent = new SkillCastEvent();

        castSkillEvent.IsWeaponSkill = true;
        castSkillEvent.SkillIndex    = skillID;
        castSkillEvent.KeyPressed    = true;
        m_MainPlayer.SendEvent(ComponentEventName.SkillButtonResponse, castSkillEvent);

        MessageToHudCrosShairSize();
    }
Beispiel #13
0
    public override void OnHotKeyUp(int skillID)
    {
        base.OnHotKeyUp(skillID);
        //if (ExistingLockedTarget())
        //{
        SkillCastEvent castSkillEvent = new SkillCastEvent();

        castSkillEvent.IsWeaponSkill = true;
        castSkillEvent.SkillIndex    = skillID;
        castSkillEvent.KeyPressed    = false;
        m_MainPlayer.SendEvent(ComponentEventName.SkillButtonResponse, castSkillEvent);
        //}
        //else if (ExistingLockedTarget() && !m_PlayerSkillProxy.CanCurrentWeaponRelease())
        //{
        //    GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponFireFail);
        //}
        //else
        //{
        //    //没有锁定目标, 结束这次攻击流程
        //    WeaponSkillFinish();
        //}
        NetworkManager.Instance.GetSkillController().SendMissileLockTarget(false);
    }
    /// <summary>
    /// 释放技能攻击所有已经锁定的目标
    /// </summary>
    private void CastSkill()
    {
        SLog("释放技能. ");
        foreach (var pair in m_LockTargeMap)
        {
            TargetLockInfo targetLockInfo = pair.Value;
            targetLockInfo.LockTimeRemaining = m_LockonTimeParam;
        }

        SkillCastEvent skillCastEvent = new SkillCastEvent();

        skillCastEvent.IsWeaponSkill = true;
        skillCastEvent.KeyPressed    = true;

//#if NewSkill
//#else
        m_MainPlayer.SendEvent(ComponentEventName.CastSkill, skillCastEvent);

        // 相当于一次按键的按下和抬起. 在技能系统中技能按键的操作要成对出现
        skillCastEvent.KeyPressed = false;
        m_MainPlayer.SendEvent(ComponentEventName.CastSkill, skillCastEvent);
//#endif
    }
        /// <summary>
        /// 技能按键相应
        /// </summary>
        /// <param name="obj"></param>
        private void OnHotkey(IComponentEvent obj)
        {
            //战斗状态||过载模式 才响应
            if (m_ISpacecraftSkillProperty.GetCurrentState().GetMainState() == EnumMainState.Fight ||
                m_ISpacecraftSkillProperty.GetCurrentState().IsHasSubState(EnumSubState.Overload))
            {
                SkillCastEvent skillCastEvent = obj as SkillCastEvent;

                if (m_ISpacecraftSkillProperty.GetCurrentState().IsHasSubState(EnumSubState.Peerless) && !skillCastEvent.IsWeaponSkill) //转化炉模式只允许释放武器技能
                {
                    return;
                }

                int skillId = 0;
                if (skillCastEvent.IsWeaponSkill)
                {
                    skillId = skillCastEvent.SkillIndex; //非武器 表示第几个技能,武器则表示技能ID
                }
                else
                {
                    PlayerShipSkillVO skillVO = null;
                    skillVO = m_PlayerSkillProxy.GetShipSkillByIndex(skillCastEvent.SkillIndex); //由第几个技能,获取技能VO
                    if (skillVO == null)
                    {
                        return;
                    }

                    skillId = skillVO.GetID();
                }

                Leyoutech.Utility.DebugUtility.Log("技能按键响应", string.Format("技能 Id = {0} , 按下 = {1}", skillId, skillCastEvent.KeyPressed));

                //按下
                if (skillCastEvent.KeyPressed)
                {
                    //是否可释放
                    if (!CanReleaseSkill(skillId))
                    {
                        Leyoutech.Utility.DebugUtility.Log("技能按键响应", string.Format("技能 Id = {0} ,  不可释放", skillId));
                        return;
                    }

                    float fire_CountDown = m_CfgEternityProxy.GetGamingConfig(1).Value.Sound.Value.CountDown.Value.Fire;
                    m_ISpacecraftSkillProperty.SetFireCountdown(fire_CountDown);

                    ////执行预演播放,并请求服务器验证,如果失败则打断释放
                    ////执行释放
                    ReleaseSkill(skillId);

                    if (m_ISpacecraftSkillProperty.IsMain()) //主角
                    {
                        C2S_ButtonDown();
                    }

                    // Trigger 重复类技能记录
                    m_TriggerStartTime = Time.time;
                    m_TriggerSkillId   = skillId;
                    IsTrigger          = m_CfgEternityProxy.GetSkillData(skillId).BaseData.Value.IsTrigger;
                    m_TriggerLogicTime = m_CfgEternityProxy.GetSkillData(skillId).BaseData.Value.Triggertime;
                    m_ISpacecraftSkillProperty.SetSkillBttonIsDown(true);
                }
                else //抬起
                {
                    if (m_ISpacecraftSkillProperty.IsMain()) //主角
                    {
                        if (m_StateMachine.IsRunning && skillId == SkillID)
                        {
                            C2S_ButtonUp();
                        }
                    }

                    m_TriggerSkillId = -1;
                    IsTrigger        = false;
                    m_ISpacecraftSkillProperty.SetSkillBttonIsDown(false);
                }
            }
        }
Beispiel #16
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);
                }
            }
        }
    }