private void MoveToNextComposites() { List <SkillComposite> nextComposites = new List <SkillComposite>(); List <bool> nextStates = new List <bool>(); for (int i = 0; i < this.composites.Count; i++) { SkillComposite composite = this.composites[i]; bool isDoneProcessing = this.states[i]; if (isDoneProcessing) { composite.OnDoneProcessing(); foreach (SkillComposite child in composite.Children) { nextComposites.Add(child); nextStates.Add(false); } continue; } nextComposites.Add(composite); nextStates.Add(isDoneProcessing); } this.composites = nextComposites; this.states = nextStates; }
private SkillComposite BuildSkill(SkillInput input) { SkillComposite composite = new SkillComposite(new DoubleWordProcess("foo")); Func <SkillProcess, DisplayWordProcess> onDoubleWord_DisplayWord = (parentProcess) => { DoubleWordProcess comp = (DoubleWordProcess)parentProcess; return(new DisplayWordProcess(comp.OutputWord)); }; Func <SkillProcess, DoubleWordProcess> onDoubleWord_DoubleWord = (parentProcess) => { DoubleWordProcess comp = (DoubleWordProcess)parentProcess; return(new DoubleWordProcess(comp.OutputWord)); }; composite .In(parentProcess => new SplitStringProcess("abc#def.ghi.jkl#mno", '.')) .InSeveral(parentProcess => { SplitStringProcess parent = (SplitStringProcess)parentProcess; return(parent.words.Select(word => new SplitStringProcess(word, '#'))); }) .DoSeveral(parentProcess => { SplitStringProcess parent = (SplitStringProcess)parentProcess; return(parent.words.Select(word => new DisplayWordProcess(word))); }) .Out() .Out() ; return(composite); }
public void Init(SkillInput input) { SkillComposite composite = this.buildSkillCbk(input); this.composites = new List <SkillComposite>() { composite }; this.states = new List <bool>() { false }; }
private int CreateChild(SkillComposite original = null) { SkillComposite child = new SkillComposite(); this.children.Add(child); child.parent = this; if (original != null) { child.onDoneProcessing += original.onDoneProcessing; foreach (SkillComposite grandChild in original.children) { child.CreateChild(grandChild); } } return(this.children.Count - 1); }
private SkillComposite AddChildren(Func <SkillProcess, IEnumerable <SkillProcess> > childrenInit) { int childIndex = this.CreateChild(); this.onDoneProcessing += (thisComposite) => { IEnumerable <SkillProcess> processes = childrenInit(thisComposite.process); SkillComposite orginalChild = thisComposite.children[childIndex]; thisComposite.children.RemoveAt(childIndex); foreach (SkillProcess process in processes) { int newChildIndex = thisComposite.CreateChild(orginalChild); thisComposite.children[newChildIndex].process = process; } }; return(this.children[childIndex]); }
private SkillComposite BuildSkill(SkillInput input) { SkillComposite composite = new SkillComposite(new AddSkillEffectProcess(input, this.CreateLoggingEffect, "LoggingEffect", 3)); return(composite); }
private SkillComposite CreateLoggingEffect(SkillInput skillInput) { SkillComposite composite = new SkillComposite(new DisplayWordProcess("logging effect" + skillInput.Caster.Name)); return(composite); }
private SkillComposite BuildSkill(SkillInput input) { SkillComposite composite = new SkillComposite(new EndPassProcess()); return(composite); }
private SkillComposite BuildSkill(SkillInput input) { SkillComposite composite = new SkillComposite(new OnTakeDamageReactionProcess(input.TargetActor, null, new LoggingSkill())); return(composite); }
private SkillComposite BuildSkill(SkillInput input) { SkillComposite composite = new SkillComposite(new MoveProcess(input.Caster, input.TargetTile, new ManhattanTopology(), new WalkableFilter())); return(composite); }
public SkillComposite InSeveral(Func <SkillProcess, IEnumerable <SkillProcess> > childrenInit) { SkillComposite child = this.AddChildren(childrenInit); return(child); }
public SkillComposite In(Func <SkillProcess, SkillProcess> childInit) { SkillComposite child = this.AddChild(childInit); return(child); }
private SkillComposite BuildSkill(SkillInput input) { SkillComposite composite = new SkillComposite(new AddTurnBreakProcess(input.TargetActor)); return(composite); }