Example #1
0
 private CarManager CreateCarManager(CaseManager start)
 {
     var carTransform = Instantiate(carPrefab);
     carTransform.SetParent(this.transform);
     carTransform.localPosition = new Vector3(start.transform.position.x, start.transform.position.y, 0);
     return carTransform.GetComponent<CarManager>();
 }
Example #2
0
 public void AddDangerousCase(CaseManager target)
 {
     target.SetDangerous(true);
     if (!ContextEngine.Instance.gameContext.dangerousCases.Contains(target.itemDataSource.index))
     {
         ContextEngine.Instance.gameContext.dangerousCases.Add(target.itemDataSource.index);
     }
 }
Example #3
0
        private LineManager CreateLineManager(CaseManager sourceCaseManager, CaseManager targetCaseManager)
        {
            var lineTransform = Instantiate(linePrefab);

            lineTransform.SetParent(this.transform);
            lineTransform.localPosition = new Vector3(sourceCaseManager.transform.position.x, sourceCaseManager.transform.position.y, 0.4f);
            return(lineTransform.GetComponent <LineManager>());
        }
Example #4
0
 public void InitLine(CaseManager source, CaseManager target)
 {
     this.source = source;
     this.target = target;
     this.SetDefaultColor();
     _lineRenderer.SetPosition(0, transform.position);
     _lineRenderer.SetPosition(1, new Vector3(target.transform.position.x, target.transform.position.y, transform.position.z));
 }
Example #5
0
 public void InitLine(CaseManager source, CaseManager target)
 {
     this.source = source;
     this.target = target;
     this.SetDefaultColor();
     _lineRenderer.SetPosition(0, transform.position);
     _lineRenderer.SetPosition(1, new Vector3(target.transform.position.x, target.transform.position.y, transform.position.z));
 }
Example #6
0
        public CaseManager FindCaseManager(IndexDataSource index)
        {
            CaseManager result = null;

            if (index != null && _boardItems != null && _boardItems.ContainsKey(index))
            {
                result = _boardItems[index].caseManager;
            }
            return(result);
        }
Example #7
0
 public void AddMovements(IEnumerable<Vector3> movements, Vector3 nextStep, int gear, CaseManager targetCase)
 {
     _currentCase = targetCase;
     _movements.Add(new MovementModel()
     {
         gear = gear,
         route = movements.ToList(),
         nextStep = nextStep
     });
 }
Example #8
0
 public LineManager FindLineManager(CaseManager from, CaseManager to)
 {
     LineManager result = null;
     if (from != null && to != null)
     {
         if (_boardItems != null && _boardItems.ContainsKey(from.itemDataSource.index))
         {
             var item = _boardItems[from.itemDataSource.index];
             result = item.lines.FirstOrDefault(l => l.target.itemDataSource.index.Equals(to.itemDataSource.index));
         }
     }
     return result;
 }
Example #9
0
        public LineManager FindLineManager(CaseManager from, CaseManager to)
        {
            LineManager result = null;

            if (from != null && to != null)
            {
                if (_boardItems != null && _boardItems.ContainsKey(from.itemDataSource.index))
                {
                    var item = _boardItems[from.itemDataSource.index];
                    result = item.lines.FirstOrDefault(l => l.target.itemDataSource.index.Equals(to.itemDataSource.index));
                }
            }
            return(result);
        }
Example #10
0
        public void InitFinish(CaseManager[] firstCases)
        {
            var twoFirstCases = firstCases.OrderBy(c => c.itemDataSource.order).Take(2).ToList();
            var firstPosition = twoFirstCases[0].transform.localPosition;
            var lastPosition = twoFirstCases[1].transform.localPosition;
            var firstDif = firstPosition - lastPosition;
            var newPosition = lastPosition + firstDif / 2;
            this.transform.localPosition = new Vector3(newPosition.x, newPosition.y, 0.8f);

            var vectorRotation = this.ComputeRotation(twoFirstCases[0].transform.localPosition, twoFirstCases[1].transform.localPosition);
            var rotation = new Quaternion(0, 0, 0, 1);
            rotation.eulerAngles = vectorRotation;
            this.transform.localRotation = rotation;
        }
