private void RearrangeChunksAroundCenter(UTIL.EPosition _positionMap, UTIL.EPosition _positionTerrain) { if (_positionMap == UTIL.EPosition.ECenter) { return; } rearrangingBlock = true; currentCenter = new Vector3(playerCamera.transform.position.x, 0f, playerCamera.transform.position.z); if (_positionTerrain == UTIL.EPosition.EAbove) //player went too far up { MoveLoadedSectionDown(); } else if (_positionTerrain == UTIL.EPosition.EBelow) //player went too far down { MoveLoadedSectionUp(); } else if (_positionTerrain == UTIL.EPosition.ELeft) //player went too far left { MoveLoadedSectionLeft(); } else if (_positionTerrain == UTIL.EPosition.ERight) //player went too far right { MoveLoadedSectionRight(); } map.MoveTo(currentCenter); waterLevel.transform.position = map.GetActualCenter(); StartCoroutine(LiftRearrangeBlock()); }
private UTIL.EPosition GetCameraPositionToCenterMap(Vector3 _position) { Vector2 pos2D = StaticMaths.ThreeDTo2D(_position, StaticMaths.EPlane.E_XZ); UTIL.EPosition pos = UTIL.EPosition.ECenter; if (StaticMaths.WithinBoundingBox(pos2D, StaticMaths.ThreeDTo2D(map.GetActualCenter(), StaticMaths.EPlane.E_XZ), new Vector2(chunkTileCountX * TILES.Offset.x, chunkTileCountZ * TILES.Offset.z) + StaticMaths.ThreeDTo2D(TILES.Offset, StaticMaths.EPlane.E_XZ) * 2)) { pos = UTIL.EPosition.ECenter; } else { if (pos2D.y < mapObject.transform.position.z + (chunkTileCountZ * TILES.Offset.z)) { pos = UTIL.EPosition.EAbove; } else if (pos2D.y > mapObject.transform.position.z - (chunkTileCountZ * TILES.Offset.z)) { pos = UTIL.EPosition.EBelow; } else if (pos2D.x < mapObject.transform.position.x + (chunkTileCountX * TILES.Offset.x)) { pos = UTIL.EPosition.ELeft; } else if (pos2D.x > mapObject.transform.position.x - (chunkTileCountX * TILES.Offset.x)) { pos = UTIL.EPosition.ERight; } } return(pos); }
private UTIL.EPosition GetCameraPositionToCenterTerrain(Vector3 _position) { Vector2 pos2D = StaticMaths.ThreeDTo2D(_position, StaticMaths.EPlane.E_XZ); UTIL.EPosition pos = UTIL.EPosition.ECenter; int halfDim = GetTerrainDimCenter(); if (StaticMaths.WithinBoundingBox(pos2D, StaticMaths.ThreeDTo2D(StaticMaths.MultiplyVector3D(terrainChunks[halfDim, halfDim].GetCenter(), TILES.Offset), StaticMaths.EPlane.E_XZ), planetData.GetTerrainSize() + StaticMaths.ThreeDTo2D(TILES.Offset, StaticMaths.EPlane.E_XZ) * 2)) { } else { if (pos2D.y < terrainChunks[halfDim, halfDim].GetCenter().z - planetData.GetTerrainSize().y / 2) { pos = UTIL.EPosition.EAbove; } else if (pos2D.y > terrainChunks[halfDim, halfDim].GetCenter().z + planetData.GetTerrainSize().y / 2) { pos = UTIL.EPosition.EBelow; } else if (pos2D.x < terrainChunks[halfDim, halfDim].GetCenter().x - planetData.GetTerrainSize().x / 2) { pos = UTIL.EPosition.ELeft; } else if (pos2D.x > terrainChunks[halfDim, halfDim].GetCenter().x + planetData.GetTerrainSize().x / 2) { pos = UTIL.EPosition.ERight; } } return(pos); }
private void UpdateMap() { if (rearrangingBlock || !loadMoreChunks) { return; } Vector3 cameraPos = playerCamera.transform.position; UTIL.EPosition playerPositionMap = GetCameraPositionToCenterMap(cameraPos); UTIL.EPosition playerPositionTerrain = GetCameraPositionToCenterTerrain(cameraPos); RearrangeChunksAroundCenter(playerPositionMap, playerPositionTerrain); }