Skip to content

Commit

Permalink
Changed activate assist from single card to a collection of cards;
Browse files Browse the repository at this point in the history
Added DeactivateAssist command to remove a card from ActivateAssists collection.
  • Loading branch information
zeroyao committed Feb 25, 2013
1 parent da0398a commit 336bfd0
Show file tree
Hide file tree
Showing 16 changed files with 91 additions and 41 deletions.
4 changes: 2 additions & 2 deletions trunk/TouhouSpring/Cards/Behaviors/Passive_AliceDollSummon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ public sealed class Passive_AliceDollSummon : BaseBehavior<Passive_AliceDollSumm
public void RunEpilog(Commands.StartPhase command)
{
if (command.PhaseName == "Main"
&& Game.ActingPlayer == Host.Owner
&& (Host.IsOnBattlefield || Host.Owner.ActivatedAssist == Host))
&& Game.ActingPlayer == Host.Owner
&& (Host.IsOnBattlefield || Host.IsActivatedAssist))
{
1.Repeat(i =>
{
Expand Down
8 changes: 4 additions & 4 deletions trunk/TouhouSpring/Game/BaseCard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ public bool IsOnBattlefield
get { return Owner.CardsOnBattlefield.Contains(this); }
}

public bool IsHero
public bool IsActivatedAssist
{
get { return Owner.Hero == this; }
get { return Owner.ActivatedAssits.Contains(this); }
}

public bool IsAssist
public bool IsHero
{
get { return Owner.Assists.Contains(this); }
get { return Owner.Hero == this; }
}

public bool IsDestroyed
Expand Down
14 changes: 2 additions & 12 deletions trunk/TouhouSpring/Game/Commands/ActivateAssist.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@ public BaseCard CardToActivate
get; private set;
}

public BaseCard PreviouslyActivatedCard
{
get; private set;
}

public Player Initiator
{
get { return CardToActivate.Owner; }
Expand All @@ -40,7 +35,7 @@ internal override void ValidateOnIssue()
{
FailValidation("Not a valid assist card.");
}
else if (CardToActivate.Owner.ActivatedAssist == CardToActivate)
else if (CardToActivate.Owner.ActivatedAssits.Contains(CardToActivate))
{
FailValidation("Can't activate the card twice.");
}
Expand All @@ -52,12 +47,7 @@ internal override void ValidateOnRun()

internal override void RunMain()
{
PreviouslyActivatedCard = CardToActivate.Owner.ActivatedAssist;
CardToActivate.Owner.ActivatedAssist = CardToActivate;
if (PreviouslyActivatedCard != null)
{
Game.UnsubscribeCardFromCommands(PreviouslyActivatedCard);
}
CardToActivate.Owner.m_activatedAssists.Add(CardToActivate);
Game.SubscribeCardToCommands(CardToActivate);
}
}
Expand Down
49 changes: 49 additions & 0 deletions trunk/TouhouSpring/Game/Commands/DeactivateAssist.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TouhouSpring.Commands
{
public class DeactivateAssist : BaseCommand
{
// TODO: change to serialization-friendly ID
public BaseCard CardToDeactivate
{
get; private set;
}

public DeactivateAssist(BaseCard cardToDeactivate)
{
if (cardToDeactivate == null)
{
throw new ArgumentNullException("cardToDeactivate");
}

CardToDeactivate = cardToDeactivate;
}

internal override void ValidateOnIssue()
{
Validate(CardToDeactivate);
if (!CardToDeactivate.Owner.Assists.Contains(CardToDeactivate))
{
FailValidation("Not a valid assist card.");
}
else if (!CardToDeactivate.Owner.ActivatedAssits.Contains(CardToDeactivate))
{
FailValidation("Card is not activated.");
}
}

internal override void ValidateOnRun()
{
}

internal override void RunMain()
{
CardToDeactivate.Owner.m_activatedAssists.Remove(CardToDeactivate);
Game.UnsubscribeCardFromCommands(CardToDeactivate);
}
}
}
4 changes: 2 additions & 2 deletions trunk/TouhouSpring/Game/Game.CommandRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ internal void UnsubscribeCardFromCommands(BaseCard card)

internal void SubscribeBehaviorToCommands(BaseCard card, Behaviors.IBehavior behavior)
{
if (card.Owner.ActivatedAssist == card
if (card.Owner.ActivatedAssits.Contains(card)
|| card.Owner.m_battlefieldCards.Contains(card))
{
if (card.Behaviors.Count > 1)
Expand All @@ -191,7 +191,7 @@ internal void SubscribeBehaviorToCommands(BaseCard card, Behaviors.IBehavior beh

internal void UnsubscribeBehaviorFromCommands(BaseCard card, Behaviors.IBehavior behavior)
{
if (card.Owner.ActivatedAssist == card
if (card.Owner.ActivatedAssits.Contains(card)
|| card.Owner.m_battlefieldCards.Contains(card))
{
m_commonTargets.Remove(behavior);
Expand Down
4 changes: 4 additions & 0 deletions trunk/TouhouSpring/Game/Game.Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ public void RunTurnFromMainPhase(Interactions.TacticalPhase.CompiledResponse com
{
var cardToActivate = (BaseCard)result.Data;
Debug.Assert(cardToActivate.Owner == ActingPlayer);
foreach (var card in ActingPlayer.ActivatedAssits)
{
IssueCommands(new Commands.DeactivateAssist(card));
}
IssueCommandsAndFlush(new Commands.ActivateAssist(cardToActivate));
}
else if (result.ActionType == Interactions.TacticalPhase.Action.CastSpell)
Expand Down
1 change: 1 addition & 0 deletions trunk/TouhouSpring/Game/Game.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
<ItemGroup>
<Compile Include="Commands\AddPlayerLife.cs" />
<Compile Include="Commands\AddPlayerMana.cs" />
<Compile Include="Commands\DeactivateAssist.cs" />
<Compile Include="Commands\SubtractPlayerLife.cs" />
<Compile Include="Commands\SubtractPlayerMana.cs" />
<Compile Include="ValueModifier.cs" />
Expand Down
6 changes: 3 additions & 3 deletions trunk/TouhouSpring/Game/Interactions/TacticalPhase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ private static IEnumerable<BaseCard> GetActivateAssistBaseSet(Player player)
{
foreach (var card in player.Assists)
{
if (card != player.ActivatedAssist)
if (!player.ActivatedAssits.Contains(card))
{
yield return card;
}
Expand All @@ -381,9 +381,9 @@ private static IEnumerable<BaseCard> GetActivateAssistBaseSet(Player player)

private static IEnumerable<BaseCard> GetCastSpellBaseSet(Player player)
{
if (player.ActivatedAssist != null)
foreach (var card in player.ActivatedAssits)
{
yield return player.ActivatedAssist;
yield return card;
}
foreach (var card in player.CardsOnBattlefield)
{
Expand Down
7 changes: 4 additions & 3 deletions trunk/TouhouSpring/Game/Player.Clone.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,11 @@ internal Player Clone(Game game)
{
clonedPlayer.m_assists.Add(m_assists[i].Clone(clonedPlayer));
}
clonedPlayer.ActivatedAssist = ActivatedAssist != null ? clonedPlayer.m_assists[m_assists.IndexOf(ActivatedAssist)] : null;
if (clonedPlayer.ActivatedAssist != null)

for (int i = 0; i < m_activatedAssists.Count; ++i)
{
clonedPlayer.Game.SubscribeCardToCommands(clonedPlayer.ActivatedAssist);
clonedPlayer.m_activatedAssists.Add(clonedPlayer.m_assists[m_assists.IndexOf(m_activatedAssists[i])]);
clonedPlayer.Game.SubscribeCardToCommands(clonedPlayer.m_activatedAssists[i]);
}

for (int i = 0; i < m_library.Count; ++i)
Expand Down
6 changes: 4 additions & 2 deletions trunk/TouhouSpring/Game/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public sealed partial class Player
internal List<BaseCard> m_sacrifices = new List<BaseCard>();
internal List<BaseCard> m_battlefieldCards = new List<BaseCard>();
internal List<BaseCard> m_assists = new List<BaseCard>();
internal List<BaseCard> m_activatedAssists = new List<BaseCard>();
internal List<ICardModel> m_library = new List<ICardModel>();
internal List<ICardModel> m_graveyard = new List<ICardModel>();

Expand Down Expand Up @@ -57,9 +58,9 @@ public IIndexable<BaseCard> Assists
get; private set;
}

public BaseCard ActivatedAssist
public IIndexable<BaseCard> ActivatedAssits
{
get; internal set;
get; private set;
}

public Pile Library
Expand Down Expand Up @@ -148,6 +149,7 @@ internal Player(string name, Game game)
CardsSacrificed = m_sacrifices.ToIndexable();
CardsOnBattlefield = m_battlefieldCards.ToIndexable();
Assists = m_assists.ToIndexable();
ActivatedAssits = m_activatedAssists.ToIndexable();
Library = new Pile(m_library);
Graveyard = new Pile(m_graveyard);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public override void Update(float deltaTime)
m_localFrame.Col2 = new Vector4(transform.M13, transform.M23, transform.M33, transform.M43);
m_localFrame.Col3 = new Vector4(transform.M14, transform.M24, transform.M34, transform.M44);

bool activated = Card.IsAssist && Card.Owner.ActivatedAssist == Card;
bool activated = Card.IsActivatedAssist;
if (activated != m_lastActivated)
{
if (m_activateEffectTimer.IsPlaying)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public override void Update(float deltaTime)
var gameUI = GameApp.Service<Services.GameUI>();
bool darken = gameUI.ZoomedInCard != Control
&& (Card.Behaviors.Has<Behaviors.Warrior>() && Card.Behaviors.Get<Behaviors.Warrior>().State == Behaviors.WarriorState.CoolingDown
|| Card.Owner.Assists.Contains(Card) && Card.Owner.ActivatedAssist != Card
|| Card.Owner.Assists.Contains(Card) && !Card.IsActivatedAssist
|| Card.Owner.CardsSacrificed.Contains(Card));

if (darken != m_lastDarken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public sealed class Assist_MassSputter_NDamage :
{
public void RunEpilog(Commands.DealDamageToCard command)
{
if (Host.Owner.ActivatedAssist == Host
if (Host.IsActivatedAssist
&& command.Cause is Warrior
&& ((Warrior)command.Cause).Host.Owner == Host.Owner)
{
Expand All @@ -23,7 +23,7 @@ public void RunEpilog(Commands.DealDamageToCard command)

public void RunEpilog(Commands.SubtractPlayerLife command)
{
if (Host.Owner.ActivatedAssist == Host
if (Host.IsActivatedAssist
&& command.FinalAmount > 0
&& command.Cause is Warrior
&& ((Warrior)command.Cause).Host.Owner == Host.Owner)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public sealed class Passive_Aura_Offense_NAttack:
BaseBehavior<Passive_Aura_Offense_NAttack.ModelType>,
Commands.ICause,
IEpilogTrigger<Commands.ActivateAssist>,
IEpilogTrigger<Commands.DeactivateAssist>,
IEpilogTrigger<Commands.PlayCard>
{
private ValueModifier m_attackMod;
Expand All @@ -27,7 +28,11 @@ public void RunEpilog(Commands.ActivateAssist command)
new Commands.SendBehaviorMessage(warrior, "AttackModifiers", new object[] { "add", m_attackMod }));
}
}
if (command.PreviouslyActivatedCard == Host)
}

public void RunEpilog(Commands.DeactivateAssist command)
{
if (command.CardToDeactivate == Host)
{
foreach (var card in Host.Owner.CardsOnBattlefield)
{
Expand All @@ -43,7 +48,7 @@ public void RunEpilog(Commands.ActivateAssist command)

public void RunEpilog(Commands.PlayCard command)
{
if (Host.Owner.ActivatedAssist == Host
if (Host.IsActivatedAssist
&& Host.Owner == command.CardToPlay.Owner)
{
var warrior = command.CardToPlay.Behaviors.Get<Warrior>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,11 @@ public sealed class Passive_Aura_ReduceDamage_NDamage :
{
public void RunProlog(Commands.DealDamageToCard command)
{
if (Host.Owner.ActivatedAssist == Host)
if (Host.IsActivatedAssist
&& command.Target.Owner == Host.Owner
&& command.Cause is Warrior)
{
if (command.Target.Owner == Host.Owner
&& command.Cause is Warrior)
{
command.PatchDamageToDeal(Math.Max(command.DamageToDeal - Model.DamageReduced, 0));
}
command.PatchDamageToDeal(Math.Max(command.DamageToDeal - Model.DamageReduced, 0));
}
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/TouhouSpring/THSv0.5/Behaviors/Passive_FreeRedeem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public sealed class Passive_FreeRedeem:
{
public void RunEpilog(Commands.Redeem command)
{
if (Host.Owner.ActivatedAssist == Host)
if (Host.IsActivatedAssist)
{
Game.IssueCommands(new Commands.AddCardToManaPool(Model.SummonType.Target, Host.Owner));
}
Expand Down

0 comments on commit 336bfd0

Please sign in to comment.