Пример #1
0
    //组装数据
    private void initData()
    {
        EntityDynamicActor dy = EntityMgr.Instance.getMainPlayer() as EntityDynamicActor;

        if (dy == null || dy.getSkillWidget() == null)
        {
            return;
        }
        if (dictSkillData == null)
        {
            dictSkillData = new Dictionary <int, SkillItemUIData>();
        }

        List <int>  skills = dy.getSkillWidget().getSkillInfo();
        SkillUIData dt     = new SkillUIData();

        for (int i = 0; i < skills.Count; i++)
        {
            SkillItemUIData info = getSkillData(skills[i]);
            dictSkillData.Add(info.skillID, info);
        }

        List <SkillItemUIData> lst = getComboSkills();

        for (int i = 0; i < lst.Count; i++)
        {
            dictSkillData.Add(lst[i].skillID, lst[i]);
        }
    }
Пример #2
0
    protected void doSkill(SkillItemUIData skillData)
    {
        SkillType type = skillData.skillType;

        switch (type)
        {
        case SkillType.normal:    //普通技能 距离 水平角度  垂直角度 //AOI管理实体视野周围的所有实体 方便获取一定范围内的实体 这里直接拿所有实体
            List <BaseEntity> targetLst = EntityMgr.Instance.getEntityByType(EntityType.monster);
            AttackInfo        info      = new AttackInfo(skillData.atkRange, skillData.horAngle, skillData.verAngle);
            if (targetLst != null && targetLst.Count > 0)
            {
                for (int i = 0; i < targetLst.Count; i++)
                {
                    bool isAttacked = AttackHelper.isAttacked(this.dyAgent, targetLst[i], info);
                    if (isAttacked)
                    {
                        DamageData dt = new DamageData();
                        dt.casterId = this.dyAgent.UID;
                        dt.targetId = targetLst[i].UID;
                        dt.atkType  = skillData.atkType;
                        dt.hitDis   = skillData.hitDis;
                        dt.damage   = skillData.skillDamage;
                        targetLst[i].onDamage(dt);
                    }
                }
            }
            this.nextAttackTime = -1;
            break;

        case SkillType.bullet:    //子弹技能 由子弹碰撞做伤害检测
            BulletFactroy.createBullet(this.dyAgent, skillData.skillBulletId);
            this.nextAttackTime = -1;
            break;
        }
    }
Пример #3
0
    public static SkillItemUIData getSkillData(int skillId)
    {
        SkillConfigConfig data = SkillConfigConfig.Get(skillId);
        SkillItemUIData   info = new SkillItemUIData();

        info.skillID         = data.tempId;
        info.skillCD         = data.skillCD;
        info.skillDamage     = data.skillDamage;
        info.skillEffectID   = data.skillEffect;
        info.skillIcon       = data.skillIcon;
        info.animName        = data.animName;
        info.skillEffectTime = data.effectTime;
        info.skillAudioId    = data.audioId;
        info.skillAudioTime  = data.audioTime;
        info.skillType       = (SkillType)data.skillType;
        info.fsmStateType    = (StateType)data.fsmState;
        info.skillModeType   = (SkillModeType)data.skillModeType;
        info.atkType         = (AttackType)data.atkType;
        info.hitDis          = (float)data.atkDistance;
        info.skillBulletId   = data.skillBulletId;
        info.skillAtkTime    = data.skillAtkTime;
        info.atkRange        = (float)data.atkRange;
        info.horAngle        = data.horAngle;
        info.verAngle        = data.verAngle;
        return(info);
    }
Пример #4
0
    private void castSkill()
    {
        Message         msg = new Message(MsgCmd.On_MainPlayer_CastSkill, this);
        SkillItemUIData dt  = this.data as SkillItemUIData;

        msg["skillId"] = dt.skillID;
        msg.Send();
    }
Пример #5
0
    public override void refreshUI()
    {
        SkillItemUIData dt = this.data as SkillItemUIData;

        if (dt != null)
        {
            this.skillIcon.sprite = SpriteMgr.Instance.getSprite(dt.skillIcon);
        }
    }
Пример #6
0
    public SkillItemUIData getDodgeSkillData()
    {
        SkillItemUIData dt = null;

        for (int i = 0; i < lstSkill.Count; i++)
        {
            if (lstSkill[i].skillModeType == SkillModeType.dodgeSkill)
            {
                dt = lstSkill[i];
            }
        }
        return(dt);
    }
Пример #7
0
    //UI技能CD动画
    private void showSkillCDAnim()
    {
        float           skillCD = 1;
        SkillItemUIData dt      = this.data as SkillItemUIData;

        if (dt != null)
        {
            skillCD = dt.skillCD;
        }
        this.skillMask.gameObject.SetActive(true);
        this.skillMask.fillAmount = 1;
        this.skillMask.DOFillAmount(0, skillCD).SetEase(Ease.Linear).OnComplete(() => { this.skillMask.gameObject.SetActive(false); });
    }
