Ejemplo n.º 1
0
        /// <summary>
        /// Moves the camera and based on its current state and changes state based on the controller's acive moves.
        /// </summary>
        protected void HandleState()
        {
            if (!Target)
            {
                return;
            }

            var t = Target.transform;

            if (State == CameraControllerState.Follow)
            {
                if (FollowTarget)
                {
                    DoFollow(t.position);
                }
            }
            else if (State == CameraControllerState.Focus)
            {
                DoFocus(t.position);
            }
            else if (State == CameraControllerState.Pan)
            {
                if (FollowTarget)
                {
                    DoFollow(t.position);
                }

                if (PanDelayTimer > 0f)
                {
                    if ((PanDelayTimer -= Time.deltaTime) < PanTime)
                    {
                        PanDelayTimer = 0f;
                    }
                }
                else
                {
                    if (PanTimer < PanTime)
                    {
                        PanTimer += Time.deltaTime;
                        PanOffset = Vector2.Lerp(PanStart, PanEnd, PanTimer / PanTime);
                    }
                    else
                    {
                        PanTimer = PanTime;
                        State    = CameraControllerState.Follow;
                    }
                }
            }
            else if (State == CameraControllerState.Wait)
            {
                if ((WaitTimer -= Time.deltaTime) < 0f)
                {
                    WaitTimer = 0f;
                    State     = CameraControllerState.Follow;
                }
            }
        }
Ejemplo n.º 2
0
 public void Follow(Transform target, Vector2 followSpeed, Transform minBounds, Transform maxBounds)
 {
     State           = CameraControllerState.Follow;
     Target          = target;
     FollowTarget    = true;
     FollowSpeed     = followSpeed;
     FollowBoundsMin = minBounds;
     FollowBoundsMax = maxBounds;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Pans to the specified offset position over the specified duration, in seconds.
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="seconds"></param>
        public void Pan(Vector2 offset, float seconds, float delay = 0f)
        {
            PanStart = PanOffset;
            PanEnd   = offset;
            PanTimer = 0f;
            PanTime  = seconds;

            PanDelayTimer = State == CameraControllerState.Pan ? Mathf.Min(PanDelayTimer, delay) : delay;
            State         = CameraControllerState.Pan;
        }
Ejemplo n.º 4
0
        public void Awake()
        {
            State        = CameraControllerState.Follow;
            BasePosition = transform.position;
            PanOffset    = Vector2.zero;
            FollowTarget = true;
            WaitTimer    = 0f;

            OnChangeTarget = OnChangeTarget ?? new ChangeTargetEvent();
            Camera         = GetComponent <Camera>();
        }
    private void UpdateState()
    {
        bool panControlKey      = Input.GetKey(KeyCode.LeftShift);
        bool zoomControlKey     = Input.GetKey(KeyCode.LeftControl);
        bool movementInput      = keyboardInput.sqrMagnitude > .01f;
        bool anyControlKeyInput = panControlKey || zoomControlKey;
        bool onlyMouseInput     = IsMouseDown && !anyControlKeyInput;
        bool anyInput           = IsMouseDown || anyControlKeyInput;

        switch (state)
        {
        case CameraControllerState.MovRot:
            if (movementInput || panControlKey || IsMouseDown)
            {
                return;
            }
            break;

        case CameraControllerState.Free:
            if (movementInput || onlyMouseInput)
            {
                state = CameraControllerState.MovRot;
                return;
            }
            if (panControlKey && IsMouseDown)
            {
                state = CameraControllerState.Pan;
                return;
            }
            if (zoomControlKey && IsMouseDown)
            {
                state = CameraControllerState.Zoom;
                return;
            }
            break;

        default:
            if (anyInput)
            {
                return;
            }
            break;
        }
        state = CameraControllerState.Free;
    }
Ejemplo n.º 6
0
 public void Follow()
 {
     State = CameraControllerState.Follow;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Interrupts normal behavior for the specified duration.
 /// </summary>
 /// <param name="seconds">The specified duration, in seconds.</param>
 public void Wait(float seconds)
 {
     WaitTimer = seconds;
     State     = CameraControllerState.Wait;
 }
Ejemplo n.º 8
0
 public void Focus(Transform target, Vector2 focusSpeed)
 {
     State      = CameraControllerState.Focus;
     Target     = target;
     FocusSpeed = focusSpeed;
 }