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>(); }
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); } }
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>()); }
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)); }
public CaseManager FindCaseManager(IndexDataSource index) { CaseManager result = null; if (index != null && _boardItems != null && _boardItems.ContainsKey(index)) { result = _boardItems[index].caseManager; } return(result); }
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 }); }
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; }
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); }
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; }
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); } }
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); } }
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); } }
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); } }
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; }
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; }
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(); } } }
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>(); }
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); } } } }