Implement OilOfSharpness

This commit is contained in:
henriquenakashima 2020-10-09 01:43:37 -04:00
parent 2190070fee
commit 31cb8fe4c0
45 changed files with 604 additions and 21 deletions

View file

@ -34,6 +34,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
private HandPlayability<HeroCard> heroHandPlayability;
private HandPlayability<MonsterCard> monsterHandPlayability;
private TurnIntentions<MonsterCard> monsterIntentions;
private BattleClock clock;
private BuffManager buffManager;
private ParticipantActivity participantActivity;
private delegate void BattleStateChangedAction();
private event BattleStateChangedAction OnBattleStateChanged;
@ -93,6 +96,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
this.monsterDeck = new BattleDeck<MonsterCard>(
this.monsterCardDatabase, parameters.MCardIds.Cast<int>().ToArray(), mCardOwners);
this.clock = new BattleClock();
this.buffManager = new BuffManager(this.clock);
this.participantActivity = new ParticipantActivity();
this.playArea = new PlayArea();
this.heroHandPlayability = new HandPlayability<HeroCard>(
@ -151,6 +157,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
}
private IEnumerator RunBattleRound() {
this.clock.AdvanceRound();
this.state.AdvanceToTeamTurn(TeamChoice.Heroes);
this.damageTriggers.RemoveAll(t => t.Expiration == TriggerExpiration.StartOfNextHeroTurn);
@ -172,10 +179,14 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
this.state.AdvanceToTeamTurn(TeamChoice.Monsters);
yield return RunMonsterTurn();
this.clock.AdvanceToStep(RoundStep.EndOfRound);
this.participantActivity.NextRound();
}
private IEnumerator RunHeroTurn() {
// Start of hero turn
this.clock.AdvanceToStep(RoundStep.StartOfHeroTurn);
OnBattleStateChanged();
this.monsterIntentions.ResumeIntentions();
@ -200,6 +211,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
}
// End of hero turn
yield return this.playArea.UseHeroDefaults(this.heroes, this.participantActivity, UseHeroDefault);
if (STABLE_HAND_STYLE) {
this.heroDeck.DiscardInExcessOf(3);
} else {
@ -208,11 +220,15 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
foreach (BattleHero hero in this.heroes) {
hero.TickStatuses();
}
this.clock.AdvanceToStep(RoundStep.EndOfHeroTurn);
OnBattleStateChanged();
this.monsterIntentions.PauseIntentions();
}
private IEnumerator RunMonsterTurn() {
this.clock.AdvanceToStep(RoundStep.StartOfMonsterTurn);
OnBattleStateChanged();
yield return new WaitForSeconds(0.5f);
@ -253,6 +269,8 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
foreach (BattleMonster monster in this.monsters) {
monster.TickStatuses();
}
this.clock.AdvanceToStep(RoundStep.EndOfMonsterTurn);
OnBattleStateChanged();
}
@ -275,8 +293,11 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
this.heroEnergy.PayForCard(card);
this.heroDeck.RemoveCardFromHand(card);
this.participantActivity.NotifyParticipantUsedCard(card.Owner, card);
yield return card.Use(this, this, battlePlayerControls);
if (card.IsPermanent()) {
if (card.Type == CardType.Default) {
// Already added to playArea by effect
} else if (card.IsPermanent()) {
this.playArea.AddPlayedHeroPermanent(card);
} else if (card.IsEphemeral()) {
this.heroDeck.MoveCardToOblivion(card);
@ -288,6 +309,17 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
OnBattleStateChanged();
}
public IEnumerator UseHeroDefault(DefaultHeroCard card) {
if (!card.Owner.CanUseDefault()) {
yield break;
}
yield return card.UseDefault(this, this, battlePlayerControls);
CheckState();
OnBattleStateChanged();
}
public IEnumerator UseMonsterCard(MonsterCard card) {
this.monsterEnergy.PayForCard(card);
this.monsterDeck.RemoveCardFromHand(card);
@ -444,7 +476,11 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
public int DealDamage(DealDamageEffect effect) {
if (effect.Target == null) return 0;
int damageDealt = effect.Target.DealDamage(effect.Amount);
int amount = effect.Amount;
if (effect.Source != null) {
amount += this.buffManager.GetTotalBuffAmountOfType(effect.Source, BuffType.Power);
}
int damageDealt = effect.Target.DealDamage(amount);
foreach (DamageTrigger dt in this.damageTriggers) {
if (dt.IsTriggeredBy(effect)) {
EnqueueActivatedTrigger(dt);
@ -499,6 +535,10 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
effect.Target.AddStatus(effect.Status, effect.Amount);
}
public void BuffParticipant(BuffParticipantEffect effect) {
this.buffManager.AddBuff(effect, this.clock.Now);
}
public void Rotate(RotateEffect effect) {
if (effect.Positions == 0) return;
@ -554,6 +594,13 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
}
}
public void SetupDefault(DefaultEffect effect) {
DefaultHeroCard previousDefault = this.playArea.SetupDefault(effect);
if (previousDefault != null) {
this.heroDeck.MoveCardToDiscard(previousDefault);
}
}
public void ArmDamageTrigger(DamageTrigger damageTrigger) {
this.damageTriggers.Add(damageTrigger);
}