public static void CollectElimination(EliminateContext ctx) { var extensionResults = new List<Pos2D>(); foreach (var record in ctx.records) { foreach (var scatter in record.rule.scatters) { ctx.sandbox[record.y + scatter.y, record.x + scatter.x] = true; } foreach (var extension in ctx.extensionRules) { if (extension.Apply(ctx.container, record, extensionResults)) { for (int i = 0, len = extensionResults.Count; i < len; ++i) { var e = extensionResults[i]; ctx.sandbox[e.y, e.x] = true; } extensionResults.Clear(); } } } ctx.container.ForeachSlot((x, y, slot)=>{ if (null != slot && slot.slotAttribute.category == SlotAttribute.Category.SPECIAL){ slot.slotAttribute.specialty.Trigger(SlotSpecialty.TRIGGER_STAGE_ELIMINATION, ctx.container, ctx.sandbox); } }); }
public static void CollectElimination(EliminateContext ctx) { var extensionResults = new List <Pos2D>(); foreach (var record in ctx.records) { foreach (var scatter in record.rule.scatters) { ctx.sandbox[record.y + scatter.y, record.x + scatter.x] = true; } foreach (var extension in ctx.extensionRules) { if (extension.Apply(ctx.container, record, extensionResults)) { for (int i = 0, len = extensionResults.Count; i < len; ++i) { var e = extensionResults[i]; ctx.sandbox[e.y, e.x] = true; } extensionResults.Clear(); } } } ctx.container.ForeachSlot((x, y, slot) => { if (null != slot && slot.slotAttribute.category == SlotAttribute.Category.SPECIAL) { slot.slotAttribute.specialty.Trigger(SlotSpecialty.TRIGGER_STAGE_ELIMINATION, ctx.container, ctx.sandbox); } }); }