/// <summary> /// Запустить на выполнние /// </summary> /// <param name="model">модел откуда будут боатся entity</param> /// <param name="engine">движок</param> public void Execute(IGameStateModel model, AbstractPipelineEngine engine) { foreach (var rule in RuleList) { rule.CreatePipeline(model, engine); } }
public virtual void CreatePipeline(IGameStateModel model, AbstractPipelineEngine engine) { var entity = model.TryGetEntity <T>(); var engineInternal = engine as PipelineEngine; if (!CheckRule(entity, engineInternal)) { new LambdaPipelineStage <T>(engine, t => t, entity, this, "Return entity pipeline"); } }
/// <summary> Строит массив матчей, пополняет на их основе конвейер и запускает его. </summary> /// <param name="engine"></param> /// <param name="trace"> /// Если этот параметр выставлен в какой-нибудь не null то все матчи и состояние движка после /// пополнения пайплайна будет скинуто в дебаг. /// </param> /// <param name="model"></param> public virtual void Applay(IGameStateModel model, AbstractPipelineEngine engine, string trace = null) { Execute(model, engine); if (ExtremeCrutch != null) { trace = ExtremeCrutch; ExtremeCrutch = null; } engine.PipelineStageExecuted = entity => Array.ForEach(entity, e => model.AddEntity(e)); // Кинем в трейс всю кучу матчей для общего образования. engine.ExecuteAll(); }
/// <summary> Само по себе правило новых стэйджей не создаёт </summary> public void CreatePipeline(IGameStateModel model, AbstractPipelineEngine engine) { engine.PipelineStageExecuted = entity => Array.ForEach(entity, e => model.AddEntity(e)); Childs.Execute(model, engine); engine.СonditionExecute(s => Childs.RuleList.Contains(s.Producer)); }