//Methods// public void Build(IModule sourceModule) { Model.Plane planeModel = new Model.Plane(sourceModule); double xExtent = UpperXBound - LowerXBound; double zExtent = UpperZBound - LowerZBound; double xDelta = xExtent / (double)Map.Width; double zDelta = zExtent / (double)Map.Height; double xCur = LowerXBound; double zCur = LowerZBound; for (int z = 0; z < Map.Height; z++) { xCur = LowerXBound; for (int x = 0; x < Map.Width; x++) { float finalValue; if (!IsSeamless) { finalValue = (float)planeModel.GetValue(xCur, zCur); } else { double swValue, seValue, nwValue, neValue; swValue = planeModel.GetValue(xCur, zCur); seValue = planeModel.GetValue(xCur + xExtent, zCur); nwValue = planeModel.GetValue(xCur, zCur + zExtent); neValue = planeModel.GetValue(xCur + xExtent, zCur + zExtent); double xBlend = 1.0 - ((xCur - LowerXBound) / xExtent); double zBlend = 1.0 - ((zCur - LowerZBound) / zExtent); double z0 = MathUtils.LinearInterp(swValue, seValue, xBlend); double z1 = MathUtils.LinearInterp(nwValue, neValue, xBlend); finalValue = (float)MathUtils.LinearInterp(z0, z1, zBlend); } Map.SetValue(x, z, finalValue); xCur += xDelta; } zCur += zDelta; } }
//Methods// public void Build(IModule sourceModule) { Model.Plane planeModel = new Model.Plane(sourceModule); double xExtent = UpperXBound - LowerXBound; double zExtent = UpperZBound - LowerZBound; double xDelta = xExtent / (double)Map.Width; double zDelta = zExtent / (double)Map.Height; double xCur = LowerXBound; double zCur = LowerZBound; for (int z = 0; z < Map.Height; z++) { xCur = LowerXBound; for (int x = 0; x < Map.Width; x++) { float finalValue; if (!IsSeamless) { finalValue = (float)planeModel.GetValue(xCur, zCur); } else { double swValue, seValue, nwValue, neValue; swValue = planeModel.GetValue(xCur, zCur); seValue = planeModel.GetValue(xCur + xExtent, zCur); nwValue = planeModel.GetValue(xCur, zCur + zExtent); neValue = planeModel.GetValue(xCur + xExtent, zCur + zExtent); double xBlend = 1.0 - ((xCur - LowerXBound) / xExtent); double zBlend = 1.0 - ((zCur - LowerZBound) / zExtent); double z0 = MathUtils.LinearInterp(swValue, seValue, xBlend); double z1 = MathUtils.LinearInterp(nwValue, neValue, xBlend); finalValue = (float)MathUtils.LinearInterp(z0, z1, zBlend); } Map.SetValue(x, z, finalValue); xCur += xDelta; } zCur += zDelta; } }