示例#1
0
 /// <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);
     }
 }
示例#2
0
        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");
            }
        }
示例#3
0
        /// <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();
        }
示例#4
0
 /// <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));
 }