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); } }
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); * } */ }