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;
        }
    }
Example #2
0
        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;
                }
            }
        }