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); }
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); } }
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))); }