public static void AddInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, UnityEngine.Vector2 forward2D, float scaleY, Color32 color, int meshIndex) { Diagnostics.Assert(!meshBlock.Closed); Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance == 0); Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance); int val = 65535; int num = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x))); int num2 = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y))); int num3 = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z))); UnityEngine.Vector2 vector = forward2D / scaleY; int num4 = Math.Max(0, Math.Min(val, (int)((vector.x - instanciedMeshHolders.BBoxMin.w) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.w))); int num5 = Math.Max(0, Math.Min(val, (int)((vector.y - instanciedMeshHolders.BBoxMin.w) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.w))); int num6 = Math.Max(0, Math.Min(val, (int)(scaleY * instanciedMeshHolders.Max16BitValueBBoxExtentScale))); int num7 = 255; int num8 = 65280; meshBlock.MeshColors.Add(new Color32((byte)(num & num7), (byte)((num & num8) >> 8), (byte)(num2 & num7), (byte)((num2 & num8) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num3 & num7), (byte)((num3 & num8) >> 8), (byte)(num4 & num7), (byte)((num4 & num8) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num5 & num7), (byte)((num5 & num8) >> 8), (byte)(num6 & num7), (byte)((num6 & num8) >> 8))); meshBlock.MeshColors.Add(color); meshBlock.MeshIndices.Add(meshIndex); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionForwardScaleZColorPixelsPerInstance == 0); }
public static void AddIconInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, UnityEngine.Vector2 forward2D, UnityEngine.Vector2 texCoord, float worldScale, float textureScale, int meshIndex, byte customData0 = 0, byte customData1 = 0) { Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance == 0); Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance); Diagnostics.Assert(meshBlock != null); Diagnostics.Assert(!meshBlock.Closed); Diagnostics.Assert(texCoord.x >= 0f); Diagnostics.Assert(texCoord.x <= 1f); Diagnostics.Assert(texCoord.y >= 0f); Diagnostics.Assert(texCoord.y <= 1f); Diagnostics.Assert(forward2D.x >= -1f); Diagnostics.Assert(forward2D.y >= -1f); Diagnostics.Assert(forward2D.x <= 1f); Diagnostics.Assert(forward2D.y <= 1f); int num = 65535; int num2 = Math.Max(0, Math.Min(num, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x))); int num3 = Math.Max(0, Math.Min(num, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y))); int num4 = Math.Max(0, Math.Min(num, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z))); int num5 = Math.Max(0, Math.Min(255, (int)(texCoord.x * 255f))); int num6 = Math.Max(0, Math.Min(255, (int)(texCoord.y * 255f))); int num7 = Math.Max(0, Math.Min(num, (int)(worldScale * instanciedMeshHolders.Max16BitValueBBoxExtentScale))); int num8 = Math.Max(0, Math.Min(num, (int)(textureScale * (float)num))); int num9 = Math.Max(0, Math.Min(255, (int)((0.5f * forward2D.x + 0.5f) * 255f))); int num10 = Math.Max(0, Math.Min(255, (int)((0.5f * forward2D.y + 0.5f) * 255f))); int num11 = 255; int num12 = 65280; meshBlock.MeshColors.Add(new Color32((byte)(num2 & num11), (byte)((num2 & num12) >> 8), (byte)(num3 & num11), (byte)((num3 & num12) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num4 & num11), (byte)((num4 & num12) >> 8), (byte)num5, (byte)num6)); meshBlock.MeshColors.Add(new Color32((byte)(num7 & num11), (byte)((num7 & num12) >> 8), (byte)(num8 & num11), (byte)((num8 & num12) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)num9, (byte)num10, customData0, customData1)); meshBlock.MeshIndices.Add(meshIndex); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.PositionTexCoordWorldScaleTextureScalePixelsPerInstance == 0); }
public static void AddLetterInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, int minPixelIndexX, int minPixelIndexY, int pixelCountX, int pixelCountY, UnityEngine.Vector2 worldScale, int meshIndex, bool useDynamicAtlas) { Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.LetterPixelsPerInstance); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0); Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.LetterPixelsPerInstance); Diagnostics.Assert(meshBlock != null); Diagnostics.Assert(!meshBlock.Closed); Diagnostics.Assert(minPixelIndexX >= 0); Diagnostics.Assert(minPixelIndexY >= 0); Diagnostics.Assert(pixelCountX >= 0); Diagnostics.Assert((float)pixelCountX <= 255f); Diagnostics.Assert(pixelCountY >= 0); Diagnostics.Assert((float)pixelCountY <= 255f); int val = 65535; int num = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x))); int num2 = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y))); int num3 = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z))); int num4 = 4096; int num5 = minPixelIndexX + ((!useDynamicAtlas) ? 0 : num4); int num6 = Math.Max(0, Math.Min(val, (int)(worldScale.x * instanciedMeshHolders.Max16BitValueBBoxExtentScale))); int num7 = Math.Max(0, Math.Min(val, (int)(worldScale.y * instanciedMeshHolders.Max16BitValueBBoxExtentScale))); int num8 = 255; int num9 = 65280; meshBlock.MeshColors.Add(new Color32((byte)(num & num8), (byte)((num & num9) >> 8), (byte)(num2 & num8), (byte)((num2 & num9) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num3 & num8), (byte)((num3 & num9) >> 8), (byte)(num5 & num8), (byte)((num5 & num9) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num6 & num8), (byte)((num6 & num9) >> 8), (byte)(num7 & num8), (byte)((num7 & num9) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(minPixelIndexY & num8), (byte)((minPixelIndexY & num9) >> 8), (byte)pixelCountX, (byte)pixelCountY)); meshBlock.MeshIndices.Add(meshIndex); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0); }
public static Int3 ConvertAbsoluteWorldPosToEncodingValues(InstanciedMeshHolders instanciedMeshHolders, UnityEngine.Vector3 position) { int val = 65535; int x = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x))); int y = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y))); int z = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z))); return(new Int3(x, y, z)); }
public static void ConvertBoundsToEncodingValues(InstanciedMeshHolders instanciedMeshHolders, Bounds meshBounds, out Int3 center, out Int3 size) { int x = (int)(meshBounds.center.x * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x); int y = (int)(meshBounds.center.y * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y); int z = (int)(meshBounds.center.z * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z); int x2 = (int)(meshBounds.size.x * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x); int y2 = (int)(meshBounds.size.y * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y); int z2 = (int)(meshBounds.size.z * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z); center = new Int3(x, y, z); size = new Int3(x2, y2, z2); }
private static int GetOrCreateMeshIndex(Material material, InstanciedMeshHolders instanciedMeshHolders) { string text = string.Format("Letter_{0}", material.name); int num = instanciedMeshHolders.RetrieveMeshIndex(text, InstanciedMeshHelpers.LetterPixelsPerInstance, Matrix4x4.identity, material, instanciedMeshHolders.MaxPerBigLineInstance(InstanciedMeshHelpers.LetterPixelsPerInstance)); if (num == -1) { Mesh mesh = AbstractRegionPatchRenderer.CreateDebugRegionNameMesh(); mesh.name = text; num = instanciedMeshHolders.AddSmallMesh(new InstanciedMeshHolders.MeshAndSubMeshIndex(mesh, 0), InstanciedMeshHelpers.LetterPixelsPerInstance, Matrix4x4.identity, material, instanciedMeshHolders.MaxPerBigLineInstance(InstanciedMeshHelpers.LetterPixelsPerInstance)); Diagnostics.Assert(instanciedMeshHolders.RetrieveMeshIndex(text, InstanciedMeshHelpers.LetterPixelsPerInstance, Matrix4x4.identity, material, instanciedMeshHolders.MaxPerBigLineInstance(InstanciedMeshHelpers.LetterPixelsPerInstance)) == num); } return(num); }
public static void AddLetterInstance(InstanciedMeshHolders instanciedMeshHolders, InstanciedMeshBlock meshBlock, UnityEngine.Vector3 position, UnityEngine.Vector2 minTexCoord, UnityEngine.Vector2 pixelCount, UnityEngine.Vector2 worldScale, int meshIndex) { Diagnostics.Assert(meshBlock.PixelsPerInstance == InstanciedMeshHelpers.LetterPixelsPerInstance); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0); Diagnostics.Assert(instanciedMeshHolders.GetPixelsPerInstance(meshIndex) == InstanciedMeshHelpers.LetterPixelsPerInstance); Diagnostics.Assert(meshBlock != null); Diagnostics.Assert(!meshBlock.Closed); Diagnostics.Assert(minTexCoord.x >= 0f); Diagnostics.Assert(minTexCoord.x <= 1f); Diagnostics.Assert(minTexCoord.y >= 0f); Diagnostics.Assert(minTexCoord.y <= 1f); Diagnostics.Assert(pixelCount.x >= 0f); Diagnostics.Assert(pixelCount.x <= 255f); Diagnostics.Assert(pixelCount.y >= 0f); Diagnostics.Assert(pixelCount.y <= 255f); int val = 65535; float num = 65535f; int num2 = Math.Max(0, Math.Min(val, (int)((position.x - instanciedMeshHolders.BBoxMin.x) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.x))); int num3 = Math.Max(0, Math.Min(val, (int)((position.y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y))); int num4 = Math.Max(0, Math.Min(val, (int)((position.z - instanciedMeshHolders.BBoxMin.z) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.z))); int num5 = Math.Max(0, Math.Min(val, (int)(minTexCoord.x * num))); int num6 = Math.Max(0, Math.Min(val, (int)(minTexCoord.y * num))); int num7 = Math.Max(0, Math.Min(val, (int)(worldScale.x * instanciedMeshHolders.Max16BitValueBBoxExtentScale))); int num8 = Math.Max(0, Math.Min(val, (int)(worldScale.y * instanciedMeshHolders.Max16BitValueBBoxExtentScale))); int num9 = Math.Max(0, Math.Min(255, (int)pixelCount.x)); int num10 = Math.Max(0, Math.Min(255, (int)pixelCount.y)); int num11 = 255; int num12 = 65280; meshBlock.MeshColors.Add(new Color32((byte)(num2 & num11), (byte)((num2 & num12) >> 8), (byte)(num3 & num11), (byte)((num3 & num12) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num4 & num11), (byte)((num4 & num12) >> 8), (byte)(num5 & num11), (byte)((num5 & num12) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num7 & num11), (byte)((num7 & num12) >> 8), (byte)(num8 & num11), (byte)((num8 & num12) >> 8))); meshBlock.MeshColors.Add(new Color32((byte)(num6 & num11), (byte)((num6 & num12) >> 8), (byte)num9, (byte)num10)); meshBlock.MeshIndices.Add(meshIndex); Diagnostics.Assert(meshBlock.MeshColors.Count % InstanciedMeshHelpers.LetterPixelsPerInstance == 0); }
private void AddRegionName(DefaultWorldViewTechnique defaultWorldViewTechnique, HxTechniqueGraphicData.RegionNameGraphicData.RegionData regionData, Region region) { InstanciedMeshHolders instanciedMeshHolders = defaultWorldViewTechnique.HxTechniqueGraphicData.InstanciedMeshHolders; InstanciedMeshBlock orCreateInstanciedMeshBlock = instanciedMeshHolders.GetOrCreateInstanciedMeshBlock(0, 67108864UL, InstanciedMeshHelpers.LetterPixelsPerInstance); Vector3 absoluteWorldPosition2D = AbstractGlobalPositionning.GetAbsoluteWorldPosition2D((int)regionData.Center.Row, (int)regionData.Center.Column); absoluteWorldPosition2D.y = base.GlobalPositionningService.GetAltitudeFromAbsoluteWorldPosition(new Vector3(absoluteWorldPosition2D.x, 0f, absoluteWorldPosition2D.z)); string localizedName = region.LocalizedName; AgeFont ageFont = this.regionNameGraphicData.AgeFont; int orCreateMeshIndex = AbstractRegionPatchRenderer.GetOrCreateMeshIndex(this.regionNameGraphicData.Material, defaultWorldViewTechnique.HxTechniqueGraphicData.InstanciedMeshHolders); float textSize = this.regionNameGraphicData.TextSize; bool disableKerning = GameManager.Preferences.GameGraphicSettings.DisableKerning; float num = 0f; float num2 = 0f; float num3 = 0f; float num4 = 0f; float num5 = 0f; for (int i = 0; i < localizedName.Length; i++) { char charcode = localizedName[i]; char nextCharCode = (disableKerning || i + 1 >= localizedName.Length) ? '\0' : localizedName[i + 1]; Vector2 vector; Vector2 vector2; Rect rect; float num6; ageFont.GetCharInfo(charcode, nextCharCode, out vector, out vector2, out rect, out num6); num2 = Math.Min(num + vector2.x, num2); num3 = Math.Max(num + vector2.x + vector.x, num3); num4 = Math.Min(num4, -vector2.y - vector.y); num5 = Math.Max(num5, -vector2.y); num += num6; } float z = -(num4 + num5) * 0.5f; float num7 = -(num2 + num3) * 0.5f; for (int j = 0; j < localizedName.Length; j++) { char charcode2 = localizedName[j]; char nextCharCode2 = (disableKerning || j + 1 >= localizedName.Length) ? '\0' : localizedName[j + 1]; Vector2 vector3; Vector2 vector4; Rect rect2; float num8; ageFont.GetCharInfo(charcode2, nextCharCode2, out vector3, out vector4, out rect2, out num8); if (vector3.x > 0f && vector3.y > 0f) { float num9 = 128f; bool flag = rect2.xMin >= num9; int minPixelIndexX; int minPixelIndexY; int pixelCountX; int pixelCountY; if (flag) { minPixelIndexX = Mathf.RoundToInt(rect2.xMin - num9); minPixelIndexY = Mathf.RoundToInt(rect2.yMin - num9); pixelCountX = (int)rect2.width; pixelCountY = (int)rect2.height; } else { minPixelIndexX = Mathf.RoundToInt(rect2.xMin * (float)this.regionNameGraphicData.FontTextureWidth); minPixelIndexY = Mathf.RoundToInt(rect2.yMin * (float)this.regionNameGraphicData.FontTextureHeight); pixelCountX = Mathf.RoundToInt(rect2.width * (float)this.regionNameGraphicData.FontTextureWidth); pixelCountY = Mathf.RoundToInt(rect2.height * (float)this.regionNameGraphicData.FontTextureHeight); } Vector3 a = new Vector3(num7, 0f, z) + new Vector3(vector4.x, 0f, -vector4.y) - new Vector3(0f, 0f, vector3.y); InstanciedMeshHelpers.AddLetterInstance(instanciedMeshHolders, orCreateInstanciedMeshBlock, absoluteWorldPosition2D + textSize * a, minPixelIndexX, minPixelIndexY, pixelCountX, pixelCountY, vector3 * textSize, orCreateMeshIndex, flag); } num7 += num8; } orCreateInstanciedMeshBlock.CloseAndSort(); if (this.regionNameInstanciedMeshBlocks == null) { this.regionNameInstanciedMeshBlocks = new List <InstanciedMeshBlock>(); } this.regionNameInstanciedMeshBlocks.Add(orCreateInstanciedMeshBlock); base.AddInstanciedMeshBlock(orCreateInstanciedMeshBlock, false); }
public static int ConvertAbsoluteWorldPosYToEncodingValues(InstanciedMeshHolders instanciedMeshHolders, float y) { int val = 65535; return(Math.Max(0, Math.Min(val, (int)((y - instanciedMeshHolders.BBoxMin.y) * instanciedMeshHolders.Max16BitValueOverBBoxExtent.y)))); }