Exemplo n.º 1
0
 public static void Spurt(BodyPartSurgery _target, Vector3 _cutoffset)
 {
     spurtCount = tsc;
     target     = _target;
     offset     = _cutoffset;
     lastPos    = target.SpurtMarker.gameObject.transform.position;
 }
Exemplo n.º 2
0
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            phase = (phase + 1) % 3;
            switch (phase)
            {
            case 0:
                if (heldPart != null)
                {
                    if (clickable.clickedTag != "table")
                    {
                        heldPart.gameObject.GetComponent <SpriteRenderer>().color = new Color(1.0f, 1.0f, 1.0f, 0.15f);
                        BloodManager.KillSpurt();
                    }
                    heldPart.targetPos = heldPart.getPos();
                    heldPart           = null;
                }
                break;

            case 1:
                lr.enabled            = true;
                lr.SetPosition(0, src = getMouseWorldPos());
                break;

            case 2:
                lr.enabled = false;
                //<slice>
                //var k = getMouseWorldPos();
                //var rp = (src+k)*.5f-currentBody.transform.position;
                //float rot = Mathf.Atan2(src.y-k.y, src.x-k.x)*Mathf.Rad2Deg;
                //if(Mathf.DeltaAngle(Mathf.Atan2(rp.y, rp.x)*Mathf.Rad2Deg,rot)>0)rot+=180;
                //k=(src+k)*.5f;
                //k.z=rot+90;
                //heldPart=currentBody.Slice(k);

                //</slice>
                //k.z=0;
                RaycastHit2D[] hit = Physics2D.RaycastAll(lr.GetPosition(0), lr.GetPosition(1));


                if (hit.Length > 0)
                {
                    BodyPartSurgery hitBodyPart = hit[0].collider.gameObject.GetComponent <BodyPartSurgery>();

                    if (hitBodyPart != null)
                    {
                        Debug.Log("Heureka bitch");
                        Vector3 cutOffset = hit[0].point - new Vector2(hitBodyPart.gameObject.transform.position.x, hitBodyPart.gameObject.transform.position.y);
                        BloodManager.Spurt(hitBodyPart, cutOffset);
                    }
                }


                break;
            }
        }
        if (lr.enabled)
        {
            lr.SetPosition(1, getMouseWorldPos());
        }
        if (heldPart != null)
        {
            heldPart.targetPos = getMouseWorldPos();
        }
    }
Exemplo n.º 3
0
 public bool CanAttach(BodyPartSurgery part)
 {
     return(DetachedParts.Contains(part.Type) && part.bIsMatch);
 }
Exemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit2D hit;

        //int layerMask = 1 << LayerMask.NameToLayer("Booty");
        //layerMask = ~layerMask;
        BodyPartSurgery hitBodyPart = null;

        hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, Mathf.Infinity);
        if (hit.collider != null)
        {
            hitBodyPart = hit.collider.gameObject.GetComponent <BodyPartSurgery>();
            if (hitBodyPart != null)
            {
                if (LastHitBodyPart != null && LastHitBodyPart != hitBodyPart)
                {
                    LastHitBodyPart.DeHighlight();
                }
                LastHitBodyPart = hitBodyPart;
                if (LastHitBodyPart != null && LastHitBodyPart.bCanBeDetached)
                {
                    LastHitBodyPart.Highlight(ColorHighlightCut);
                }
            }
            else
            {
                if (LastHitBodyPart != null)
                {
                    LastHitBodyPart.DeHighlight();
                    LastHitBodyPart = null;
                }
            }
        }
        else
        {
            if (LastHitBodyPart != null)
            {
                LastHitBodyPart.DeHighlight();
                LastHitBodyPart = null;
            }
        }

        if (Input.GetMouseButtonDown(0))
        {
            if (hitBodyPart != null)
            {
                //TODO: start drag body part
                if (hitBodyPart.bIsDetached)
                {
                    DraggedBodyPart = hitBodyPart;
                    DragOffset      = (new Vector3(hit.point.x, hit.point.y) - DraggedBodyPart.gameObject.transform.position);
                }
                else
                {
                    MouseDragStart = getMouseWorldPos();
                    LineCut.SetPosition(0, MouseDragStart);
                }
            }
            else
            {
                MouseDragStart = getMouseWorldPos();
                LineCut.SetPosition(0, MouseDragStart);
            }
        }

        if (Input.GetMouseButton(0))
        {
            if (DraggedBodyPart != null)
            {
                //TODO: update position of dragged body part
                DraggedBodyPart.gameObject.transform.position = getMouseWorldPos() - DragOffset;

                if (BodySurgery.Henry.CanAttach(DraggedBodyPart) &&
                    Vector3.Distance(DraggedBodyPart.SpurtMarker.transform.position,
                                     BodySurgery.Henry.GetSnapPositionForBodyPart(DraggedBodyPart.Type)) < 1.2f)
                {
                    DraggedBodyPart.bPendingAttach = true;
                    DraggedBodyPart.HighlightLock(ColorHighlightAttach);
                    DraggedBodyPart.transform.position = Vector3.zero;
                }
                else
                {
                    DraggedBodyPart.bPendingAttach = false;
                    DraggedBodyPart.DeHighlight();
                }
            }
            else
            {
                LineCut.SetPosition(1, getMouseWorldPos());
                if (Vector3.Distance(LineCut.GetPosition(0), LineCut.GetPosition(1)) > 0.5f)
                {
                    LineCut.enabled = true;
                }
                else
                {
                    LineCut.enabled = false;
                }
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            if (DraggedBodyPart != null)
            {
                //TODO: drop body part
                if (DraggedBodyPart.bPendingAttach)
                {
                    DraggedBodyPart.Attach();

                    AudioManager.Instance.PlaySoundOneShot(AudioManager.Instance.ClipsSurgeryReplace[Random.Range(0, AudioManager.Instance.ClipsSurgeryReplace.Count)]);
                }
                else
                {
                    if (!SurgeryManager.Instance.PendingPartsToTransfer.Contains(DraggedBodyPart.Type) || !DraggedBodyPart.bIsMatch)
                    {
                        BloodManager.Spurt(DraggedBodyPart, Vector3.zero);
                        Destroy(DraggedBodyPart.gameObject);
                    }
                    AudioManager.Instance.PlaySoundOneShot(AudioManager.Instance.ClipsSurgeryDrop[Random.Range(0, AudioManager.Instance.ClipsSurgeryDrop.Count)]);
                }
            }
            else
            {
                MouseDragEnd = getMouseWorldPos();
                LineCut.SetPosition(1, MouseDragEnd);
                LineCut.enabled = false;

                if (Vector3.Distance(LineCut.GetPosition(0), LineCut.GetPosition(1)) > 0.5f)
                {
                    RaycastHit2D[] cutHits = Physics2D.RaycastAll(MouseDragStart,
                                                                  (MouseDragEnd - MouseDragStart).normalized,
                                                                  Vector3.Distance(MouseDragStart, MouseDragEnd));


                    if (cutHits.Length > 0)
                    {
                        for (int i = 0; i < cutHits.Length; ++i)
                        {
                            BodyPartSurgery hitBodyPartCut = cutHits[i].collider.gameObject.GetComponent <BodyPartSurgery>();
                            if (hitBodyPartCut != null && !hitBodyPartCut.bIsDetached)
                            {
                                Debug.Log("Heureka bitch");
                                Vector3 cutOffset = cutHits[i].point - new Vector2(hitBodyPartCut.gameObject.transform.position.x, hitBodyPartCut.gameObject.transform.position.y);
                                BloodManager.Spurt(hitBodyPartCut, cutOffset);
                                hitBodyPartCut.Detach();
                                break;
                            }
                        }
                    }
                }
                else
                {
                }
            }
            DraggedBodyPart = null;
        }
    }