Пример #1
0
    private CoordSurfaceStatus lightValueAt(Coord chunkCo, Coord offsetStart, Vector3 nudgeV)
    {
        CoordLine testLine = new CoordLine();

        //radius is chunkLength
        for (int i = 1; i < Chunk.CHUNKLENGTH; ++i)
        {
            Coord nudgeC      = LightDataProvider.BlockCoordFromVectorBlockRadius(nudgeV, i);
            Coord totalOffset = offsetStart + nudgeC;

            //TEST
            if (i == 1)
            {
                testLine.start = CoordUtil.WorldCoordForChunkCoord(chunkCo) + totalOffset;
            }

            //END TEST

            // TODO: if already a result at this coord return that result.
            CoordSurfaceStatus surfaceStatus = m_noisePatch.coordIsAboveSurface(chunkCo, totalOffset);

            if (surfaceStatus == CoordSurfaceStatus.ABOVE_SURFACE || surfaceStatus == CoordSurfaceStatus.BELOW_SURFACE_SOLID)
            {
//				if (surfaceStatus == CoordSurfaceStatus.BELOW_SURFACE_SOLID) //TEST
//				{
//					testLine.end = CoordUtil.WorldCoordForChunkCoord(chunkCo) +  totalOffset;
//					debugLinesAssistant.addCoordLine(testLine.start, testLine.end); //TEST
//				}
                return(surfaceStatus);
            }
        }

        return(CoordSurfaceStatus.BELOW_SURFACE_TRANSLUCENT);
    }
Пример #2
0
    public void rangeModeSetUp(int coordDims1)
    {
        int rangeRange = 4;

        for (int i = 0; i < coordDims1; ++i)
        {
            int varyRangeBy           = i % 2 == 0 ? 2 : 1;
            LightDataProvider lightDP = new LightDataProvider(new Chunk());

            FaceInfo faceinfo = new FaceInfo(new Coord(i, 4, 0), new Range1D(0, rangeRange - varyRangeBy), Direction.ypos, lightDP);
            fa.addFaceInfoRange(faceinfo);
        }
    }
Пример #3
0
    private byte lightValueAt(Coord chunkCo, Coord offsetStart, Direction dir)
    {
        // get a bunch of angles for the correct hemisphere
        // keep a list of coords that already resulted
        int result = 0;

        Vector3[] sampler     = HemiSphereData.NorthernHemispherePoints30;
        int       sampleCount = sampler.Length;
        Vector3   v;

        foreach (Vector3 vec in sampler)
        {
            v = LightDataProvider.ConvertFromYPosToDirection(vec, dir);
            CoordSurfaceStatus surfaceStatus = lightValueAt(chunkCo, offsetStart, v);
            if (surfaceStatus == CoordSurfaceStatus.ABOVE_SURFACE)
            {
                result++;                 // dead simple! // really want to word with the angles in question...
            }
            if (result > 2 * sampleCount / 3)
            {
                return(3);
            }
        }

        if (result > sampleCount / 3)
        {
            return(2);
        }

        if (result > sampleCount / 4)
        {
            return(1);
        }
        return(0);

        return((byte)(result / (2 * sampleCount / 3)));
    }