//组装数据 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]); } }
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; } }
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); }
private void castSkill() { Message msg = new Message(MsgCmd.On_MainPlayer_CastSkill, this); SkillItemUIData dt = this.data as SkillItemUIData; msg["skillId"] = dt.skillID; msg.Send(); }
public override void refreshUI() { SkillItemUIData dt = this.data as SkillItemUIData; if (dt != null) { this.skillIcon.sprite = SpriteMgr.Instance.getSprite(dt.skillIcon); } }
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); }
//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); }); }
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; } }
//当技能释放成功 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); } }
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); }
//当接受到释放技能请求 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); } } } }
public FSMArgs(SkillItemUIData skillData) { this.skillData = skillData; }