Пример #1
0
        private void HandleMovement()
        {
            // todo; if clicked on hud, then we don't move. But when clicked on map and move cursor over hud, then it's fine
            if (gameHUD.IsMouseOver())
            {
                return;
            }

            var mx = mouseInfoProvider.MouseX - 400 - gameState.CameraOffset;
            var my = mouseInfoProvider.MouseY - 300;

            var tx = (mx / 60f + my / 40f) / 2f;
            var ty = (my / 40f - (mx / 60f)) / 2f;
            var cursorDirection = (int)Math.Round(Math.Atan2(ty, tx) * Rad2Deg);

            if (cursorDirection < 0)
            {
                cursorDirection += 360;
            }
            var actualDirection = (byte)(cursorDirection / 22);

            if (actualDirection >= 16)
            {
                actualDirection -= 16;
            }

            if (mouseInfoProvider.LeftMouseDown && (lastMovementType == eMovementType.Stopped || lastDirection != actualDirection))
            {
                lastDirection    = actualDirection;
                lastMovementType = gameHUD.IsRunningEnabled ? eMovementType.Running : eMovementType.Walking;
                sessionManager.MoveRequest(actualDirection, lastMovementType);
            }
            else if (!mouseInfoProvider.LeftMouseDown && lastMovementType != eMovementType.Stopped)
            {
                lastDirection    = actualDirection;
                lastMovementType = eMovementType.Stopped;
                sessionManager.MoveRequest(actualDirection, lastMovementType);
            }
        }
Пример #2
0
        private void HandleMovement(long ms)
        {
            if (mouseInfoProvider.ReserveMouse)
            {
                return;
            }

            if (gameHUD.IsMouseOver() && lastMovementType == eMovementType.Stopped)
            {
                clickedOnHud = true;
            }
            else if (!mouseInfoProvider.LeftMouseDown)
            {
                clickedOnHud = false;
            }

            if (clickedOnHud)
            {
                return;
            }

            /*
             * var mx = mouseInfoProvider.MouseX - 400 - gameState.CameraOffset;
             * var my = mouseInfoProvider.MouseY - 300;
             *
             * var tx = (mx / 60f + my / 40f) / 2f;
             * var ty = (my / 40f - (mx / 60f)) / 2f;
             */

            if (mouseInfoProvider.LeftMouseDown)
            {
                lastMoveSend += (ms / 1000f);
                holdMoveTime += (ms / 1000f);
                if (lastMoveSend < .25f)
                {
                    return;
                }
                lastMoveSend = 0f;
                var selectedCell = _mapRenderer.GetCellPositionAt(mouseInfoProvider.MouseX, mouseInfoProvider.MouseY);
#if DEBUG
                log.Debug($"Move to cell: ({selectedCell.X}, {selectedCell.Y})");
#endif
                sessionManager.MoveRequest(selectedCell, gameHUD.IsRunningEnabled ? eMovementType.Running : eMovementType.Walking);
            }
            else
            {
                lastMoveSend = 1f; // Next click will always send a mouse move request (TODO: Should this be limited as well?)

                if (holdMoveTime > 0.2f)
                {
                    var player = gameState.PlayerInfos.First(x => x.UID == _mapRenderer.FocusedPlayerId);
                    sessionManager.MoveRequest(new System.Drawing.PointF(player.X, player.Y), eMovementType.Stopped);
                }
                holdMoveTime = 0f;
            }

            /*
             * var cursorDirection = (int)Math.Round(Math.Atan2(ty, tx) * Rad2Deg);
             * if (cursorDirection < 0)
             *  cursorDirection += 360;
             * var actualDirection = (byte)(cursorDirection / 22);
             * if (actualDirection >= 16)
             *  actualDirection -= 16;
             *
             * if (mouseInfoProvider.LeftMouseDown && (lastMovementType == eMovementType.Stopped || lastDirection != actualDirection))
             * {
             *  lastDirection = actualDirection;
             *  lastMovementType = gameHUD.IsRunningEnabled ? eMovementType.Running : eMovementType.Walking;
             *  sessionManager.MoveRequest(actualDirection, lastMovementType);
             * }
             * else if (!mouseInfoProvider.LeftMouseDown && lastMovementType != eMovementType.Stopped)
             * {
             *  lastDirection = actualDirection;
             *  lastMovementType = eMovementType.Stopped;
             *  sessionManager.MoveRequest(actualDirection, lastMovementType);
             * }
             */
        }