protected override unsafe void UpdateMesh(LandTile tile, int baseColor) { int shadow1 = MapLighting.GetShadow(tile.facet, tile.ax, tile.ay); int shadow2 = MapLighting.GetShadow(tile.facet, tile.ax + 1, tile.ay); int shadow3 = MapLighting.GetShadow(tile.facet, tile.ax + 1, tile.ay + 1); int shadow4 = MapLighting.GetShadow(tile.facet, tile.ax, tile.ay + 1); fixed(TransformedColoredTextured *pMesh = this._mesh) { TransformedColoredTextured[] transformedColoredTexturedArray = this._mesh; int divisions = this._meshProvider.Divisions; int stride = this._meshProvider.Stride; if (divisions == 1) { TerrainMesh3D.UpdateSimpleMesh(pMesh, shadow1, shadow2, shadow3, shadow4); } else { this.UpdateMeshComplex(shadow1, shadow2, shadow3, shadow4); } } }
private unsafe void UpdateMeshComplex(int s00, int s10, int s11, int s01) { int stride = this._meshProvider.Stride; int divisions = this._meshProvider.Divisions; int[] indices; if ((indices = this._meshProvider.GetIndices(this._foldLeftRight)) != null && indices.Length != 0) { fixed(int *numPtr = &indices[0]) ; } fixed(TransformedColoredTextured *transformedColoredTexturedPtr1 = this._mesh) { TransformedColoredTextured *transformedColoredTexturedPtr2 = transformedColoredTexturedPtr1; int num1 = 0; int num2 = divisions; while (num1 <= divisions) { int num3 = (s00 * num2 + s01 * num1) / divisions; int num4 = (s10 * num2 + s11 * num1) / divisions; int num5 = 0; int num6 = divisions; while (num5 <= divisions) { int num7 = (num3 * num6 + num4 * num5) / divisions; Point3D a = this._normals[num1 * stride + num5]; int num8 = num5 == 0 ? -1 : (num5 == divisions ? 1 : 0); int num9 = num1 == 0 ? -1 : (num1 == divisions ? 1 : 0); int num10 = 65793; if (num8 != 0) { LandTile landTile = World.Viewport.GetLandTile(this.tile.ax + num8, this.tile.ay, Engine.m_World); if ((!this.tile.m_Guarded ? 0 : (!this.tile.Impassable ? 1 : 0)) != (!landTile.m_Guarded ? 0 : (!landTile.Impassable ? 1 : 0))) { num10 = !this.tile.m_Guarded || this.tile.Impassable ? 65536 : 256; } landTile.EnsureMesh(landTile._lastMeshHue ?? this.tile._lastMeshHue ?? Hues.Default, this._meshProvider); TerrainMesh3D terrainMesh3D = landTile._mesh as TerrainMesh3D; if (terrainMesh3D != null) { terrainMesh3D.Update(terrainMesh3D.tile, terrainMesh3D._color); a += terrainMesh3D._normals[num1 * stride + num6]; } } if (num9 != 0) { LandTile landTile = World.Viewport.GetLandTile(this.tile.ax, this.tile.ay + num9, Engine.m_World); if ((!this.tile.m_Guarded ? 0 : (!this.tile.Impassable ? 1 : 0)) != (!landTile.m_Guarded ? 0 : (!landTile.Impassable ? 1 : 0))) { num10 = !this.tile.m_Guarded || this.tile.Impassable ? 65536 : 256; } landTile.EnsureMesh(landTile._lastMeshHue ?? this.tile._lastMeshHue ?? Hues.Default, this._meshProvider); TerrainMesh3D terrainMesh3D = landTile._mesh as TerrainMesh3D; if (terrainMesh3D != null) { terrainMesh3D.Update(terrainMesh3D.tile, terrainMesh3D._color); a += terrainMesh3D._normals[num2 * stride + num5]; } } if (num8 != 0 && num9 != 0) { LandTile landTile = World.Viewport.GetLandTile(this.tile.ax + num8, this.tile.ay + num9, Engine.m_World); if ((!this.tile.m_Guarded ? 0 : (!this.tile.Impassable ? 1 : 0)) != (!landTile.m_Guarded ? 0 : (!landTile.Impassable ? 1 : 0))) { num10 = !this.tile.m_Guarded || this.tile.Impassable ? 65536 : 256; } landTile.EnsureMesh(landTile._lastMeshHue ?? this.tile._lastMeshHue ?? Hues.Default, this._meshProvider); TerrainMesh3D terrainMesh3D = landTile._mesh as TerrainMesh3D; if (terrainMesh3D != null) { terrainMesh3D.Update(terrainMesh3D.tile, terrainMesh3D._color); a += terrainMesh3D._normals[num2 * stride + num6]; } } Point3D normal = Point3D.Normalize256(a); int num11 = (num7 * 2 + MapLighting.GetShadow(normal) + 2) / 3; transformedColoredTexturedPtr2++->Color = Renderer.GetQuadColor(num10 * num11); ++num5; --num6; } ++num1; --num2; } // ISSUE: fixed variable is out of scope // ISSUE: __unpin statement } }