void DrawDir() { Cursor.visible = true; var rect = SWCommon.GetRect(drawRect.center + ArrowOff, new Vector2(IconSize_Arrow, IconSize_Arrow)); Set_Material(matBase, Vector2.zero, 0, Vector2.one); matBase.SetColor("_Color", dragging ? Color.green:Color.white); Graphics.DrawTexture(SWCommon.GetRect(drawRect.center, new Vector2(8, 8)), SWEditorUI.Texture(SWUITex.effectCenter), matBase); matBase.SetFloat("r", -SWCommon.Vector2Angle(ArrowOff)); Graphics.DrawTexture(rect, SWEditorUI.Texture(SWUITex.effectArrow), matBase); matBase.SetFloat("r", 0f); matBase.SetTexture("_MainTex", SWEditorUI.Texture(SWUITex.effectLine)); SWDraw.DrawLine(drawRect.center, rect.center, Color.white, 3f, matBase); float factor = 1f / drawRect.size.x; if (SWCommon.GetMouseDown(0) && InMap()) { RepaintGetDirty(); if (rect.Contains(Event.current.mousePosition)) { dragging = true; lastMousePos = Event.current.mousePosition; } else { dragging = false; } } else if (dragging) { if (SWCommon.GetMouse(0) && InMap()) { RepaintGetDirty(); ArrowOff += Event.current.mousePosition - lastMousePos; if (Event.current.shift) { if (Mathf.Abs(ArrowOff.x) > Mathf.Abs(ArrowOff.y)) { ArrowOff = new Vector2(ArrowOff.x, 0); } else { ArrowOff = new Vector2(0, ArrowOff.y); } } lastMousePos = Event.current.mousePosition; SWUndo.Record(this); rData.d.v = new Vector2(ArrowOff.x * factor, -ArrowOff.y * factor); } if (SWCommon.GetMouseUp(0)) { dragging = false; SWUndo.Record(this); rData.d.v = new Vector2(ArrowOff.x * factor, -ArrowOff.y * factor); } } else { ArrowOff = new Vector2(rData.d.v.x / factor, -rData.d.v.y / factor); } if (Event.current.type == EventType.KeyDown) { if (Event.current.keyCode == KeyCode.Return) { node.data.dirty = true; SWTextureProcess.ProcessRemap_Dir(node.textureEx, node.texChildResized, new Vector2(rData.d.v.x, -rData.d.v.y), rData.d.pre, rData.d.pb); } } }