void Update() { switch (_status) { case Status.Choosing: { if (Input.GetMouseButtonDown(0)) { var attachpoints = GameObject.FindGameObjectsWithTag("AttachPoint"); Vector2 mp = Camera.main.ScreenToWorldPoint(Input.mousePosition); foreach (var a in attachpoints) { if (_target_object.AttachPoints.FindIndex((x) => x == a) != -1) { continue; } var ren = a.GetComponent <SpriteRenderer>(); var mpb = new Vector3(mp.x, mp.y, ren.transform.position.z); if (ren.bounds.Contains(mpb)) { GameObject.Find("Clicker").GetComponent <AudioSource>().Play(); var d = CreateDraggedObject(a); _status = Status.Dragging; _dragged_object = d; break; } } } } break; case Status.Dragging: { Vector2 mp = Camera.main.ScreenToWorldPoint(Input.mousePosition); foreach (var i in _dragged_object.Items) { i.Obj.transform.position = mp + i.PosDiff; } if (Input.GetMouseButtonDown(0)) { foreach (GameObject toap in _target_object.AttachPoints) { var tpap = _dragged_object.AttachPoint; foreach (var di in _dragged_object.Items) { if ((tpap.transform.position - toap.transform.position).magnitude < 0.8f) { var obj1 = tpap.transform.parent; var obj2 = toap.transform.parent; var attach_to = obj1; var attach_to_ap = tpap; var attacher = obj2; var attacher_ap = toap; var attach_to_info = attach_to.GetComponent <BodypartInfo>(); var attacher_info = attacher.GetComponent <BodypartInfo>(); if (attach_to_info.IsLegArm && !attacher_info.IsLegArm) { attach_to = obj2; attacher = obj1; attach_to_ap = toap; attacher_ap = tpap; } var attach_to_bpc = attach_to.GetComponent <BodypartController>(); var attacher_bpc = attacher.GetComponent <BodypartController>(); attach_to_info = attach_to.GetComponent <BodypartInfo>(); attacher_info = attacher.GetComponent <BodypartInfo>(); var none_is_leg = !attacher_info.IsLegArm && !attach_to_info.IsLegArm; if (none_is_leg) { var fj = attach_to.gameObject.AddComponent <FixedJoint2D>(); fj.connectedBody = attacher.gameObject.GetComponent <Rigidbody2D>(); fj.anchor = attach_to_ap.transform.localPosition; fj.autoConfigureConnectedAnchor = false; fj.connectedAnchor = attacher_ap.transform.localPosition; } else { var hj = attach_to.gameObject.AddComponent <HingeJoint2D>(); hj.connectedBody = attacher.gameObject.GetComponent <Rigidbody2D>(); hj.anchor = attach_to_ap.transform.localPosition; hj.autoConfigureConnectedAnchor = false; hj.connectedAnchor = attacher_ap.transform.localPosition; } attacher.position = attach_to_ap.transform.position + (attacher_ap.transform.localPosition); if (!attach_to_info.IsLegArm) { Destroy(attach_to_bpc); } if (!attacher_info.IsLegArm) { Destroy(attacher_bpc); } if (attacher_bpc) { attacher_bpc.ForceMultiplier = 2.9f; } GameObject.Find("Clicker").GetComponent <AudioSource>().Play(); CreateOrMergeMetabodies(attacher_info, attach_to_info); // Clean up SetAttachpointVisible(false); Cursor.visible = false; Time.timeScale = 1; _plant.GetComponent <PlantCollider>().SetUsed(); attacher_ap.gameObject.tag = "Untagged"; attach_to_ap.gameObject.tag = "Untagged"; // Win condition var all_attachpoints_in_new_metabody = FindAllAttachPoints(_dragged_object.AttachPoint.transform.parent.gameObject); if (all_attachpoints_in_new_metabody.Count == 0) { GameData.Victory = true; } _status = Status.Done; Destroy(gameObject); return; } } } } } break; case Status.Done: break; } }
private void Each_Tick(object o, EventArgs sender) { if (ScrollRight) { if (myTargetScrollViewer.HorizontalOffset == myTargetScrollViewer.ScrollableWidth) { ScrollRight = false; } else { myTargetScrollViewer.ScrollToHorizontalOffset(myTargetScrollViewer.HorizontalOffset + ScrollPixelsPerTick); if (DraggedObject != null && myTestoffset != myTargetScrollViewer.HorizontalOffset) { DraggedObject.SetValue(Canvas.LeftProperty, (double)(DraggedObject.GetValue(Canvas.LeftProperty)) + (ScrollPixelsPerTick)); } myTestoffset = myTargetScrollViewer.HorizontalOffset; } } if (ScrollLeft) { if (myTargetScrollViewer.HorizontalOffset == 0) { ScrollLeft = false; } else { myTargetScrollViewer.ScrollToHorizontalOffset(myTargetScrollViewer.HorizontalOffset - ScrollPixelsPerTick); if (DraggedObject != null && myTestoffset != myTargetScrollViewer.HorizontalOffset) { DraggedObject.SetValue(Canvas.LeftProperty, (double)(DraggedObject.GetValue(Canvas.LeftProperty)) - (ScrollPixelsPerTick)); } myTestoffset = myTargetScrollViewer.HorizontalOffset; } } if (ScrollDown) { myTargetScrollViewer.ScrollToVerticalOffset(myTargetScrollViewer.VerticalOffset + ScrollPixelsPerTick); if (DraggedObject != null && myTestvoffset != myTargetScrollViewer.VerticalOffset) { DraggedObject.SetValue(Canvas.TopProperty, (double)(DraggedObject.GetValue(Canvas.TopProperty)) + (ScrollPixelsPerTick)); } myTestvoffset = myTargetScrollViewer.VerticalOffset; } if (ScrollUp) { if (myTargetScrollViewer.VerticalOffset == 0) { ScrollUp = false; } else { myTargetScrollViewer.ScrollToVerticalOffset(myTargetScrollViewer.VerticalOffset - ScrollPixelsPerTick); if (DraggedObject != null && myTestvoffset != myTargetScrollViewer.VerticalOffset) { DraggedObject.SetValue(Canvas.TopProperty, (double)(DraggedObject.GetValue(Canvas.TopProperty)) - (ScrollPixelsPerTick)); } myTestvoffset = myTargetScrollViewer.VerticalOffset; } } }