public static ItemClass.Zone GetBlockZoneOverride(ref ZoneBlock block, int x, int z, ItemClass.Zone zone1, ItemClass.Zone zone2) { ItemClass.Zone targetZone = block.GetZone(x, z); switch ((int)targetZone) { case 8: case 9: case 10: case 11: case 12: case 13: case 14: if (ZMController.m_ghostMode) { ItemClass.Zone newValue = CustomZoneData.Instance[targetZone].HasZone(zone1) ? zone1 : CustomZoneData.Instance[targetZone].HasZone(zone2) ? zone2 : CustomZoneData.Instance[targetZone].GetLowerestZone(); block.SetZone(x, z, newValue); block.RefreshZoning(0); return(newValue); } else { return(CustomZoneData.Instance[targetZone].HasZone(zone1) ? zone1 : CustomZoneData.Instance[targetZone].HasZone(zone2) ? zone2 : targetZone); } default: return(targetZone); } }
private static bool ApplyZoning(ZoneTool _this, ushort blockIndex, ref ZoneBlock data, Quad2 quad2) { int rowCount = data.RowCount; int columnCount = ZoneBlockDetour.GetColumnCount(ref data); // modified Vector2 vector2_1 = new Vector2(Mathf.Cos(data.m_angle), Mathf.Sin(data.m_angle)) * 8f; Vector2 vector2_2 = new Vector2(vector2_1.y, -vector2_1.x); Vector2 vector2_3 = VectorUtils.XZ(data.m_position); if (!new Quad2() { a = (vector2_3 - 4f * vector2_1 - 4f * vector2_2), b = (vector2_3 + 4f * vector2_1 - 4f * vector2_2), c = (vector2_3 + 4f * vector2_1 + (float)(rowCount - 4) * vector2_2), d = (vector2_3 - 4f * vector2_1 + (float)(rowCount - 4) * vector2_2) }.Intersect(quad2)) { return(false); } bool flag = false; var m_zoning = IsZoningEnabled(_this); // custom var m_dezoning = IsDezoningEnabled(_this); // custom var blockID = ZoneBlockDetour.FindBlockId(ref data); // modified for (int z = 0; z < rowCount; ++z) { Vector2 vector2_4 = ((float)z - 3.5f) * vector2_2; for (int x = 0; x < columnCount; ++x) // custom { Vector2 vector2_5 = ((float)x - 3.5f) * vector2_1; Vector2 p = vector2_3 + vector2_5 + vector2_4; if (quad2.Intersect(p)) { if (m_zoning) { if ((_this.m_zone == ItemClass.Zone.Unzoned || ZoneBlockDetour.GetZoneDeep(ref data, blockID, x, z) == ItemClass.Zone.Unzoned) && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, _this.m_zone)) { flag = true; } } else if (m_dezoning && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, ItemClass.Zone.Unzoned)) { flag = true; } } } } if (!flag) { return(false); } data.RefreshZoning(blockIndex); return(true); }
private static void ApplyBrush(ZoneTool _this, ushort blockIndex, ref ZoneBlock data, Vector3 position, float brushRadius) { Vector3 vector3_1 = data.m_position - position; if ((double)Mathf.Abs(vector3_1.x) > 46.0 + (double)brushRadius || (double)Mathf.Abs(vector3_1.z) > 46.0 + (double)brushRadius) { return; } int num = (int)((data.m_flags & 65280U) >> 8); int columnCount = ZoneBlockDetour.GetColumnCount(ref data); // modified Vector3 vector3_2 = new Vector3(Mathf.Cos(data.m_angle), 0.0f, Mathf.Sin(data.m_angle)) * 8f; Vector3 vector3_3 = new Vector3(vector3_2.z, 0.0f, -vector3_2.x); bool flag = false; var m_zoning = IsZoningEnabled(_this); // custom var m_dezoning = IsDezoningEnabled(_this); // custom var blockID = ZoneBlockDetour.FindBlockId(ref data); // modified for (int z = 0; z < num; ++z) { Vector3 vector3_4 = ((float)z - 3.5f) * vector3_3; for (int x = 0; x < columnCount; ++x) // modified { Vector3 vector3_5 = ((float)x - 3.5f) * vector3_2; Vector3 vector3_6 = vector3_1 + vector3_5 + vector3_4; if ((double)vector3_6.x * (double)vector3_6.x + (double)vector3_6.z * (double)vector3_6.z <= (double)brushRadius * (double)brushRadius) { if (m_zoning) { if ((_this.m_zone == ItemClass.Zone.Unzoned || ZoneBlockDetour.GetZoneDeep(ref data, blockID, x, z) == ItemClass.Zone.Unzoned) && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, _this.m_zone)) { flag = true; } } else if (m_dezoning && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, ItemClass.Zone.Unzoned)) { flag = true; } } } } if (!flag) { return; } data.RefreshZoning(blockIndex); if (!m_zoning) { return; } UsedZone(_this, _this.m_zone); }
private static void ApplyBrush(ZoneTool z, ushort blockIndex, ref ZoneBlock data, Vector3 position, float brushRadius) { Vector3 a = data.m_position - position; if (Mathf.Abs(a.x) > 46f + brushRadius || Mathf.Abs(a.z) > 46f + brushRadius) { return; } bool m_zoning = (bool)z.GetType().GetField("m_zoning", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(z); bool m_dezoning = (bool)z.GetType().GetField("m_dezoning", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(z); int num = (int)((data.m_flags & 65280u) >> 8); Vector3 a2 = new Vector3(Mathf.Cos(data.m_angle), 0f, Mathf.Sin(data.m_angle)) * 8f; Vector3 a3 = new Vector3(a2.z, 0f, -a2.x); bool flag = false; for (int i = 0; i < num; i++) { Vector3 b = ((float)i - 3.5f) * a3; for (int j = 0; j < 4; j++) { Vector3 b2 = ((float)j - 3.5f) * a2; Vector3 vector = a + b2 + b; float num2 = vector.x * vector.x + vector.z * vector.z; if (num2 <= brushRadius * brushRadius) { if (m_zoning) { if ((z.m_zone == ItemClass.Zone.Unzoned || data.GetZone(j, i) == ItemClass.Zone.Unzoned) && data.SetZone(j, i, z.m_zone)) { flag = true; } } else if (m_dezoning && data.SetZone(j, i, ItemClass.Zone.Unzoned)) { flag = true; } } } } if (!flag) { return; } data.RefreshZoning(blockIndex); if (!m_zoning) { return; } UsedZone(z, z.m_zone); }
private static void ApplyBrush(ZoneTool _this, ushort blockIndex, ref ZoneBlock data, Vector3 position, float brushRadius) { Vector3 vector3_1 = data.m_position - position; if ((double)Mathf.Abs(vector3_1.x) > 46.0 + (double)brushRadius || (double)Mathf.Abs(vector3_1.z) > 46.0 + (double)brushRadius) return; int num = (int)((data.m_flags & 65280U) >> 8); int columnCount = ZoneBlockDetour.GetColumnCount(ref data); // modified Vector3 vector3_2 = new Vector3(Mathf.Cos(data.m_angle), 0.0f, Mathf.Sin(data.m_angle)) * 8f; Vector3 vector3_3 = new Vector3(vector3_2.z, 0.0f, -vector3_2.x); bool flag = false; var m_zoning = IsZoningEnabled(_this); // custom var m_dezoning = IsDezoningEnabled(_this); // custom var blockID = ZoneBlockDetour.FindBlockId(ref data); // modified for (int z = 0; z < num; ++z) { Vector3 vector3_4 = ((float)z - 3.5f) * vector3_3; for (int x = 0; x < columnCount; ++x) // modified { Vector3 vector3_5 = ((float)x - 3.5f) * vector3_2; Vector3 vector3_6 = vector3_1 + vector3_5 + vector3_4; if ((double)vector3_6.x * (double)vector3_6.x + (double)vector3_6.z * (double)vector3_6.z <= (double)brushRadius * (double)brushRadius) { if (m_zoning) { if ((_this.m_zone == ItemClass.Zone.Unzoned || ZoneBlockDetour.GetZoneDeep(ref data, blockID, x, z) == ItemClass.Zone.Unzoned) && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, _this.m_zone)) flag = true; } else if (m_dezoning && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, ItemClass.Zone.Unzoned)) flag = true; } } } if (!flag) return; data.RefreshZoning(blockIndex); if (!m_zoning) return; UsedZone(_this, _this.m_zone); }
private static void ApplyBrush(ZoneTool z,ushort blockIndex, ref ZoneBlock data, Vector3 position, float brushRadius) { Vector3 a = data.m_position - position; if (Mathf.Abs(a.x) > 46f + brushRadius || Mathf.Abs(a.z) > 46f + brushRadius) { return; } bool m_zoning = (bool)z.GetType().GetField("m_zoning", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(z); bool m_dezoning = (bool)z.GetType().GetField("m_dezoning", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(z); int num = (int)((data.m_flags & 65280u) >> 8); Vector3 a2 = new Vector3(Mathf.Cos(data.m_angle), 0f, Mathf.Sin(data.m_angle)) * 8f; Vector3 a3 = new Vector3(a2.z, 0f, -a2.x); bool flag = false; for (int i = 0; i < num; i++) { Vector3 b = ((float)i - 3.5f) * a3; for (int j = 0; j < 4; j++) { Vector3 b2 = ((float)j - 3.5f) * a2; Vector3 vector = a + b2 + b; float num2 = vector.x * vector.x + vector.z * vector.z; if (num2 <= brushRadius * brushRadius) { if (m_zoning) { if ((z.m_zone == ItemClass.Zone.Unzoned || data.GetZone(j, i) == ItemClass.Zone.Unzoned) && data.SetZone(j, i, z.m_zone)) { flag = true; } } else if (m_dezoning && data.SetZone(j, i, ItemClass.Zone.Unzoned)) { flag = true; } } } } if (flag) { data.RefreshZoning(blockIndex); if (m_zoning) { UsedZone(z.m_zone); } } }
private static bool ApplyFillBuffer(ZoneTool _this, Vector3 position, Vector3 direction, float angle, ushort blockIndex, ref ZoneBlock block) { var m_zoning = IsZoningEnabled(_this); // custom var m_dezoning = IsDezoningEnabled(_this); // custom var blockID = ZoneBlockDetour.FindBlockId(ref block); // modified int rowCount = block.RowCount; int columnCount = ZoneBlockDetour.GetColumnCount(ref block); // modified Vector3 vector3_1 = new Vector3(Mathf.Cos(block.m_angle), 0.0f, Mathf.Sin(block.m_angle)) * 8f; Vector3 vector3_2 = new Vector3(vector3_1.z, 0.0f, -vector3_1.x); bool flag1 = false; for (int z = 0; z < rowCount; ++z) { Vector3 vector3_3 = ((float)z - 3.5f) * vector3_2; for (int x = 0; x < columnCount; ++x) // custom { Vector3 vector3_4 = ((float)x - 3.5f) * vector3_1; Vector3 vector3_5 = block.m_position + vector3_4 + vector3_3 - position; float f1 = (float)(((double)vector3_5.x * (double)direction.x + (double)vector3_5.z * (double)direction.z) * 0.125 + 32.0); float f2 = (float)(((double)vector3_5.x * (double)direction.z - (double)vector3_5.z * (double)direction.x) * 0.125 + 32.0); int num1 = Mathf.Clamp(Mathf.RoundToInt(f1), 0, 63); int num2 = Mathf.Clamp(Mathf.RoundToInt(f2), 0, 63); bool flag2 = false; var m_fillBuffer1 = GetFillBuffer(_this); // modified for (int index1 = -1; index1 <= 1 && !flag2; ++index1) { for (int index2 = -1; index2 <= 1 && !flag2; ++index2) { int num3 = num1 + index2; int index3 = num2 + index1; if (num3 >= 0 && num3 < 64 && (index3 >= 0 && index3 < 64) && (((double)f1 - (double)num3) * ((double)f1 - (double)num3) + ((double)f2 - (double)index3) * ((double)f2 - (double)index3) < 9.0 / 16.0 && ((long)m_fillBuffer1[index3] & 1L << num3) != 0L)) { if (m_zoning) { if ((_this.m_zone == ItemClass.Zone.Unzoned || ZoneBlockDetour.GetZoneDeep(ref block, blockID, x, z) == ItemClass.Zone.Unzoned) && ZoneBlockDetour.SetZoneDeep(ref block, blockID, x, z, _this.m_zone)) { flag1 = true; } } else if (m_dezoning && ZoneBlockDetour.SetZoneDeep(ref block, blockID, x, z, ItemClass.Zone.Unzoned)) { flag1 = true; } flag2 = true; } } } } } if (!flag1) { return(false); } block.RefreshZoning(blockIndex); return(true); }
private static bool ApplyFillBuffer(ZoneTool _this, Vector3 position, Vector3 direction, float angle, ushort blockIndex, ref ZoneBlock block) { var m_zoning = IsZoningEnabled(_this); // custom var m_dezoning = IsDezoningEnabled(_this); // custom var blockID = ZoneBlockDetour.FindBlockId(ref block); // modified int rowCount = block.RowCount; int columnCount = ZoneBlockDetour.GetColumnCount(ref block); // modified Vector3 vector3_1 = new Vector3(Mathf.Cos(block.m_angle), 0.0f, Mathf.Sin(block.m_angle)) * 8f; Vector3 vector3_2 = new Vector3(vector3_1.z, 0.0f, -vector3_1.x); bool flag1 = false; for (int z = 0; z < rowCount; ++z) { Vector3 vector3_3 = ((float)z - 3.5f) * vector3_2; for (int x = 0; x < columnCount; ++x) // custom { Vector3 vector3_4 = ((float)x - 3.5f) * vector3_1; Vector3 vector3_5 = block.m_position + vector3_4 + vector3_3 - position; float f1 = (float)(((double)vector3_5.x * (double)direction.x + (double)vector3_5.z * (double)direction.z) * 0.125 + 32.0); float f2 = (float)(((double)vector3_5.x * (double)direction.z - (double)vector3_5.z * (double)direction.x) * 0.125 + 32.0); int num1 = Mathf.Clamp(Mathf.RoundToInt(f1), 0, 63); int num2 = Mathf.Clamp(Mathf.RoundToInt(f2), 0, 63); bool flag2 = false; var m_fillBuffer1 = GetFillBuffer(_this); // modified for (int index1 = -1; index1 <= 1 && !flag2; ++index1) { for (int index2 = -1; index2 <= 1 && !flag2; ++index2) { int num3 = num1 + index2; int index3 = num2 + index1; if (num3 >= 0 && num3 < 64 && (index3 >= 0 && index3 < 64) && (((double)f1 - (double)num3) * ((double)f1 - (double)num3) + ((double)f2 - (double)index3) * ((double)f2 - (double)index3) < 9.0 / 16.0 && ((long)m_fillBuffer1[index3] & 1L << num3) != 0L)) { if (m_zoning) { if ((_this.m_zone == ItemClass.Zone.Unzoned || ZoneBlockDetour.GetZoneDeep(ref block, blockID, x, z) == ItemClass.Zone.Unzoned) && ZoneBlockDetour.SetZoneDeep(ref block, blockID, x, z, _this.m_zone)) flag1 = true; } else if (m_dezoning && ZoneBlockDetour.SetZoneDeep(ref block, blockID, x, z, ItemClass.Zone.Unzoned)) flag1 = true; flag2 = true; } } } } } if (!flag1) return false; block.RefreshZoning(blockIndex); return true; }
private static bool ApplyZoning(ZoneTool _this, ushort blockIndex, ref ZoneBlock data, Quad2 quad2) { int rowCount = data.RowCount; int columnCount = ZoneBlockDetour.GetColumnCount(ref data); // modified Vector2 vector2_1 = new Vector2(Mathf.Cos(data.m_angle), Mathf.Sin(data.m_angle)) * 8f; Vector2 vector2_2 = new Vector2(vector2_1.y, -vector2_1.x); Vector2 vector2_3 = VectorUtils.XZ(data.m_position); if (!new Quad2() { a = (vector2_3 - 4f * vector2_1 - 4f * vector2_2), b = (vector2_3 + 4f * vector2_1 - 4f * vector2_2), c = (vector2_3 + 4f * vector2_1 + (float)(rowCount - 4) * vector2_2), d = (vector2_3 - 4f * vector2_1 + (float)(rowCount - 4) * vector2_2) }.Intersect(quad2)) return false; bool flag = false; var m_zoning = IsZoningEnabled(_this); // custom var m_dezoning = IsDezoningEnabled(_this); // custom var blockID = ZoneBlockDetour.FindBlockId(ref data); // modified for (int z = 0; z < rowCount; ++z) { Vector2 vector2_4 = ((float)z - 3.5f) * vector2_2; for (int x = 0; x < columnCount; ++x) // custom { Vector2 vector2_5 = ((float)x - 3.5f) * vector2_1; Vector2 p = vector2_3 + vector2_5 + vector2_4; if (quad2.Intersect(p)) { if (m_zoning) { if ((_this.m_zone == ItemClass.Zone.Unzoned || ZoneBlockDetour.GetZoneDeep(ref data, blockID, x, z) == ItemClass.Zone.Unzoned) && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, _this.m_zone)) flag = true; } else if (m_dezoning && ZoneBlockDetour.SetZoneDeep(ref data, blockID, x, z, ItemClass.Zone.Unzoned)) flag = true; } } } if (!flag) return false; data.RefreshZoning(blockIndex); return true; }