/// <summary> /// 开始自己的回合 /// </summary> public void TurnStart(TurnBase turnBase) { if (turnState == State.Ready) { m_TurnBase = turnBase; turnState = State.Playing; m_PropertyComponent.ResetMovePoint(); onTurnStart.Invoke(this, m_TurnBase); GameEvent.TurnBaseEvent.FireOnEntityTurnStart(this); BeginControll(); } }
/// <summary> /// 自己回合结束 /// </summary> public void TurnComplete() { if (turnState == State.Playing) { turnState = State.Complete; StopControll(); onTurnComplete.Invoke(this, m_TurnBase); GameEvent.TurnBaseEvent.FireOnEntityTurnComplete(this); TurnBase tempTurn = m_TurnBase; m_TurnBase = null; tempTurn.OnEntityTurnComplete(this); //这行代码一定需要放在函数的最后面,用于保证Entity回合结束后,清空所有的回合内容,再通知TurnBase } }
/// <summary> /// 下一回合 /// </summary> void NextTurn() { if (nextTurnBase == null) { curTurnBase = new TurnBase(1); } else { curTurnBase = nextTurnBase; } nextTurnBase = new TurnBase(curTurnBase.turnCounter); curTurnBase.Start(); }
void UpdateEntityTurnList(TurnBase turnBase, TurnBase nextTurnBase) { UICombatMainEntityTurnItem item = GetItem(); item.SetController(turnBase.curController); foreach (CControllerComponent t in turnBase.readyControllerList) { item = GetItem(); item.SetController(t); } turnSplit.SetSiblingIndex(item.transform.GetSiblingIndex()); foreach (CControllerComponent t in nextTurnBase.readyControllerList) { GetItem().SetController(t); } }
/// <summary> /// 完成当前回合 /// </summary> public void OnTurnComplete(TurnBase turnBase, TurnBaseRuningState result) { if (turnBase != curTurnBase) { Debug.LogError("结束的回合不是当前的回合"); return; } switch (result) { case TurnBaseRuningState.NextTurn: NextTurn(); break; case TurnBaseRuningState.Lost: CombatComplete(CombatResult.Lost); break; case TurnBaseRuningState.Win: CombatComplete(CombatResult.Win); break; } }
public static List <CombatResult> Attack(TurnBase attackerIn, TurnBase attackedIn, SkillName skillNameIn, SkillNameB skillNameBIn, List <TurnBase> enemyesIn, List <TurnBase> unitsIn, int skill_lvlIn) { InfoSkill infoSkill = SkillInfo.GetSkill(skillNameIn, skill_lvlIn); damageType = infoSkill.damageType; InfoSkill infoSkillB = SkillInfo.GetSkillB(skillNameBIn, skill_lvlIn); damageTypeB = infoSkillB.damageTypeB; targets.Clear(); selectedCells.Clear(); combatResults.Clear(); attacker = attackerIn; attacked = attackedIn; skillName = skillNameIn; skillNameB = skillNameBIn; enemyes.Clear(); units.Clear(); enemyes = enemyesIn; units = unitsIn; skill_lvl = skill_lvlIn; CheckList(); float damage = 0; if (skillName == SkillName.none && skillNameB == SkillNameB.none) { damage = attacker.general.PARAMS[GENERAL_DAMAGE_CURRENT] - attacked.general.PARAMS[GENERAL_DEFENSE_CURRENT]; if (damage <= 0) { damage = 0; } else if (Random.Range(0, 100) < attacker.general.PARAMS[GENERAL_CRIT_CHANGE_CURRENT]) { damage += attacker.general.PARAMS[GENERAL_CRIT_DAMAGE_CURRENT]; } CombatResult cr = new CombatResult(); cr.target = attacked; cr.damage = damage; combatResults.Add(cr); } else { if (damageType != DamageType.Default && skillName != SkillName.none) { switch (damageType) { case DamageType.Link: Link(); break; case DamageType.Rebound: Rebound(); break; case DamageType.Row: Row(); break; case DamageType.Boom: Boom(); break; case DamageType.Dot: break; case DamageType.Buff: break; case DamageType.Debuff: break; } } else if (damageTypeB != DamageType.Default && skillNameB != SkillNameB.none) { switch (damageTypeB) { case DamageType.Link: Link(); break; case DamageType.Rebound: Rebound(); break; case DamageType.Row: Row(); break; case DamageType.Boom: Boom(); break; case DamageType.Dot: break; case DamageType.Buff: break; case DamageType.Debuff: break; } } else { } CombatResult crs = new CombatResult(); crs.target = attacked; if (DamageType.Boom == damageType) { //crs.damage = DamageBoom(); } crs.damage = 20; combatResults.Add(crs); foreach (TurnBase target in targets) { CombatResult crss = new CombatResult(); crss.target = target; crss.damage = 15; combatResults.Add(crss); } } return(combatResults); }
void EnemyAttack() { enemyesCurrent[0].animator.Play("attack"); rHit = Random.Range(0, units.Count - 1); bool targetIsDead = false; List <TurnBase> enemyesOut = new List <TurnBase>(); foreach (TurnBase enemy in enemyes) { enemyesOut.Add(enemy); } List <TurnBase> unitsOut = new List <TurnBase>(); foreach (TurnBase unit in units) { unitsOut.Add(unit); } List <CombatResult> combatResults = Combat.Attack(enemyesCurrent[0], units[rHit], skillName, skillNameB, enemyesOut, unitsOut, skill_lvl); for (int i = 0; i < combatResults.Count; i++) { TurnBase target = combatResults[i].target; float damage = combatResults[i].damage; target.general.PARAMS[GENERAL_HP_CURRENT] -= damage; GameObject gt = Instantiate(ResManager.instance.DamageText, target.transform); gt.transform.position = target.transform.parent.transform.localPosition; DamageText dt = gt.GetComponent <DamageText>(); dt.startMitonUnit("-" + damage, Colors.RedColor); if (target.general.PARAMS[GENERAL_HP_CURRENT] > 0) { target.animator.Play("hart"); if (target.general.PARAMS[GENERAL_HP_CURRENT] > target.general.PARAMS[GENERAL_HP] / 4 * 3) //75+% { target.text.color = Colors.GreenColor; } else if (target.general.PARAMS[GENERAL_HP_CURRENT] < target.general.PARAMS[GENERAL_HP] / 4 * 3 && target.general.PARAMS[GENERAL_HP_CURRENT] > target.general.PARAMS[GENERAL_HP] / 2) //50% + /75%- { target.text.color = Colors.YellowColor; } else if (target.general.PARAMS[GENERAL_HP_CURRENT] < target.general.PARAMS[GENERAL_HP] / 2 && target.general.PARAMS[GENERAL_HP_CURRENT] > target.general.PARAMS[GENERAL_HP] / 4) //25%+ / 50%- { target.text.color = Colors.Orange; } else if (target.general.PARAMS[GENERAL_HP_CURRENT] < target.general.PARAMS[GENERAL_HP] / 4 && target.general.PARAMS[GENERAL_HP_CURRENT] > 0) //0+ / 25- { target.text.color = Colors.RedColor; } target.text.text = target.general.PARAMS[GENERAL_HP_CURRENT].ToString(); } else { targetIsDead = true; } } skillName = SkillName.none; skillNameB = SkillNameB.none; skill_lvl = 0; if (targetIsDead) { Invoke("EnemyAttackDelay", 3f); } else { Invoke("EnemyAttackDelay", 1f); } }
void OnTurnComplete(CControllerComponent t, TurnBase turnBase) { m_CurTurn.gameObject.SetActive(false); }
bool PlayerAttack() { bool targetIsDead = false; List <TurnBase> enemyesOut = new List <TurnBase>(); foreach (TurnBase enemy in enemyes) { enemyesOut.Add(enemy); } List <TurnBase> unitsOut = new List <TurnBase>(); foreach (TurnBase unit in units) { unitsOut.Add(unit); } List <CombatResult> combatResults = Combat.Attack(selectedUnit, selectedEnemy, skillName, skillNameB, enemyesOut, unitsOut, skill_lvl); for (int i = 0; i < combatResults.Count; i++) { TurnBase target = combatResults[i].target; float damage = combatResults[i].damage; target.general.PARAMS[GENERAL_HP_CURRENT] -= damage; GameObject gt = Instantiate(ResManager.instance.DamageText, target.transform); gt.transform.position = new Vector3(target.transform.parent.transform.position.x, target.transform.parent.transform.position.y, 5f); DamageText dt = gt.GetComponent <DamageText>(); dt.startMitonEnemy("-" + damage, Colors.RedColor); if (target.general.PARAMS[GENERAL_HP_CURRENT] > 0) { target.animator.Play("hart"); if (target.general.PARAMS[GENERAL_HP_CURRENT] > target.general.PARAMS[GENERAL_HP] / 4 * 3) //75+% { target.text.color = Colors.GreenColor; } else if (target.general.PARAMS[GENERAL_HP_CURRENT] < target.general.PARAMS[GENERAL_HP] / 4 * 3 && target.general.PARAMS[GENERAL_HP_CURRENT] > target.general.PARAMS[GENERAL_HP] / 2) //50% + /75%- { target.text.color = Colors.YellowColor; } else if (target.general.PARAMS[GENERAL_HP_CURRENT] < target.general.PARAMS[GENERAL_HP] / 2 && target.general.PARAMS[GENERAL_HP_CURRENT] > target.general.PARAMS[GENERAL_HP] / 4) //25%+ / 50%- { target.text.color = Colors.Orange; } else if (target.general.PARAMS[GENERAL_HP_CURRENT] < target.general.PARAMS[GENERAL_HP] / 4 && target.general.PARAMS[GENERAL_HP_CURRENT] > 0) //0+ / 25- { target.text.color = Colors.RedColor; } target.text.text = target.general.PARAMS[GENERAL_HP_CURRENT].ToString(); } else { targetIsDead = true; } } skill_0.GetComponent <Image>().color = Colors.WhiteColor; skill_1.GetComponent <Image>().color = Colors.WhiteColor; skill_2.GetComponent <Image>().color = Colors.WhiteColor; skill_B.GetComponent <Image>().color = Colors.WhiteColor; defaultSkill.GetComponent <Image>().color = Colors.GreenColor; selectedUnit.animator.Play("attack"); selectedUnit.isEndTurn = true; skillName = SkillName.none; skillNameB = SkillNameB.none; skill_lvl = 0; CleanSkills(); CheckAdnRegenSkill(); return(targetIsDead); }
void OnTurnStart(CControllerComponent t, TurnBase turnBase) { m_CurTurn.gameObject.SetActive(true); }
public static void FireOnTurnComplete(TurnBase turnBase, TurnBaseRuningState result) { Debug.LogError("回合结束 " + turnBase.turnCounter); onTurnComplete.Invoke(turnBase, result); }
public static void FireOnTurnStart(TurnBase turnBase) { Debug.LogError("回合开始 " + turnBase.turnCounter); onTurnStart.Invoke(turnBase); }
public static void FireOnCombatComplete(TurnBase turnBase, CombatResult result) { Debug.LogError("战斗结束"); onCombatComplete.Invoke(turnBase, result); }
public static void FireOnCombatStart(TurnBase turnBase) { Debug.LogError("战斗开始"); onCombatStart.Invoke(turnBase); }