Example #1
0
    void CalculateForce()
    {
        Vector3 directionToApply = new Vector3(0, 0, 0);
        int     i             = 0;
        Vector3 leftDirection = new Vector3(0, 0, 0);
        Vector3 rightDirecton = new Vector3(0, 0, 0);

        _forceLeft  = 0;
        _forceRight = 0;
        dogAmount   = 0;
        int curScore = 0;

        foreach (Dog dog in _leftDogs)
        {
            dogAmount++;
            Vector3 lastInteract = dog.GetLastInteract();
            if (lastInteract != new Vector3(0, 0, 0) && (lastInteract.x < transform.position.x))
            {
                float angle = Mathf.PI / (_leftDogs.Count + 1);
                float x     = _distPlayer * Mathf.Cos(angle * (i + 1) + Mathf.PI / 2);
                float y     = _distPlayer * Mathf.Sin(angle * (i + 1) + Mathf.PI / 2);

                dog.transform.localPosition = new Vector3(x + ((lastInteract.x - (x + transform.position.x)) * 0.1f), y + ((lastInteract.y - (y + transform.position.y)) * 0.2f), 0);

                Vector3 diff = lastInteract - dog.transform.position;
                diff.Normalize();

                float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
                dog.transform.GetChild(0).localRotation = Quaternion.Euler(0f, 0f, rot_z - 90);

                directionToApply += diff * dog.GetForce();
                _forceLeft       += dog.GetForce();
            }
            else
            {
                dog.ResetLastInteract();
                float angle = Mathf.PI / (_leftDogs.Count + 1);
                float x     = _distPlayer * Mathf.Cos(angle * (i + 1) + Mathf.PI / 2);
                float y     = _distPlayer * Mathf.Sin(angle * (i + 1) + Mathf.PI / 2);

                dog.transform.localPosition = new Vector3(x, y, 0);

                Vector3 diff = dog.transform.position - transform.position;
                diff.Normalize();

                float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
                dog.transform.GetChild(0).localRotation = Quaternion.Euler(0f, 0f, rot_z - 90);
            }
            i++;
            leftDirection += dog.transform.localPosition;

            if (dog.gameObject.GetComponent <LineRenderer>() != null)
            {
                dog.gameObject.GetComponent <LineRenderer>().SetPosition(0, Lefthandroot.position);
                dog.gameObject.GetComponent <LineRenderer>().SetPosition(1, dog.transform.position);
            }
            curScore += dog.getValue();
        }

        i = 0;
        foreach (Dog dog in _rightDogs)
        {
            dogAmount++;
            Vector3 lastInteract = dog.GetLastInteract();
            if (lastInteract != new Vector3(0, 0, 0) && (lastInteract.x > transform.position.x))
            {
                float angle = Mathf.PI / (_rightDogs.Count + 1);
                float x     = _distPlayer * Mathf.Cos(angle * (i + 1) + Mathf.PI + Mathf.PI / 2);
                float y     = _distPlayer * Mathf.Sin(angle * (i + 1) + Mathf.PI + Mathf.PI / 2);

                dog.transform.localPosition = new Vector3(x + ((lastInteract.x - (x + transform.position.x)) * 0.1f), y + ((lastInteract.y - (y + transform.position.y)) * 0.2f), 0);

                Vector3 diff = lastInteract - dog.transform.position;
                diff.Normalize();

                float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
                dog.transform.GetChild(0).localRotation = Quaternion.Euler(0f, 0f, rot_z - 90);

                directionToApply += diff * dog.GetForce();
                _forceRight      += dog.GetForce();
            }
            else
            {
                dog.ResetLastInteract();
                float angle = Mathf.PI / (_rightDogs.Count + 1);
                float x     = _distPlayer * Mathf.Cos(angle * (i + 1) + Mathf.PI + Mathf.PI / 2);
                float y     = _distPlayer * Mathf.Sin(angle * (i + 1) + Mathf.PI + Mathf.PI / 2);

                dog.transform.localPosition = new Vector3(x, y, 0);

                Vector3 diff = dog.transform.position - transform.position;
                diff.Normalize();

                float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
                dog.transform.GetChild(0).localRotation = Quaternion.Euler(0f, 0f, rot_z - 90);
            }
            rightDirecton += dog.transform.localPosition;
            if (dog.gameObject.GetComponent <LineRenderer>() != null)
            {
                dog.gameObject.GetComponent <LineRenderer>().SetPosition(0, Righthandroot.position);
                dog.gameObject.GetComponent <LineRenderer>().SetPosition(1, dog.transform.position);
            }
            i++;
            curScore += dog.getValue();
        }
        _rigidbody.AddForce(directionToApply);


        // POSITION ARMS
        leftDirection = leftDirection / _leftDogs.Count;
        rightDirecton = rightDirecton / _rightDogs.Count;
        leftDirection.Normalize();
        rightDirecton.Normalize();

        float Lrot_z = Mathf.Atan2(leftDirection.y, leftDirection.x) * Mathf.Rad2Deg;

        leftArmRoot.transform.localRotation = Quaternion.Euler(0f, 0f, Lrot_z + (leftDirection == new Vector3(0, 0, 0) ? 0 : -90));

        float Rrot_z = Mathf.Atan2(rightDirecton.y, rightDirecton.x) * Mathf.Rad2Deg;

        rightArmRoot.transform.localRotation = Quaternion.Euler(0f, 0f, Rrot_z + (rightDirecton == new Vector3(0, 0, 0) ? 0 : -90));
        //----------

        // JAUGES FORCE
        float forceLeft  = _forceLeft * 1.0f / _maxForcePlayer;
        float forceRight = _forceRight * 1.0f / _maxForcePlayer;

        rightJaugeModuler(forceRight);
        LeftJaugeModuler(forceLeft);

        if (forceLeft >= 1.0f)
        {
            int j = Random.Range(0, _leftDogs.Count);
            _leftDogs[j].Evade();
            _leftDogs.RemoveAt(j);
            StartCoroutine(showExplodeLeft());
        }
        if (forceRight >= 1.0f)
        {
            int j = Random.Range(0, _rightDogs.Count);
            _rightDogs[j].Evade();
            _rightDogs.RemoveAt(j);
            StartCoroutine(showExplodeRight());
        }

        _scoreManager.updateFinalScore(curScore);
    }