コード例 #1
0
    /// <summary>
    /// 获取当前技能武器VO信息
    /// </summary>
    /// <returns></returns>
    public PlayerShipSkillVO GetCurrentWeaponSkillVO()
    {
        IWeapon weapon = GetCurrentWeapon();

        if (weapon != null)
        {
            int skillID = (int)weapon.GetBaseConfig().SkillId;
            PlayerShipSkillVO skillVO = new PlayerShipSkillVO((int)skillID);
            return(skillVO);
        }
        return(null);
    }
コード例 #2
0
    /// <summary>
    /// 更新技能图标(打开时、技能升级时)
    /// </summary>
    /// <param name="button">按钮</param>
    /// <param name="skill">数据</param>
    private void UpdateSkillIcon(RectTransform button, PlayerShipSkillVO skill)
    {
        Image icon = button.Find("Image_SkillIcon").GetComponent <Image>();

        bool skillIsValid = skill != null;

        if (skill != null)
        {
            UIUtil.SetIconImage(icon, skillIsValid ? TableUtil.GetIconBundle((uint)skill.GetIcon()) : "",
                                skillIsValid ? TableUtil.GetIconAsset((uint)skill.GetIcon()) : "");
        }
        else
        {
            icon.sprite = null;
            icon.gameObject.SetActive(skillIsValid);
        }
    }
コード例 #3
0
    /// <summary>
    ///武器释放的技能结束
    /// </summary>
    private void WeaponSkillFinish(IComponentEvent entityEvent)
    {
        WeaponSkillFinish weaponskillfinish = entityEvent as WeaponSkillFinish;

        if (!weaponskillfinish.IsMain)
        {
            return;
        }
        PlayerShipSkillVO skillVO = m_SkillProxy.GetCurrentWeaponSkillVO();

        if (skillVO != null && skillVO.GetID() == weaponskillfinish.skillId && weaponskillfinish.skillId > 0)
        {
            WeaponAndCrossSight weaponCS = m_SkillProxy.GetCurrentWeaponAndCrossSight();
            if (weaponCS != null)
            {
                weaponCS.WeaponSkillFinish();
            }
        }
    }
コード例 #4
0
    /// <summary>
    /// 更新技能冷却
    /// </summary>
    /// <param name="button">技能按钮</param>
    /// <param name="skill">技能数据</param>
    private bool UpdateSkillCooldown(RectTransform button, PlayerShipSkillVO skill)
    {
        //cd
        Animator  animator = button.GetComponent <Animator>();
        Transform cdBox    = button.Find("CDImage").GetComponent <Transform>();
        Image     cdMask   = button.Find("CDImage/CD").GetComponent <Image>();
        TMP_Text  cdField  = button.Find("CDImage/Label_CDTimes").GetComponent <TMP_Text>();

        float cooldown = 0;

        if (skill != null)
        {
            PlayerSkillCDVO cdVO = m_SkillProxy.GetActiveCDVO(skill.GetID());
            if (cdVO != null)
            {
                cooldown = cdVO.GetRemainingTime();
            }

            if (cooldown > 0.0f)
            {
                cdBox.gameObject.SetActive(true);

                cdMask.fillAmount = cdVO.GetProgress();
                cdField.text      = string.Format("{0:N1}", cooldown);
            }
            else
            {
                cdBox.gameObject.SetActive(false);
            }
        }
        else
        {
            cdBox.gameObject.SetActive(false);
        }

        if (animator)
        {
            animator.SetInteger("State", cooldown > 0 ? 2 : 0);
        }

        return(cooldown > 0.0f);
    }
コード例 #5
0
    public void RefreshShipSkills()
    {
        skillVOs = null;

        List <PlayerShipSkillVO> skills = new List <PlayerShipSkillVO>();
        IShip currentShip = m_ShipProxy.GetAppointWarShip();

        if (currentShip != null)
        {
            ISkill[]      shipSkills = currentShip.GetSkillContainer().GetSkills();
            List <ISkill> tempList   = new List <ISkill>(shipSkills);
            tempList.Sort((skill1, skill2) =>
            {
                int pos1 = m_PackageProxy.GetItem <ItemSkillVO>(skill1.GetUID()).Position;
                int pos2 = m_PackageProxy.GetItem <ItemSkillVO>(skill2.GetUID()).Position;
                return(pos1.CompareTo(pos2));
            });

            foreach (var skill in tempList)
            {
                int skillID = (int)skill.GetTID();
                if (m_CfgEternityProxy.IsSkillExist(skillID))
                {
                    PlayerShipSkillVO skillVO = new PlayerShipSkillVO((int)skill.GetTID());
                    skills.Add(skillVO);
                }
            }
        }

        if (skills.Count > 0)
        {
            skillVOs = skills.ToArray();
        }

        SendNotification(NotificationName.MSG_SHIP_SKILL_CHANGED);
    }
コード例 #6
0
        /// <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);
                }
            }
        }