private void Awake()
    {
        manualInput       = GetComponent <ManualInput>();
        animationProgress = GetComponent <AnimationProgress>();
        aiProgress        = GetComponentInChildren <AIProgress>();
        damageDetector    = GetComponentInChildren <DamageDetector>();
        boxCollider       = GetComponent <BoxCollider>();
        animator          = GetComponentInChildren <Animator>();
        obstacle          = GetComponent <NavMeshObstacle>();

        collisionSpheres       = GetComponentInChildren <CollisionSpheres>();
        collisionSpheres.owner = this;
        CollisionSpheres.SetupColliders(boxCollider, out float bottom, out float top, out float front, out float back, out float right, out float left);
        collisionSpheres.PlaceEdgeSphere(bottom, top, front, back, left, right);
        collisionSpheres.FindEveryChild(gameObject.transform);

        aiController = GetComponentInChildren <AIController>();
        if (aiController == null)
        {
            if (obstacle != null)
            {
                obstacle.carving = true;
            }
        }

        RegisterCharacter();
    }
Ejemplo n.º 2
0
    private void ControlledMove(CharacterControl control, Animator animator, AnimatorStateInfo stateInfo)
    {
        CollisionSpheres collisionSpheres = control.collisionSpheres;

        if (control.moveRight)
        {
            if (!IsBlocked(control, speed, stateInfo))
            {
                control.MoveForward(speed, speedGraph.Evaluate(stateInfo.normalizedTime));
            }
            else
            {
                foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters)
                {
                    foreach (GameObject o in collisionSpheres.frontSpheres)
                    {
                        if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(Vector3.right), out RaycastHit hit, blockDistance))
                        {
                            if (!control.GetComponent <ManualInput>().enabled)
                            {
                                float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position);

                                if (currentDistance < 2.0f)
                                {
                                    while (IsBlocked(control, speed, stateInfo))
                                    {
                                        Vector3 dist = control.transform.position - hit.transform.position;
                                        //control.transform.position += Vector3.SqrMagnitude(dist) * Time.deltaTime * Vector3.forward;
                                        control.RIGID_BODY.AddForce(control.transform.forward * Vector3.Magnitude(dist) * 100 * Time.deltaTime);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (control.moveLeft)
        {
            if (!IsBlocked(control, speed, stateInfo))
            {
                control.MoveForward(speed, speedGraph.Evaluate(stateInfo.normalizedTime));
            }
            else
            {
                foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters)
                {
                    foreach (GameObject o in collisionSpheres.backSpheres)
                    {
                        if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(-Vector3.right), out RaycastHit hit, blockDistance))
                        {
                            if (!control.GetComponent <ManualInput>().enabled)
                            {
                                float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position);

                                if (currentDistance < 2.0f)
                                {
                                    while (IsBlocked(control, speed, stateInfo))
                                    {
                                        Vector3 dist = control.transform.position - hit.transform.position;
                                        //control.transform.position -= Vector3.SqrMagnitude(dist) * Time.deltaTime * Vector3.forward;
                                        control.RIGID_BODY.AddForce(control.transform.forward * Vector3.Magnitude(dist) * 100 * Time.deltaTime);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (control.moveUp)
        {
            if (!IsBlocked(control, speed, stateInfo))
            {
                if (control.transform.rotation == Quaternion.Euler(0, 0, 0))
                {
                    control.transform.Translate(Vector3.forward * speed * Time.deltaTime);
                }
                else if (control.transform.rotation == Quaternion.Euler(0, 180, 0))
                {
                    control.transform.Translate(Vector3.forward * -speed * Time.deltaTime);
                }
            }
            else
            {
                if (control.transform.rotation == Quaternion.Euler(0, 0, 0))
                {
                    foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters)
                    {
                        foreach (GameObject o in collisionSpheres.forwardSpheres)
                        {
                            if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(Vector3.forward), out RaycastHit hit, blockDistance))
                            {
                                if (!control.GetComponent <ManualInput>().enabled)
                                {
                                    //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position);

                                    //if (currentDistance < 2f)
                                    {
                                        Vector3 dist = control.transform.position - hit.transform.position;
                                        //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * 300 * Time.deltaTime);
                                        //control.transform.Translate(Vector3.right * Time.deltaTime * .35f); //Vector3.Magnitude(dist));
                                        control.transform.position += Time.deltaTime * Vector3.right * Vector3.Magnitude(dist);
                                        //control.RIGID_BODY.MovePosition(control.transform.position + control.transform.right * Time.deltaTime * 30); //* Vector3.Magnitude(dist) * 60);
                                        //control.RIGID_BODY.velocity = control.transform.right * Time.deltaTime * Vector3.Magnitude(dist) * 300;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
                else if (control.transform.rotation == Quaternion.Euler(0, 180, 0))
                {
                    foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters)
                    {
                        foreach (GameObject o in collisionSpheres.backwardSpheres)
                        {
                            if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(Vector3.forward), out RaycastHit hit, blockDistance))
                            {
                                if (!control.GetComponent <ManualInput>().enabled)
                                {
                                    //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position);

                                    //if (currentDistance < 2f)
                                    {
                                        //while (IsBlocked(control, speed, stateInfo))
                                        {
                                            Vector3 dist = control.transform.position - hit.transform.position;
                                            //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * -300 * Time.deltaTime);
                                            control.transform.position -= Vector3.Magnitude(dist) * Time.deltaTime * Vector3.right;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (control.moveDown)
        {
            if (!IsBlocked(control, speed, stateInfo))
            {
                if (control.transform.rotation == Quaternion.Euler(0, 0, 0))
                {
                    control.transform.Translate(Vector3.forward * -speed * Time.deltaTime);
                }
                else if (control.transform.rotation == Quaternion.Euler(0, 180, 0))
                {
                    control.transform.Translate(Vector3.forward * speed * Time.deltaTime);
                }
            }
            else
            {
                if (control.transform.rotation == Quaternion.Euler(0, 0, 0))
                {
                    foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters)
                    {
                        foreach (GameObject o in collisionSpheres.backwardSpheres)
                        {
                            if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(-Vector3.forward), out RaycastHit hit, blockDistance))
                            {
                                if (!control.GetComponent <ManualInput>().enabled)
                                {
                                    //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position);

                                    //if (currentDistance < 2f)
                                    {
                                        //while (IsBlocked(control, speed, stateInfo))
                                        {
                                            Vector3 dist = control.transform.position - hit.transform.position;
                                            //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * 300 * Time.deltaTime);
                                            control.transform.position += Vector3.Magnitude(dist) * Time.deltaTime * Vector3.right;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                else if (control.transform.rotation == Quaternion.Euler(0, 180, 0))
                {
                    foreach (CharacterControl co in FindObjectOfType <CharacterManager>().characters)
                    {
                        foreach (GameObject o in collisionSpheres.forwardSpheres)
                        {
                            if (Physics.Raycast(o.transform.position, o.transform.TransformDirection(-Vector3.forward), out RaycastHit hit, blockDistance))
                            {
                                if (!control.GetComponent <ManualInput>().enabled)
                                {
                                    //float currentDistance = Vector3.Distance(control.transform.position, hit.transform.position);

                                    //if (currentDistance < 2f)
                                    {
                                        //while (IsBlocked(control, speed, stateInfo))
                                        {
                                            Vector3 dist = control.transform.position - hit.transform.position;
                                            control.transform.position -= Vector3.Magnitude(dist) * Time.deltaTime * Vector3.right;
                                            //control.RIGID_BODY.AddForce(control.transform.right * Vector3.Magnitude(dist) * -300 * Time.deltaTime);
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        CheckTurn(control);
    }
Ejemplo n.º 3
0
 private void Awake()
 {
     damageTaken      = 0;
     control          = GetComponent <CharacterControl>();
     collisionSpheres = GetComponentInChildren <CollisionSpheres>();
 }