Example #1
0
    void LinecastCut(Vector2 lineStart, Vector2 lineEnd)
    {
        List <GameObject> gameObjectsToCut = new List <GameObject>();

        RaycastHit2D[] hits = Physics2D.LinecastAll(lineStart, lineEnd, layerMask);
        foreach (RaycastHit2D hit in hits)
        {
            if (HitCounts(hit))
            {
                gameObjectsToCut.Add(hit.transform.gameObject);
            }
        }
        if (gameObjectsToCut.Count > 0)
        {
            Camera.main.GetComponent <CameraManager>().setShake(0.2f);
            Camera.main.GetComponent <FreezeFX>().FreezeScreen();
        }

        foreach (GameObject go in gameObjectsToCut)
        {
            SpriteCutterOutput output = SpriteCutter.Cut(new SpriteCutterInput()
            {
                lineStart              = lineStart,
                lineEnd                = lineEnd,
                gameObject             = go,
                gameObjectCreationMode = SpriteCutterInput.GameObjectCreationMode.CUT_OFF_COPY,
            });
            ModifyOutputObjects(output.firstSideGameObject);
            ModifyOutputObjects(output.secondSideGameObject);
        }
    }
    public void LinecastCut(Vector2 lineStart, Vector2 lineEnd, int layerMask = Physics2D.AllLayers)
    {
        Stick             stick            = FindObjectOfType <Stick>();
        List <GameObject> gameObjectsToCut = new List <GameObject>();

        RaycastHit2D[] hits = Physics2D.LinecastAll(lineStart, lineEnd, layerMask);
        foreach (RaycastHit2D hit in hits)
        {
            if (HitCounts(hit))
            {
                gameObjectsToCut.Add(hit.transform.gameObject);
            }
        }

        foreach (GameObject go in gameObjectsToCut)
        {
            SpriteCutterOutput output = SpriteCutter.Cut(new SpriteCutterInput()
            {
                lineStart              = lineStart,
                lineEnd                = lineEnd,
                gameObject             = go,
                gameObjectCreationMode = SpriteCutterInput.GameObjectCreationMode.CUT_OFF_ONE,
            });

            if (output != null && output.secondSideGameObject != null)
            {
                //Rigidbody2D newRigidbody = output.secondSideGameObject.AddComponent<Rigidbody2D>();
                //newRigidbody.velocity = output.firstSideGameObject.GetComponent<Rigidbody2D>().velocity;
                output.secondSideGameObject.transform.position = stick.transform.position;
                SlicedStick slicedStick = output.secondSideGameObject.AddComponent <SlicedStick>();;
            }
        }
    }
    void LinecastCut(Vector2 lineStart, Vector2 lineEnd, int layerMask = Physics2D.AllLayers)
    {
        List <GameObject> gameObjectsToCut = new List <GameObject>();

        RaycastHit2D[] hits      = Physics2D.LinecastAll(lineStart, lineEnd, layerMask);
        int            NumOfhits = 0;

        foreach (RaycastHit2D hit in hits)
        {
            if (HitCounts(hit))
            {
                Debug.Log($"NumOfhits {NumOfhits.ToString()}");
                NumOfhits++;
                gameObjectsToCut.Add(hit.transform.gameObject);
            }
        }

        foreach (GameObject go in gameObjectsToCut)
        {
            SpriteCutterOutput output = SpriteCutter.Cut(new SpriteCutterInput()
            {
                lineStart              = lineStart,
                lineEnd                = lineEnd,
                gameObject             = go,
                gameObjectCreationMode = SpriteCutterInput.GameObjectCreationMode.CUT_OFF_ONE,
            });

            if (output != null && output.secondSideGameObject != null)
            {
                Rigidbody2D newRigidbody = output.secondSideGameObject.AddComponent <Rigidbody2D>();
                newRigidbody.velocity = output.firstSideGameObject.GetComponent <Rigidbody2D>().velocity;
            }
        }
    }
Example #4
0
    private IEnumerator DelayedForce(SpriteCutterOutput output, Vector2 slashStart, Vector2 slashEnd)
    {
        //fix the position of the second part
        output.secondSideGameObject.transform.parent   = output.firstSideGameObject.transform.parent;
        output.secondSideGameObject.transform.position = output.firstSideGameObject.transform.position;

        yield return(new WaitForSeconds(forceDelay));

        //fix the Rigidbody2D for secondSideGameObject if it doesnt have OnEnemyHit
        if (output.secondSideGameObject.transform.gameObject.GetComponent <Rigidbody2D>() == null)
        {
            output.secondSideGameObject.transform.gameObject.AddComponent <Rigidbody2D>();
        }

        GameObject particles1 = GameObject.Instantiate(spriteBurst, output.firstSideGameObject.transform.position, Quaternion.identity) as GameObject;
        GameObject particles2 = GameObject.Instantiate(spriteBurst, output.secondSideGameObject.transform.position, Quaternion.identity) as GameObject;
        GameObject particles3 = GameObject.Instantiate(bloodBurstParticles, output.firstSideGameObject.transform.position, Quaternion.identity) as GameObject;

        particles3.transform.parent = output.firstSideGameObject.transform;
        GameObject particles4 = GameObject.Instantiate(bloodBurstParticles, output.secondSideGameObject.transform.position, Quaternion.identity) as GameObject;

        particles4.transform.parent = output.secondSideGameObject.transform;

        particles1.transform.Rotate(new Vector3(-90, 0, 0));
        particles2.transform.Rotate(new Vector3(90, 0, 0));

        particles3.transform.Rotate(new Vector3(-90, 0, 0));
        particles4.transform.Rotate(new Vector3(90, 0, 0));

        //particle scaling
        particles1.transform.localScale = output.firstSideGameObject.transform.localScale;
        particles2.transform.localScale = output.firstSideGameObject.transform.localScale;
        particles3.transform.localScale = output.firstSideGameObject.transform.localScale;
        particles4.transform.localScale = output.firstSideGameObject.transform.localScale;

        Vector2 distance = output.firstSideGameObject.transform.position - output.secondSideGameObject.transform.position;

        float angle = Mathf.Atan2(distance.y, distance.x);

        angle += 0.5f * Mathf.PI;

        Vector2 force = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)) * 9991;         // je force

        Rigidbody2D rbdy1 = output.firstSideGameObject.GetComponent <Rigidbody2D>();
        Rigidbody2D rbdy2 = output.secondSideGameObject.GetComponent <Rigidbody2D>();

        rbdy1.isKinematic = false;
        rbdy2.isKinematic = false;

        rbdy1.AddForceAtPosition(-force, slashStart);
        rbdy2.AddForceAtPosition(force, slashEnd);

        rbdy1.AddTorque(9001);
        rbdy2.AddTorque(9001);
    }