Example #11
0
        private void ComputeStandWay(SearchRouteResult result, SearchRouteContext context, List<CaseManager> route, CaseManager currentCase, int currentMove, int outOfBend, int nbLineMove, int rowMove, int exceeding)
        {
            var targets = currentCase.itemDataSource.targets.Select(t => boardManager.FindCaseManager(t)).ToList();
            var playerTarget = targets.FirstOrDefault(t => t.standDataSource != null && t.standDataSource.playerIndex.HasValue && t.standDataSource.playerIndex.Value == context.playerIndex);
            CaseManager targetCase;
            if (playerTarget != null)
            {
                targetCase = playerTarget;
            }
            else
            {
                targetCase = targets.FirstOrDefault();
            }

            if (targetCase.hasPlayer && currentMove < context.min)
            {
                result.AddRoute(route.ToList(), outOfBend, true, false, nbLineMove);
            }
            else if (!targetCase.hasPlayer && targetCase == playerTarget)
            {
                var newRoute = route.ToList();
                newRoute.Add(targetCase);
                result.AddRoute(newRoute, outOfBend, true, false, nbLineMove);
            }
            else if (!targetCase.hasPlayer)
            {
                var newRoute = route.ToList();
                newRoute.Add(targetCase);
                this.SearchRoutes(result, context, newRoute, rowMove, exceeding, outOfBend, nbLineMove);
            }
        }
Example #12
0
 private void ComputeOutOfBendWay(SearchRouteResult result, SearchRouteContext context, List<CaseManager> route, CaseManager currentCase, CaseManager nextCase, int currentMove, int outOfBend, int nbLineMove)
 {
     if (!nextCase.hasPlayer)
     {
         if (outOfBend == 0)
         {
             var stop = 0;
             if (currentCase.bendDataSource.name == context.bendName)
             {
                 stop = context.bendStop;
             }
             var stopDif = currentCase.bendDataSource.stop - stop;
             if (stopDif > 1)
             {
                 var newRoute = route.ToList();
                 newRoute.Add(nextCase);
                 result.AddRoute(newRoute, 1, false, true, nbLineMove);
                 return;
             }
         }
         var newOutOfBend = outOfBend + 1;
         if (newOutOfBend <= context.tire)
         {
             var newRoute = route.ToList();
             newRoute.Add(nextCase);
             this.SearchRoutes(result, context, newRoute, 0, 0, newOutOfBend, nbLineMove);
         }
         else
         {
             var newRoute = route.ToList();
             newRoute.Add(nextCase);
             result.AddRoute(newRoute, 1, false, true, nbLineMove);
         }
     }
     else if (currentMove < context.min)
     {
         result.AddRoute(route.ToList(), outOfBend, false, true, nbLineMove);
     }
 }
Example #13
0
        private void ComputeLineWay(SearchRouteResult result, SearchRouteContext context, List<CaseManager> route, CaseManager currentCase, int rowMove, int exceeding, int nbLineMove, int currentMove)
        {
            var isNewExceeding = false;
            var isEndExceeding = false;
            bool findWay = false;
            foreach (var target in currentCase.itemDataSource.targets.Where(t => t.enable))
            {
                var targetCase = boardManager.FindCaseManager(target);
                if (!targetCase.hasPlayer)
                {
                    var newExceeding = exceeding;
                    var newRowMove = rowMove;
                    if (targetCase.standDataSource != null && context.isLastLap)
                    {
                        continue;
                    }
                    else if (targetCase.standDataSource != null)
                    {
                        var newRoute = route.ToList();
                        newRoute.Add(targetCase);
                        this.SearchRoutes(result, context, newRoute, rowMove, exceeding, 0, nbLineMove);
                    }
                    else
                    {
                        var isValideWay = false;
                        var columnDif = target.column - currentCase.itemDataSource.index.column;
                        if (isNewExceeding)
                        {
                            newExceeding = columnDif * -1;
                            isValideWay = true;
                        }
                        else
                        {
                            if (columnDif == 0)
                            {
                                if (newExceeding != 0 && isEndExceeding)
                                {
                                    newExceeding = 0;
                                }
                                isValideWay = true;
                            }
                            else if (newExceeding != 0 && columnDif == newExceeding)
                            {
                                isValideWay = true;
                                newExceeding = 0;
                            }
                            else if (columnDif > 0 && rowMove >= 0 && rowMove < 2)
                            {
                                newRowMove = newRowMove + 1;
                                isValideWay = true;
                                newExceeding = 0;
                            }
                            else if (columnDif < 0 && rowMove <= 0 && rowMove > -2)
                            {
                                newRowMove = newRowMove - 1;
                                isValideWay = true;
                                newExceeding = 0;
                            }
                        }

                        if (isValideWay)
                        {
                            findWay = true;
                            var newRoute = route.ToList();
                            newRoute.Add(targetCase);
                            this.SearchRoutes(result, context, newRoute, newRowMove, newExceeding, 0, nbLineMove + 1);
                        }
                    }
                }
            }
            if (!findWay && currentMove < context.min)
            {
                result.AddRoute(route.ToList(), 0, false, true, nbLineMove);
            }
        }
Example #14
0
 private void ComputeBendWay(SearchRouteResult result, SearchRouteContext context, List<CaseManager> route, CaseManager currentCase, int nbLineMove, int currentMove)
 {
     bool findWay = false;
     foreach (var target in currentCase.itemDataSource.targets.Where(t => t.enable))
     {
         var targetCase = boardManager.FindCaseManager(target);
         if (!targetCase.hasPlayer)
         {
             var newRoute = route.ToList();
             newRoute.Add(targetCase);
             this.SearchRoutes(result, context, newRoute, 0, 0, 0, nbLineMove);
             findWay = true;
         }
     }
     if (!findWay && currentMove < context.min)
     {
         result.AddRoute(route.ToList(), 0, false, true, nbLineMove);
     }
 }
Example #15
0
 public CaseManager GetNextCase(CaseManager current)
 {
     CaseManager result = null;
     if (current != null && boardManager != null)
     {
         var nextIndex = current.itemDataSource.targets.FirstOrDefault(t => t.enable && t.column == current.itemDataSource.index.column);
         if (nextIndex == null)
         {
             nextIndex = current.itemDataSource.targets.FirstOrDefault(t => t.enable);
         }
         result = boardManager.FindCaseManager(nextIndex);
     }
     return result;
 }
Example #16
0
 public List<CaseManager> GetClashCandidate(CaseManager target)
 {
     List<CaseManager> result = new List<CaseManager>();
     result.AddRange(target.itemDataSource.targets.Select(t => boardManager.FindCaseManager(t)).Where(c => c.hasPlayer));
     result.AddRange(boardManager.boardDataSource.cases.Where(c => c.targets.Any(t => t == target.itemDataSource.index)).Select(c => boardManager.FindCaseManager(c.index)).Where(c => c.hasPlayer));
     return result;
 }
Example #17
0
 public void OnSelectRoute(CaseManager target)
 {
     if (!isHoverGUI && _candidateRoutes != null)
     {
         var dest = _candidateRoute.route.Last();
         if (_candidateRoute == null || !target.itemDataSource.index.Equals(dest.itemDataSource.index))
         {
             this.OnViewRoute(target, true);
         }
         else
         {
             PlayerEngine.Instance.MoveCar(_candidateRoute.route);
             PlayerEngine.Instance.SelectedRoute(_candidateRoute);
             _candidateRoute = null;
             this.CleanCurrent();
         }
     }
 }
Example #18
0
 private LineManager CreateLineManager(CaseManager sourceCaseManager, CaseManager targetCaseManager)
 {
     var lineTransform = Instantiate(linePrefab);
     lineTransform.SetParent(this.transform);
     lineTransform.localPosition = new Vector3(sourceCaseManager.transform.position.x, sourceCaseManager.transform.position.y, 0.4f);
     return lineTransform.GetComponent<LineManager>();
 }
Example #19
0
        public void OnViewRoute(CaseManager target, bool enable)
        {
            if (!isHoverGUI && _candidateRoutes != null)
            {
                var player = PlayerEngine.Instance.GetCurrent();
                if (enable)
                {
                    var de = player.currentTurn.de;

                    if (_candidateRoutes.routes.ContainsKey(target.itemDataSource.index))
                    {
                        var routes = _candidateRoutes.routes[target.itemDataSource.index];
                        _candidateRoute = routes
                            .OrderBy(r => r.nbLineMove)
                            .ThenByDescending(r => r.route.Count - de)
                            .ThenBy(r => r.route.Skip(1).Count(c => c.isDangerous)).First();

                        FeatureEngine.Instance.WarningRoute(player, _candidateRoute);
                        BoardEngine.Instance.DrawRoute(_candidateRoute.route, player.GetColor());
                    }
                }
                else
                {
                    if (_candidateRoute != null)
                    {
                        FeatureEngine.Instance.DisplayFeature(player);
                        BoardEngine.Instance.DrawRoute(_candidateRoute.route);
                    }
                }
            }
        }