public unsafe void InitFromHeightData(IO.Files.Terrain.MareEntry entry) { mVertexData = new Vector3[17 * 17 + 16 * 16]; var counter = 0; var posMin = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); var posMax = new Vector3(float.MinValue, float.MinValue, float.MinValue); for (var y = 0; y < 33; ++y) { for (var x = 0; x < ((y % 2 != 0) ? 16 : 17); ++x) { var inner = (y % 2) != 0; float height = inner ? entry.inner[(y / 2) * 16 + x] : entry.outer[(y / 2) * 17 + x]; var v = new Vector3(x * StepX, y * StepY, height); v.X += IndexX * Metrics.TileSize; if (inner) { v.X += 0.5f * StepX; } v.Y += IndexY * Metrics.TileSize; if (IO.FileManager.Instance.Version < IO.FileDataVersion.Lichking) { v.Y = 64.0f * Metrics.TileSize - v.Y; } if (v.X < posMin.X) { posMin.X = v.X; } if (v.X > posMax.X) { posMax.X = v.X; } if (v.Y < posMin.Y) { posMin.Y = v.Y; } if (v.Y > posMax.Y) { posMax.Y = v.Y; } if (v.Z < posMin.Z) { posMin.Z = v.Z; } if (v.Z > posMax.Z) { posMax.Z = v.Z; } mVertexData[counter++] = v; } } mBoudingBox = new BoundingBox(posMin, posMax); mAsyncLoaded = true; }
private static unsafe void LoadEntry(IO.Files.Terrain.MareEntry entry, uint[] textureData, ref int i, ref int j) { for (var k = 0; k < 17; ++k) { for (var l = 0; l < 17; ++l) { uint r; uint g; uint b; var h = entry.outer[k * 17 + l]; if (h > 2000) { r = g = b = 255; } else if (h > 1000) { var am = (h - 1000) / 1000.0f; r = (uint)(0.75f + am * 0.25f * 255); g = (uint)(0.5f * am * 255); b = (uint)(0.75f + am * 0.5f * 255); } else if (h > 600) { var am = (h - 600) / 400.0f; r = (uint)(0.75 + am * 0.25f * 255); g = (uint)(0.5f * am * 255); b = (uint)(am * 255); } else if (h > 300) { var am = (h - 300) / 300.0f; r = (uint)(255 - am * 255); g = 1; b = 0; } else if (h > 0) { var am = h / 300.0f; r = (uint)(0.75 * am * 255); g = (uint)(255 - (0.5f * am * 255)); b = 0; } else if (h > -100) { var am = (h + 100.0f) / 100.0f; r = (uint)(0.0f); g = (uint)(am * 127); b = 200; } else { r = g = 0; b = 0x2F; } if (k == 0 || l == 0) { r = g = b = 0; } textureData[(i * 17 + k) * (64 * 17) + j * 17 + l] = 0xFF000000 | (r << 16) | (g << 8) | (b << 0); } } }