Пример #8
0
    protected void checkSkill(SkillItemUIData skillData)
    {
        SkillType type = skillData.skillType;

        switch (type)
        {
        case SkillType.normal:
            this.nextAttackTime = skillData.skillAtkTime + Time.timeSinceLevelLoad;
            break;

        case SkillType.bullet:
            this.nextAttackTime = skillData.skillAtkTime + Time.timeSinceLevelLoad;
            break;
        }
    }
Пример #9
0
    //当技能释放成功
    private void onCastSkillSuccess(Message msg)
    {
        int skillId = (int)msg["skillId"];

        Debug.Log("onCastSkillSuccess(Message msg)");
        SkillItemUIData dt = this.data as SkillItemUIData;

        if (dt != null && skillId == dt.skillID)
        {
            UIEventTrigger listener = this.CacheObj.AddComponent <UIEventTrigger>();
            if (listener != null)
            {
                listener.isCanClickBtn(false);
            }
            showSkillCDAnim();
        }
    }
    private void playAnim()
    {
        checkTarget();
        SkillItemUIData comboData = this.args.comboSkills[currCount];

        atkRange = comboData.atkRange;
        string animName = comboData.animName;

        dyAgent.anim.CrossFade(animName, 0.1f);
        dyAgent.anim.wrapMode = WrapMode.Once;
        changeNextTime        = Time.timeSinceLevelLoad + dyAgent.anim[animName].length;
        this.audioId          = comboData.skillAudioId;
        this.audioTime        = comboData.skillAudioTime + Time.timeSinceLevelLoad;
        this.effId            = comboData.skillEffectID;
        this.effTime          = comboData.skillEffectTime + Time.timeSinceLevelLoad;
        isAudioPlayed         = false;
        checkSkill(comboData);
    }
 public override void onUpdate()
 {
     //combo检测
     if (Time.timeSinceLevelLoad >= changeNextTime)
     {
         if (nextCount == -1 || nextCount == currCount)
         {
             onRelease();
         }
         else
         {
             currCount = nextCount;
             playAnim();
         }
     }
     //攻击检测
     if (nextAttackTime > -1 && Time.timeSinceLevelLoad >= nextAttackTime - 0.2f)
     {
         if (this.dyAgent.Target != null)
         {
             dir    = this.dyAgent.Target.CacheTrans.position - this.dyAgent.CacheTrans.position;
             look   = this.dyAgent.Target.CacheTrans.position;
             look.y = this.dyAgent.CacheTrans.position.y;
             dis    = dir.magnitude;
             this.dyAgent.CacheTrans.LookAt(look, Vector3.up);
             if (dis > atkRange && dis - atkRange < atkRange)
             {
                 this.dyAgent.moveTo(dir.normalized * 10f);
             }
         }
     }
     if (nextAttackTime > -1 && Time.timeSinceLevelLoad >= nextAttackTime)
     {
         SkillItemUIData comboData = this.args.comboSkills[currCount];
         doSkill(comboData);
     }
     //音效
     if (Time.timeSinceLevelLoad >= audioTime && dyAgent != null && !isAudioPlayed)
     {
         isAudioPlayed = true;
         AudioMgr.Instance.playAudioAtPoint(this.audioId, this.dyAgent.CacheTrans.position);
     }
 }
Пример #12
0
    private List <SkillItemUIData> getComboSkills()
    {
        List <SkillItemUIData> dtLst = new List <SkillItemUIData>();
        EntityDynamicActor     dy    = EntityMgr.Instance.getMainPlayer() as EntityDynamicActor;

        if (dy == null)
        {
            return(dtLst);
        }
        List <int> combos = new List <int>();

        combos.AddRange(dy.getAttr <List <int> >(Attr.comboSkills.ToString()));
        for (int i = 0; i < combos.Count; i++)
        {
            SkillItemUIData info = getSkillData(combos[i]);
            dtLst.Add(info);
        }
        return(dtLst);
    }
Пример #13
0
    //当接受到释放技能请求
    private void onCastSkill(Message msg)
    {
        int skillId = (int)msg["skillId"];

        if (dictSkillData == null)
        {
            initData();
        }
        SkillItemUIData skillData = null;

        if (dictSkillData.ContainsKey(skillId))
        {
            skillData = dictSkillData[skillId];
        }

        EntityMainPlayer role = EntityMgr.Instance.getMainPlayer() as EntityMainPlayer;

        if (role != null)
        {
            if (skillData != null)
            {
                if (skillData.skillModeType == SkillModeType.baseSkill)
                {
                    MessageCenter.Instance.SendMessage(MsgCmd.On_Combo_Release_Success, this);
                    if (role.isCanChangeState(StateType.baseCombo))
                    {
                        FSMArgs args = new FSMArgs();
                        args.comboSkills = getComboSkills();
                        role.onChangeState(StateType.baseCombo, args);
                    }
                }
                else
                {
                    FSMArgs args = new FSMArgs();
                    args.skillData = skillData;
                    role.onReleaseSkill(skillId, args);
                }
            }
        }
    }
Пример #14
0
 public FSMArgs(SkillItemUIData skillData)
 {
     this.skillData = skillData;
 }