From 201dc1b733fe1e9ee4e059fa029947eeb7680e68 Mon Sep 17 00:00:00 2001 From: Regalis Date: Sun, 7 Feb 2016 12:32:19 +0200 Subject: [PATCH] Supercapacitors have much higher max output but smaller capacity, fixed not being able to drag wire nodes in editor, batteries working properly now --- .../Content/Items/Electricity/lights.xml | 4 +-- .../Content/Items/Electricity/poweritems.xml | 11 +++++---- Subsurface/Content/Items/Weapons/railgun.xml | 2 +- Subsurface/Source/GUI/GUI.cs | 2 +- Subsurface/Source/GUI/GUIButton.cs | 2 +- Subsurface/Source/GUI/GUIScrollBar.cs | 2 +- Subsurface/Source/GUI/GUITickBox.cs | 2 +- .../GameModes/Tutorials/BasicTutorial.cs | 23 +++++++++++++++++- Subsurface/Source/Items/CharacterInventory.cs | 2 +- .../Items/Components/Machines/Reactor.cs | 4 +-- .../Items/Components/Machines/Steering.cs | 2 +- .../Items/Components/Power/PowerContainer.cs | 15 ++++++------ .../Items/Components/Power/PowerTransfer.cs | 6 ++--- .../Items/Components/Signal/Connection.cs | 14 +++++------ .../Source/Items/Components/Signal/Wire.cs | 4 +-- Subsurface/Source/Items/Components/Turret.cs | 8 +++--- Subsurface/Source/Items/Inventory.cs | 4 +-- Subsurface/Source/Items/ItemPrefab.cs | 2 +- Subsurface/Source/Map/Hull.cs | 10 +++++--- Subsurface/Source/Map/MapEntity.cs | 2 +- Subsurface/Source/Map/MapEntityPrefab.cs | 4 +-- Subsurface/Source/Map/StructurePrefab.cs | 4 +-- Subsurface/Source/PlayerInput.cs | 16 +++++++++--- .../Source/Screens/EditCharacterScreen.cs | 4 +-- Subsurface/Source/Screens/EditMapScreen.cs | 2 +- Subsurface/Source/Screens/GameScreen.cs | 2 +- Subsurface_Solution.v12.suo | Bin 863232 -> 867840 bytes 27 files changed, 93 insertions(+), 60 deletions(-) diff --git a/Subsurface/Content/Items/Electricity/lights.xml b/Subsurface/Content/Items/Electricity/lights.xml index 2bf2cc9eb..ecbcfe351 100644 --- a/Subsurface/Content/Items/Electricity/lights.xml +++ b/Subsurface/Content/Items/Electricity/lights.xml @@ -8,9 +8,9 @@ Tags="smallitem" pickdistance="150"> - + - + diff --git a/Subsurface/Content/Items/Electricity/poweritems.xml b/Subsurface/Content/Items/Electricity/poweritems.xml index 658ea4a5f..34cce621c 100644 --- a/Subsurface/Content/Items/Electricity/poweritems.xml +++ b/Subsurface/Content/Items/Electricity/poweritems.xml @@ -54,8 +54,8 @@ - - + + @@ -68,11 +68,11 @@ category="Electrical" linkable="true" pickdistance="150" - description="Can accept and deliver charge much faster than batteries."> + description="Can take in and deliver power much faster than batteries."> - + @@ -81,7 +81,8 @@ - + + \ No newline at end of file diff --git a/Subsurface/Content/Items/Weapons/railgun.xml b/Subsurface/Content/Items/Weapons/railgun.xml index 0053db091..7adf39b6f 100644 --- a/Subsurface/Content/Items/Weapons/railgun.xml +++ b/Subsurface/Content/Items/Weapons/railgun.xml @@ -11,7 +11,7 @@ + powerconsumption="20000.0"> diff --git a/Subsurface/Source/GUI/GUI.cs b/Subsurface/Source/GUI/GUI.cs index a227e2f9f..0d4d8b8b4 100644 --- a/Subsurface/Source/GUI/GUI.cs +++ b/Subsurface/Source/GUI/GUI.cs @@ -300,7 +300,7 @@ namespace Barotrauma if (rect.Contains(PlayerInput.MousePosition)) { - clicked = PlayerInput.LeftButtonDown(); + clicked = PlayerInput.LeftButtonHeld(); color = clicked ? new Color(100, 100, 100) : new Color(250, 250, 250); diff --git a/Subsurface/Source/GUI/GUIButton.cs b/Subsurface/Source/GUI/GUIButton.cs index 468aa6f91..971f299c9 100644 --- a/Subsurface/Source/GUI/GUIButton.cs +++ b/Subsurface/Source/GUI/GUIButton.cs @@ -152,7 +152,7 @@ namespace Barotrauma if (rect.Contains(PlayerInput.MousePosition) && CanBeSelected && Enabled && (MouseOn == null || MouseOn == this || IsParentOf(MouseOn))) { state = ComponentState.Hover; - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { if (OnPressed != null) { diff --git a/Subsurface/Source/GUI/GUIScrollBar.cs b/Subsurface/Source/GUI/GUIScrollBar.cs index 57255549c..df635b1ca 100644 --- a/Subsurface/Source/GUI/GUIScrollBar.cs +++ b/Subsurface/Source/GUI/GUIScrollBar.cs @@ -129,7 +129,7 @@ namespace Barotrauma base.Update(deltaTime); if (draggingBar != this) return; - if (!PlayerInput.LeftButtonDown()) draggingBar = null; + if (!PlayerInput.LeftButtonHeld()) draggingBar = null; MoveButton(); } diff --git a/Subsurface/Source/GUI/GUITickBox.cs b/Subsurface/Source/GUI/GUITickBox.cs index a4b0456b5..65117c9a6 100644 --- a/Subsurface/Source/GUI/GUITickBox.cs +++ b/Subsurface/Source/GUI/GUITickBox.cs @@ -70,7 +70,7 @@ namespace Barotrauma box.State = ComponentState.Hover; - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { box.State = ComponentState.Selected; } diff --git a/Subsurface/Source/GameSession/GameModes/Tutorials/BasicTutorial.cs b/Subsurface/Source/GameSession/GameModes/Tutorials/BasicTutorial.cs index b130274a4..3ef2a8432 100644 --- a/Subsurface/Source/GameSession/GameModes/Tutorials/BasicTutorial.cs +++ b/Subsurface/Source/GameSession/GameModes/Tutorials/BasicTutorial.cs @@ -63,6 +63,20 @@ namespace Barotrauma.Tutorials yield return CoroutineStatus.Running; } + infoBox = CreateInfoFrame("The reactor requires fuel rods to generate power. You can grab one from the steel cabinet by walking next to it and pressing E."); + + while (Character.Controlled.SelectedConstruction == null || Character.Controlled.SelectedConstruction.Name != "Steel Cabinet") + { + yield return CoroutineStatus.Running; + } + + infoBox = CreateInfoFrame("Pick up one of the fuel rods either by double-clicking or dragging and dropping it into your inventory."); + + while (!HasItem("Fuel Rod")) + { + yield return CoroutineStatus.Running; + } + infoBox = CreateInfoFrame("Select the reactor by walking next to it and pressing E."); while (Character.Controlled.SelectedConstruction != reactor.Item) @@ -71,7 +85,14 @@ namespace Barotrauma.Tutorials } yield return new WaitForSeconds(0.5f); - infoBox = CreateInfoFrame("This is the control panel of the reactor. Try turning it on by increasing the fission rate."); + infoBox = CreateInfoFrame("Load the fuel rod into the reactor by dropping it into any of the 5 slots."); + + while (reactor.AvailableFuel <= 0.0f) + { + yield return CoroutineStatus.Running; + } + + infoBox = CreateInfoFrame("The reactor is now fueled up. Try turning it on by increasing the fission rate."); while (reactor.FissionRate <= 0.0f) { diff --git a/Subsurface/Source/Items/CharacterInventory.cs b/Subsurface/Source/Items/CharacterInventory.cs index e248da4e5..f1a64b3cd 100644 --- a/Subsurface/Source/Items/CharacterInventory.cs +++ b/Subsurface/Source/Items/CharacterInventory.cs @@ -326,7 +326,7 @@ namespace Barotrauma if (draggingItem != null && !draggingItemSlot.Contains(PlayerInput.MousePosition)) { - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { slotRect.X = (int)PlayerInput.MousePosition.X - slotRect.Width / 2; slotRect.Y = (int)PlayerInput.MousePosition.Y - slotRect.Height / 2; diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs index 638dd963a..811bfd925 100644 --- a/Subsurface/Source/Items/Components/Machines/Reactor.cs +++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs @@ -442,9 +442,9 @@ namespace Barotrauma.Items.Components //GUI.DrawRectangle(spriteBatch, new Rectangle(x, y, width, height), Color.Black, true); - spriteBatch.DrawString(GUI.Font, "Temperature: " + (int)temperature + " C", + spriteBatch.DrawString(GUI.Font, "Output: " + (int)temperature + " kW", new Vector2(x + 450, y + 30), Color.Red); - spriteBatch.DrawString(GUI.Font, "Grid load: " + (int)load + " C", + spriteBatch.DrawString(GUI.Font, "Grid load: " + (int)load + " kW", new Vector2(x + 620, y + 30), Color.Yellow); DrawGraph(tempGraph, spriteBatch, diff --git a/Subsurface/Source/Items/Components/Machines/Steering.cs b/Subsurface/Source/Items/Components/Machines/Steering.cs index d989ab449..3f67f543d 100644 --- a/Subsurface/Source/Items/Components/Machines/Steering.cs +++ b/Subsurface/Source/Items/Components/Machines/Steering.cs @@ -183,7 +183,7 @@ namespace Barotrauma.Items.Components { GUI.DrawRectangle(spriteBatch, new Rectangle((int)targetVelPos.X -10, (int)targetVelPos.Y - 10, 20, 20), Color.Red); - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { TargetVelocity = PlayerInput.MousePosition - new Vector2(velRect.Center.X, velRect.Center.Y); targetVelocity.Y = -targetVelocity.Y; diff --git a/Subsurface/Source/Items/Components/Power/PowerContainer.cs b/Subsurface/Source/Items/Components/Power/PowerContainer.cs index 7c9d3d0b0..f78ba08c2 100644 --- a/Subsurface/Source/Items/Components/Power/PowerContainer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerContainer.cs @@ -42,7 +42,7 @@ namespace Barotrauma.Items.Components get { return charge; } set { - if (float.IsNaN(value)) return; + if (!MathUtils.IsValid(value)) return; charge = MathHelper.Clamp(value, 0.0f, capacity); } } @@ -60,7 +60,7 @@ namespace Barotrauma.Items.Components get { return rechargeSpeed; } set { - if (float.IsNaN(value)) return; + if (!MathUtils.IsValid(value)) return; rechargeSpeed = MathHelper.Clamp(value, 0.0f, maxRechargeSpeed); rechargeSpeed = MathUtils.Round(rechargeSpeed, Math.Max(maxRechargeSpeed * 0.1f, 1.0f)); } @@ -120,7 +120,7 @@ namespace Barotrauma.Items.Components foreach (Connection c in item.Connections) { - if (c.Name.Contains("recharge")) continue; + if (c.Name == "power_in") continue; foreach (Connection c2 in c.Recipients) { PowerTransfer pt = c2.Item.GetComponent(); @@ -194,7 +194,7 @@ namespace Barotrauma.Items.Components // 0.1f); //powerConsumption = Math.Min(powerConsumption, 0.0f); - charge -= CurrPowerOutput / 3600.0f; + Charge -= CurrPowerOutput / 3600.0f; } rechargeVoltage = 0.0f; @@ -212,7 +212,7 @@ namespace Barotrauma.Items.Components { if (!connection.IsPower) return; - if (connection.Name.Contains("recharge")) + if (connection.Name == "power_in") { rechargeVoltage = power; } @@ -247,11 +247,10 @@ namespace Barotrauma.Items.Components //GUI.DrawRectangle(spriteBatch, new Rectangle(x, y, width, height), Color.Black, true); spriteBatch.DrawString(GUI.Font, - "Charge: " + (int)charge + "/" + (int)capacity + " (" + (int)((charge / capacity) * 100.0f) + " %)", + "Charge: " + (int)charge + "/" + (int)capacity + "kWm (" + (int)((charge / capacity) * 100.0f) + " %)", new Vector2(x + 30, y + 30), Color.White); - spriteBatch.DrawString(GUI.Font, "Recharge rate: " + (int)((rechargeSpeed / maxRechargeSpeed)*100.0f)+" %", new Vector2(x + 30, y + 95), Color.White); - + spriteBatch.DrawString(GUI.Font, "Recharge rate: " + (int)((rechargeSpeed / maxRechargeSpeed) * 100.0f) + " %", new Vector2(x + 30, y + 95), Color.White); } public override bool FillNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetBuffer message) diff --git a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs index d10bc6fc9..b39f610a6 100644 --- a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs @@ -132,7 +132,7 @@ namespace Barotrauma.Items.Components } else if (powerContainer != null) { - if (recipient.Name.Contains("recharge")) + if (recipient.Name == "power_in") { fullLoad += powerContainer.CurrPowerConsumption; } @@ -167,8 +167,8 @@ namespace Barotrauma.Items.Components GuiFrame.Draw(spriteBatch); - spriteBatch.DrawString(GUI.Font, "Power: " + (int)(-currPowerConsumption), new Vector2(x + 30, y + 30), Color.White); - spriteBatch.DrawString(GUI.Font, "Load: " + (int)powerLoad, new Vector2(x + 30, y + 100), Color.White); + spriteBatch.DrawString(GUI.Font, "Power: " + (int)(-currPowerConsumption) + " kW", new Vector2(x + 30, y + 30), Color.White); + spriteBatch.DrawString(GUI.Font, "Load: " + (int)powerLoad + " kW", new Vector2(x + 30, y + 100), Color.White); } public override void ReceiveSignal(string signal, Connection connection, Item sender, float power) diff --git a/Subsurface/Source/Items/Components/Signal/Connection.cs b/Subsurface/Source/Items/Components/Signal/Connection.cs index b147278bf..b021e0095 100644 --- a/Subsurface/Source/Items/Components/Signal/Connection.cs +++ b/Subsurface/Source/Items/Components/Signal/Connection.cs @@ -249,8 +249,8 @@ namespace Barotrauma.Items.Components } else { - c.Draw(spriteBatch, panel.Item, leftPos, - new Vector2(leftPos.X - 100, leftPos.Y), + c.Draw(spriteBatch, panel.Item, leftPos, + new Vector2(leftPos.X - GUI.SmallFont.MeasureString(c.Name).X - 20, leftPos.Y), new Vector2(leftWireX, y + height), mouseInRect, equippedWire != null); @@ -291,7 +291,7 @@ namespace Barotrauma.Items.Components if (draggingConnected != null) { - if (!PlayerInput.LeftButtonDown()) + if (!PlayerInput.LeftButtonHeld()) { panel.Item.NewComponentEvent(panel, true, true); //draggingConnected.Drop(Character); @@ -306,7 +306,7 @@ namespace Barotrauma.Items.Components private void Draw(SpriteBatch spriteBatch, Item item, Vector2 position, Vector2 labelPos, Vector2 wirePosition, bool mouseIn, bool wireEquipped) { - spriteBatch.DrawString(GUI.Font, Name, new Vector2(labelPos.X, labelPos.Y-10), Color.White); + spriteBatch.DrawString(GUI.SmallFont, Name, new Vector2(labelPos.X, labelPos.Y-10), Color.White); GUI.DrawRectangle(spriteBatch, new Rectangle((int)position.X-10, (int)position.Y-10, 20, 20), Color.White); spriteBatch.Draw(panelTexture, position - new Vector2(16.0f, 16.0f), new Rectangle(64, 256, 32, 32), Color.White); @@ -323,7 +323,7 @@ namespace Barotrauma.Items.Components //dragging a wire and released the mouse -> see if the wire can be connected to this connection if (draggingConnected != null - && !PlayerInput.LeftButtonDown()) + && !PlayerInput.LeftButtonHeld()) { //close enough to the connector -> make a new connection if (Vector2.Distance(position, PlayerInput.MousePosition) < 10.0f) @@ -404,7 +404,7 @@ namespace Barotrauma.Items.Components float dir = (end.X > start.X) ? -1.0f : 1.0f; wireCorner.Draw(spriteBatch, - new Vector2(start.X, end.Y+24), wireItem.Color * alpha, 0.0f, 1.0f, + new Vector2(start.X, end.Y+25), wireItem.Color * alpha, 0.0f, 1.0f, (end.X > start.X) ? SpriteEffects.None : SpriteEffects.FlipHorizontally); float wireStartX = start.X - wireCorner.size.X / 2 * dir; @@ -426,7 +426,7 @@ namespace Barotrauma.Items.Components { item.IsHighlighted = true; //start dragging the wire - if (PlayerInput.LeftButtonDown()) draggingConnected = wireItem; + if (PlayerInput.LeftButtonHeld()) draggingConnected = wireItem; } } diff --git a/Subsurface/Source/Items/Components/Signal/Wire.cs b/Subsurface/Source/Items/Components/Signal/Wire.cs index 289b008b3..0b3150248 100644 --- a/Subsurface/Source/Items/Components/Signal/Wire.cs +++ b/Subsurface/Source/Items/Components/Signal/Wire.cs @@ -351,7 +351,7 @@ namespace Barotrauma.Items.Components if (selectedNodeIndex == null && draggingWire == null)// && !MapEntity.SelectedAny) { - if (PlayerInput.LeftButtonClicked()) + if (PlayerInput.LeftButtonDown()) { MapEntity.DisableSelect = true; MapEntity.SelectEntity(item); @@ -367,7 +367,7 @@ namespace Barotrauma.Items.Components } } - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { if (selectedNodeIndex != null && draggingWire == this) { diff --git a/Subsurface/Source/Items/Components/Turret.cs b/Subsurface/Source/Items/Components/Turret.cs index c1bff1e81..d052165f2 100644 --- a/Subsurface/Source/Items/Components/Turret.cs +++ b/Subsurface/Source/Items/Components/Turret.cs @@ -159,10 +159,10 @@ namespace Barotrauma.Items.Components float availablePower = 0.0f; foreach (PowerContainer battery in batteries) { - float batteryPower = Math.Min(battery.Charge, battery.MaxOutPut); - float takePower = Math.Min(currPowerConsumption - availablePower, batteryPower); + float batteryPower = Math.Min(battery.Charge*3600.0f, battery.MaxOutPut); + float takePower = Math.Min(powerConsumption - availablePower, batteryPower); - battery.Charge -= takePower; + battery.Charge -= takePower/3600.0f; } reload = reloadTime; @@ -284,7 +284,7 @@ namespace Barotrauma.Items.Components float availablePower = 0.0f; foreach (PowerContainer battery in batteries) { - float batteryPower = Math.Min(battery.Charge, battery.MaxOutPut); + float batteryPower = Math.Min(battery.Charge*3600.0f, battery.MaxOutPut); availablePower += batteryPower; } diff --git a/Subsurface/Source/Items/Inventory.cs b/Subsurface/Source/Items/Inventory.cs index 2393997e4..30b6dc69d 100644 --- a/Subsurface/Source/Items/Inventory.cs +++ b/Subsurface/Source/Items/Inventory.cs @@ -205,7 +205,7 @@ namespace Barotrauma if (draggingItem != null && !draggingItemSlot.Contains(PlayerInput.MousePosition) && draggingItem.Container == this.Owner) { - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { slotRect.X = (int)PlayerInput.MousePosition.X - slotRect.Width / 2; slotRect.Y = (int)PlayerInput.MousePosition.Y - slotRect.Height / 2; @@ -261,7 +261,7 @@ namespace Barotrauma { if (draggingItem == null) { - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { draggingItem = item; } diff --git a/Subsurface/Source/Items/ItemPrefab.cs b/Subsurface/Source/Items/ItemPrefab.cs index 32ec8048f..a10c81bbc 100644 --- a/Subsurface/Source/Items/ItemPrefab.cs +++ b/Subsurface/Source/Items/ItemPrefab.cs @@ -114,7 +114,7 @@ namespace Barotrauma if (placePosition == Vector2.Zero) { - if (PlayerInput.LeftButtonDown()) placePosition = position; + if (PlayerInput.LeftButtonHeld()) placePosition = position; } else { diff --git a/Subsurface/Source/Map/Hull.cs b/Subsurface/Source/Map/Hull.cs index 2ebdbca9e..15b34b0cd 100644 --- a/Subsurface/Source/Map/Hull.cs +++ b/Subsurface/Source/Map/Hull.cs @@ -101,7 +101,11 @@ namespace Barotrauma public float Oxygen { get { return oxygen; } - set { oxygen = MathHelper.Clamp(value, 0.0f, FullVolume); } + set + { + if (!MathUtils.IsValid(value)) return; + oxygen = MathHelper.Clamp(value, 0.0f, FullVolume); + } } public float OxygenPercentage @@ -283,12 +287,12 @@ namespace Barotrauma Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition); if (Submarine.RectContains(WorldRect, position)) { - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { //waveY[GetWaveIndex(position.X - rect.X - Submarine.Position.X) / WaveWidth] = 100.0f; Volume = Volume + 1500.0f; } - else if (PlayerInput.RightButtonDown()) + else if (PlayerInput.RightButtonHeld()) { Volume = Volume - 1500.0f; } diff --git a/Subsurface/Source/Map/MapEntity.cs b/Subsurface/Source/Map/MapEntity.cs index c29f15baf..ac310e5bb 100644 --- a/Subsurface/Source/Map/MapEntity.cs +++ b/Subsurface/Source/Map/MapEntity.cs @@ -353,7 +353,7 @@ namespace Barotrauma else { - if (PlayerInput.LeftButtonDown() && + if (PlayerInput.LeftButtonHeld() && PlayerInput.KeyUp(Keys.Space)) { //if clicking a selected entity, start moving it diff --git a/Subsurface/Source/Map/MapEntityPrefab.cs b/Subsurface/Source/Map/MapEntityPrefab.cs index 150942020..384cc5a11 100644 --- a/Subsurface/Source/Map/MapEntityPrefab.cs +++ b/Subsurface/Source/Map/MapEntityPrefab.cs @@ -134,7 +134,7 @@ namespace Barotrauma GUI.DrawLine(spriteBatch, new Vector2(position.X, -(position.Y - GameMain.GraphicsHeight)), new Vector2(position.X, -(position.Y + GameMain.GraphicsHeight)), Color.White); - if (PlayerInput.LeftButtonDown()) placePosition = position; + if (PlayerInput.LeftButtonHeld()) placePosition = position; } else { @@ -164,7 +164,7 @@ namespace Barotrauma GUI.DrawRectangle(spriteBatch, newRect, Color.DarkBlue); } - if (PlayerInput.RightButtonDown()) + if (PlayerInput.RightButtonHeld()) { placePosition = Vector2.Zero; selected = null; diff --git a/Subsurface/Source/Map/StructurePrefab.cs b/Subsurface/Source/Map/StructurePrefab.cs index f19cc52ed..793e4e3bc 100644 --- a/Subsurface/Source/Map/StructurePrefab.cs +++ b/Subsurface/Source/Map/StructurePrefab.cs @@ -124,7 +124,7 @@ namespace Barotrauma if (placePosition == Vector2.Zero) { - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) placePosition = Submarine.MouseToWorldGrid(cam); newRect.X = (int)position.X; @@ -161,7 +161,7 @@ namespace Barotrauma GUI.DrawRectangle(spriteBatch, new Rectangle(newRect.X - GameMain.GraphicsWidth, -newRect.Y, newRect.Width + GameMain.GraphicsWidth*2, newRect.Height), Color.White); GUI.DrawRectangle(spriteBatch, new Rectangle(newRect.X, -newRect.Y - GameMain.GraphicsHeight, newRect.Width, newRect.Height + GameMain.GraphicsHeight*2), Color.White); - if (PlayerInput.RightButtonDown()) selected = null; + if (PlayerInput.RightButtonHeld()) selected = null; } } } diff --git a/Subsurface/Source/PlayerInput.cs b/Subsurface/Source/PlayerInput.cs index 58069e2d2..3b488c34c 100644 --- a/Subsurface/Source/PlayerInput.cs +++ b/Subsurface/Source/PlayerInput.cs @@ -46,11 +46,11 @@ namespace Barotrauma } else if (mouseButton == 0) { - return PlayerInput.LeftButtonDown(); + return PlayerInput.LeftButtonHeld(); } else if (mouseButton == 1) { - return PlayerInput.RightButtonDown(); + return PlayerInput.RightButtonHeld(); } return false; @@ -252,15 +252,23 @@ namespace Barotrauma } - public static bool LeftButtonDown() + public static bool LeftButtonHeld() { return GameMain.WindowActive && mouseState.LeftButton == ButtonState.Pressed; } + public static bool LeftButtonDown() + { + return GameMain.WindowActive && + oldMouseState.LeftButton == ButtonState.Released && + mouseState.LeftButton == ButtonState.Pressed; + } + public static bool LeftButtonReleased() { return GameMain.WindowActive && mouseState.LeftButton == ButtonState.Released; } + public static bool LeftButtonClicked() { @@ -269,7 +277,7 @@ namespace Barotrauma && mouseState.LeftButton == ButtonState.Released); } - public static bool RightButtonDown() + public static bool RightButtonHeld() { return GameMain.WindowActive && mouseState.RightButton == ButtonState.Pressed; } diff --git a/Subsurface/Source/Screens/EditCharacterScreen.cs b/Subsurface/Source/Screens/EditCharacterScreen.cs index f2bc7b006..a5af06f7b 100644 --- a/Subsurface/Source/Screens/EditCharacterScreen.cs +++ b/Subsurface/Source/Screens/EditCharacterScreen.cs @@ -194,7 +194,7 @@ namespace Barotrauma GUI.DrawLine(spriteBatch, limbBodyPos + Vector2.UnitY * 5.0f, limbBodyPos - Vector2.UnitY * 5.0f, Color.White); GUI.DrawLine(spriteBatch, limbBodyPos + Vector2.UnitX * 5.0f, limbBodyPos - Vector2.UnitX * 5.0f, Color.White); - if (Vector2.Distance(PlayerInput.MousePosition, limbBodyPos)<5.0f && PlayerInput.LeftButtonDown()) + if (Vector2.Distance(PlayerInput.MousePosition, limbBodyPos)<5.0f && PlayerInput.LeftButtonHeld()) { limb.sprite.Origin += PlayerInput.MouseSpeed; } @@ -284,7 +284,7 @@ namespace Barotrauma if (Vector2.Distance(PlayerInput.MousePosition, jointPos) < 6.0f) { GUI.DrawRectangle(spriteBatch, jointPos - new Vector2(3.0f, 3.0f), new Vector2(11.0f, 11.0f), Color.Red, false); - if (PlayerInput.LeftButtonDown()) + if (PlayerInput.LeftButtonHeld()) { Vector2 speed = ConvertUnits.ToSimUnits(PlayerInput.MouseSpeed); speed.Y = -speed.Y; diff --git a/Subsurface/Source/Screens/EditMapScreen.cs b/Subsurface/Source/Screens/EditMapScreen.cs index 999f3ac4e..44f863ada 100644 --- a/Subsurface/Source/Screens/EditMapScreen.cs +++ b/Subsurface/Source/Screens/EditMapScreen.cs @@ -649,7 +649,7 @@ namespace Barotrauma GUI.Draw((float)deltaTime, spriteBatch, cam); - if (!PlayerInput.LeftButtonDown()) Inventory.draggingItem = null; + if (!PlayerInput.LeftButtonHeld()) Inventory.draggingItem = null; spriteBatch.End(); } diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index e64f19178..d1f52dc0b 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -202,7 +202,7 @@ namespace Barotrauma GUI.Draw((float)deltaTime, spriteBatch, cam); - if (!PlayerInput.LeftButtonDown()) Inventory.draggingItem = null; + if (!PlayerInput.LeftButtonHeld()) Inventory.draggingItem = null; spriteBatch.End(); } diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 98cd18d404ddd6ea31e126e9396fd4d219438f6e..e0b68e41fb868e4a223247e096f6097bf3845e01 100644 GIT binary patch delta 14816 zcmd6O30#!b`v07Fn|T*$Ktv?O0Y^kdWJ}Qu2ShV-Au}^CnWC5rDk51f;b>-RW#WU%{uw<&Fvmyp-@km6?NeA|^rnBO;A?WTx|eGjQ_s|#w(Mvf3; zj~X4j2azs-9dIB~B#cIt+kur*aaeHB4bh+eT&Gt$9BQWM=ZY20&@nL#UbKA+PzS6AH1us5=%szV9lZL!(z)}>0oH5ve)aNjF;Q2U5EBq# zk1xDgb8<4ZU!;f*2m7XmBoU`#rl$H97*1Np)S$zSPRf2s*ESEz-xR*msLW6#t_dm2x z^;K?CeD1UR)GIIpyL>ZSbnqqoaL(syrEvFHR?7nEEY@GahHDj2*@ZS5S;59hcQM*k z!QwJSe>;P}5;9x|)BqmZvqWN(2cMn zh8y%b#G8ZmMcOyO4j=((DZmn&Z$x3th+|;I0kz0l1^Qz)=HVtC^<6dw@A8>i~@cjTAsw9dZjl~P0}f2>qdSbYyzLI@pLSLBCP%C#-6(&!5*gnLl?Yzr z^AAxOcyE9n0aIe zFc3(l>*D0*bnJv28TShE^#M=Rk&Aq-5f@?c#7h+Qv0UC_9Qd~a;{o9UCW5XJb=(-z zf$0s!FVz9FK?jU_9jISC?ij?9FVcc$4O*b1(*HyYL`R!y!Cds_QY{d9#7zH^7KrrU zpaqG)ss$>9u;|WP<@VfNBh}giWlRdZElIy?y%N0<>s2Hw`)%u0@}=w51Qh+H^~zUS zm>gq3eZ;z$jCKk@TY$cWsSmA8iF3s|_B^6FsAmIc(-lf|PpnYGP~_4TYASe5SExHt z&voE6U7?PGC+cWip<1DhOID~M7wlH3n^>Vl0kJ{}DxRo@N*Y(F-e}}DK%|KkN>H&v ziPh+K@NWsJe0X_7miY~I6tOg^pD%TPG#_0nJz}Taou-F8L#3OYTm8+>&ujnPo6R4a z-?jTk9X=9{F_xC?QPTLCp_0a`k4vsdU*%|p+_P9dl^M!lorwihET$J6G<{_#`Hljx ziY{W8nF@BkQd+a#4x8-(bW%LCD5ss(pO!DyVrh7W9?55)mF_mNf946P>@f3rQ?XCYY8Ht*%d(t8``p1<$8!TFT7inXA^JyHvrk!iVEIn7Iw za;b8MBZ_WnZrw^jED-)Q85Kv%ht=v#*(I%Yxn##?m-9&`%S{AOS7C*z;oo0q#Z~9r1oZTi|lk-3v%W+9SZzNDl{p24Es?fQ|$R z{9d3D;H3cF5&i&lB5)QEs<;;PL*O#h_lnIX+hQ~t_cBY*Y6nIH3Ive&8Y;>{*oAN{ z-~%>+_Zg4|{^N*?%ANqFeJ``KH4?Vowb27BTSbq-8huTl){L zS$#75WaZ`bPP=oCYRjW9F1Or)0kX!1h3tlc=|-5-A0fRkaMqJ+^TV&MT-53xf2JdU zWi9xeL?w(l`wyA3{lSQ$L*BJ-W%Pfbt0dB*XhVA?-(RC(^Y;)oe?#TkX8z-Hnf4g= z{mYy*>$qH_Btfztji~G+c_{T;s$|i$O1%|5JlBZkX=CNREydX~p-QfDh=~xV;|pc@ zS5>mbRtgm_mk+mP#gubO9!9~onnCMNs}`SJDEnAojjV;*K7qDV8`|#p3vFN5QfoHGMzcMeYkPUfTMpI`|3#lwYR?VRV?L9!x$eUC6>G-PBI7O z+VJ0GJ{A;0O!BXp&ol`8bLJz;{(|}R`HA_6%)iHcM1Fd88*}|819CtVCvd3&%|_RM zj{)^Z{ze0mQD4Y_?Ej$w3HNfrfLi{%0oiDyB6lOt*J=dyi&l0!Kb<^q#Mn@B&-(@F{Y$C(c9_(YDje6DOL^FuHsU)tMkc$@EJruiy+gZC~@H$HE> zgy$2K!*(3bA&(bBm_7{xuKI;gJ3h~U#=lw~G1>a0*1M_UIOkWobODRxkMxsAvp|xfRnLLr_f-x>BdKTvMX^o{qQU*;=^jOmhP%d}_Xgcf~lQL~II74YC zE^nypTe+fs2`$F7CY0GmL!v2=s1!1du}!!28h(BM%6qz&4j!`W@$C=n&Zr;zuDSAS z==%gCjTX&>XSiX8@^tt`J?7}K%rNoaFIMb|KSe2%?y}L06y=;W544Li$k7#@y|QVC zRWD)=-}g5_xaC5)rAnToJ$N0O=AyDu%3$ifRGC1@qm`DrO?X+cG&T`@Gz7n2kuFql zi8H*U0#SY2pH}dYqOgheOGN53S^}T6M_J9-gP~(5_f#oC7FeW66hF*}=kbG-_iB~&PzNr?;RtDd$uUAGH21!N00yAYS~s_e5Om%+GkhMbqnN{ywg_Y zkeMT#U*od?Zs=}cA#e|{2v`g(0qzAVfct=@z%pPtu!8oVkeiG9*mcZ*3@VyWw;hCT z4yLa`)IsPkdstkgnx%quG0DLzD30jmK&K*0UL1HglT*vLNw`WGO+zL*$_66Q~0u*27s zI@a{oqb0I6-g=0`h^uMet@>LJu-wo%7N`V7I8OmK!UlAPg1{C*yeM*jFO8kFo)an+Z;ik{snA&p` zo}fmyN2mh0PjDKtEN>ESEal6$GDAuv7`_TCtNvZgZYy=gs?6{`DDgT_1MC&0SFE_! zx2V}2mZ)-m!x(VuwDOhOOv2oVN^-C+x2H!F)b<_2z!EnJf-P(IYJx{qad%5C7y0B#5F0A>QSfZ4ztKnzhi=v=_7@pDHMN&3mSeJ!tL-zm~s zc1n>rQ`GY;fM`Hbr9ebIs?RAeFnXb-noP&eE3ws*TEXTX!@l%GK(uihRP^^_&`*Gq z4e`%FKL`E=oC3Z8ME)N@zXHAnz5%`kz5~7o&H(=doCQQ)@ka4H!ZyetECq8V_}r{h zTL0(v!p?E_oI;FN+128JrAn8`NMC*{MX#t-cx;%uhegd6K2LO}$>UXg=jsx<`=sKk zU#Krxuf#&_!~jOBl0RDYvOY8~TJ7Z+zE|9Ezzx+LRq^tum6}9Jt<>RkU9lBO2NAWV z;Pl$KiJ{%C)GU93I;XI*aXiq4bqKEk9tQ%zTHp!bN#H5qX+U(BgRTdj1vUU1fla_> z;5p!Vpc<$jXMQ+AO~7GG#R|{d>RjVL>+(IjyQqA37cFZDtKw|FcK#ZwxQtKFO^u>$9v010x~d0MlD4y1eAc_#BAJwH)m)y}Q{CDwpx7n8qpOv#(fL)@}cN{%ekJ1$G z`CJX!0~_oLo%R?}RPNFY?)pZ>MR@uyJ&QJE7~^?mwHwgyrrY*!)Tg@w0Cq3HQ6Ip+Z9f^ zZx|!Uc}#cn^3(SDtph0<49Z~yQbFS!i4;+ze$GEn*CI@+DlmG`sgtPL^%yR($L2d8 zYDEz*X{b3{+ubIx#1Ru1scDquw6JF^2QyHI5QSJN_hY^T%t)Wg7CLKAw+1=y;IPsW6;B z2R)dbl{M>fHsgC%PXg7VzfR}F_E{l5R*;GDb_H;171Ee~jTE=aqU# zUZ&|4Djn_1B79H0<)W3UKE=Pqm`D@D^lzx@L1QEzY3WtW=iC~`!<_nQJI#L^cM_GA zc)z^xGJTfMxhRn*#^^mD#xku3c~)r_?;EXeVdPxti1eFA3{Q#G545FC4>)>Ip@0! zU#JSbw?K)ehf8o6Ua%3#u1ZHN?Y&lx;S~jXnM|Ypq*qem4MrY0JK~%)s-=dL;w~eK zmlWzJTL042r`ytS5W510vMc`GLG8lSSJLPkjCjiKu65<>yn3XAHaUz03M%#}o;6C} z&HT068op+UUZB#-jkppiaVZJ>+#+3q=)F{pYb*6FakQfu97V}4L*YG_>#xFbjKdqW z)VcPs>W#XF1N6Zpp7NZ&Qlf}rtt0QaNq-aOvO>dKHgTtOF2#(XFs`4b4X;BBI&RVZ z60Hncg)~5cUCenwUw~7_9DA5J-6r!M+w@(G2e<0Em{tjH$a7jv=OcIMg-)73*Ph8U zgZduk%kLECFSlzv@}PdQGgX~bv-o!hbO)p0J*Gj1VpP-0aRy%Zv^5iH+go}p_e;h^ zMxMoR7F$|65_wO}cr}~{6~lum`^G-t!X!k{xEQ#u+`p@lJTlri$!Omf@YE0At0eL4 zSYwBsHr*>FQcby0K=&`et#oEbJ&r0bH%5`CqY+KfiN+IjG(+!CdxuGpe5Bi`V*Z_4 zB5k-;ck#YS#+L4sKHn^$*!IRT^1PzOh|dw6)N!ogr>Y9g!##xt^l0LP4*02Y#tBC5 zZh8!_9c#ED-y+k=ofC}>QeZsntn7Yddbij}L@&2%7Fi|6bCmv;K8~i$WHH=3#qct! zT&TgMN{!Rd`bc9*XwjjR<)(usPD7ii?`gPya~QF_bcQj=K?&bGdh(uS2BzBktv#Lg zjW81VaIf)%%!B0^E3ErFa0#SpD-(O*Pqkl=?f8)i(1$}>nHp-58TK>MhBOmp+ zv9#+iRs8!6Y2Icn-oIFL^VC{nxr>5JjIVyF@@}|R>4wV_aedPCI;9Ag4>oe#Lb0;5nhHmES_E&s6F# zR>{n#DiurTzBaJ4Hp`iYgJuuvvQWR8Kc|=jV8n5voMfV$x7>)On{-VT=!(8ebo24q>a8 zYq(#FHe(_v@&U(CdU(AaK}pTcw`o)h6Z?oL6N~1C?OHNVPBvFb+|^Mul|R#T)5+(| zD!wb-93Dp5z0JF5UT?D(`zNu!X1pA4i=^OHS|ok?x@l6^NA%Q?7vbjED6zH!)s%&|E6>L4(Xq5-sm*wx(qt znA2$Kjb4Fi&o z24>Z>$1JDIZ!*&;=5_ONsv2Qp==YeBG_(MX3_fmZ>~;FvNHbSj#4f3~*+uozqu=N) z$a@%fYt23}GwA)%W;~5N43RF#r8mlTQS)7)TSVbDC| z%qYs;Yr4Y+6xn*%3fALP;>7UFwrU#Xw&u{Yc~*0}vYVB}b_m8KdN9&TwBJ@XwRFPh zV#?R8PPi~aLig%ZW=eAkPBr8FlkgQ;R+%|~_DwZY=|~%^4ULLdEPD6vX4ti*MWe@{ zbU_16xnpwioH?`m=4ABF%Sh|fxqDW(+|HSq89AN1=VqmKPRr_=mU`jM2$Vv6f)IKp zcrNXsBHQwQ>|_)hBJRa{`S#~Wk!PD@ByHHOcchVNW|gmUhMST{VD}vSo32oHo;jb* zssHF=q>kaav%lH9Wm$ua(+dhmPoFTRF&Yv%!kH_0LmRTBjG3NK(-JLL=c`9gF1o&G z`t%7?rxb|rz^P-4rWZ8kn_h5HG5S}U)hcw`Q!i1M;A8}v0eK!0W#&ZJT4miuCta=|h=&g(zQo$Sjrq|MgtL zUAt-7a5$C=E{YB^sdKXl_{weymcZ$ddkVeBq{K^D)+c6W$S?6OLKPNAss=wAbA#89_|@nd1V}MjAZiu1>1qj2@Z{R-(#KO(q+~;>@*nTrPYQ# zC$=48vzK$7j5nz*td0IDRw8Rh;SXD#=#CO=6+b@3iec5mL>K=Hv$vgInQ7h5@2IdA z*(tn_)sOaevl7VL70r)Iuw3MAYneP43k9L~ud;eYeONCXey!m5_>Bbe9;@G0rR7Uq z$&j%77}mz>C_X0YPMveC%Y+Ry7&Lg{bUMw7qPude7Ho?s_@}krax6W!*sXY1$<*76 zN((~2W2R0i8;upY6k8MQu5!Be?v^>M{?jC!N+YSI+vUKg2x3|G+d||`azNolpOj+rKF%!yW)^~0~S<&R_ zKiT(DaK7~cJ@$rtvp>o5B>%f@U|2}T3)SR^F^XL4O|s-x<3^7uDiG2aO(`n~sW_2K`T=wNrQ?Phc!GN7|*Y3TH>wa_&9L@nJ{~^2d9}RZ@8Am&+Tct!&`V{o`=uSNuXHOf2 z@6xaO-*`DncvZvc({CNHU+nOxu++k>#>3XD_Mh{8RFz?bTpQki2P~=D!btp_k6Q~L z$GG%_bxxLXc&GR;)vNw!FSNw+^w7m;M&e{Ofx7IpR!jYGOuyf%q!F8-WhGBJTzq$2 zv*mUgb-+ral7Glf8hRMxn0y2twSJ_4`VICx={deC}}x}U(%X1`d z>_?W9PyVO1iq$h+*P}&b>~P5>^JVW_xFSq`tG?OG>Gcm$8qCnlhlT3qKOC{fO7vMR zK4Sf`)zlg*nVvp`PGo&(jS>P5p$BUb71B`HaVwGj`muF$Xe2p?se;iDdoie!-$0&F zsKfgRVR)O0@$w1ltQfm|8vCAg1KqP$xr&yrRWkqm55C+{1MgZ9|2K4WEp$}=_3tVF E56!~5F#rGn delta 15965 zcmd^m3qVy>*8kn-o^$SbffqzXM7$y*K0qW?EFTv|Br`Gshfr$Vkg+%*@Q1G9TY>Ul1Qz&CJ)#f9C%k__6lu?6ddU zYpuQZgR=8UWrva~di0wnSS-yf7R$v;mo9-=7;qjq1{^@71@dKtmx3+>76VHFH&6k5 zjWQiJlz+|wE1$XJsQd2sSQnHoQ`|Fz8EoICZv>sCoI{xlsQ>cAza^p+PrDO!oI-wA z#Cd)s=un^-FoD~7*qx$`5P7b9g&55)xwnf?vRUpNshhYHuew)A(MBoi>4nG(JYkO% z7BLzLoe;4Bdw>N%4l3IYED;I=*QYyg+}tIK(*1Iac}p)pSGSb6{-;~Y`{i%xg&VZg zd38(6P|w{!EwBvWja~%Gzj<}zXI|a-+y$nxS#+^X-nzNE#qt2~Fz^t-(;fkx2RsTa z1Retx0KWlv{$kLI`tTA^H?Rtz%oAdgQiae49$RoiOcuBC(9RQL!mY0%D9?tjMJ8eT63O+OWpbQvMa1p3d5BiV8kr{cq=uCrOBQ zdlSPq^$Oe3h2}iNex6a<^^AI#QEd;!PGyR0r`bDHc~eH_#-P#9pj-#Y(rln9!e@b3 zfT3XgGNc_u*n;pVgo8n&foCuZF`%1~)fn_{j6>-W2zx=F z0Hz?k1XQoDAs6(n`Y^BYR)o`#KM=GBs1uayVkjt=&c3Mg4@iFwJ-P`r5tsz{fTPGm zk(^7@5cvY&FE#=N@jr{}!>d8RsSk(ZB`Yd_pzdXVxycCMhcq5ZtWSTSzWf77-*h(5 znCN{`5Zt~Yy*BmQx1-6DR7mtrc7)OXjW*{d=VwU@+vP3|oWpjyzd8L!F$uLa2)aBL z3>p&QK6hvPP0?p+*pkz(Uo1>BTmnjed*1q#VV4SjhN72|PV+R%ogJF)X_ z$69ey^u_a?+>YOgX7q~;)enj`qZMln^Cq$g&lVvhJP&=yM}Itc(+S!V=mV^mD1M6& zFRYVj%oZV3h_}!*!~-)?{y54OfNqp%;}&5+xL`&=XLASAh_e4*|Us2$LZ|peKPmAQPAmbVHd~&}V^S z;5DEG_!M=zKy#3PFR08cF_v}+3<3rM+fcxUOa_zyLy`6@I$_YP!K|$roypEOHXRA9 zmQh(c!*GseM*`S*V!f?HsC~H>YEC#P5L?m$S<~3XpiPc*wah!837!l#QZ7VoZboA= z*jV9V3%!}aB9nfLv^Zc1zC0M%3zPsKA*~X$9P~j@1+DoLC>K`>8^j{S*Ab)SK`f!) zM3i|M_yD-AzDzafqrkhsXn>390?>DWzW^TtD$0KhY(hANUKqrB2j7GsFZwqmZv<9L z=EdJIA#h13}H?!Y+Jybd(hxX zKq_jS3F-pvf*Rie-bQ!;=mxNMF2WNK=3kuw$~*X1q>b--VkrLUzOe-W8>&~K6W39tq6O`v;$DunL`0+7ER@sXg75f1~3 z5U*skBgq;yXF0;L$diC>2+v3ULx75SI?x(;0Uc=rVT?iklfZMx4?_BIgmpkecnq)s z>AgXNkroe#2pUCv*?puIMRXpB4+dg%m&_GLMTP;(w*e|M7YbI zH}}M`zLU-$xcAPSkXBtg#L<*zSOhJq6g!*eJ`rT*9WEqqJb#u+yD`})?&)XSnNbzO zM=eZtO1#9_3}P-liz*}JNb~;n!b3LiP(kp%f*0pe$|2U9oC}2ojc)t$(}zRn^vq9a0Z$E#}q7mt9-Zo{UAANkA zwIzL7B?i%)(R#O_QrCpSsad7P`8lqF5*{J@6upBza9CZ+Fr>uiO--Wg;iAKSePPNj z)x-H}q~S3Tasa6wmU?pne(q1~(m5q1tzYN3w8W%7aY@NHb&KoXIWak|dul>bTHiit zsa+D2XU!a#Q(BZazMv$L7Kmcoz{IS=`h-b26N>yz>fPvancI;nbniLLeD8Cq3bWQop0$F=+!XY+ z*k9sqS^>ScTWDJt}bym^QKxwbhmuDkU@?DrK3GM`}xACyXH1MJmN3Q zTjg(lp|0$cF=7svcz?M;J;dYoCnmLOb1c!f+p+xcvSWWz4f^=^tOS1dO}u?siqPBiX<{}r9Yd|P0j!Y9ZxgcV#WRv&PO7rPgV?Z2ZAM2P z*22ur`PO%vR>zADfhrA#fu3!xX$@zNqGwtwm3%OT`&SKYG|$eo8jMv?${WHkD(=Ao z>2ymy-dwWUS|t6$Q#SXI_>|2@>;LSO&8_QCPT8M*#$y$Vpqo+X1}3_MjbrR!ENnjR!gbxhQ)NkcjY2KoZae;Puo$G-#(N(I>lw zkjUQ1IgZjirw_t?fu%q{AWf#ww}shZ}*Vy(?H5_>TjR60_e!v>n)%oDAQrPKE_ ztsUH}pKu6c1R8Xc*v6e8sN^~))EUXM=Y&j!FI~q0SMmG@q28MD)lx&c)K{@se(U}| z0`sRK9?_}uSJre&|IE76zIf0q)tNc3`r@XIHR>bVzN8I(1qV6*YV~;>MhmKaRF0tp zml|(Q2^SaXY`EXjlP^gNw2v5cX;$r5n}2)h$?o)h(U%o|17yw|Vhv>WRxSQ8(%8H3 zsj78(1Aq7YSMfYAl-A#2&Gg2KvS*>_5-w;oZJ~Hk_yKg0n4z?VSlj|!Y4thmN+|v< z88a#Y&Hh*KK6K|A^7rgM@a3Tf3CRGH-vGTpFB}$H{-9x4&O#ejY8}iDL&WzbiL>k~ccm>&x#F()7yqNh zBa+7>_EjxhDcWDH6y)-VgXs0uVowjD0OJO>>$L?)T)<}6ISTfRT7o$zS1h;rRjx+o zD)&yE`xSrnTf$*vaV_kKRK8HXqJp6Y$KZSqIj#yqL9_*>TEjuqUblT>~B=MPMj0)B8m@33H~hiFDXoCmFQ#M zwIZC+$x#&bwKYbpy2g)n?WwDS&LW_)RmhCM>sR>sDfl^s*qcUMvcGAB!LA$RQw$sJ zeA3#*Q)zXWj?XY>R6i@aM7bF(P16wG;B#z~zfs1is~SavCAqWNdA<0q?Sn$vW?BEG@wgO2A;I zMd0q&KkXtUu!Y3-T1&~kM-4YC_KU^X7>bfZD5MrX`d}*E4Tm6;z5$U2;X^&#-wUm2 z#oOY@p!;!t6v_8;@LaJbD)(oWVeG@WU-iU>N;|9WW9`Bk6|Kp8Vv7{8^#RuP<*kJm zXw_ufQKDU~pZ*Gw_w$`Kd*uj*K$j$K8IwJ zox?U!wJ2?6A|E5uXOq6G3({6qN?oGuV_n?uY0abiqK2M8uX-79f~Ej{>f^&f-F7`a zWHbUJfl>7t<9J4)o?su3zyx3-P|g#d*N0YX(gN0wfB92vxgH1j>IczFe?|BNaFVCt zNr5BTodV8?ZKJ+J()YkQ;0NG5Z~?do_|G$C^Wp_j5a{c_31NJXV$?2RL!I2Az54m7b5a+|UUyFFwM)X{$_O(eMB2kbc_-$;=v-Y{nP^^YDq+V>lmu_M zBzP2QOC6uLDpD+q;O}sp$ArbH1h!m4*b3^2kjhveDvywQ^Ya%=zuVJ>(%z#|vTfwM zC<0xwwUDNJT1c^B$GX0tJw4bq;JNIq`D0&AHhJ+P?E2H-3^Bw!&`Ihj{;LO)s)k9y zX6D_}DdvfkX13wIsp8{-=P6Fnq^Ci>z#8DnaE3<19B)R_OF%VX0xwJEkw__uRYyx@ z+ONTdN5BPeLhd+(J!!JJ@}*m8ZZ|2EwmDgt8Q)df&*)4WnNO>7twcvBNEp^+=@W^B z?QDiQN=f-rv>DS&I^4!9+5~e)vec_JB~(g^nf8eEN-9;2R#VN?BHPv=nmbeIyQwFy*mNeZEr?Ue{K;k2~R=3Q?S=}fp1 zZ^nPe+jF2sO{Vo-wDD$TwJn=@&q{U>zivM{{d;c_qg13khRbqtr^?5?LeR3*|xo0SoPWR+G(*CzTA8$&(kF3unqD zjG|_#H+!1M5p-9XV5hOCmGN|Dv$oa@J)@jpbaxADFa@7eDokOv{GC9~p2`fW{7Q|c z#}}#N*^@6Z6&AGWoH9njfv=uO#otN>4f<3Fqm0)ynX*JR)hnn%wXA9amHk1^B3V+; zQTD4^G9?G9rjWg-+TL_2>H>*|&(X)2W9(`bdh3;A+=2PMNNl8@ zr+u5%7>Ws3XLy5E1$Aoiln^5ao6ZQ;2X;K5#+p0B)nrDMeYFhA=%WttMxw!)g<7x~ zoT{EenXjb`^Hd)-7}pm}S#z)N8cY#s>VvfZH96nRPghrfFQb$yDt=NHsc0hWNG1K% zh2)%W!fIgsq3x?!enR&h=dRwzfC?YF208Ku4~Cz!=A zsTDYf-^>}@8luoERS%|&SJX2Ud_>7KGqCz!VQHj<(ko4s z7_*0>y%9u5Vz>o~(4Zh^E+_*jyQz%v-lYYTw>gyhv!(i6I`jyRiIO_1k>u;8rcv>` zEPPp%97-!66JyO@k=hO$Jw8uQr+0=6q2`!a4bl`EF$cADn#y12$v$TyoemuX;p)hsogPLF4?=K6cJOvSSdQu5%#+E(|HX*dGO z(qhb!bG5Zr+V{E?Xa>&H&VZq}3B73cBidX_r~*$Mm3ky(P&1H|k6xBNr{tRR7HIb& zo~I@9{BT{^`(r4EEI-Naur5&y-m*~-zpW7r0E^;j-)$0O_d&$>B8RgK!um?(@BY- zeJ`jL=1E=0Uc-)cdXy=I=trO@0lH5nuHcj~#}-J=&1gtOsQw9RTA~i6nssUjjqj)* zqLSq-6z*mgEncNBGZ%*GLm(xu%JF7VoW7r#waxUXV6tz4^i}*G(i)hERLV_-4it9M zmkQ)dP?G#AW!Cg~#sY2z#EQH7uF zaZiPmG(EXGO)qBwaC`8}Q*}!S`FhGB*5>sA*;!z@8LiwPTH8{5mKNgK1HkRNmIwr(xWK=}x=R zhK3xI9Q4+3J)4c^tz6>_f|xq@>mhW@2)!e@iZSFB!A62$;|FH&qNr$u-iPJV_Cb1A zayBu1DW%BB!+BbkWfIQTia`tfKHvoSfzvJHkUPPWUw_udS7w~^=?RvGpL~DAJm1?C zs%@-=n@@)t%^7`p3>N0#qe3IIQJ67>@jDCsbsUj3Ghh;Y{dFf>P22x!?N3UCk?a|* zhf-yl(cbT`qJESv)|1J3NFPd-rRa$75UML{VU&5Zbd92x%ejw)C$EQI}o64$s+;w0<+CWdUN&@qUEgBBk1f=J^w1v3bl;441s(UTP8y;TnKTY+QNkj zLcK^$qP;PCxVbmjfF0eDB8Ny^T3poXsGh;{=)Ij%W2qQYR^%5w1Me3?vWg*ZHXaR?v1ybW&8R(HleJ zKeay+1fLh@KB_fva#2x1o@>J7qT-yQg1XBK>~X&w&B+^|Q#7uiaPqi#*L|*;Gw)CC zb5n96e&V_&CM3pn?wr~=E;+edLRIXd{KYC^FQV8-hl5O^HkBnv|G)Q$m-duHBMm zt@6Lj@;!0jRVA_HfO4v2vV(HtjYz8e1{QV0P$Ptj?$l%Sg51(^d6SE#PA)9)e_DU; z^3{xlvHa+30A-$*WIFXAkbV}DXzMBKAR6NvZO~3tK2xM1{a#O{U`glVN z5|aCZ_cz7$TUpnO?60wC%I;^>(%>ojkko%_2m`KpD~8^?Xf(55lLpD-^HMj`1TbxQ zf1^FW%+~OP`R_DZs8uhcv5<@67Lqy-1@9ooS!>GDF&nIZ zQdB6eRJT!Tn$a1jjJW2|hdX2;)O3K+&Rw}njHvt2T&}GC$MAU&<_9FH5dM0-2nz9w z_GQ-g?Ut03lDwAK!&YbAjgsO#I4)%$>2M!5!^d8Co3WT8r|2z0g8MdTM<&+}R58HM zjfQqb1zgVXf1hw1eyq`FC1=03HReG|{$B{!2#J7W7XR{1#%}6Y6^# z;U@em&-ryA^u}`N7jzmyLNM#@ul1+O@%n@KebBnc?%R)We|qeazSI96RorR>!5TFt z+NX!An=ThLUmI?uFeB2p8z~_`>dz_kf8u?rF8|aapnvub{RHF&| zoj*aDlvA8FzO=C3qF4D719&2?d`-$JnNU<`%&xX9eE!(NXN}8>BmGy*3BNoabYOJ` z|60}H_w?A`p#^>ed_9{*9afk#HUHPKvA7=CEc$vITPGs*e}80D>qluEC6wwSH3*g;r$g5i_{HCFkZGBY;2k}n+ zAF{St*IL`U@#bss%Y6BV{M#EjNB@Z8`Ylm&cAdLcNxpdTCaPU5N7KkY*etm>(%40b zA7Xu&sTm!q*9TbruHdVI6k0tOsrC=BNAe?Y-t<{<9S=@2tIjt>w(RbJ#NfV#lU?Hr zre@_8;;hF1&?+UMBXtT3FenG-B{b!t(b1nrgA)T9FS|XUowo;e^~y%UIlkgZ=hNIk zWA@+UG1K}%qLclSZ=Cy<>b%A+u6j$2r`qXiu;2MzQ+6jVkN%iVR;-tB<+Z!fdyOv( zZsPuEA)ZcsDFl1s#6l_@V=Sd5qm28^`$ie*0(+KNoR~+mS83@~m}?BB#JALySo3S1 zX{w!_uAf%FQwMnRj6&M?mKte3f46Y}dl4B}GBsRt^yV4NlVHTK7z&zZbfEis7)#CL z3ypBelZNY%!dt43Hj37+SNvhx@s`?=P}fk}al+_Bz9!hhFJ5X?*xXBM%IZAa?ajsZ zbY!U*`eWyINR5yEl8f5Vx?k`*Jy8bsaJVyhw2Rh}vRCm%!K5bZU6i}vJj=_?a|HBY3!D$;>JlW{Lme7<9#w{)Q>OBYhJud$WKHk5YZ-~>! z8;qVTnNo_4RW!QVNTuRu6^FTdw~;J)&l?7<|3MEmUkC}nVaSEn0mEqBet6Y)MFzx@ zJqcRSDKy|E^NZMk#*Mryj4-M!GAhg^`;1~%z1fIq^6zi=8Dojfe-Y@{{)3A}b}H^| z45z?1jqqQ+_S&#u`m$K>5pj8^6T@iX>uqgFK~A1)atS7@)P`k&*z`1Rv+>8j$u%h_ UZ#=xxsaYkoaG&1t`lZ7E01|g9O#lD@