private void CheckObstructionRecursive(Vector3 point1, Vector3 point2, GenericShip targetShip) { RaycastHit hitInfo = new RaycastHit(); if (Physics.Raycast(point1 + new Vector3(0, 0.003f, 0), point2 - point1 + new Vector3(0, 0.003f, 0), out hitInfo)) { if (hitInfo.collider.tag == "Obstacle") { GenericObstacle obstructedObstacle = ObstaclesManager.GetChosenObstacle(hitInfo.collider.name); if (!ObstructedByObstacles.Contains(obstructedObstacle)) { ObstructedByObstacles.Add(obstructedObstacle); } IgnoreCollider(hitInfo); CheckObstructionRecursive(point1, point2, targetShip); } else if (hitInfo.collider.tag.StartsWith("ShipId:")) { if (hitInfo.collider.tag != "ShipId:" + targetShip.ShipId) { GenericShip obstructedShip = Roster.GetShipById(hitInfo.collider.tag); if (!ObstructedByShips.Contains(obstructedShip)) { ObstructedByShips.Add(obstructedShip); } IgnoreCollider(hitInfo); CheckObstructionRecursive(point1, point2, targetShip); } } else if (hitInfo.collider.tag == "Mine" || hitInfo.collider.tag == "TimedBomb") { IsObstructedByBombToken = true; } } }
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(); } }
void OnTriggerEnter(Collider collisionInfo) { if (collisionInfo.tag == "Obstacle") { ObstaclesObstructed.Add(ObstaclesManager.GetChosenObstacle(collisionInfo.transform.name)); } else if (collisionInfo.tag == "Mine" || collisionInfo.tag == "TimedBomb") { IsObstructedByBombToken = true; } }
void OnTriggerEnter(Collider collisionInfo) { if (checkCollisions) { GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>(); if (collisionInfo.tag == "Obstacle") { GenericObstacle obstacle = ObstaclesManager.GetChosenObstacle(collisionInfo.transform.name); if (!OverlapedAsteroids.Contains(obstacle)) { OverlapedAsteroids.Add(obstacle); } } else if (collisionInfo.tag == "Mine") { if (!OverlapedMines.Contains(collisionInfo)) { OverlapedMines.Add(collisionInfo); } } else if (collisionInfo.name == "OffTheBoard") { OffTheBoard = true; } else if (collisionInfo.name == "ObstaclesStayDetector") { if (collisionInfo.tag != this.tag) { Game.Movement.CollidedWith = collisionInfo; OverlapsShip = true; if (!OverlapedShips.Contains(Roster.GetShipById(collisionInfo.tag))) { OverlapedShips.Add(Roster.GetShipById(collisionInfo.tag)); } } } else if (collisionInfo.name == "RemoteCollider") { if (collisionInfo.tag != this.tag) { if (!OverlapedRemotes.Contains(Roster.GetShipById(collisionInfo.tag) as GenericRemote)) { OverlapedRemotes.Add(Roster.GetShipById(collisionInfo.tag) as GenericRemote); } } } } }
void OnTriggerEnter(Collider collisionInfo) { if (checkCollisions) { if (collisionInfo.tag == "Obstacle") { GenericObstacle obstacle = ObstaclesManager.GetChosenObstacle(collisionInfo.transform.name); if (!OverlapedAsteroids.Contains(obstacle)) { OverlapedAsteroids.Add(obstacle); } } else if (collisionInfo.tag == "Mine") { if (!OverlapedMines.Contains(collisionInfo)) { OverlapedMines.Add(collisionInfo); } } else if (collisionInfo.name == "RemoteCollider") { if (collisionInfo.tag != this.tag) { if (!RemotesMovedThrough.Contains(Roster.GetShipById(collisionInfo.tag) as GenericRemote)) { RemotesMovedThrough.Add(Roster.GetShipById(collisionInfo.tag) as GenericRemote); } } } else if (collisionInfo.name == "ObstaclesStayDetector") { if (collisionInfo.tag != this.tag) { if (!ShipsMovedThrough.Contains(Roster.GetShipById(collisionInfo.tag))) { ShipsMovedThrough.Add(Roster.GetShipById(collisionInfo.tag)); } } } } }
void OnTriggerStay(Collider collisionInfo) { if (checkCollisionsNow) { if (collisionInfo.tag == "Obstacle") { GenericObstacle obstacle = ObstaclesManager.GetChosenObstacle(collisionInfo.transform.name); if (!OverlappedAsteroidsNow.Contains(obstacle)) { OverlappedAsteroidsNow.Add(obstacle); } } else if (collisionInfo.tag == "Mine") { if (!OverlapedMinesNow.Contains(collisionInfo)) { OverlapedMinesNow.Add(collisionInfo); } } else if (collisionInfo.name == "OffTheBoard") { OffTheBoardNow = true; } else if (collisionInfo.name == "ObstaclesStayDetector") { if (collisionInfo.tag != TheShip.GetTag()) { GenericShip ship = Roster.GetShipById(collisionInfo.tag); if (ship != null && !OverlappedShipsNow.Contains(ship)) { OverlappedShipsNow.Add(ship); } } else if (collisionInfo.tag == TheShip.GetTag()) { OverlapsCurrentShipNow = true; } } } }
void OnTriggerEnter(Collider collisionInfo) { if (checkCollisions) { if (collisionInfo.tag == "Obstacle") { GenericObstacle obstacle = ObstaclesManager.GetChosenObstacle(collisionInfo.transform.name); if (!OverlapedAsteroids.Contains(obstacle)) { OverlapedAsteroids.Add(obstacle); } } if (collisionInfo.tag == "Mine") { if (!OverlapedMines.Contains(collisionInfo)) { OverlapedMines.Add(collisionInfo); } } } }
private void TryToSelectObstacle() { if (!EventSystem.current.IsPointerOverGameObject() && (Input.touchCount == 0 || !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))) { if (Input.GetKeyUp(KeyCode.Mouse0)) { RaycastHit hitInfo = new RaycastHit(); if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo)) { if (hitInfo.transform.tag.StartsWith("Obstacle")) { GenericObstacle clickedObstacle = ObstaclesManager.GetChosenObstacle(hitInfo.transform.name); if (clickedObstacle.IsPlaced) { SelectObstacle(clickedObstacle); } } } } } }
private void TryToSelectObstacle() { if (!EventSystem.current.IsPointerOverGameObject() && (Input.touchCount == 0 || !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))) { // On touch devices, select on down instead of up event so drag can begin immediately if (Input.GetKeyUp(KeyCode.Mouse0) || (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)) { RaycastHit hitInfo = new RaycastHit(); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); bool castHit = Physics.Raycast(ray, out hitInfo); // If an asteroid wasn't found and we're on touch, see if the user tapped right next to an asteroid // Since the asteroid can be small, they can be hard to touch and this helps with that if (CameraScript.InputTouchIsEnabled && (!castHit || !hitInfo.transform.tag.StartsWith("Obstacle"))) { castHit = Physics.SphereCast(ray, 0.1f, out hitInfo, 10f); } // Select the obstacle found if it's valid if (castHit && hitInfo.transform.tag.StartsWith("Obstacle")) { GameObject obstacleGO = hitInfo.transform.parent.gameObject; GenericObstacle clickedObstacle = ObstaclesManager.GetChosenObstacle(obstacleGO.transform.name); if (!clickedObstacle.IsPlaced) { SelectObstacle(clickedObstacle); } } } } }
public static void ConfirmSelectionOfObstacle(string obstacleName) { TargetLocked = ObstaclesManager.GetChosenObstacle(obstacleName); (Phases.CurrentSubPhase as SelectTargetLockableSubPhase).InvokeFinish(); }
public static void ConfirmSelectionOfObstacle(string obstacleName) { GenericObstacle obstacle = ObstaclesManager.GetChosenObstacle(obstacleName); SelectTargetAction(obstacle); }