示例#1
0
        /// <summary>
        /// Select towers or position ghosts
        /// </summary>
        void OnTap(PointerActionInfo pointer)
        {
            // We only respond to mouse info
            var mouseInfo = pointer as MouseButtonInfo;


            if (mouseInfo != null && !mouseInfo.startedOverUI)
            {
                if (m_GameUI.isBuilding)
                {
                    if (mouseInfo.mouseButtonId == 0)                     // LMB confirms
                    {
                        m_GameUI.TryPlaceTower(pointer);
                    }
                    else                     // RMB cancels
                    {
                        m_GameUI.CancelGhostPlacement();
                    }
                }
                else
                {
                    if (mouseInfo.mouseButtonId == 0)
                    {
                        // select towers
                        m_GameUI.TrySelectTower(pointer);
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Called on tap,
        /// calls confirmation of tower placement
        /// </summary>
        protected virtual void OnTap(PointerActionInfo pointerActionInfo)
        {
            var touchInfo = pointerActionInfo as TouchInfo;

            if (touchInfo != null)
            {
                if (m_GameUI.state == State.Normal && !touchInfo.startedOverUI)
                {
                    m_GameUI.TrySelectTower(touchInfo);
                }
                else if (m_GameUI.state == State.Building && !touchInfo.startedOverUI)
                {
                    Debug.Log("OnTap");
                    m_GameUI.TryMoveGhost(touchInfo, false);
                    if (m_GameUI.IsGhostAtValidPosition() && m_GameUI.IsValidPurchase())
                    {
                        confirmationButtons.canvasEnabled = true;
                        invalidButtons.canvasEnabled      = false;
                        confirmationButtons.TryMove(touchInfo.currentPosition);
                    }
                    else
                    {
                        invalidButtons.canvasEnabled = true;
                        invalidButtons.TryMove(touchInfo.currentPosition);
                        confirmationButtons.canvasEnabled = false;
                    }
                }
            }
        }
示例#3
0
    /// <summary>
    /// Do flicks, on release only
    /// </summary>
    /// <param name="pointer">The release pointer event</param>
    protected void DoReleaseFlick(PointerActionInfo pointer)
    {
        var touchInfo = pointer as TouchInfo;

        if (touchInfo != null && touchInfo.flickVelocity.sqrMagnitude > Mathf.Epsilon)
        {
            // We have a flick!
            // Work out velocity from motion
            Ray prevRay = cameraRig.cachedCamera.ScreenPointToRay(pointer.currentPosition -
                                                                  pointer.flickVelocity);
            Ray currRay = cameraRig.cachedCamera.ScreenPointToRay(pointer.currentPosition);

            Vector3 startPoint = Vector3.zero;
            Vector3 endPoint   = Vector3.zero;
            float   dist;

            if (cameraRig.floorPlane.Raycast(prevRay, out dist))
            {
                startPoint = prevRay.GetPoint(dist);
            }
            if (cameraRig.floorPlane.Raycast(currRay, out dist))
            {
                endPoint = currRay.GetPoint(dist);
            }

            // Work out that movement in units per second
            m_FlickDirection = (startPoint - endPoint) / Time.deltaTime;
        }
    }
示例#4
0
 /// <summary>
 /// Called when we drag
 /// </summary>
 protected virtual void OnDrag(PointerActionInfo pointer)
 {
     if (cameraRig != null)
     {
         DoRightMouseDragPan(pointer);
     }
 }
示例#5
0
 /// <summary>
 /// Called on input press, for MMB panning
 /// </summary>
 protected virtual void OnPress(PointerActionInfo pointer)
 {
     if (cameraRig != null)
     {
         DoMiddleMousePan(pointer);
     }
 }
示例#6
0
 /// <summary>
 /// Called on input release
 /// </summary>
 protected virtual void OnRelease(PointerActionInfo pointer)
 {
     if (cameraRig != null)
     {
         DoReleaseFlick(pointer);
     }
 }
示例#7
0
    /// <summary>
    /// Controls the pan with a drag
    /// </summary>
    protected void DoDragPan(PointerActionInfo pointer)
    {
        var touchInfo = pointer as TouchInfo;

        if (touchInfo != null)
        {
            // Work out movement amount by raycasting onto floor plane from delta positions
            // and getting that distance
            Ray currRay = cameraRig.cachedCamera.ScreenPointToRay(touchInfo.currentPosition);

            Vector3 endPoint = Vector3.zero;
            float   dist;
            if (cameraRig.floorPlane.Raycast(currRay, out dist))
            {
                endPoint = currRay.GetPoint(dist);
            }
            // Pan
            Ray     prevRay    = cameraRig.cachedCamera.ScreenPointToRay(touchInfo.previousPosition);
            Vector3 startPoint = Vector3.zero;

            if (cameraRig.floorPlane.Raycast(prevRay, out dist))
            {
                startPoint = prevRay.GetPoint(dist);
            }
            Vector3 panAmount = startPoint - endPoint;
            // If this is a touch, we divide the pan amount by the number of touches
            if (UnityInput.touchCount > 0)
            {
                panAmount /= UnityInput.touchCount;
            }

            PanCamera(panAmount);
        }
    }
示例#8
0
 /// <summary>
 /// Called on input press
 /// </summary>
 protected virtual void OnPress(PointerActionInfo pointer)
 {
     if (cameraRig != null)
     {
         DoFlickCatch(pointer);
     }
 }
        /// <summary>
        /// Select towers or position ghosts
        /// </summary>
        void OnTap(PointerActionInfo pointer)
        {
            // We only respond to gesture info
            var gestureInfo = pointer as GestureInfo;

            if (gestureInfo != null && !gestureInfo.startedOverUI)
            {
                if (m_GameUI.isBuilding)
                {
                    if (gestureInfo.gestureId == 0) // Tap confirms
                    {
                        m_GameUI.TryPlaceTower(pointer);
                    }
                    else // H??? cancels
                    {
                        m_GameUI.CancelGhostPlacement();
                    }
                }
                else
                {
                    if (gestureInfo.gestureId == 0)
                    {
                        // select towers
                        m_GameUI.TrySelectTower(pointer);
                    }
                }
            }
        }
    /// <summary>
    /// Select towers or position ghosts
    /// </summary>
    void OnTap(PointerActionInfo pointer)
    {
        // We only respond to mouse info
        var mouseInfo = pointer as MouseButtonInfo;

        if (mouseInfo != null && !mouseInfo.startedOverUI)
        {
            XEventBus.Instance.Post(EventId.UserClick);
            if (gameUIManager.isBuilding)
            {
                if (mouseInfo.mouseButtonId == 0)
                {
                    //放置
                    gameUIManager.TryPlaceTarget(mouseInfo);
                }
                else // RMB cancels
                {
                    //取消动作
                    gameUIManager.CancelGhostPlacement();
                }
            }
            else
            {
                if (mouseInfo.mouseButtonId == 0) // LMB confirms
                {
                    //尝试选择
                    gameUIManager.TrySelectTarget(mouseInfo);
                }
            }
        }
    }
示例#11
0
 /// <summary>
 /// Called when we drag
 /// </summary>
 protected virtual void OnDrag(PointerActionInfo pointer)
 {
     // Drag panning for touch input
     if (cameraRig != null)
     {
         DoDragPan(pointer);
     }
 }
示例#12
0
        /// <summary>
        /// Called on tap,
        /// calls confirmation of tower placement
        /// </summary>
        protected virtual void OnTap(PointerActionInfo pointerActionInfo)
        {
            var touchInfo = pointerActionInfo as TouchInfo;

            if (touchInfo != null)
            {
            }
        }
示例#13
0
        /// <summary>
        /// Assigns the drag pointer and sets the UI into drag mode
        /// </summary>
        /// <param name="pointer"></param>
        protected virtual void OnStartDrag(PointerActionInfo pointer)
        {
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null)
            {
            }
        }
示例#14
0
    /// <summary>
    /// Update a TouchInfo with movement
    /// </summary>
    /// <param name="touch">The Unity touch object</param>
    /// <param name="existingTouch">The object that's tracking Unity's touch</param>
    void UpdateMovingFinger(Touch touch, PointerActionInfo existingTouch)
    {
        float dragDist = touch.deltaPosition.magnitude;

        existingTouch.previousPosition = existingTouch.currentPosition;
        existingTouch.currentPosition = touch.position;
        existingTouch.delta = touch.deltaPosition;
        existingTouch.totalMovement += dragDist;
    }
示例#15
0
        /// <summary>
        /// Select towers or position ghosts
        /// </summary>
        void OnTap(PointerActionInfo pointer)
        {
            // We only respond to mouse info
            var mouseInfo = pointer as MouseButtonInfo;

            if (mouseInfo != null && !mouseInfo.startedOverUI)
            {
            }
        }
示例#16
0
        /// <summary>
        /// Called on input release, for flicks
        /// </summary>
        protected override void OnRelease(PointerActionInfo pointer)
        {
            // Override normal behaviour. We only want to do flicks if there's no ghost selected
            // For this reason, we intentionally do not call base
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null)
            {
            }
        }
示例#17
0
        /// <summary>
        /// Called on input press
        /// </summary>
        protected override void OnPress(PointerActionInfo pointer)
        {
            base.OnPress(pointer);
            var touchInfo = pointer as TouchInfo;

            // Press starts on a ghost? Then we can pick it up
            if (touchInfo != null)
            {
            }
        }
示例#18
0
    /// <summary>
    /// "Catch" flicks on press, to stop the panning momentum
    /// </summary>
    /// <param name="pointer">The press pointer event</param>
    protected void DoFlickCatch(PointerActionInfo pointer)
    {
        var touchInfo = pointer as TouchInfo;

        // Stop flicks on touch
        if (touchInfo != null)
        {
            m_FlickDirection = Vector2.zero;
            cameraRig.StopTracking();
        }
    }
示例#19
0
        /// <summary>
        /// Called when we drag
        /// </summary>
        protected override void OnDrag(PointerActionInfo pointer)
        {
            // Override normal behaviour. We only want to pan if there's no ghost selected
            // For this reason, we intentionally do not call base
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null)
            {
                // Try to pick up the tower if it was dragged off
            }
        }
示例#20
0
        /// <summary>
        /// Assigns the drag pointer and sets the UI into drag mode
        /// </summary>
        /// <param name="pointer"></param>
        protected virtual void OnStartDrag(PointerActionInfo pointer)
        {
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null)
            {
                if (m_IsGhostSelected)
                {
                    m_GameUI.ChangeToDragMode();
                    m_DragPointer = touchInfo;
                }
            }
        }
