コード例 #1
0
    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());
    }
コード例 #2
0
    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);
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }