1
0
Fork 0
forked from aly/qstbak
qstbak/LLib/LLib.ImGui/MapPolygonEditor.cs
2026-08-17 20:27:25 +10:00

1647 lines
52 KiB
C#

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<Vector2> _drawingVertices = new List<Vector2>();
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<string>(-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<string>(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<Vector2> 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<string>(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<string>(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<Vector2> vertices = default(IList<Vector2>);
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<Vector2> 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<int> list = default(List<int>);
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<int>(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<int> 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<int> 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<int>.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<Vector2> 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<Vector2> 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<Vector2> 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<Vector2> 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<Vector2> drawingVertices3 = _drawingVertices;
float x2 = drawingVertices3[drawingVertices3.Count - 1].X;
List<Vector2> 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<Vector2> vertices = default(IList<Vector2>);
IList<Vector2> vertices2 = default(IList<Vector2>);
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<Vector2> vertices2 = default(IList<Vector2>);
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<Vector2> 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<Vector2> drawingVertices = _drawingVertices;
int count = drawingVertices.Count;
List<Vector2> list = new List<Vector2>(count);
CollectionsMarshal.SetCount(list, count);
Span<Vector2> span = CollectionsMarshal.AsSpan(list);
int num7 = 0;
Span<Vector2> 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<Vector2> 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<Vector2> 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<Vector2> vertices = default(IList<Vector2>);
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<Vector2> 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<Vector2> 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);
}
}