示例#21
0
        /// <summary>
        /// Called on tap,
        /// calls confirmation of tower placement
        /// </summary>
        protected virtual void OnTap(PointerActionInfo pointer)
        {
            XEventBus.Instance.Post(EventId.UserClick);
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null && !touchInfo.startedOverUI)
            {
                if (!gameUIManager.isBuilding)
                {
                    gameUIManager.TrySelectTarget(touchInfo);
                }
            }
        }
示例#22
0
        protected override void OnDrag(PointerActionInfo pointer)
        {
            base.OnDrag(pointer);
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null && !touchInfo.startedOverUI)
            {
                if (gameUIManager.isBuilding)
                {
                    gameUIManager.TryMoveGhost(touchInfo);
                }
            }
        }
示例#23
0
        protected override void OnRelease(PointerActionInfo pointer)
        {
            base.OnRelease(pointer);
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null && !touchInfo.startedOverUI)
            {
                if (gameUIManager.isBuilding)
                {
                    gameUIManager.CancelGhostPlacement();
                }
            }
        }
示例#24
0
 /// <summary>
 /// Update a TouchInfo that might be holding
 /// </summary>
 /// <param name="existingTouch"></param>
 void UpdateHoldingFinger(PointerActionInfo existingTouch)
 {
     if (!existingTouch.isHold &&
         !existingTouch.isDrag &&
         Time.realtimeSinceStartup - existingTouch.startTime >= holdTime)
     {
         existingTouch.isHold = true;
         if (startedHold != null)
         {
             startedHold(existingTouch);
         }
     }
 }
