diff --git a/ClassicalSharp/2D/Screens/DeathScreen.cs b/ClassicalSharp/2D/Screens/DeathScreen.cs index 069784a6e..16a33935d 100644 --- a/ClassicalSharp/2D/Screens/DeathScreen.cs +++ b/ClassicalSharp/2D/Screens/DeathScreen.cs @@ -13,7 +13,7 @@ namespace ClassicalSharp.Gui.Screens { public override void Init() { base.Init(); titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 40, FontStyle.Regular); + regularFont = new Font(game.FontName, 40); ContextRecreated(); } diff --git a/ClassicalSharp/2D/Screens/DisconnectScreen.cs b/ClassicalSharp/2D/Screens/DisconnectScreen.cs index 7f8a6581f..8d06d846d 100644 --- a/ClassicalSharp/2D/Screens/DisconnectScreen.cs +++ b/ClassicalSharp/2D/Screens/DisconnectScreen.cs @@ -21,7 +21,7 @@ namespace ClassicalSharp.Gui.Screens { canReconnect = !(reason.StartsWith("Kicked ") || reason.StartsWith("Banned ")); titleFont = new Font(game.FontName, 16, FontStyle.Bold); - messageFont = new Font(game.FontName, 16, FontStyle.Regular); + messageFont = new Font(game.FontName, 16); BlocksWorld = true; HidesHud = true; HandlesAllInput = true; diff --git a/ClassicalSharp/2D/Screens/FpsScreen.cs b/ClassicalSharp/2D/Screens/FpsScreen.cs index 03356de54..c82921edc 100644 --- a/ClassicalSharp/2D/Screens/FpsScreen.cs +++ b/ClassicalSharp/2D/Screens/FpsScreen.cs @@ -11,7 +11,7 @@ using Android.Graphics; namespace ClassicalSharp.Gui.Screens { public class FpsScreen : Screen, IGameComponent { - Font font, posFont; + Font font; StringBuffer text; public FpsScreen(Game game) : base(game) { @@ -72,7 +72,6 @@ namespace ClassicalSharp.Gui.Screens { public override void Init() { font = new Font(game.FontName, 16); - posFont = new Font(game.FontName, 16, FontStyle.Regular); ContextRecreated(); game.Events.ChatFontChanged += ChatFontChanged; @@ -95,11 +94,11 @@ namespace ClassicalSharp.Gui.Screens { fpsText.SetText(msg); posAtlas = new TextAtlas(game, 16); - posAtlas.Pack("0123456789-, ()", posFont, "Position: "); + posAtlas.Pack("0123456789-, ()", font, "Position: "); posAtlas.tex.Y = (short)(fpsText.Height + 2); int yOffset = fpsText.Height + posAtlas.tex.Height + 2; - hackStates = new TextWidget(game, posFont) + hackStates = new TextWidget(game, font) .SetLocation(Anchor.LeftOrTop, Anchor.LeftOrTop, 2, yOffset); hackStates.ReducePadding = true; hackStates.Init(); @@ -108,7 +107,6 @@ namespace ClassicalSharp.Gui.Screens { public override void Dispose() { font.Dispose(); - posFont.Dispose(); ContextLost(); game.Events.ChatFontChanged -= ChatFontChanged; diff --git a/ClassicalSharp/2D/Screens/Menu/EditHotkeyScreen.cs b/ClassicalSharp/2D/Screens/Menu/EditHotkeyScreen.cs index 1dc9bda96..20cac7bdb 100644 --- a/ClassicalSharp/2D/Screens/Menu/EditHotkeyScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/EditHotkeyScreen.cs @@ -64,7 +64,7 @@ namespace ClassicalSharp.Gui.Screens { base.Init(); game.Keyboard.KeyRepeat = true; titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); ContextRecreated(); } diff --git a/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs b/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs index 7fdb41ecf..d17294ade 100644 --- a/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs @@ -42,7 +42,7 @@ namespace ClassicalSharp.Gui.Screens { base.Init(); game.Keyboard.KeyRepeat = true; titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); ContextRecreated(); } diff --git a/ClassicalSharp/2D/Screens/Menu/KeyBindingsScreen.cs b/ClassicalSharp/2D/Screens/Menu/KeyBindingsScreen.cs index 4d0533b6c..ea7060aad 100644 --- a/ClassicalSharp/2D/Screens/Menu/KeyBindingsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/KeyBindingsScreen.cs @@ -20,7 +20,7 @@ namespace ClassicalSharp.Gui.Screens { public override void Init() { titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); base.Init(); if (keyNames == null) diff --git a/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs b/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs index 73460d53c..7449b471a 100644 --- a/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs @@ -38,7 +38,7 @@ namespace ClassicalSharp.Gui.Screens { public override void Init() { base.Init(); titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); game.Keyboard.KeyRepeat = true; } diff --git a/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs b/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs index 4a65d7abf..d02e629a1 100644 --- a/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs @@ -27,7 +27,7 @@ namespace ClassicalSharp.Gui.Screens { base.Init(); game.Events.HackPermissionsChanged += CheckHacksAllowed; titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); ContextRecreated(); } diff --git a/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs b/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs index 67e1b3e56..a81ef472f 100644 --- a/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs @@ -54,7 +54,7 @@ namespace ClassicalSharp.Gui.Screens { base.Init(); game.Keyboard.KeyRepeat = true; titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); ContextRecreated(); } diff --git a/ClassicalSharp/2D/Screens/WarningScreen.cs b/ClassicalSharp/2D/Screens/WarningScreen.cs index b35297335..f93d6becf 100644 --- a/ClassicalSharp/2D/Screens/WarningScreen.cs +++ b/ClassicalSharp/2D/Screens/WarningScreen.cs @@ -36,7 +36,7 @@ namespace ClassicalSharp.Gui.Screens { public override void Init() { base.Init(); titleFont = new Font(game.FontName, 16, FontStyle.Bold); - regularFont = new Font(game.FontName, 16, FontStyle.Regular); + regularFont = new Font(game.FontName, 16); backCol.A = 210; if (game.Graphics.LostContext) return; diff --git a/ClassicalSharp/Game/Game.Init.cs b/ClassicalSharp/Game/Game.Init.cs index 0e48d20ca..8e30a42a7 100644 --- a/ClassicalSharp/Game/Game.Init.cs +++ b/ClassicalSharp/Game/Game.Init.cs @@ -220,8 +220,10 @@ namespace ClassicalSharp { ScheduledTask entTask; void InitScheduledTasks() { const double defTicks = 1.0 / 20; + double netTicks = Server.IsSinglePlayer ? (1.0 / 20) : (1.0 / 60); + AddScheduledTask(30, AsyncDownloader.PurgeOldEntriesTask); - AddScheduledTask(defTicks, Server.Tick); + AddScheduledTask(netTicks, Server.Tick); entTask = AddScheduledTask(defTicks, Entities.Tick); AddScheduledTask(defTicks, ParticleManager.Tick); diff --git a/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs b/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs index 3a25b5f03..145457676 100644 --- a/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs +++ b/ClassicalSharp/GraphicsAPI/Direct3D9Api.cs @@ -403,11 +403,11 @@ namespace ClassicalSharp.GraphicsAPI { void LoopUntilRetrieved() { ScheduledTask task = new ScheduledTask(); - task.Interval = 1.0 / 20; + task.Interval = 1.0 / 60; task.Callback = LostContextFunction; while (true) { - Thread.Sleep(50); + Thread.Sleep(16); uint code = (uint)device.TestCooperativeLevel(); if ((uint)code == (uint)Direct3DError.DeviceNotReset) return; diff --git a/ClassicalSharp/Network/NetworkProcessor.cs b/ClassicalSharp/Network/NetworkProcessor.cs index 4d0373a6d..e828f82b4 100644 --- a/ClassicalSharp/Network/NetworkProcessor.cs +++ b/ClassicalSharp/Network/NetworkProcessor.cs @@ -40,10 +40,9 @@ namespace ClassicalSharp.Network { internal WoMProtocol wom; internal CPESupport cpeData; - internal ScheduledTask task; internal bool receivedFirstPosition; internal byte[] needRemoveNames = new byte[256 >> 3]; - int pingTicks; + int netTicks, pingTicks; public override void Connect(IPAddress address, int port) { socket = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); @@ -94,9 +93,6 @@ namespace ClassicalSharp.Network { } if (Disconnected) return; - LocalPlayer player = game.LocalPlayer; - this.task = task; - try { reader.ReadPendingData(); } catch (SocketException ex) { @@ -112,6 +108,8 @@ namespace ClassicalSharp.Network { if (cpeData.needD3Fix && lastOpcode == Opcode.CpeHackControl && (opcode == 0x00 || opcode == 0xFF)) { Utils.LogDebug("Skipping invalid HackControl byte from D3 server."); reader.Skip(1); + + LocalPlayer player = game.LocalPlayer; player.physics.jumpVel = 0.42f; // assume default jump height player.physics.serverJumpVel = player.physics.jumpVel; continue; @@ -129,10 +127,17 @@ namespace ClassicalSharp.Network { } reader.RemoveProcessed(); + // Network is ticked 60 times a second. We only send position updates 20 times a second. + if ((netTicks % 3) == 0) CoreTick(); + netTicks++; + } + + void CoreTick() { CheckAsyncResources(); - wom.Tick(); - + wom.Tick(); if (!receivedFirstPosition) return; + + LocalPlayer player = game.LocalPlayer; classic.WritePosition(player.Position, player.HeadY, player.HeadX); pingTicks++; diff --git a/ClassicalSharp/Network/Protocols/Classic.cs b/ClassicalSharp/Network/Protocols/Classic.cs index d7753a009..4a7c553a3 100644 --- a/ClassicalSharp/Network/Protocols/Classic.cs +++ b/ClassicalSharp/Network/Protocols/Classic.cs @@ -101,7 +101,6 @@ namespace ClassicalSharp.Network.Protocols { mapSizeIndex = 0; mapIndex = 0; mapReceiveStart = DateTime.UtcNow; - net.task.Interval = 1.0 / 60; } void HandleLevelDataChunk() { @@ -133,7 +132,6 @@ namespace ClassicalSharp.Network.Protocols { } void HandleLevelFinalise() { - net.task.Interval = 1.0 / 20; game.Gui.SetNewScreen(null); game.Gui.activeScreen = prevScreen; if (prevScreen != null && prevCursorVisible != game.CursorVisible) {