public GraphicMatchController(IMatchView view)
 {
     myObservers     = new List <IControllerObserver>();
     this.myView     = view;
     view.Controller = this;
     myFeedbackForm  = new FeedbackForm();
 }
 private void initPlayer1Form()
 {
     if (!isRunning)
     {
         if (myView == null)
         {
             myView = new MatchForm(this);
         }
         myView.start();
     }
 }
 public static ITaskEngine CreateTaskEngine(IMatchView matchEngine, ITaskRunner taskRunner, IPathFinder pathFinder)
 {
     return(new TaskEngine(matchEngine, taskRunner, pathFinder, true));
 }
        public TaskEngine(IMatchView match, ITaskRunner taskRunner, IPathFinder pathFinder, bool isClient)
        {
            m_isClient        = isClient;
            m_match           = match;
            m_taskRunner      = taskRunner;
            m_pathFinder      = pathFinder;
            m_activeTasks     = new List <TaskBase>();
            m_idToActiveTask  = new Dictionary <long, TaskBase>();
            m_timeoutRequests = new List <PendingClientRequest>();
            m_requests        = new Dictionary <long, PendingClientRequest>();
            m_mem             = new TaskMemory();

            m_expressions = new Dictionary <int, IExpression>
            {
                { ExpressionCode.Value, new ValueExpression() },
                { ExpressionCode.Assign, new AssignmentExpression() },
                { ExpressionCode.Itertate, new IterateExpression() },
                { ExpressionCode.Get, new GetExpression() },
                { ExpressionCode.And, new AndExpression() },
                { ExpressionCode.Or, new OrExpression() },
                { ExpressionCode.Not, new NotExpression() },
                { ExpressionCode.Eq, new EqExpression() },
                { ExpressionCode.NotEq, new NotEqExpression() },
                { ExpressionCode.Lt, new LtExpression() },
                { ExpressionCode.Lte, new LteExpression() },
                { ExpressionCode.Gt, new GtExpression() },
                { ExpressionCode.Gte, new GteExpression() },
                { ExpressionCode.Add, new AddExpression() },
                { ExpressionCode.Sub, new SubExpression() },
                { ExpressionCode.UnitExists, new UnitExistsExpression() },
                { ExpressionCode.UnitState, new UnitStateExpression() },
                { ExpressionCode.UnitCoordinate, new UnitCoordinateExpression() },
                { ExpressionCode.UnitCanGrow, new UnitCanGrowImmediateExpression() },
                { ExpressionCode.UnitCanSplit4, new UnitCanSplit4ImmediateExpression() },
                { ExpressionCode.UnitCanConvert, new UnitCanConvertImmediateExpression() },
                { ExpressionCode.TaskStatusCode, new TaskStatusExpression() },
                { ExpressionCode.TaskSucceded, new TaskSuccededExpression() },
                { ExpressionCode.TaskFailed, new TaskFailedExpression() },
                { ExpressionCode.CmdSucceded, new CmdSuccededExpression() },
                { ExpressionCode.CmdHardFailed, new CmdHardFailedExpression() },
                { ExpressionCode.CmdResultCode, new CmdResultCodeExpression() },
            };

            const int taskPoolSize = 10;

            m_taskPools = new Dictionary <TaskType, ITaskPool>
            {
                { TaskType.Sequence, new TaskPool <SequentialTask>(taskPoolSize) },
                { TaskType.Repeat, new TaskPool <RepeatTask>(taskPoolSize) },
                { TaskType.Branch, new TaskPool <BranchTask>(taskPoolSize) },
                { TaskType.Procedure, new TaskPool <ProcedureTask>(taskPoolSize) },
                { TaskType.Break, new TaskPool <BreakTask>(taskPoolSize) },
                { TaskType.Continue, new TaskPool <ContinueTask>(taskPoolSize) },
                { TaskType.Return, new TaskPool <ReturnTask>(taskPoolSize) },
                { TaskType.Nop, new TaskPool <NopTask>(taskPoolSize) },
                { TaskType.EvalExpression, new TaskPool <EvaluateExpressionTask>(taskPoolSize) },
                { TaskType.FindPath, new TaskPool <FindPathTask>(taskPoolSize) },
                { TaskType.FindPathToRandomLocation, new TaskPool <FindPathToRandLocationPath>(taskPoolSize) },
                { TaskType.SearchForFood, new TaskPool <SearchAroundForFood>(taskPoolSize) },
                { TaskType.SearchForGrowLocation, new TaskPool <SearchAroundForGrowLocation>(taskPoolSize) },
                { TaskType.SearchForSplit4Location, new TaskPool <SearchAroundForSplit4Location>(taskPoolSize) },
                //For testing purposes
                { TaskType.TEST_Mock, new TaskPool <MockTask>(taskPoolSize) },
                { TaskType.TEST_MockImmediate, new TaskPool <MockImmediateTask>(taskPoolSize) },
                { TaskType.TEST_Fail, new TaskPool <TestFailTask>(taskPoolSize) },
                { TaskType.TEST_Pass, new TaskPool <TestPassTask>(taskPoolSize) },
                { TaskType.TEST_Assert, new TaskPool <TestAssertTask>(taskPoolSize) },
                { TaskType.TEST_SearchForWall, new TaskPool <TestSearchAroundForWallTask>(taskPoolSize) },
                { TaskType.DEBUG_Log, new TaskPool <LogTask>(taskPoolSize) },
                { TaskType.DEBUG_LogWarning, new TaskPool <LogWarningTask>(taskPoolSize) },
                { TaskType.DEBUG_LogError, new TaskPool <LogErrorTask>(taskPoolSize) },
            };

            m_cmdExpressionTaskPool = new TaskPool <ExecuteCmdTaskWithExpression>(taskPoolSize);
            m_cmdMoveTaskPool       = new TaskPool <ExecuteMoveTask>(taskPoolSize);
            m_cmdGenericTaskPool    = new TaskPool <ExecuteCmdTask>(taskPoolSize);
        }