示例#25
0
        /// <summary>
        /// Called on input press
        /// </summary>
        protected override void OnPress(PointerActionInfo pointer)
        {
            base.OnPress(pointer);
            var touchInfo = pointer as TouchInfo;

            // Press starts on a ghost? Then we can pick it up
            if (touchInfo != null)
            {
                if (m_GameUI.state == State.Building)
                {
                    m_IsGhostSelected = m_GameUI.IsPointerOverGhost(pointer);
                    if (m_IsGhostSelected)
                    {
                        m_DragPointer = touchInfo;
                    }
                }
            }
        }
示例#26
0
        /// <summary>
        /// Called on input release, for flicks
        /// </summary>
        protected override void OnRelease(PointerActionInfo pointer)
        {
            // Override normal behaviour. We only want to do flicks if there's no ghost selected
            // For this reason, we intentionally do not call base
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null)
            {
                // Show UI on release
                if (m_GameUI.isBuilding)
                {
                    Vector2 screenPoint = cameraRig.cachedCamera.WorldToScreenPoint(m_GameUI.GetGhostPosition());
                    if (m_GameUI.IsGhostAtValidPosition() && m_GameUI.IsValidPurchase())
                    {
                        confirmationButtons.canvasEnabled = true;
                        invalidButtons.canvasEnabled      = false;
                        confirmationButtons.TryMove(screenPoint);
                    }
                    else
                    {
                        invalidButtons.canvasEnabled      = true;
                        confirmationButtons.canvasEnabled = false;
                        confirmationButtons.TryMove(screenPoint);
                    }
                    if (m_IsGhostSelected)
                    {
                        m_GameUI.ReturnToBuildMode();
                    }
                }
                if (!m_IsGhostSelected && cameraRig != null)
                {
                    // Do normal base behaviour here
                    DoReleaseFlick(pointer);
                }

                m_IsGhostSelected = false;

                // Reset m_DragPointer if released
                if (m_DragPointer != null && m_DragPointer.touchId == touchInfo.touchId)
                {
                    m_DragPointer = null;
                }
            }
        }
