예제 #1
0
        public void FocusInTheCamTarget(float vel)
        {
            CamFeatures c = features;

            c.contadorDeTempo += Time.deltaTime;

            if (c.distQ == 0)
            {
                alvoQ   = Quaternion.LookRotation(c.Target.forward + c.targetHeightForCam * Vector3.down);
                c.distQ = Quaternion.Angle(alvoQ, c.StarterQ) * Mathf.PI * c.sphericalDistance / 180;
            }

            Quaternion lerp = Quaternion.Lerp(c.StarterQ, alvoQ, c.contadorDeTempo / c.distQ * vel);


            x = lerp.eulerAngles.y;
            y = lerp.eulerAngles.x;
            y = ClampAngle(y, features.yMinLimit, features.yMaxLimit);


            if (c.contadorDeTempo > c.distQ / vel)
            {
                FayvitCamEventAgregator.Publish(new FayvitCamEvent(FayvitCamEventKey.controlableReached, features));
                State = StateCam.controlable;
            }
        }
예제 #2
0
 public void SetFeatures(
     CamFeatures car,
     Vector3 camPosition    = default,
     Quaternion camRotation = default)
 {
     features = car;
     car.MyCamera.position = camPosition;
     car.MyCamera.rotation = camRotation;
 }
예제 #3
0
        void ImmediateFocusPosition()
        {
            immediateFocusPosition = false;
            CamFeatures c     = features;
            Quaternion  alvoQ = Quaternion.LookRotation(c.Target.forward + c.targetHeightForCam * Vector3.down);

            x = alvoQ.eulerAngles.y;
            y = alvoQ.eulerAngles.x;

            SetPositionAndRotation();
        }
예제 #4
0
        void SetPositionAndRotation()
        {
            CamFeatures c        = features;
            Quaternion  rotation = Quaternion.Euler(y, x, 0);

            c.MyCamera.rotation = rotation;

            Vector3 position = rotation * new Vector3(0.0f, 0.0f, -c.sphericalDistance)
                               + features.Target.position + (c.varVerticalHeightPoint + c.HeightCharacter) * Vector3.up;

            c.MyCamera.position = position;
        }
예제 #5
0
        void IniciarFocarCamera(CamFeatures c)
        {
            Debug.Log("Iniciar focar camera");

            if (dir == null)
            {
                dir = new InducedDirection();
            }

            dir.OnStartFocus();

            c.StarterQ        = c.MyCamera.rotation;
            c.contadorDeTempo = 0;
            c.distQ           = 0;
        }
예제 #6
0
        public void ApplyCam(float moveX, float moveY, bool focar, bool autoAjust)
        {
            CamFeatures c = features;

            if (c.Target && c.MyCamera)
            {
                if (focar)
                {
                    IniciarFocarCamera(c);
                    State = StateCam.inFocusing;
                }
                else if (autoAjust && State == StateCam.controlable && c.velAutoAjust > 0)
                {
                    State = StateCam.inAutoAjust;
                }
                else if (State == StateCam.inAutoAjust && !autoAjust)
                {
                    State = StateCam.controlable;
                }

                if (State == StateCam.controlable)
                {
                    ControlableCam(moveX, moveY);
                }
                else if (State == StateCam.inFocusing)
                {
                    FocusInTheCamTarget(c.velToQ);
                }
                else if (State == StateCam.inAutoAjust)
                {
                    IniciarFocarCamera(c);
                    FocusInTheCamTarget(c.velAutoAjust);
                }

                SetPositionAndRotation();

                if (immediateFocusPosition)
                {
                    ImmediateFocusPosition();
                    FayvitCameraSupport.ClearSmooth();
                }
                else
                {
                    FayvitCameraSupport.DodgeWall(c.MyCamera, c.Target.position, c.varVerticalHeightPoint + c.HeightCharacter, true);
                }
            }
        }
예제 #7
0
        //void Focar()
        //{
        //    Quaternion alvoQ = Quaternion.LookRotation(caracteristicas.alvo.forward +
        //                                                caracteristicas.alturaAlvoDaCamera / 10 * Vector3.down);
        //    x = Mathf.LerpAngle(x, alvoQ.eulerAngles.y, caracteristicas.velocidadeMaxFoco * Time.deltaTime);
        //    y = Mathf.LerpAngle(y, alvoQ.eulerAngles.x, caracteristicas.velocidadeMaxFoco * Time.deltaTime);


        //    float paraContinha = Mathf.Min(Mathf.Abs(x - alvoQ.eulerAngles.y), Mathf.Abs(360 - Mathf.Abs(x - alvoQ.eulerAngles.y) % 360));


        //    if (paraContinha % 360 < 5 && Mathf.Abs(y - alvoQ.eulerAngles.x) % 360 < 15)
        //        EstadoAtual = EstadoDeCamera.controlando;

        //}

        //[System.NonSerialized] private Transform posCamHeroi;
        //[System.NonSerialized] private Transform posCamCriature;
        //private DirecaoInduzida dir = new DirecaoInduzida();


        //public Vector3 DirecaoInduzida(float h, float v)
        //{
        //    return dir.Direcao((estadoAtual == EstadoDeCamera.focando), MinhaCamera, h, v);
        //}

        //void SetarTransformsDeRetorno()
        //{
        //    Transform camera = caracteristicas.minhaCamera;

        //    if (caracteristicas.alvo.tag == "Player")
        //    {
        //        if (posCamHeroi == null)
        //        {
        //            posCamHeroi = new GameObject().transform;
        //            //posCamHeroi.parent = GameController.g.transform;
        //            posCamHeroi.name = "Transform de guardar heroi";
        //        }


        //        posCamHeroi.position = camera.position;
        //        posCamHeroi.rotation = posCamHeroi.rotation;
        //    }
        //    else if (caracteristicas.alvo.name == "CriatureAtivo")
        //    {
        //        if (posCamCriature == null)
        //        {
        //            posCamCriature = new GameObject().transform;
        //            //posCamCriature.parent = GameController.g.transform;
        //            posCamCriature.name = "Transform de guardar criature";
        //        }

        //        posCamCriature.position = camera.position;
        //        posCamCriature.rotation = camera.rotation;
        //    }
        //}
        #endregion

        public DirectionalCamera(CamFeatures car)
        {
            this.features = car;
        }