public static void PlaceObstacle(string obstacleName, Vector3 position, Vector3 angles) { Phases.CurrentSubPhase.IsReadyForCommands = false; ChosenObstacle = ObstaclesManager.GetChosenObstacle(obstacleName); ChosenObstacle.ObstacleGO.transform.position = position; ChosenObstacle.ObstacleGO.transform.eulerAngles = angles; Board.ToggleOffTheBoardHolder(false); ChosenObstacle.ObstacleGO.transform.parent = Board.BoardTransform; ChosenObstacle.IsPlaced = true; ChosenObstacle = null; IsEnteredPlacementZone = false; IsEnteredPlaymat = false; MovementTemplates.ReturnRangeRulerR1(); MovementTemplates.ReturnRangeRulerR2(); if (ObstaclesManager.GetPlacedObstaclesCount() < 6) { Phases.CurrentSubPhase.Next(); } else { FinishSubPhase(); } }
private void ApplyObstacleLimits() { MovementTemplates.ReturnRangeRulerR1(); Vector3 fromObstacle = Vector3.zero; Vector3 toObstacle = Vector3.zero; float minDistance = float.MaxValue; bool isBlockedByAnotherObstacle = false; foreach (MeshCollider collider in ObstaclesManager.GetPlacedObstacles().Select(n => n.ObstacleGO.GetComponentInChildren <MeshCollider>())) { Vector3 closestPoint = collider.ClosestPoint(ChosenObstacle.ObstacleGO.transform.position); RaycastHit hitInfo = new RaycastHit(); if (Physics.Raycast(closestPoint + new Vector3(0, 0.003f, 0), ChosenObstacle.ObstacleGO.transform.position - closestPoint, out hitInfo)) { float distanceBetween = Vector3.Distance(closestPoint, hitInfo.point); if (distanceBetween < MinObstaclesDistance) { IsPlacementBlocked = true; isBlockedByAnotherObstacle = true; if (distanceBetween < minDistance) { fromObstacle = closestPoint + new Vector3(0, 0.003f, 0); toObstacle = hitInfo.point; minDistance = distanceBetween; } } } // In case if one asteroid is inside of another float distanceToCenter = Vector3.Distance(closestPoint, ChosenObstacle.ObstacleGO.transform.position); if (distanceToCenter < MinObstaclesDistance) { IsPlacementBlocked = true; isBlockedByAnotherObstacle = true; if (distanceToCenter < minDistance) { fromObstacle = closestPoint; toObstacle = ChosenObstacle.ObstacleGO.transform.position; minDistance = distanceToCenter; } } } if (IsPlacementBlocked && isBlockedByAnotherObstacle) { MovementTemplates.ShowRangeRulerR1(fromObstacle, toObstacle); } }
public static void PlaceObstacle(string obstacleName, Vector3 position, Vector3 angles) { Phases.CurrentSubPhase.IsReadyForCommands = false; ChosenObstacle.ObstacleGO.transform.position = position; ChosenObstacle.ObstacleGO.transform.eulerAngles = angles; ChosenObstacle.ObstacleGO.transform.parent = Board.BoardTransform; ChosenObstacle.IsPlaced = true; ChosenObstacle = null; IsEnteredPlacementZone = false; IsEnteredPlaymat = false; MovementTemplates.ReturnRangeRulerR1(); MovementTemplates.ReturnRangeRulerR2(); FinishSubPhase(); }