示例#27
0
    /// <summary>
    /// Pan with right mouse
    /// </summary>
    /// <param name="pointer">The drag pointer event</param>
    protected void DoRightMouseDragPan(PointerActionInfo pointer)
    {
        var mouseInfo = pointer as MouseButtonInfo;

        if ((mouseInfo != null) &&
            (mouseInfo.mouseButtonId == 1))
        {
            // Calculate zoom ratio
            float zoomRatio = GetPanSpeedForZoomLevel();

            Vector2 panVector = mouseInfo.currentPosition - mouseInfo.startPosition;
            panVector = (panVector * Time.deltaTime * mouseRmbPanSpeed * zoomRatio) / screenPanThreshold;

            var camVector = new Vector3(panVector.x, 0, panVector.y);
            cameraRig.PanCamera(camVector);

            cameraRig.StopTracking();
        }
    }
示例#28
0
    /// <summary>
    /// Pan with middle mouse
    /// </summary>
    /// <param name="pointer">Pointer with press event</param>
    protected void DoMiddleMousePan(PointerActionInfo pointer)
    {
        var mouseInfo = pointer as MouseButtonInfo;

        // Pan to mouse position on MMB
        if ((mouseInfo != null) &&
            (mouseInfo.mouseButtonId == 2))
        {
            // First get floor position of cursor
            Ray ray = cameraRig.cachedCamera.ScreenPointToRay(UnityInput.mousePosition);

            float dist;

            if (cameraRig.floorPlane.Raycast(ray, out dist))
            {
                Vector3 worldPos = ray.GetPoint(dist);
                cameraRig.PanTo(worldPos);
            }

            cameraRig.StopTracking();
        }
    }
示例#29
0
        /// <summary>
        /// Called when we drag
        /// </summary>
        protected override void OnDrag(PointerActionInfo pointer)
        {
            // Override normal behaviour. We only want to pan if there's no ghost selected
            // For this reason, we intentionally do not call base
            var touchInfo = pointer as TouchInfo;

            if (touchInfo != null)
            {
                // Try to pick up the tower if it was dragged off
                if (m_IsGhostSelected)
                {
                    m_GameUI.TryMoveGhost(pointer, false);
                }

                if (m_GameUI.state == State.BuildingWithDrag)
                {
                    DragGhost(touchInfo);
                }
                else
                {
                    // Do normal base behaviour only if no ghost selected
                    if (cameraRig != null)
                    {
                        DoDragPan(pointer);

                        if (invalidButtons.canvasEnabled)
                        {
                            invalidButtons.TryMove(cameraRig.cachedCamera.WorldToScreenPoint(m_GameUI.GetGhostPosition()));
                        }
                        if (confirmationButtons.canvasEnabled)
                        {
                            confirmationButtons.TryMove(cameraRig.cachedCamera.WorldToScreenPoint(m_GameUI.GetGhostPosition()));
                        }
                    }
                }
            }
        }
 void StartShooting(PointerActionInfo info)
 {
     shoulFire = true;
 }