public void Init(params object[] args) { manualReleaseAnalysisor = new BattleSkillManualReleaseAnalysisor(); battleSkillEffectAnalysis = new BattleSkillEffectAnalysis(); BattleManager.Instance.MgrLog("Battle calculator inited."); }
//使用技能 public void UseSkill(SO_BattleSkill battleSkill, BattleUnit targetBattleUnit = null, GridUnit targetGridUnit = null) { if (battleSkill == null) { UtilityHelper.LogError("Use skill error. Battle skill is none."); return; } GridUnit temp = targetGridUnit; if (temp == null && targetBattleUnit != null) { temp = targetBattleUnit.mapGrid; } if (temp != null && mapGrid.Distance(temp) > battleSkill.GetReleaseRadius(mapGrid)) { return; } BattleSkillEffectAnalysis analysis = BattleCalculator.Instance.AnalyseBattleSkillEffect(battleSkill, this, targetBattleUnit, targetGridUnit); if (analysis == null) { UtilityHelper.LogError("Use skill error. Analysis failed:" + battleSkill.skillName); return; } skillResults.Clear(); //主要影响 for (int i = 0; i < analysis.mainReceiver.Count; ++i) { skillResults.Add(BattleCalculator.Instance.CalcSingle(this, analysis.mainReceiver[i], battleSkill, true)); } //次要影响 for (int i = 0; i < analysis.minorReceiver.Count; ++i) { skillResults.Add(BattleCalculator.Instance.CalcSingle(this, analysis.minorReceiver[i], battleSkill, false)); } //连招combo统计 if (battleUnitAttribute.manualOperation) { UtilityHelper.Log("Check combo now"); //返回真表示连招成立,则调用连招效果 int comboID = battleUnitAttribute.comboJudge((int)battleSkill.damageType); if (comboID != -1) { //对于即时生效的技能需要直接改变skillResult ComboEffect(comboID, battleUnitAttribute); } } //产生使用技能的动作 BattleUnitSkillAction skillAction = BattleUnitActionEvent.CreateEvent <BattleUnitSkillAction>(BattleUnitActionType.UseSkill, this); skillAction.battleSkill = battleSkill; skillAction.skillResult = skillResults.ToArray(); skillAction.targetBattleUnit = targetBattleUnit; skillAction.targetGrid = targetGridUnit; skillAction.selfAttribute = BattleSkillCostEnergy(battleSkill); battleField.AppendBattleAction(skillAction); //伤害产生效果,计算仇恨 for (int i = 0; i < skillResults.Count; ++i) { //接收伤害,属性变更 skillResults[i].battleUnit.AcceptSkillResult(skillResults[i].syncAttribute); //产生仇恨 if (battleSkill.damageType != BattleSkillDamageType.Heal && !skillResults[i].battleUnit.Equals(this)) { //新仇记录 for (int j = 0; j < enemyTeam.battleUnits.Count; ++j) { if (!enemyTeam.battleUnits[j].CanAction) { continue; } //每个战斗单位都需要知道发生了什么 if (!enemyTeam.battleUnits[j].battleUnitAttribute.manualOperation) { enemyTeam.battleUnits[j].battleBehaviourSystem.RecordSkillResult(this, skillResults[i]); } } } } }