Example #5
0
    private void Hakkem(GameObject enemyToBeHakkedDoorDeMidden, Vector2 slashStart, Vector2 slashEnd)
    {
        //remove potentials script the ugly way
        SpriteCutterOutput output = SpriteCutter.Cut(new SpriteCutterInput()
        {
            lineStart              = slashStart,
            lineEnd                = slashEnd,
            gameObject             = enemyToBeHakkedDoorDeMidden,
            gameObjectCreationMode = SpriteCutterInput.GameObjectCreationMode.CUT_OFF_NEW,
        });

        gameObject.GetComponent <DragCatapultMovement>().ResetJumpCount();
        StartCoroutine(DelayedForce(output, slashStart, slashEnd));
    }
Example #6
0
    public void LinecastCut(Vector2 lineStart, Vector2 lineEnd, int layerMask = Physics2D.AllLayers)
    {
        List <GameObject> gameObjectsToCut = new List <GameObject>();

        RaycastHit2D[] hits = Physics2D.LinecastAll(lineStart, lineEnd, layerMask);
        foreach (RaycastHit2D hit in hits)
        {
            if (HitCounts(hit))
            {
                gameObjectsToCut.Add(hit.transform.gameObject);
            }
        }

        foreach (GameObject go in gameObjectsToCut)
        {
            SpriteCutterOutput output = SpriteCutter.Cut(new SpriteCutterInput()
            {
                lineStart              = lineStart,
                lineEnd                = lineEnd,
                gameObject             = go,
                gameObjectCreationMode = SpriteCutterInput.GameObjectCreationMode.CUT_OFF_COPY,
            });
        }
    }
Example #7
0
    void LinecastCut(Vector2 lineStart, Vector2 lineEnd, int layerMask = Physics2D.AllLayers)
    {
        ready = false;
        List <GameObject> gameObjectsToCut = new List <GameObject>();

        RaycastHit2D[] hits = Physics2D.LinecastAll(lineStart, lineEnd, layerMask);

        foreach (RaycastHit2D hit in hits)
        {
            if (HitCounts(hit))
            {
                gameObjectsToCut.Add(hit.transform.gameObject);
            }
        }

        foreach (GameObject go in gameObjectsToCut)
        {
            segmentArea = 4;
            if (intersectionSegments.ContainsKey(go))
            {
                segmentArea = intersectionSegments[go];
            }
            mass = go.GetComponent <Rigidbody2D>().mass;



            SpriteCutterOutput output = SpriteCutter.Cut(new SpriteCutterInput()
            {
                lineStart              = lineStart,
                lineEnd                = lineEnd,
                gameObject             = go,
                gameObjectCreationMode = SpriteCutterInput.GameObjectCreationMode.CUT_OFF_ONE,
            });


            if (output != null && output.secondSideGameObject != null)
            {
                output.firstSideGameObject.tag  = "shadow";
                output.secondSideGameObject.tag = "shadow";

                Rigidbody2D newRigidbody = output.secondSideGameObject.AddComponent <Rigidbody2D>();
                newRigidbody.gravityScale = 1;

                output.firstSideGameObject.GetComponent <Rigidbody2D>().isKinematic  = true;
                output.secondSideGameObject.GetComponent <Rigidbody2D>().isKinematic = true;



                float mass1 = mass * segmentArea / 4;
                float mass2 = mass - (mass * segmentArea / 4);

                if (mass1 < 0.2f)
                {
                    mass1 = 0.2f;
                }
                if (mass2 < 0.2f)
                {
                    mass2 = 0.2f;
                }

                if (output.firstSideGameObject.GetComponent <Collider2D>().bounds.size.magnitude > output.secondSideGameObject.GetComponent <Collider2D>().bounds.size.magnitude)
                {
                    output.firstSideGameObject.GetComponent <Rigidbody2D>().mass  = mass1;
                    output.secondSideGameObject.GetComponent <Rigidbody2D>().mass = mass2;
                }
                else
                {
                    output.secondSideGameObject.GetComponent <Rigidbody2D>().mass = mass2;
                    output.firstSideGameObject.GetComponent <Rigidbody2D>().mass  = mass1;
                }



                toEnable.Add(output.firstSideGameObject);
                toEnable.Add(output.secondSideGameObject);
            }
        }

        ready = true;
    }