private void CameraControl() { _pCamera.MoveCamera(_im.camMovementAxes * _im.camMovementSpd); _pCamera.RotateCamera(_im.camRotationAxes * _im.camRotationSpd); Vector3 innerLimits = _grid.nodeSize * _im.cameraGridClamp; transform.position = _grid.ClampWorldPosToGrid(transform.position, innerLimits); }
public void RefreshData(Camera cam, int floor, bool btnPress, bool btnUp) { GridGenerator grid = GridGenerator.Singleton; mouseCurrentScreenPos = Input.mousePosition; float height = grid.nodeSize.y * floor; Plane xzPlane = new Plane(Vector3.up, new Vector3(0, height, 0)); Ray ray = cam.ScreenPointToRay(mouseCurrentScreenPos); Vector3?planePos; if (xzPlane.Raycast(ray, out float distance)) { planePos = ray.GetPoint(distance); RaycastHit rayHit; if (Physics.Raycast(ray, out rayHit, distance, grid.layerObstacles)) { obstacle = rayHit.transform.gameObject; } else { obstacle = null; } if (Physics.Raycast(ray, out rayHit, distance, grid.layerWalls)) { wall = rayHit.transform.gameObject; } else { wall = null; } if (Physics.Raycast(ray, out rayHit, distance, grid.layerUnits)) { unit = rayHit.transform.gameObject; } else { unit = null; } } else { planePos = null; } if (planePos != null) { Vector3 pos = (Vector3)planePos; gridNode = grid.GridNodeFromWorldPosition(pos); Vector3 gridPos = grid.ClampWorldPosToGrid((Vector3)planePos, Vector3.zero); outsideGrid = (planePos != gridPos); mouseCurrentGridPos = gridPos; } else { outsideGrid = true; gridNode = null; obstacle = null; wall = null; unit = null; } if (!btnPress || btnUp) { performingSelectionBox = false; mouseLastScreenPos = mouseCurrentScreenPos; mouseLastGridPos = mouseCurrentGridPos; } else { performingSelectionBox = true; } }