2using System.Collections;
3using System.Collections.Generic;
10public class MouseDragBehaviour : MonoBehaviour, IInitializePotentialDragHandler, IDragHandler, IBeginDragHandler, IEndDragHandler, IPointerDownHandler,
11 IPointerClickHandler, IPointerUpHandler
21 private RectTransform rectTransform;
22 private Canvas canvas;
24 Transform OriginalParent;
30 GameObject ActionSlot;
31 GameObject droppedItem;
37 bool containPosition =
false;
38 GameObject PreviousGO;
39 string[] containAction;
41 private Vector2 lastMousePosition;
43 List<GameObject> inputsList =
new List<GameObject>();
45 List<String> line =
new List<String>();
46 GameObject lineObject;
47 List<String> line2 =
new List<String>();
48 GameObject lineObject2;
61 rectTransform = GetComponent<RectTransform>();
62 canvas = GetComponentInParent<Canvas>();
63 content = GameObject.Find(
"Content");
67 OriginalParent = content.transform;
69 containAction =
new string[] {
"Waiter",
"GameObject",
"Weld",
"Led",
"Start",
70 "Sound",
"Move",
"Position",
"BeltSetter",
"ShowHide",
"Deactivate",
"Script"};
80 lastMousePosition = eventData.position;
87 var results =
new List<RaycastResult>();
88 EventSystem.current.RaycastAll(eventData, results);
90 if (gameObject.transform.parent.name.Contains(
"Content"))
96 foreach (var result
in results)
98 prevDropArea = result.gameObject.GetComponent<
DropArea>();
99 dropArea = result.gameObject.GetComponent<
DropArea>();
100 if (prevDropArea !=
null)
109 if (dropArea !=
null)
111 collector = dropArea.GetComponentInParent<
CollectorAction>().gameObject;
112 rt = (RectTransform)collector.transform;
113 width = rt.rect.width;
114 height = rt.rect.height;
115 ActionSlot = GameObject.Find(
"ActionSlot");
116 if (OriginalParent !=
null)
118 gameObject.transform.parent = OriginalParent;
121 if (GameObjectNeeded())
124 rs.
Reference.transform.localScale =
new Vector3(0, 0, 0);
125 ActionSlotChildren = ActionSlot.GetComponentsInChildren<
ActionObject>();
126 rs.transform.Find(
"ExtendGO").gameObject.SetActive(
false);
127 foreach (var a
in ActionSlotChildren)
129 if (a.action.Contains(
"Position") ||
130 a.action.Contains(
"Hold") ||
131 a.action.Contains(
"Move"))
133 containPosition =
true;
137 if (!containPosition)
139 rt.sizeDelta =
new Vector2(width = 520, height);
142 if (action.Contains(
"GameObject"))
160 public void OnDrag(PointerEventData eventData)
162 var currentMousePosition = eventData.position;
163 var diff = currentMousePosition - lastMousePosition;
164 var rect = GetComponent<RectTransform>();
166 var newPosition = rect.position +
new Vector3(diff.x, diff.y, transform.position.z);
167 var oldPos = rect.position;
168 rect.position = newPosition;
175 if (prevDropArea ==
null)
183 Console.WriteLine(e);
187 lastMousePosition = currentMousePosition;
202 var results =
new List<RaycastResult>();
203 EventSystem.current.RaycastAll(eventData, results);
205 foreach (var result
in results)
207 dropArea = result.gameObject.GetComponent<
DropArea>();
208 droppedItem = result.gameObject;
210 if (dropArea !=
null)
217 if (dropArea !=
null && succes)
223 OriginalParent = gameObject.transform.parent;
225 droppedItem.AddComponent<
Reserved>();
226 reserved = droppedItem.GetComponent<
Reserved>();
227 collector = dropArea.GetComponentInParent<
CollectorAction>().gameObject;
229 if (GameObjectNeeded())
232 rs.transform.Find(
"ExtendGO").gameObject.SetActive(
true);
234 if (!GameObjectNeeded())
236 StartCoroutine(makeConnection(this.gameObject, collector));
237 StartCoroutine(getConnection(this.gameObject,
false,
true));
239 if (action.Contains(
"GameObject"))
247 foreach (var c
in containAction)
249 if (dropArea.transform.parent.gameObject.GetComponentInChildren<
ActionObject>().
action.Contains(c))
251 PreviousGO = dropArea.transform.parent.gameObject.GetComponentInChildren<
ActionObject>().gameObject;
256 if (!prevDropArea && !action.Contains(
"Collector"))
258 collector = dropArea.GetComponentInParent<
CollectorAction>().gameObject;
259 var Acopy = dropArea.GetComponentInParent<
CollectorAction>().addItems._AddButton();
263 gameObject.transform.parent = newArea.transform.parent;
264 newArea.gameObject.AddComponent<
Reserved>();
265 if (GameObjectNeeded())
268 rs.transform.Find(
"ExtendGO").gameObject.SetActive(
true);
271 if (!GameObjectNeeded())
273 StartCoroutine(makeConnection(this.gameObject, collector));
274 StartCoroutine(getConnection(this.gameObject,
false,
true));
281 prevDropArea.
Drop(prevDraggable);
282 PreviousGO.transform.parent = prevDropArea.transform.parent;
284 OriginalParent = gameObject.transform.parent;
287 lineObject = dropArea.transform.parent.transform.Find(line[0]).gameObject;
288 lineObject.transform.parent = prevDropArea.transform.parent;
290 lineObject2 = prevDropArea.transform.parent.transform.Find(line2[0]).gameObject;
291 lineObject2.transform.parent = dropArea.transform.parent;
292 if (!prevDropArea.gameObject.GetComponent<
Reserved>())
294 prevDropArea.gameObject.AddComponent<
Reserved>();
298 prevrs = prevDropArea.transform.parent.GetComponent<
ReferenceSaver>();
317 PrevGoDropArea.Drop(GODraggable);
318 GODraggable.transform.parent = PrevGoDropArea.transform.parent;
319 GODraggable.transform.localScale =
new Vector3(1, 1, 1);
322 lineObject = GoDropArea.transform.parent.transform.Find(line[0]).gameObject;
323 lineObject.transform.parent = PrevGoDropArea.transform.parent;
328 GoDropArea.Drop(GOprevDraggable);
329 GOprevDraggable.transform.parent = GoDropArea.transform.parent;
330 GOprevDraggable.transform.localScale =
new Vector3(1, 1, 1);
333 lineObject = PrevGoDropArea.transform.parent.transform.Find(line[0]).gameObject;
334 lineObject.transform.parent = GoDropArea.transform.parent;
337 rs.transform.Find(
"ExtendGO").gameObject.SetActive(
false);
338 prevrs.transform.Find(
"ExtendGO").gameObject.SetActive(
false);
340 if (GameObjectNeeded())
342 rs.transform.Find(
"ExtendGO").gameObject.SetActive(
true);
348 prevrs.transform.Find(
"ExtendGO").gameObject.SetActive(
true);
354 if (!droppedItem.GetComponent<
Reserved>())
358 if (dropArea ==
null && prevDropArea !=
null)
360 reserved = prevDropArea.GetComponent<
Reserved>();
361 reservedGO = prevDropArea.transform.parent.GetComponent<
ReferenceSaver>().Reference.GetComponentInChildren<
Reserved>();
390 private bool IsRectTransformInsideSreen(RectTransform rectTransform)
392 var isInside =
false;
393 var corners =
new Vector3[4];
394 rectTransform.GetWorldCorners(corners);
395 var visibleCorners = 0;
396 var rect =
new Rect(0, 0, Screen.width, Screen.height);
397 foreach (var corner
in corners)
398 if (rect.Contains(corner))
400 if (visibleCorners == 4) isInside =
true;
413 var allNode = FindObjectsOfType<MouseDragBehaviour>();
414 foreach (var node
in allNode) Destroy(node.GetComponent<Outline>());
416 gameObject.AddComponent<Outline>();
431 Sprite
RowCircle = Resources.Load<Sprite>(
"T_ReticleOpen");
433 rsgo.
Reference.transform.Find(
"ExtendGO").transform.Find(
"ExtendButton").gameObject.GetComponent<
Image>().sprite =
RowCircle;
437 Sprite
FullCircle = Resources.Load<Sprite>(
"T_ReticleClosed");
439 rsgo.
Reference.transform.Find(
"ExtendGO").transform.Find(
"ExtendButton").gameObject.GetComponent<
Image>().sprite =
FullCircle;
443 var hits = GetEventSystemRaycastResults();
445 foreach (var hit
in hits)
447 if (hit.gameObject == gameObject)
453 if (action.Contains(
"GameObject"))
455 gameObject.transform.parent = droppedItem.transform.parent;
459 gameObject.transform.parent = droppedItem.transform.parent;
463 static List<RaycastResult> GetEventSystemRaycastResults()
465 PointerEventData eventData =
new PointerEventData(EventSystem.current) { position = Input.mousePosition };
466 List<RaycastResult> raysastResults =
new List<RaycastResult>();
467 EventSystem.current.RaycastAll(eventData, raysastResults);
468 return raysastResults;
480 IEnumerator makeConnection(GameObject StartGameObject, GameObject EndGameObject)
487 IEnumerator getConnection(GameObject ConnectedGO,
bool visible,
bool parent)
491 lineObject = OriginalParent.Find(line[0]).gameObject;
495 lineObject.transform.parent = ConnectedGO.transform.parent;
499 lineObject.transform.parent = collector.transform;
503 lineObject.transform.localScale =
new Vector3(1, 1, 1);
509 lineObject.transform.localScale =
new Vector3(1, 1, 1);
513 var diff =
new Vector2(0,0);
514 var rect = ConnectedGO.GetComponent<RectTransform>();
515 var newPosition = rect.position +
new Vector3(diff.x, diff.y, transform.position.z);
516 var oldPos = rect.position;
517 rect.position = newPosition;
525 Console.WriteLine(e);
528 private bool GameObjectNeeded()
530 return action.Contains(
"Move") || action.Contains(
"Position") || action.Contains(
"Hold");
535 lineObject = OriginalParent.Find(line[0]).gameObject;
537 lineObject2 = OriginalParent.Find(line[0]).gameObject;
551 NewGoDropArea.
Drop(NewGODraggable);
552 clone.transform.parent = NewGoDropArea.transform.parent;
553 clone.transform.localPosition =
new Vector3(0, 0, 0);
554 clone.transform.localScale =
new Vector3(1, 1, 1);
556 StartCoroutine(makeConnection(clone, this.gameObject));
557 StartCoroutine(getConnection(clone,
true,
true));
560 StartCoroutine(makeConnection(this.gameObject, collector));
561 StartCoroutine(getConnection(this.gameObject,
false,
true));
System.Drawing.Image Image
List< GameObject > inPuts
List< GameObject > outPuts
List< string > GetOutputConnectionsToObject(string id)
void EndConnection(string inputID, string actionID)
void RemoveConnection(string connectionId)
GameObject AddAction(GameObject obj, string id)
List< string > GetInputConnectionsToObject(string id)
List< GameObject > actionPrefabs
static Controller Instance
void StartConnection(string outputID, string actionID)
void RemoveAction(string id)
void ClickedOn(string id)
void Drop(MouseDragBehaviour draggable)
bool Accepts(MouseDragBehaviour draggable)
static LineDrawer Instance
Action< PointerEventData > OnBeginDragHandler
void OnPointerUp(PointerEventData eventData)
bool IsConnectionHidden()
void RowCircle(DropArea dropArea)
void OnBeginDrag(PointerEventData eventData)
void OnEndDrag(PointerEventData eventData)
This method will be called at the end of mouse drag
void OnInitializePotentialDrag(PointerEventData eventData)
Action< PointerEventData > OnDragHandler
void FullCircle(DropArea dropArea)
GameObject addedGameObject()
static MouseDragBehaviour Instance
void OnDrag(PointerEventData eventData)
This method will be called during the mouse drag
List< GameObject > InputList()
Action< PointerEventData, bool > OnEndDragHandler
void OnPointerDown(PointerEventData eventData)
void refreshConnectionPos(GameObject ConnectedGO)
void OnPointerClick(PointerEventData eventData)
Credit Erdener Gonenc - @PixelEnvision.