Skip to content

Commit f1130be

Browse files
committed
Progress on card text syntax
Expand `ConditionalAbility`. Next, I'd try: * use new card text for PAD Campaign, Wyldside and Sure Gamble * include targeting, e.g. basic play ability is targeting a card in hand * note 1.15.1.b
1 parent 8ceb471 commit f1130be

24 files changed

+356
-50
lines changed

Assets/Scripts/Model/Abilities.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using model.timing;
5+
6+
namespace model.abilities {
7+
public class Abilities {
8+
private IList<ConditionalAbility> conditionals = new List<ConditionalAbility>();
9+
10+
public void AddConditional(ConditionalAbility conditional) {
11+
conditionals.Add(conditional);
12+
}
13+
14+
async public Task CheckReactions() {
15+
await CheckReactions(GatherPending());
16+
}
17+
18+
private IList<ConditionalAbility.Instance> GatherPending() {
19+
return conditionals
20+
.Where(it => it.Active)
21+
.SelectMany(it => it.InstantiatePerOccurrence())
22+
.ToList();
23+
}
24+
25+
async private Task CheckReactions(IList<ConditionalAbility.Instance> pending) {
26+
if (pending.Count > 0) {
27+
var reactionWindow = new ReactionWindow(pending);
28+
await reactionWindow.Open();
29+
var newPending = GatherPending(); // CR: 9.6.4.a
30+
await CheckReactions(newPending);
31+
}
32+
}
33+
}
34+
}

Assets/Scripts/Model/Abilities/Abilities.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
4+
namespace model.abilities {
5+
public class ConditionalAbility {
6+
7+
public bool Active { get; private set; }
8+
private TriggerCondition condition;
9+
private IInstruction instruction;
10+
11+
public ConditionalAbility(TriggerCondition condition, IInstruction instruction) {
12+
this.condition = condition;
13+
this.instruction = instruction;
14+
}
15+
16+
internal List<Instance> InstantiatePerOccurrence() {
17+
return condition
18+
.occurrences
19+
.Select(it => it.Instantiate(instruction))
20+
.ToList();
21+
}
22+
23+
public class Instance {
24+
public bool Pending { get; set; }
25+
public bool Imminent { get; set; }
26+
public bool Resolving { get; set; }
27+
}
28+
}
29+
30+
public class TriggerCondition {
31+
internal IList<Occurrence> occurrences = new List<Occurrence>();
32+
}
33+
34+
public interface IInstruction {
35+
}
36+
37+
internal class Occurrence {
38+
object source;
39+
40+
internal ConditionalAbility.Instance Instantiate(IInstruction instruction) {
41+
var instance = new ConditionalAbility.Instance();
42+
instance.Pending = true;
43+
instance.Imminent = false;
44+
instance.Resolving = false;
45+
return instance;
46+
}
47+
}
48+
}

Assets/Scripts/Model/Abilities/ConditionalAbility.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Threading.Tasks;
2+
using model.play;
3+
4+
namespace model.abilities {
5+
public interface IAbility {
6+
7+
Task Resolve();
8+
ISource Source { get; }
9+
bool Active { get; }
10+
}
11+
}

Assets/Scripts/Model/Abilities/IAbility.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using model.play;
4+
5+
namespace model.abilities {
6+
public class PadCampaignDrip : IAbility {
7+
}
8+
}

Assets/Scripts/Model/Abilities/PadCampaignDrip.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/Model/Cards/Card.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Threading.Tasks;
4+
using model.abilities;
5+
using model.cards.text;
46
using model.choices.trash;
57
using model.play;
68
using model.player;
@@ -31,6 +33,9 @@ public abstract class Card : ISource {
3133
public virtual IList<IStealOption> StealOptions() => Type.DefaultStealing(this);
3234
public virtual IList<ITrashOption> TrashOptions() => new List<ITrashOption>();
3335
protected Game game;
36+
protected readonly YourText your;
37+
protected readonly YouText you;
38+
protected readonly SelfText self;
3439

3540
public Card(Game game) {
3641
this.game = game;
@@ -39,6 +44,10 @@ public Card(Game game) {
3944
this.Zone.Add(this);
4045
}
4146

47+
protected ThenText when(TriggerCondition condition) {
48+
return new ThenText();
49+
}
50+
4251
async public Task BecomeActive() {
4352
await Activate();
4453
Active = true;

0 commit comments

Comments
 (0)