From 1eaf22d3d0ea95f7833a37d33e9de0f64de177e1 Mon Sep 17 00:00:00 2001 From: Regalis Date: Sun, 22 Nov 2015 00:40:37 +0200 Subject: [PATCH] v2.6.1 --- Subsurface/Properties/AssemblyInfo.cs | 4 +-- .../Source/Characters/AI/EnemyAIController.cs | 2 +- Subsurface/Source/ContentPackage.cs | 19 +++++++++--- Subsurface/Source/DebugConsole.cs | 8 +++-- Subsurface/Source/GUI/GUITextBlock.cs | 2 +- Subsurface/Source/GUI/GUITextBox.cs | 10 ++++-- .../Items/Components/Machines/Steering.cs | 2 +- Subsurface/Source/Map/Lights/LightManager.cs | 5 +++ Subsurface/Source/Map/Submarine.cs | 3 ++ Subsurface/Source/Screens/GameScreen.cs | 20 ++++++++++-- Subsurface/Source/Screens/MainMenuScreen.cs | 12 ++++++-- Subsurface/Source/Screens/ServerListScreen.cs | 29 ++++++++++++++++-- Subsurface/changelog.txt | 6 ++++ Subsurface_Solution.v12.suo | Bin 724992 -> 868864 bytes 14 files changed, 100 insertions(+), 22 deletions(-) diff --git a/Subsurface/Properties/AssemblyInfo.cs b/Subsurface/Properties/AssemblyInfo.cs index 09223bc74..2040cb113 100644 --- a/Subsurface/Properties/AssemblyInfo.cs +++ b/Subsurface/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.2.5.0")] -[assembly: AssemblyFileVersion("0.2.5.0")] +[assembly: AssemblyVersion("0.2.6.0")] +[assembly: AssemblyFileVersion("0.2.6.0")] diff --git a/Subsurface/Source/Characters/AI/EnemyAIController.cs b/Subsurface/Source/Characters/AI/EnemyAIController.cs index 87ec7a3b8..c692e491e 100644 --- a/Subsurface/Source/Characters/AI/EnemyAIController.cs +++ b/Subsurface/Source/Characters/AI/EnemyAIController.cs @@ -283,7 +283,6 @@ namespace Barotrauma case AttackType.PinchCCW: float dir = (limb.attack.Type == AttackType.PinchCW) ? 1.0f : -1.0f; - float dist = Vector2.Distance(limb.SimPosition, attackPosition); if (wallAttackPos != Vector2.Zero && targetEntity != null) { @@ -302,6 +301,7 @@ namespace Barotrauma break; } + float dist = Vector2.Distance(limb.SimPosition, damageTarget.SimPosition); if (dist < limb.attack.Range * 0.5f) { attackTimer += deltaTime; diff --git a/Subsurface/Source/ContentPackage.cs b/Subsurface/Source/ContentPackage.cs index d923e6a9c..b46003f20 100644 --- a/Subsurface/Source/ContentPackage.cs +++ b/Subsurface/Source/ContentPackage.cs @@ -143,10 +143,21 @@ namespace Barotrauma var md5 = MD5.Create(); foreach (ContentFile file in files) { - using (var stream = File.OpenRead(file.path)) + if (file.type == ContentType.Executable) continue; + + try { - hashes.Add(md5.ComputeHash(stream)); - } + using (var stream = File.OpenRead(file.path)) + { + hashes.Add(md5.ComputeHash(stream)); + } + } + + catch (Exception e) + { + DebugConsole.ThrowError("Error while calculating content package hash: ", e); + } + } //string str = sb.ToString(); @@ -157,7 +168,7 @@ namespace Barotrauma } //System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); - md5Hash = new Md5Hash(bytes); + md5Hash = new Md5Hash(bytes); } public List GetFilesOfType(ContentType type) diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index d5f9d2be1..ab3363973 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -80,6 +80,10 @@ namespace Barotrauma if (isOpen) { + + frame.Update(deltaTime); + + Character.DisableControls = true; if (PlayerInput.KeyHit(Keys.Up)) @@ -91,7 +95,7 @@ namespace Barotrauma SelectMessage(1); } - textBox.Update(deltaTime); + //textBox.Update(deltaTime); if (PlayerInput.GetKeyboardState.IsKeyDown(Keys.Enter) && textBox.Text != "") { @@ -122,8 +126,6 @@ namespace Barotrauma { if (!isOpen) return; - frame.Update(1.0f / 60.0f); - int margin = 5; //GUI.DrawRectangle(spriteBatch, diff --git a/Subsurface/Source/GUI/GUITextBlock.cs b/Subsurface/Source/GUI/GUITextBlock.cs index c43a43202..cff620746 100644 --- a/Subsurface/Source/GUI/GUITextBlock.cs +++ b/Subsurface/Source/GUI/GUITextBlock.cs @@ -205,7 +205,7 @@ namespace Barotrauma private Vector2 MeasureText(string text) { - if (string.IsNullOrEmpty(text) || Font==null) return Vector2.Zero; + if (Font==null) return Vector2.Zero; Vector2 size = Vector2.Zero; while (size == Vector2.Zero) diff --git a/Subsurface/Source/GUI/GUITextBox.cs b/Subsurface/Source/GUI/GUITextBox.cs index 427faf303..735e84a1c 100644 --- a/Subsurface/Source/GUI/GUITextBox.cs +++ b/Subsurface/Source/GUI/GUITextBox.cs @@ -196,9 +196,15 @@ namespace Barotrauma { string input = Text; Text = ""; - OnEnterPressed(this, input); - + OnEnterPressed(this, input); } +#if LINUX + else if (PlayerInput.KeyHit(Keys.Back) && Text.Length>0) + { + Text = Text.Substring(0, Text.Length-1); + } +#endif + } textBlock.Update(deltaTime); diff --git a/Subsurface/Source/Items/Components/Machines/Steering.cs b/Subsurface/Source/Items/Components/Machines/Steering.cs index 5462694bf..d938a96b9 100644 --- a/Subsurface/Source/Items/Components/Machines/Steering.cs +++ b/Subsurface/Source/Items/Components/Machines/Steering.cs @@ -21,7 +21,7 @@ namespace Barotrauma.Items.Components private SteeringPath steeringPath; - private static PathFinder pathFinder; + private PathFinder pathFinder; private float networkUpdateTimer; private bool valueChanged; diff --git a/Subsurface/Source/Map/Lights/LightManager.cs b/Subsurface/Source/Map/Lights/LightManager.cs index 3dc367e43..d24be6d67 100644 --- a/Subsurface/Source/Map/Lights/LightManager.cs +++ b/Subsurface/Source/Map/Lights/LightManager.cs @@ -199,6 +199,11 @@ namespace Barotrauma.Lights spriteBatch.Draw(lightMap, Vector2.Zero, Color.White); spriteBatch.End(); } + + public void ClearLights() + { + lights.Clear(); + } } diff --git a/Subsurface/Source/Map/Submarine.cs b/Subsurface/Source/Map/Submarine.cs index 5b09cdaa8..a05debddb 100644 --- a/Subsurface/Source/Map/Submarine.cs +++ b/Subsurface/Source/Map/Submarine.cs @@ -12,6 +12,7 @@ using System.IO; using System.Linq; using System.Reflection; using System.Xml.Linq; +using Barotrauma.Lights; namespace Barotrauma { @@ -666,6 +667,8 @@ namespace Barotrauma if (loaded == null) return; Sound.OnGameEnd(); + + if (GameMain.LightManager != null) GameMain.LightManager.ClearLights(); loaded.Remove(); diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index 89da7d9ce..380c79b5e 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -248,10 +248,17 @@ namespace Barotrauma spriteBatch.Draw(renderTarget, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), new Color(0.75f, 0.8f, 0.9f, 1.0f)); spriteBatch.End(); +#if LINUX spriteBatch.Begin(SpriteSortMode.Deferred, - BlendState.AlphaBlend, - null, DepthStencilState.Default, null, null, + BlendState.NonPremultiplied, + null, DepthStencilState.DepthRead, null, null, cam.Transform); +#else + spriteBatch.Begin(SpriteSortMode.Deferred, + BlendState.AlphaBlend, + null, DepthStencilState.DepthRead, null, null, + cam.Transform); +#endif GameMain.ParticleManager.Draw(spriteBatch, true, Particles.ParticleBlendState.AlphaBlend); spriteBatch.End(); @@ -270,11 +277,18 @@ namespace Barotrauma BlendState.Opaque); spriteBatch.Draw(renderTarget, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); spriteBatch.End(); - +#if LINUX + spriteBatch.Begin(SpriteSortMode.Deferred, + BlendState.NonPremultiplied, + null, DepthStencilState.DepthRead, null, null, + cam.Transform); +#else spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, DepthStencilState.DepthRead, null, null, cam.Transform); +#endif + GameMain.ParticleManager.Draw(spriteBatch, false, Particles.ParticleBlendState.AlphaBlend); spriteBatch.End(); diff --git a/Subsurface/Source/Screens/MainMenuScreen.cs b/Subsurface/Source/Screens/MainMenuScreen.cs index 45109e74a..897da2c8d 100644 --- a/Subsurface/Source/Screens/MainMenuScreen.cs +++ b/Subsurface/Source/Screens/MainMenuScreen.cs @@ -297,8 +297,16 @@ namespace Barotrauma GameMain.NetLobbyScreen = new NetLobbyScreen(); - GameMain.NetworkMember = new GameServer(name, port, isPublicBox.Selected, passwordBox.Text, useUpnpBox.Selected, int.Parse(maxPlayersBox.Text)); - + try + { + GameMain.NetworkMember = new GameServer(name, port, isPublicBox.Selected, passwordBox.Text, useUpnpBox.Selected, int.Parse(maxPlayersBox.Text)); + } + + catch (Exception e) + { + DebugConsole.ThrowError("Failed to start server", e); + } + GameMain.NetLobbyScreen.IsServer = true; //Game1.NetLobbyScreen.Select(); return true; diff --git a/Subsurface/Source/Screens/ServerListScreen.cs b/Subsurface/Source/Screens/ServerListScreen.cs index 904219bc4..16b7b5543 100644 --- a/Subsurface/Source/Screens/ServerListScreen.cs +++ b/Subsurface/Source/Screens/ServerListScreen.cs @@ -254,7 +254,21 @@ namespace Barotrauma if (response.StatusCode!= System.Net.HttpStatusCode.OK) { serverList.ClearChildren(); - DebugConsole.ThrowError("Error while connecting to master server (" +response.StatusCode+": "+response.StatusDescription+")"); + + switch (response.StatusCode) + { + case System.Net.HttpStatusCode.NotFound: + DebugConsole.ThrowError("Error while connecting to master server (404 - ''" + NetConfig.MasterServerUrl + "'' not found)"); + break; + case System.Net.HttpStatusCode.ServiceUnavailable: + DebugConsole.ThrowError("Error while connecting to master server (505 - Service Unavailable)"); + DebugConsole.ThrowError("The master server may be down for maintenance or temporarily overloaded. Please try again after in a few moments."); + break; + default: + DebugConsole.ThrowError("Error while connecting to master server (" +response.StatusCode+": "+response.StatusDescription+")"); + break; + } + return; } @@ -304,8 +318,17 @@ namespace Barotrauma selectedPassword = passwordBox.Text; } - GameMain.NetworkMember = new GameClient(clientNameBox.Text); - GameMain.Client.ConnectToServer(ip, selectedPassword); + try + { + GameMain.NetworkMember = new GameClient(clientNameBox.Text); + GameMain.Client.ConnectToServer(ip, selectedPassword); + } + + catch (Exception e) + { + DebugConsole.ThrowError("Failed to start the client", e); + } + yield return CoroutineStatus.Success; } diff --git a/Subsurface/changelog.txt b/Subsurface/changelog.txt index c4863a76f..2883ca794 100644 --- a/Subsurface/changelog.txt +++ b/Subsurface/changelog.txt @@ -1,3 +1,9 @@ +--------------------------------------------------------------------------------------------------------- +v0.2.6.1 +--------------------------------------------------------------------------------------------------------- + +- fixed a bug that caused characters to take bleeding damage for no apparent reason +- fixed autopilot not working when changing the map seed --------------------------------------------------------------------------------------------------------- v0.2.6 diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 620b8c7b6f760aeef13755cd9599dc070f0e7176..4e4f6b017112447c33229ab55a8ef6f08192fc7c 100644 GIT binary patch delta 34525 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 delta 13090 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