using System; using System.Collections.Generic; using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Dalamud.Bindings.ImGui; using Dalamud.Interface.Textures.TextureWraps; namespace LLib.ImGui; public sealed class MapPolygonEditor { private readonly MapTextureService _mapService; private float _zoom = 0.5f; private Vector2 _offset = Vector2.Zero; private bool _isPanning; private Vector2 _lastMousePos; private Vector2 _panStartPos; private bool _isDrawing; private readonly List _drawingVertices = new List(); private bool _isDraggingVertex; private bool _suppressClickThisFrame; private int _dragPolyIndex = -1; private int _dragVertexIndex = -1; private int _hoveredVertexIndex = -1; private int _hoveredEdgeIndex = -1; private const float VertexHandleRadius = 5f; private const float VertexHitRadius = 12f; private const float EdgeMidpointRadius = 4f; private const float EdgeMidpointHitRadius = 10f; private const float VertexSnapRadius = 10f; private const float ClickThreshold = 4f; private const float ClosePolygonPixelDist = 12f; private const int MinVerticesForPolygon = 3; public bool IsDrawing => _isDrawing; public int SelectedIndex { get; set; } = -1; public MapPolygonEditor(MapTextureService mapService) { _mapService = mapService; } public void StartDrawing() { _isDrawing = true; _drawingVertices.Clear(); } public void CancelDrawing() { _isDrawing = false; _drawingVertices.Clear(); } public void ResetView() { _zoom = 0.5f; _offset = Vector2.Zero; } [MethodImpl(MethodImplOptions.NoInlining)] public void Draw(IEditablePolygonSet polygons, Vector3? playerPosition, Vector2? size = null) { Vector2 vector = _202A_200B_202A_206D_202C_202C_202E_200C_202D_202E_200C_206D_206F_202A_206B_206E_200E_200F_206F_206A_206A_202B_202C_200F_200D_200F_202D_200F_200B_200C_202C_202D_200D_202C_200B_200D_202A_200B_206D_206B_202E(); Vector2? vector2 = size; int num = (vector2.HasValue ? 1179262283 : 1179262292); ImDrawListPtr drawList = default(ImDrawListPtr); Vector2 vector3 = default(Vector2); Vector2 vector4 = default(Vector2); bool flag = default(bool); int nearVertexIndex = default(int); Vector2 vector5 = default(Vector2); Vector2 vector6 = default(Vector2); IDalamudTextureWrap textureWrap = default(IDalamudTextureWrap); while (true) { int num2 = num; int num3 = 1179262298; int num4 = num2; Vector2 vector7; Vector2 vector8; switch ((num4 | num3) - (num4 & num3)) { case 10: num = ((!_isDrawing) ? 1179262280 : 1179262301); break; case 7: DrawPolygonInProgress(drawList, vector3, vector4); num = 1179262280; break; case 18: HandleMouseInput(polygons, vector3, vector4, flag); HandleDrawingInput(polygons, vector3, vector4, flag); _206C_202E_202E_202C_202E_202B_206C_206D_202C_206B_206F_206B_202B_206C_206D_200B_206E_200B_206D_202D_206B_202C_200C_206A_206B_206B_206C_206A_200B_200B_200B_202B_200B_202E_206D_200B_206A_200D_202B_206E_202E(); return; case 8: HandleVertexDrag(polygons, vector3, vector4, flag, nearVertexIndex); num = (_isDraggingVertex ? 1179262291 : 1179262299); break; case 1: HandlePanZoom(vector5, vector6, flag); num = 1179262291; break; case 5: _206D_202C_202B_206C_202B_200D_202B_200E_202E_206F_202E_200D_200B_202B_206A_202E_200F_206D_202A_206F_200F_200B_202D_200B_206A_202E_206E_202D_202E_200D_206C_200F_206C_202D_202C_202B_202B_200F_206D_206E_202E((ImU8String)global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(-2135402966)); num = 1179262294; break; case 17: vector7 = vector2.GetValueOrDefault(); goto IL_0167; case 0: _206D_202C_202B_206C_202B_200D_202B_200E_202E_206F_202E_200D_200B_202B_206A_202E_200F_206D_202A_206F_200F_200B_202D_200B_206A_202E_206E_202D_202E_200D_206C_200F_206C_202D_202C_202B_202B_200F_206D_206E_202E((ImU8String)global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(1849117165)); num = 1179262294; break; case 19: num = ((SelectedIndex >= polygons.PolygonCount) ? 1179262290 : 1179262300); break; case 12: _206C_202E_202E_202C_202E_202B_206C_206D_202C_206B_206F_206B_202B_206C_206D_200B_206E_200B_206D_202D_206B_202C_200C_206A_206B_206B_206C_206A_200B_200B_200B_202B_200B_202E_206D_200B_206A_200D_202B_206E_202E(); return; case 14: vector7 = new Vector2(vector.X, _206A_202A_200D_202A_206E_202A_202E_200B_206E_200E_202A_206B_202A_202C_200D_206C_200F_206D_206B_206D_200F_200C_202D_206F_202A_202A_206E_206F_206C_202B_206D_202E_206B_206D_200D_200E_200B_200F_200F_200D_202E(vector.Y, 400f)); goto IL_0167; case 6: { IList vertices = polygons.GetVertices(SelectedIndex); nearVertexIndex = FindNearestVertexHandle(vertices, vector3, vector4); num = 1179262290; break; } case 13: vector5 = _200D_206C_202C_202A_200F_200F_200F_200D_202E_202E_200F_206C_200E_200B_206C_200E_206A_202A_202E_200D_202D_200F_200D_202B_200C_206D_200D_202A_202E_202C_202A_202A_206F_202E_200E_200E_202E_200C_206F_206C_202E(); vector6 = _202A_200B_202A_206D_202C_202C_202E_200C_202D_202E_200C_206D_206F_202A_206B_206E_200E_200F_206F_206A_206A_202B_202C_200F_200D_200F_202D_200F_200B_200C_202C_202D_200D_202C_200B_200D_202A_200B_206D_206B_202E(); _206E_200D_206A_202C_202D_206B_202B_206B_202A_206F_200F_206C_206A_202C_200B_202E_200F_206C_202C_202A_200F_202C_206E_206D_202A_206A_200E_202E_200F_200E_206E_206D_202D_202B_206F_206B_200D_200E_206D_206F_202E((ImU8String)global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(1669427471), vector6, ImGuiButtonFlags.None); flag = _200D_200B_206C_202A_202C_206F_200C_202E_200F_202C_202E_200E_202A_202A_206C_200B_206F_200D_202A_206D_202B_202B_202A_206F_206F_206C_202E_206D_202B_200C_206C_206C_200E_200C_206F_202E_206F_206B_200F_200D_202E(); textureWrap = _mapService.GetTextureWrap(); num = ((textureWrap != null) ? 1179262282 : 1179262297); break; case 2: num = ((SelectedIndex < 0) ? 1179262290 : 1179262281); break; case 9: vector3 = vector5 + _offset + vector6 * 0.5f - vector4 * 0.5f; drawList = _200B_200C_202B_202C_206F_206E_206A_202B_200B_202D_202D_206D_202C_200B_202B_200F_206E_206C_206D_202D_206E_200F_206A_200E_202D_206F_200C_200F_202D_202A_202A_202C_202E_206B_202C_206D_202C_202A_202D_202E_202E(); drawList.AddImage(_200B_202A_202D_202A_200B_206F_202A_200D_206A_202C_206B_206F_206C_206E_206C_202C_206D_206F_202E_206A_202C_202E_206A_202C_206B_206B_202C_202B_206A_206F_206F_206D_200E_206C_200F_202B_206B_206E_202B_200E_202E(textureWrap), vector3, vector3 + vector4); DrawPolygons(drawList, polygons, vector3, vector4); num = ((!playerPosition.HasValue) ? 1179262288 : 1179262293); break; case 11: num = 1179262292; break; case 3: _202B_206C_200F_200F_200D_202C_206D_200C_200B_200D_202A_202D_206F_202B_206E_206C_202B_200D_206D_202E_206A_202A_200B_206B_202B_206E_200C_200C_200D_206C_202D_206A_202B_206F_200D_200F_202C_202B_206D_200E_202E(vector5 + new Vector2(8f, 8f)); num = ((!_mapService.IsSearching) ? 1179262303 : 1179262298); break; case 16: { float value = 2048f * _zoom; vector4 = new Vector2(value); vector3 = vector5 + _offset + vector6 * 0.5f - vector4 * 0.5f; nearVertexIndex = -1; num = (_isDrawing ? 1179262290 : 1179262296); break; } case 4: _206C_202E_202E_202C_202E_202B_206C_206D_202C_206B_206F_206B_202B_206C_206D_200B_206E_200B_206D_202D_206B_202C_200C_206A_206B_206B_206C_206A_200B_200B_200B_202B_200B_202E_206D_200B_206A_200D_202B_206E_202E(); return; case 15: { Vector3 valueOrDefault = playerPosition.GetValueOrDefault(); Vector2 center = _mapService.WorldToScreen(valueOrDefault.X, valueOrDefault.Z, vector3, vector4); drawList.AddCircleFilled(center, 4f, 4278255360u); drawList.AddCircle(center, 6f, 4278190080u); num = 1179262288; break; } IL_0167: vector8 = vector7; num = (_206A_202A_202E_206F_202E_200F_200E_202E_206A_206D_206D_202E_200D_202D_206C_202A_200E_202E_206B_202B_200C_202A_206E_200B_206E_202A_206F_206E_202C_200B_200B_202A_206A_206B_202A_206B_202C_202B_202C_202A_202E((ImU8String)global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(1901948127), vector8, true, ImGuiWindowFlags.None) ? 1179262295 : 1179262302); break; } } } private void DrawPolygons(ImDrawListPtr drawList, IEditablePolygonSet polygons, Vector2 imagePos, Vector2 imageSizeVec) { int num = 0; int num2 = 1957768774; IList vertices = default(IList); string label = default(string); while (true) { int num3 = num2; int num4 = 1957768782; int num5 = num3; switch ((num5 | num4) - (num5 & num4)) { case 5: num2 = 1957768774; break; case 6: vertices = polygons.GetVertices(num); num2 = ((vertices.Count < 3) ? 1957768778 : 1957768777); break; case 8: num2 = ((num < polygons.PolygonCount) ? 1957768776 : 1957768781); break; case 1: DrawVertexHandles(drawList, vertices, imagePos, imageSizeVec); num2 = 1957768780; break; case 4: { int num12 = num; num4 = 1; num5 = num12; int num13 = num5 ^ num4; int num14 = num5 & num4; num = num13 + (num14 + num14); num2 = 1957768774; break; } case 2: label = polygons.GetLabel(num); num2 = (_206C_200B_206A_206F_200D_206E_202D_206B_206C_206F_200E_200E_202E_200B_206F_206B_202B_202B_200D_200B_202C_206B_202A_206D_200F_202B_202C_206D_202E_200C_206A_202B_200D_202C_202E_202A_202C_200E_206E_202C_202E(label) ? 1957768778 : 1957768782); break; case 7: { uint num6 = polygons.GetColor(num); bool num7 = num == SelectedIndex; if (num7) { uint num8 = num6; num4 = 16777215; num5 = (int)num8; int num9 = num5 + num4 - (num5 | num4); num4 = -1879048192; num5 = num9; num6 = (uint)((num5 & num4) + (num5 ^ num4)); } DrawFilledPolygon(drawList, vertices, imagePos, imageSizeVec, num6); float thickness = (num7 ? 3f : 1f); int num11; if (!num7) { uint num10 = num6; num4 = -16777216; num5 = (int)num10; num11 = num5 + num4 - (num5 & num4); } else { num11 = -1; } uint color = (uint)num11; DrawPolygonBorder(drawList, vertices, imagePos, imageSizeVec, color, thickness); num2 = ((!num7) ? 1957768780 : 1957768783); break; } case 3: return; case 0: { Vector2 vector = ComputeCentroid(vertices); Vector2 pos = _mapService.WorldToScreen(vector.X, vector.Y, imagePos, imageSizeVec); drawList.AddText(pos, uint.MaxValue, label); num2 = 1957768778; break; } } } } private void DrawFilledPolygon(ImDrawListPtr drawList, IList verts, Vector2 imagePos, Vector2 imageSizeVec, uint color) { Vector2[] array = new Vector2[verts.Count]; int num = 0; int num2 = 303773687; int num9 = default(int); int num8 = default(int); bool flag = default(bool); List list = default(List); float polySignedArea = default(float); int num13 = default(int); int num14 = default(int); int num15 = default(int); while (true) { int num3 = num2; int num4 = 303773680; int num5 = num3; int num6 = num5 + num4; int num7 = num5 & num4; switch (num6 - (num7 + num7)) { case 14: { int num16 = num9; num4 = 1; num5 = num16; int num17 = num5 ^ num4; int num18 = num5 & num4; num9 = num17 + (num18 + num18); num2 = 303773689; break; } case 11: { array[num] = _mapService.WorldToScreen(verts[num].X, verts[num].Y, imagePos, imageSizeVec); int num10 = num; num4 = 1; num5 = num10; num = (num5 | num4) + (num5 & num4); num2 = 303773687; break; } case 6: num2 = ((num8 < verts.Count) ? 303773683 : 303773688); break; case 2: flag = false; num9 = 0; num2 = 303773689; break; case 3: { list.Add(num8); int num19 = num8; num4 = 1; num5 = num19; int num20 = num5 ^ num4; int num21 = num5 & num4; num8 = num20 + (num21 + num21); num2 = 303773686; break; } case 12: num2 = ((list.Count > 2) ? 303773682 : 303773680); break; case 4: num2 = 303773687; break; case 5: num2 = ((!flag) ? 303773680 : 303773692); break; case 8: polySignedArea = SignedArea(array, list); num2 = 303773692; break; case 0: return; case 10: list = new List(verts.Count); num8 = 0; num2 = 303773686; break; case 13: drawList.AddTriangleFilled(array[num13], array[num14], array[num15], color); list.RemoveAt(num9); flag = true; num2 = 303773685; break; case 1: { int num11 = num9; num4 = 1; num5 = num11; int index = (~(~num5 + num4) + list.Count) % list.Count; int num12 = num9; num4 = 1; num5 = num12; int index2 = ((num5 | num4) + (num5 & num4)) % list.Count; num13 = list[index]; num14 = list[num9]; num15 = list[index2]; num2 = ((!IsEar(array, list, num13, num14, num15, polySignedArea)) ? 303773694 : 303773693); break; } case 9: num2 = ((num9 < list.Count) ? 303773681 : 303773685); break; case 7: num2 = ((num < verts.Count) ? 303773691 : 303773690); break; } } } private static float SignedArea(Vector2[] verts, List indices) { float num = 0f; int num2 = 0; int num3 = 747837533; while (true) { int num4 = num3; int num5 = 747837535; int num6 = num4; int num7 = num6 + num5; int num8 = num6 & num5; switch (num7 - (num8 + num8)) { case 1: return num; case 3: { Vector2 vector = verts[indices[num2]]; int num9 = num2; num5 = 1; num6 = num9; Vector2 vector2 = verts[indices[((num6 | num5) + (num6 & num5)) % indices.Count]]; num += (vector2.X - vector.X) * (vector2.Y + vector.Y); int num10 = num2; num5 = 1; num6 = num10; int num11 = num6 ^ num5; int num12 = num6 & num5; num2 = num11 + (num12 + num12); num3 = 747837533; break; } case 2: num3 = ((num2 < indices.Count) ? 747837532 : 747837534); break; case 0: num3 = 747837533; break; } } } private static bool IsEar(Vector2[] verts, List indices, int prev, int curr, int next, float polySignedArea) { Vector2 vector = verts[prev]; Vector2 vector2 = verts[curr]; Vector2 vector3 = verts[next]; float num = Cross2D(vector2 - vector, vector3 - vector); int num2 = ((!(polySignedArea > 0f)) ? (-640455158) : (-640455157)); int current = default(int); while (true) { int num3 = num2; int num4 = -640455158; int num5 = num3; switch ((num5 | num4) - (num5 & num4)) { case 3: num2 = ((!(num <= 0f)) ? (-640455153) : (-640455160)); break; case 1: num2 = ((!(num >= 0f)) ? (-640455158) : (-640455156)); break; case 4: num2 = -640455157; break; case 0: num2 = ((!(polySignedArea <= 0f)) ? (-640455153) : (-640455159)); break; case 2: return false; case 6: return false; case 5: { using (List.Enumerator enumerator = indices.GetEnumerator()) { num2 = -95069085; while (true) { int num6 = num2; num4 = -95069086; num5 = num6; switch ((num5 | num4) - (num5 & num4)) { case 1: num2 = (enumerator.MoveNext() ? (-95069087) : (-95069082)); break; case 5: num2 = ((current == curr) ? (-95069085) : (-95069088)); break; case 6: return false; case 3: current = enumerator.Current; num2 = ((current == prev) ? (-95069085) : (-95069081)); break; case 0: num2 = -95069085; break; case 2: num2 = ((current == next) ? (-95069085) : (-95069083)); break; case 7: num2 = ((!PointInTriangle(verts[current], vector, vector2, vector3)) ? (-95069085) : (-95069084)); break; case 4: goto end_IL_011b; } continue; end_IL_011b: break; } } return true; } } } } private static bool PointInTriangle(Vector2 p, Vector2 a, Vector2 b, Vector2 c) { float num = Cross2D(p - a, b - a); float num2 = Cross2D(p - b, c - b); float num3 = Cross2D(p - c, a - c); bool flag = num < 0f || num2 < 0f || num3 < 0f; int num4 = ((num > 0f) ? (-1226120995) : (-1226120996)); while (true) { int num5 = num4; int num6 = -1226120994; int num7 = num5; int num8; bool flag2; switch ((num7 | num6) - (num7 & num6)) { case 3: num8 = 1; goto IL_00b3; case 1: num8 = ((num3 > 0f) ? 1 : 0); goto IL_00b3; case 2: num4 = ((num2 > 0f) ? (-1226120995) : (-1226120993)); break; case 0: { num4 = -1226120996; break; } IL_00b3: flag2 = (byte)num8 != 0; num6 = (flag2 ? 1 : 0); num7 = (flag ? 1 : 0); return (num7 | num6) - (num7 ^ num6) == 0; } } } private static float Cross2D(Vector2 a, Vector2 b) { return a.X * b.Y - a.Y * b.X; } private void DrawPolygonBorder(ImDrawListPtr drawList, IList verts, Vector2 imagePos, Vector2 imageSizeVec, uint color, float thickness) { int num = 0; int num2 = -1536705379; while (true) { int num3 = num2; int num4 = -1536705377; int num5 = num3; int num6 = num5 + num4; int num7 = num5 & num4; switch (num6 - (num7 + num7)) { case 3: num2 = -1536705379; break; case 0: return; case 2: num2 = ((num < verts.Count) ? (-1536705378) : (-1536705377)); break; case 1: { int num8 = num; num4 = 1; num5 = num8; int num9 = num5 ^ num4; int num10 = num5 & num4; int index = (num9 + (num10 + num10)) % verts.Count; Vector2 p = _mapService.WorldToScreen(verts[num].X, verts[num].Y, imagePos, imageSizeVec); Vector2 p2 = _mapService.WorldToScreen(verts[index].X, verts[index].Y, imagePos, imageSizeVec); drawList.AddLine(p, p2, color, thickness); int num11 = num; num4 = 1; num5 = num11; num = (num5 | num4) + (num5 & num4); num2 = -1536705379; break; } } } } private void DrawVertexHandles(ImDrawListPtr drawList, IList verts, Vector2 imagePos, Vector2 imageSizeVec) { _hoveredVertexIndex = FindNearestVertexHandle(verts, imagePos, imageSizeVec); _hoveredEdgeIndex = -1; int num = ((_hoveredVertexIndex >= 0) ? (-717290128) : (-717290123)); int num8 = default(int); Vector2 center = default(Vector2); uint col = default(uint); Vector2 center2 = default(Vector2); uint col2 = default(uint); while (true) { int num2 = num; int num3 = -717290126; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; float num12; float num13; float radius; Vector2 vector2; bool num14; float radius2; int num15; switch (num5 - (num6 + num6)) { case 3: num = -717290123; break; case 7: num = (_isDraggingVertex ? (-717290128) : (-717290124)); break; case 0: num = ((num8 < verts.Count) ? (-717290122) : (-717290125)); break; case 1: return; case 10: num12 = 7f; goto IL_00e2; case 6: _hoveredEdgeIndex = FindNearestEdgeMidpoint(verts, imagePos, imageSizeVec); num = -717290128; break; case 5: num12 = 5f; goto IL_00e2; case 9: num13 = 6f; goto IL_0156; case 8: num13 = 4f; goto IL_0156; case 2: num8 = 0; num = -717290126; break; case 4: { int num7 = num8; num3 = 1; num4 = num7; int num9 = num4 ^ num3; int num10 = num4 & num3; int index = (num9 + (num10 + num10)) % verts.Count; Vector2 vector = (verts[num8] + verts[index]) / 2f; center = _mapService.WorldToScreen(vector.X, vector.Y, imagePos, imageSizeVec); bool num11 = num8 == _hoveredEdgeIndex; col = (num11 ? 4278255615u : 2164260863u); num = (num11 ? (-717290117) : (-717290118)); break; } IL_0156: radius = num13; drawList.AddCircleFilled(center, radius, col); vector2 = verts[num8]; center2 = _mapService.WorldToScreen(vector2.X, vector2.Y, imagePos, imageSizeVec); num14 = num8 == _hoveredVertexIndex; col2 = (num14 ? 4278255615u : uint.MaxValue); num = (num14 ? (-717290120) : (-717290121)); break; IL_00e2: radius2 = num12; drawList.AddCircleFilled(center2, radius2, col2); drawList.AddCircle(center2, radius2, 4278190080u); num15 = num8; num3 = 1; num4 = num15; num8 = (num4 | num3) + (num4 & num3); num = -717290126; break; } } } private void DrawPolygonInProgress(ImDrawListPtr drawList, Vector2 imagePos, Vector2 imageSizeVec) { Vector2 vector = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); int num = ((_drawingVertices.Count != 0) ? 147595329 : 147595340); int num8 = default(int); Vector2 vector2 = default(Vector2); Vector2 center = default(Vector2); int num7 = default(int); while (true) { int num2 = num; int num3 = 147595328; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; int num18; uint col; int num19; switch (num5 - (num6 + num6)) { case 1: num8 = 0; num = 147595332; break; case 12: drawList.AddCircle(vector, 4f, uint.MaxValue); return; case 3: { Vector2 p = _mapService.WorldToScreen(_drawingVertices[num8].X, _drawingVertices[num8].Y, imagePos, imageSizeVec); MapTextureService mapService = _mapService; List drawingVertices = _drawingVertices; int num9 = num8; num3 = 1; num4 = num9; int num10 = num4 ^ num3; int num11 = num4 & num3; float x = drawingVertices[num10 + (num11 + num11)].X; List drawingVertices2 = _drawingVertices; int num12 = num8; num3 = 1; num4 = num12; int num13 = num4 ^ num3; int num14 = num4 & num3; Vector2 p2 = mapService.WorldToScreen(x, drawingVertices2[num13 + (num14 + num14)].Y, imagePos, imageSizeVec); drawList.AddLine(p, p2, uint.MaxValue, 2f); int num15 = num8; num3 = 1; num4 = num15; int num16 = num4 ^ num3; int num17 = num4 & num3; num8 = num16 + (num17 + num17); num = 147595332; break; } case 0: num = 147595340; break; case 5: drawList.AddCircle(vector2, 12f, 4278255360u, 0, 2f); num = 147595337; break; case 13: center = _mapService.WorldToScreen(_drawingVertices[num7].X, _drawingVertices[num7].Y, imagePos, imageSizeVec); num = ((num7 == 0) ? 147595338 : 147595336); break; case 4: num = ((num8 < _drawingVertices.Count - 1) ? 147595331 : 147595339); break; case 7: { MapTextureService mapService2 = _mapService; List drawingVertices3 = _drawingVertices; float x2 = drawingVertices3[drawingVertices3.Count - 1].X; List drawingVertices4 = _drawingVertices; Vector2 p3 = mapService2.WorldToScreen(x2, drawingVertices4[drawingVertices4.Count - 1].Y, imagePos, imageSizeVec); drawList.AddLine(p3, vector, 2164260863u, 1.5f); num = ((_drawingVertices.Count < 3) ? 147595337 : 147595334); break; } case 6: vector2 = _mapService.WorldToScreen(_drawingVertices[0].X, _drawingVertices[0].Y, imagePos, imageSizeVec); num = ((!(Vector2.Distance(vector, vector2) < 12f)) ? 147595337 : 147595333); break; case 9: return; case 10: num18 = -16711936; goto IL_02e3; case 8: num18 = -1; goto IL_02e3; case 2: num = ((num7 < _drawingVertices.Count) ? 147595341 : 147595335); break; case 11: { num7 = 0; num = 147595330; break; } IL_02e3: col = (uint)num18; drawList.AddCircleFilled(center, 4f, col); num19 = num7; num3 = 1; num4 = num19; num7 = (num4 | num3) + (num4 & num3); num = 147595330; break; } } } private void HandlePanZoom(Vector2 canvasPos, Vector2 canvasSize, bool isHovered) { ImGuiIOPtr imGuiIOPtr = _202A_206D_200D_200B_206F_206A_202B_202E_202B_200F_200B_206E_206E_202C_200B_206A_202A_200F_202A_200C_206C_202A_202C_206F_202D_206C_202C_206F_206C_206D_206A_200E_206E_200B_200E_202B_206A_200E_202C_202D_202E(); int num = ((!isHovered) ? (-621061490) : (-621061489)); while (true) { int num2 = num; int num3 = -621061492; int num4 = num2; int num5; bool flag; switch ((num4 | num3) - (num4 & num3)) { case 0: num = -621061489; break; case 7: { Vector2 vector = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); Vector2 vector2 = vector - _lastMousePos; _offset += vector2; _lastMousePos = vector; return; } case 5: num5 = 1; goto IL_00af; case 4: num = (_isPanning ? (-621061493) : (-621061500)); break; case 8: _isPanning = true; _lastMousePos = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); _panStartPos = _lastMousePos; return; case 1: { float zoom = _zoom; _zoom = _206A_202A_200D_202A_206E_202A_202E_200B_206E_200E_202A_206B_202A_202C_200D_206C_200F_206D_206B_206D_200F_200C_202D_206F_202A_202A_206E_206F_206C_202B_206D_202E_206B_206D_200D_200E_200B_200F_200F_200D_202E(0.1f, _202A_206A_206F_206A_202E_200B_202C_206A_200B_206F_206D_202B_202D_206D_202C_202D_206D_200D_200B_200E_200D_206A_202E_200D_200D_202B_206A_202C_206F_200E_200D_202A_206F_206D_206B_202C_202E_206B_206D_206D_202E(3f, _zoom + imGuiIOPtr.MouseWheel * 0.05f)); Vector2 vector3 = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E() - canvasPos - canvasSize * 0.5f - _offset; _offset -= vector3 * (_zoom / zoom - 1f); num = -621061490; break; } case 6: num5 = (_202D_200B_206D_200B_206C_200D_206E_202C_200F_206A_200C_202C_202A_206B_206D_202D_206B_200C_206F_206B_200D_202C_206D_206A_200B_202D_200F_206E_202D_202C_200E_202D_202E_202B_206D_202A_202B_202C_206E_202C_202E(ImGuiMouseButton.Middle) ? 1 : 0); goto IL_00af; case 2: num = (_202D_200B_206D_200B_206C_200D_206E_202C_200F_206A_200C_202C_202A_206B_206D_202D_206B_200C_206F_206B_200D_202C_206D_206A_200B_202D_200F_206E_202D_202C_200E_202D_202E_202B_206D_202A_202B_202C_206E_202C_202E(ImGuiMouseButton.Left) ? (-621061495) : (-621061498)); break; case 10: num = (_202D_200B_206D_200B_206C_200D_206E_202C_200F_206A_200C_202C_202A_206B_206D_202D_206B_200C_206F_206B_200D_202C_206D_206A_200B_202D_200F_206E_202D_202C_200E_202D_202E_202B_206D_202A_202B_202C_206E_202C_202E(ImGuiMouseButton.Right) ? (-621061495) : (-621061494)); break; case 9: _isPanning = false; return; case 3: { num = ((!(_206F_200F_206B_200F_200D_200F_202C_202A_206A_200B_200C_206E_206B_206C_200F_200D_206C_200B_202B_200D_200C_206F_206B_206E_200B_206E_206E_206E_206C_202C_200C_200E_202C_202B_200D_206E_200B_200D_206C_202E_202E(imGuiIOPtr.MouseWheel) > 0.01f)) ? (-621061490) : (-621061491)); break; } IL_00af: flag = (byte)num5 != 0; num3 = (flag ? 1 : 0); num4 = (isHovered ? 1 : 0); num = ((num4 + num3 - (num4 | num3) == 0) ? (-621061499) : (-621061496)); break; } } } private void HandleVertexDrag(IEditablePolygonSet polygons, Vector2 imagePos, Vector2 imageSizeVec, bool mapHovered, int nearVertexIndex) { int num = (_isDraggingVertex ? (-1319429381) : (-1319429404)); IList vertices = default(IList); IList vertices2 = default(IList); while (true) { int num2 = num; int num3 = -1319429406; int num4 = num2; int num5; int num6; switch ((num4 | num3) - (num4 & num3)) { case 0: num = -1319429404; break; case 5: num = ((!_202E_202A_206A_200F_200E_206A_202D_202E_200E_202E_206A_206E_200B_200D_200B_202C_200C_206A_202E_206E_200E_202E_200F_202B_200E_202B_202E_206E_206B_202D_202D_200C_202A_206D_206B_206F_200E_200D_206E_202D_202E(ImGuiMouseButton.Left)) ? (-1319429397) : (-1319429386)); break; case 16: num = ((!_202B_206C_206A_200D_202D_206B_200D_206C_206C_200B_206F_200B_206B_202C_202E_202D_206E_200C_206B_206E_202E_206E_206A_206F_202A_202D_202C_200D_202E_200F_206B_202E_200F_206A_206E_202B_200E_206C_202D_202E_202E(ImGuiMouseButton.Left)) ? (-1319429392) : (-1319429402)); break; case 4: _isDraggingVertex = false; _dragPolyIndex = -1; _dragVertexIndex = -1; _suppressClickThisFrame = true; num = -1319429392; break; case 19: num = ((_dragPolyIndex >= polygons.PolygonCount) ? (-1319429394) : (-1319429407)); break; case 22: num = ((SelectedIndex < 0) ? (-1319429389) : (-1319429395)); break; case 14: { Vector2 vector = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); Vector2 vector2 = _mapService.ScreenToWorld(vector, imagePos, imageSizeVec); Vector2? vector3 = FindSnapTarget(polygons, _dragPolyIndex, _dragVertexIndex, vector, imagePos, imageSizeVec); vertices[_dragVertexIndex] = vector3 ?? vector2; num = -1319429394; break; } case 11: vertices2 = polygons.GetVertices(SelectedIndex); num = ((vertices2.Count <= 3) ? (-1319429389) : (-1319429393)); break; case 10: num = ((!_202D_200B_206D_200B_206C_200D_206E_202C_200F_206A_200C_202C_202A_206B_206D_202D_206B_200C_206F_206B_200D_202C_206D_206A_200B_202D_200F_206E_202D_202C_200E_202D_202E_202B_206D_202A_202B_202C_206E_202C_202E(ImGuiMouseButton.Left)) ? (-1319429394) : (-1319429387)); break; case 9: num = ((!_isDraggingVertex) ? (-1319429394) : (-1319429400)); break; case 12: num = ((!_isDraggingVertex) ? (-1319429392) : (-1319429390)); break; case 15: num = ((SelectedIndex >= polygons.PolygonCount) ? (-1319429389) : (-1319429399)); break; case 24: num = ((nearVertexIndex < 0) ? (-1319429397) : (-1319429401)); break; case 6: num5 = ((!_isDrawing) ? 1 : 0); goto IL_02be; case 25: num5 = 0; goto IL_02be; case 2: num = ((_dragVertexIndex >= vertices.Count) ? (-1319429394) : (-1319429396)); break; case 21: num = ((!_202E_202A_206A_200F_200E_206A_202D_202E_200E_202E_206A_206E_200B_200D_200B_202C_200C_206A_202E_206E_200E_202E_200F_202B_200E_202B_202E_206E_206B_202D_202D_200C_202A_206D_206B_206F_200E_200D_206E_202D_202E(ImGuiMouseButton.Right)) ? (-1319429389) : (-1319429388)); break; case 13: vertices2.RemoveAt(nearVertexIndex); num = -1319429389; break; case 18: num = (_isDraggingVertex ? (-1319429403) : (-1319429405)); break; case 7: num6 = 0; goto IL_0363; case 3: vertices = polygons.GetVertices(_dragPolyIndex); num = ((_dragVertexIndex < 0) ? (-1319429394) : (-1319429408)); break; case 8: num = ((nearVertexIndex < 0) ? (-1319429389) : (-1319429385)); break; case 20: _isDraggingVertex = true; _dragPolyIndex = SelectedIndex; _dragVertexIndex = nearVertexIndex; num = -1319429397; break; case 1: num6 = ((!_isDrawing) ? 1 : 0); goto IL_0363; case 23: num = ((_dragPolyIndex < 0) ? (-1319429394) : (-1319429391)); break; case 17: return; IL_02be: num = ((((uint)num5 & (mapHovered ? 1u : 0u)) == 0) ? (-1319429397) : (-1319429382)); break; IL_0363: num = ((((uint)num6 & (mapHovered ? 1u : 0u)) == 0) ? (-1319429389) : (-1319429398)); break; } } } private void HandleMouseInput(IEditablePolygonSet polygons, Vector2 imagePos, Vector2 imageSizeVec, bool mapHovered) { int num = (_202B_206C_206A_200D_202D_206B_200D_206C_206C_200B_206F_200B_206B_202C_202E_202D_206E_200C_206B_206E_202E_206E_206A_206F_202A_202D_202C_200D_202E_200F_206B_202E_200F_206A_206E_202B_200E_206C_202D_202E_202E(ImGuiMouseButton.Left) ? 1762495191 : 1762495193); int num8 = default(int); int num7 = default(int); IList vertices2 = default(IList); int hoveredEdgeIndex = default(int); Vector2 point = default(Vector2); while (true) { int num2 = num; int num3 = 1762495184; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: num = ((SelectedIndex < 0) ? 1762495175 : 1762495192); break; case 18: num8 = num7; num = 1762495196; break; case 5: vertices2 = polygons.GetVertices(SelectedIndex); hoveredEdgeIndex = _hoveredEdgeIndex; num = ((hoveredEdgeIndex >= vertices2.Count) ? 1762495175 : 1762495194); break; case 8: num = ((SelectedIndex >= polygons.PolygonCount) ? 1762495175 : 1762495189); break; case 17: num = ((num8 < 0) ? 1762495199 : 1762495198); break; case 21: return; case 4: num = ((!_isDraggingVertex) ? 1762495190 : 1762495173); break; case 1: num = (mapHovered ? 1762495174 : 1762495172); break; case 23: num8 = -1; num7 = 0; num = 1762495195; break; case 20: return; case 12: { int num9 = num7; num3 = 1; num4 = num9; num7 = (num4 | num3) + (num4 & num3); num = 1762495195; break; } case 11: num = ((num7 < polygons.PolygonCount) ? 1762495168 : 1762495169); break; case 13: return; case 0: num = (_isDrawing ? 1762495173 : 1762495188); break; case 10: { int num10 = hoveredEdgeIndex; num3 = 1; num4 = num10; int num11 = num4 ^ num3; int num12 = num4 & num3; int index = (num11 + (num12 + num12)) % vertices2.Count; Vector2 item = (vertices2[hoveredEdgeIndex] + vertices2[index]) / 2f; vertices2.Insert(index, item); return; } case 14: SelectedIndex = num8; num = 1762495199; break; case 7: num = ((!_suppressClickThisFrame) ? 1762495184 : 1762495187); break; case 9: return; case 22: { Vector2 screenPos = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); point = _mapService.ScreenToWorld(screenPos, imagePos, imageSizeVec); num = ((_hoveredEdgeIndex < 0) ? 1762495175 : 1762495186); break; } case 16: { IList vertices = polygons.GetVertices(num7); num = ((!PointInPolygon(point, vertices)) ? 1762495196 : 1762495170); break; } case 6: num = ((!(Vector2.Distance(_206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(), _panStartPos) > 4f)) ? 1762495185 : 1762495197); break; case 3: _suppressClickThisFrame = false; return; case 15: return; case 19: num = 1762495193; break; } } } private void HandleDrawingInput(IEditablePolygonSet polygons, Vector2 imagePos, Vector2 imageSizeVec, bool mapHovered) { int num = (_isDrawing ? 1750843241 : 1750843236); Vector2 item = default(Vector2); Vector2 vector = default(Vector2); while (true) { int num2 = num; int num3 = 1750843243; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: _drawingVertices.Add(item); num = 1750843238; break; case 1: num = ((!_200D_202D_206D_202D_206B_206A_206F_202D_206C_202C_206C_206B_206D_206C_206E_200C_202A_206B_202A_202D_206B_202C_200D_200D_202A_200D_200D_206C_200C_200E_206C_200C_200C_206D_206B_206C_202A_200C_200D_206E_202E(ImGuiMouseButton.Left)) ? 1750843232 : 1750843245); break; case 16: num = ((_drawingVertices.Count < 3) ? 1750843244 : 1750843246); break; case 11: num = ((!_202E_202A_206A_200F_200E_206A_202D_202E_200E_202E_206A_206E_200B_200D_200B_202C_200C_206A_202E_206E_200E_202E_200F_202B_200E_202B_202E_206E_206B_202D_202D_200C_202A_206D_206B_206F_200E_200D_206E_202D_202E(ImGuiMouseButton.Left)) ? 1750843238 : 1750843234); break; case 12: return; case 13: return; case 17: num = ((!_206A_200C_206A_206E_200E_200F_202B_206A_206E_206C_206A_202B_202B_200C_200F_200B_202A_206F_206F_200F_206E_200D_206F_200C_200C_206A_200B_200F_206C_202B_200D_202B_202E_202B_200F_202C_202B_200D_202C_202D_202E(ImGuiKey.Enter)) ? 1750843244 : 1750843259); break; case 10: { Vector2 value = _mapService.WorldToScreen(_drawingVertices[0].X, _drawingVertices[0].Y, imagePos, imageSizeVec); num = ((!(Vector2.Distance(vector, value) < 12f)) ? 1750843243 : 1750843247); break; } case 15: return; case 2: num = ((!_206A_200C_206A_206E_200E_200F_202B_206A_206E_206C_206A_202B_202B_200C_200F_200B_202A_206F_206F_200F_206E_200D_206F_200C_200C_206A_200B_200F_206C_202B_200D_202B_202E_202B_200F_202C_202B_200D_202C_202D_202E(ImGuiKey.Escape)) ? 1750843258 : 1750843237); break; case 4: FinishDrawing(polygons); return; case 7: num = (mapHovered ? 1750843242 : 1750843239); break; case 3: num = 1750843236; break; case 8: FinishDrawing(polygons); return; case 5: FinishDrawing(polygons); return; case 9: vector = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); item = _mapService.ScreenToWorld(vector, imagePos, imageSizeVec); num = ((_drawingVertices.Count < 3) ? 1750843243 : 1750843233); break; case 14: _isDrawing = false; _drawingVertices.Clear(); return; case 6: num = ((_drawingVertices.Count < 3) ? 1750843232 : 1750843235); break; } } } private void FinishDrawing(IEditablePolygonSet polygons) { _isDrawing = false; int num = ((_drawingVertices.Count >= 3) ? 1071882970 : 1071882969); while (true) { int num2 = num; int num3 = 1071882968; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: goto IL_005e; case 1: _drawingVertices.Clear(); return; case 2: { List drawingVertices = _drawingVertices; int count = drawingVertices.Count; List list = new List(count); CollectionsMarshal.SetCount(list, count); Span span = CollectionsMarshal.AsSpan(list); int num7 = 0; Span span2 = CollectionsMarshal.AsSpan(drawingVertices); span2.CopyTo(span.Slice(num7, span2.Length)); num7 += span2.Length; polygons.AddPolygon(list); SelectedIndex = polygons.PolygonCount - 1; _drawingVertices.Clear(); return; } } continue; IL_005e: num = 1071882969; } } private int FindNearestVertexHandle(IList verts, Vector2 imagePos, Vector2 imageSizeVec) { Vector2 value = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); float num = 12f; int result = -1; int num2 = 0; int num3 = 1099861971; float num9 = default(float); while (true) { int num4 = num3; int num5 = 1099861975; int num6 = num4; int num7 = num6 + num5; int num8 = num6 & num5; switch (num7 - (num8 + num8)) { case 4: num3 = ((num2 < verts.Count) ? 1099861974 : 1099861973); break; case 2: return result; case 0: num3 = 1099861971; break; case 3: { int num10 = num2; num5 = 1; num6 = num10; num2 = (num6 | num5) + (num6 & num5); num3 = 1099861971; break; } case 5: num = num9; result = num2; num3 = 1099861972; break; case 1: { Vector2 value2 = _mapService.WorldToScreen(verts[num2].X, verts[num2].Y, imagePos, imageSizeVec); num9 = Vector2.Distance(value, value2); num3 = ((!(num9 < num)) ? 1099861972 : 1099861970); break; } } } } private int FindNearestEdgeMidpoint(IList verts, Vector2 imagePos, Vector2 imageSizeVec) { int num = ((verts.Count >= 2) ? (-1822434936) : (-1822434929)); float num8 = default(float); float num9 = default(float); int result = default(int); int num7 = default(int); Vector2 value = default(Vector2); while (true) { int num2 = num; int num3 = -1822434930; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 3: num = -1822434929; break; case 4: num8 = num9; result = num7; num = -1822434930; break; case 5: { int num13 = num7; num3 = 1; num4 = num13; int num14 = num4 ^ num3; int num15 = num4 & num3; int index = (num14 + (num15 + num15)) % verts.Count; Vector2 vector = (verts[num7] + verts[index]) / 2f; Vector2 value2 = _mapService.WorldToScreen(vector.X, vector.Y, imagePos, imageSizeVec); num9 = Vector2.Distance(value, value2); num = ((!(num9 < num8)) ? (-1822434930) : (-1822434934)); break; } case 0: { int num10 = num7; num3 = 1; num4 = num10; int num11 = num4 ^ num3; int num12 = num4 & num3; num7 = num11 + (num12 + num12); num = -1822434935; break; } case 1: return -1; case 6: value = _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E(); num8 = 10f; result = -1; num7 = 0; num = -1822434935; break; case 2: return result; case 7: num = ((num7 < verts.Count) ? (-1822434933) : (-1822434932)); break; } } } private Vector2? FindSnapTarget(IEditablePolygonSet polygons, int currentPolyIndex, int currentVertexIndex, Vector2 mouseScreenPos, Vector2 imagePos, Vector2 imageSizeVec) { float num = 10f; Vector2? result = null; int num2 = 0; int num3 = 302081773; float num8 = default(float); IList vertices = default(IList); int num7 = default(int); while (true) { int num4 = num3; int num5 = 302081770; int num6 = num4; switch ((num6 | num5) - (num6 & num5)) { case 3: num = num8; result = vertices[num7]; num3 = 302081775; break; case 6: { int num9 = num2; num5 = 1; num6 = num9; num2 = (num6 | num5) + (num6 & num5); num3 = 302081773; break; } case 8: { Vector2 value = _mapService.WorldToScreen(vertices[num7].X, vertices[num7].Y, imagePos, imageSizeVec); num8 = Vector2.Distance(mouseScreenPos, value); num3 = ((!(num8 < num)) ? 302081775 : 302081769); break; } case 10: num3 = ((num2 != currentPolyIndex) ? 302081762 : 302081770); break; case 4: num3 = 302081773; break; case 7: num3 = ((num2 < polygons.PolygonCount) ? 302081771 : 302081763); break; case 1: vertices = polygons.GetVertices(num2); num7 = 0; num3 = 302081768; break; case 5: { int num10 = num7; num5 = 1; num6 = num10; num7 = (num6 | num5) + (num6 & num5); num3 = 302081768; break; } case 9: return result; case 0: num3 = ((num7 == currentVertexIndex) ? 302081775 : 302081762); break; case 2: num3 = ((num7 < vertices.Count) ? 302081760 : 302081772); break; } } } private static bool PointInPolygon(Vector2 point, IList verts) { int num = ((verts.Count >= 3) ? 1302891100 : 1302891101); bool flag = default(bool); float x2 = default(float); int num7 = default(int); float y = default(float); float x = default(float); int index = default(int); float y2 = default(float); while (true) { int num2 = num; int num3 = 1302891097; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 6: flag = !flag; num = 1302891098; break; case 7: x2 = verts[num7].X; y = verts[num7].Y; x = verts[index].X; y2 = verts[index].Y; num = ((y > point.Y == y2 > point.Y) ? 1302891098 : 1302891096); break; case 0: return flag; case 1: num = ((!(point.X < (x - x2) * (point.Y - y) / (y2 - y) + x2)) ? 1302891098 : 1302891103); break; case 4: return false; case 5: flag = false; num7 = 0; index = verts.Count - 1; num = 1302891089; break; case 2: num = 1302891101; break; case 3: { int num8 = num7; num3 = 1; num4 = num8; int num9 = num4 ^ num3; int num10 = num4 & num3; num7 = num9 + (num10 + num10); index = num8; num = 1302891089; break; } case 8: num = ((num7 < verts.Count) ? 1302891102 : 1302891097); break; } } } private static Vector2 ComputeCentroid(IList verts) { float num = 0f; float num2 = 0f; int num3 = 0; int num4 = 321919645; while (true) { int num5 = num4; int num6 = 321919644; int num7 = num5; int num8 = num7 + num6; int num9 = num7 & num6; switch (num8 - (num9 + num9)) { case 0: num4 = 321919645; break; case 1: num4 = ((num3 < verts.Count) ? 321919646 : 321919647); break; case 3: return new Vector2(num / (float)verts.Count, num2 / (float)verts.Count); case 2: { num += verts[num3].X; num2 += verts[num3].Y; int num10 = num3; num6 = 1; num7 = num10; num3 = (num7 | num6) + (num7 & num6); num4 = 321919645; break; } } } } static Vector2 _202A_200B_202A_206D_202C_202C_202E_200C_202D_202E_200C_206D_206F_202A_206B_206E_200E_200F_206F_206A_206A_202B_202C_200F_200D_200F_202D_200F_200B_200C_202C_202D_200D_202C_200B_200D_202A_200B_206D_206B_202E() { return Dalamud.Bindings.ImGui.ImGui.GetContentRegionAvail(); } static float _206A_202A_200D_202A_206E_202A_202E_200B_206E_200E_202A_206B_202A_202C_200D_206C_200F_206D_206B_206D_200F_200C_202D_206F_202A_202A_206E_206F_206C_202B_206D_202E_206B_206D_200D_200E_200B_200F_200F_200D_202E(float P_0, float P_1) { return MathF.Max(P_0, P_1); } static bool _206A_202A_202E_206F_202E_200F_200E_202E_206A_206D_206D_202E_200D_202D_206C_202A_200E_202E_206B_202B_200C_202A_206E_200B_206E_202A_206F_206E_202C_200B_200B_202A_206A_206B_202A_206B_202C_202B_202C_202A_202E(ImU8String P_0, Vector2 P_1, bool P_2, ImGuiWindowFlags P_3) { return Dalamud.Bindings.ImGui.ImGui.BeginChild(P_0, P_1, P_2, P_3); } static void _206C_202E_202E_202C_202E_202B_206C_206D_202C_206B_206F_206B_202B_206C_206D_200B_206E_200B_206D_202D_206B_202C_200C_206A_206B_206B_206C_206A_200B_200B_200B_202B_200B_202E_206D_200B_206A_200D_202B_206E_202E() { Dalamud.Bindings.ImGui.ImGui.EndChild(); } static Vector2 _200D_206C_202C_202A_200F_200F_200F_200D_202E_202E_200F_206C_200E_200B_206C_200E_206A_202A_202E_200D_202D_200F_200D_202B_200C_206D_200D_202A_202E_202C_202A_202A_206F_202E_200E_200E_202E_200C_206F_206C_202E() { return Dalamud.Bindings.ImGui.ImGui.GetCursorScreenPos(); } static bool _206E_200D_206A_202C_202D_206B_202B_206B_202A_206F_200F_206C_206A_202C_200B_202E_200F_206C_202C_202A_200F_202C_206E_206D_202A_206A_200E_202E_200F_200E_206E_206D_202D_202B_206F_206B_200D_200E_206D_206F_202E(ImU8String P_0, Vector2 P_1, ImGuiButtonFlags P_2) { return Dalamud.Bindings.ImGui.ImGui.InvisibleButton(P_0, P_1, P_2); } static bool _200D_200B_206C_202A_202C_206F_200C_202E_200F_202C_202E_200E_202A_202A_206C_200B_206F_200D_202A_206D_202B_202B_202A_206F_206F_206C_202E_206D_202B_200C_206C_206C_200E_200C_206F_202E_206F_206B_200F_200D_202E() { return Dalamud.Bindings.ImGui.ImGui.IsItemHovered(); } static void _202B_206C_200F_200F_200D_202C_206D_200C_200B_200D_202A_202D_206F_202B_206E_206C_202B_200D_206D_202E_206A_202A_200B_206B_202B_206E_200C_200C_200D_206C_202D_206A_202B_206F_200D_200F_202C_202B_206D_200E_202E(Vector2 P_0) { Dalamud.Bindings.ImGui.ImGui.SetCursorScreenPos(P_0); } static void _206D_202C_202B_206C_202B_200D_202B_200E_202E_206F_202E_200D_200B_202B_206A_202E_200F_206D_202A_206F_200F_200B_202D_200B_206A_202E_206E_202D_202E_200D_206C_200F_206C_202D_202C_202B_202B_200F_206D_206E_202E(ImU8String P_0) { Dalamud.Bindings.ImGui.ImGui.TextDisabled(P_0); } static ImDrawListPtr _200B_200C_202B_202C_206F_206E_206A_202B_200B_202D_202D_206D_202C_200B_202B_200F_206E_206C_206D_202D_206E_200F_206A_200E_202D_206F_200C_200F_202D_202A_202A_202C_202E_206B_202C_206D_202C_202A_202D_202E_202E() { return Dalamud.Bindings.ImGui.ImGui.GetWindowDrawList(); } static ImTextureID _200B_202A_202D_202A_200B_206F_202A_200D_206A_202C_206B_206F_206C_206E_206C_202C_206D_206F_202E_206A_202C_202E_206A_202C_206B_206B_202C_202B_206A_206F_206F_206D_200E_206C_200F_202B_206B_206E_202B_200E_202E(IDalamudTextureWrap P_0) { return P_0.Handle; } static bool _206C_200B_206A_206F_200D_206E_202D_206B_206C_206F_200E_200E_202E_200B_206F_206B_202B_202B_200D_200B_202C_206B_202A_206D_200F_202B_202C_206D_202E_200C_206A_202B_200D_202C_202E_202A_202C_200E_206E_202C_202E(string P_0) { return string.IsNullOrEmpty(P_0); } static Vector2 _206F_202E_202D_206E_200D_200D_202D_206F_206F_206E_202C_202C_202D_200C_206D_202E_206A_200E_200B_200B_202C_202A_200C_200C_200E_202C_200B_206A_206B_202D_202D_206C_200D_202D_200C_202C_206E_202D_202E_206B_202E() { return Dalamud.Bindings.ImGui.ImGui.GetMousePos(); } static ImGuiIOPtr _202A_206D_200D_200B_206F_206A_202B_202E_202B_200F_200B_206E_206E_202C_200B_206A_202A_200F_202A_200C_206C_202A_202C_206F_202D_206C_202C_206F_206C_206D_206A_200E_206E_200B_200E_202B_206A_200E_202C_202D_202E() { return Dalamud.Bindings.ImGui.ImGui.GetIO(); } static float _206F_200F_206B_200F_200D_200F_202C_202A_206A_200B_200C_206E_206B_206C_200F_200D_206C_200B_202B_200D_200C_206F_206B_206E_200B_206E_206E_206E_206C_202C_200C_200E_202C_202B_200D_206E_200B_200D_206C_202E_202E(float P_0) { return MathF.Abs(P_0); } static float _202A_206A_206F_206A_202E_200B_202C_206A_200B_206F_206D_202B_202D_206D_202C_202D_206D_200D_200B_200E_200D_206A_202E_200D_200D_202B_206A_202C_206F_200E_200D_202A_206F_206D_206B_202C_202E_206B_206D_206D_202E(float P_0, float P_1) { return MathF.Min(P_0, P_1); } static bool _202D_200B_206D_200B_206C_200D_206E_202C_200F_206A_200C_202C_202A_206B_206D_202D_206B_200C_206F_206B_200D_202C_206D_206A_200B_202D_200F_206E_202D_202C_200E_202D_202E_202B_206D_202A_202B_202C_206E_202C_202E(ImGuiMouseButton P_0) { return Dalamud.Bindings.ImGui.ImGui.IsMouseDown(P_0); } static bool _202E_202A_206A_200F_200E_206A_202D_202E_200E_202E_206A_206E_200B_200D_200B_202C_200C_206A_202E_206E_200E_202E_200F_202B_200E_202B_202E_206E_206B_202D_202D_200C_202A_206D_206B_206F_200E_200D_206E_202D_202E(ImGuiMouseButton P_0) { return Dalamud.Bindings.ImGui.ImGui.IsMouseClicked(P_0); } static bool _202B_206C_206A_200D_202D_206B_200D_206C_206C_200B_206F_200B_206B_202C_202E_202D_206E_200C_206B_206E_202E_206E_206A_206F_202A_202D_202C_200D_202E_200F_206B_202E_200F_206A_206E_202B_200E_206C_202D_202E_202E(ImGuiMouseButton P_0) { return Dalamud.Bindings.ImGui.ImGui.IsMouseReleased(P_0); } static bool _206A_200C_206A_206E_200E_200F_202B_206A_206E_206C_206A_202B_202B_200C_200F_200B_202A_206F_206F_200F_206E_200D_206F_200C_200C_206A_200B_200F_206C_202B_200D_202B_202E_202B_200F_202C_202B_200D_202C_202D_202E(ImGuiKey P_0) { return Dalamud.Bindings.ImGui.ImGui.IsKeyPressed(P_0); } static bool _200D_202D_206D_202D_206B_206A_206F_202D_206C_202C_206C_206B_206D_206C_206E_200C_202A_206B_202A_202D_206B_202C_200D_200D_202A_200D_200D_206C_200C_200E_206C_200C_200C_206D_206B_206C_202A_200C_200D_206E_202E(ImGuiMouseButton P_0) { return Dalamud.Bindings.ImGui.ImGui.IsMouseDoubleClicked(P_0); } }