diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs index 1fb893596..129aef94a 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs @@ -318,24 +318,6 @@ namespace Barotrauma.Items.Components return true; } - Rectangle slotRect = inputContainer.Inventory.slots[slotIndex].Rect; - - itemIcon.Draw( - spriteBatch, - slotRect.Center.ToVector2(), - color: requiredItem.ItemPrefab.InventoryIconColor * 0.3f, - scale: Math.Min(slotRect.Width / itemIcon.size.X, slotRect.Height / itemIcon.size.Y)); - - if (slotRect.Contains(PlayerInput.MousePosition)) - { - string toolTipText = requiredItem.ItemPrefab.Name; - if (!string.IsNullOrEmpty(requiredItem.ItemPrefab.Description)) - { - toolTipText += '\n' + requiredItem.ItemPrefab.Description; - } - tooltip = new Pair(slotRect, toolTipText); - } - slotIndex++; } } @@ -361,15 +343,37 @@ namespace Barotrauma.Items.Components } } + private bool SelectItem(Character user, FabricationRecipe selectedItem) + { + selectedItemFrame.ClearChildren(); + + var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.9f), selectedItemFrame.RectTransform, Anchor.Center)) { RelativeSpacing = 0.03f, Stretch = true }; + if (GameMain.Client != null) { - FabricationRecipe recipe = child.UserData as FabricationRecipe; - if (recipe?.DisplayName == null) { continue; } - child.Visible = recipe.DisplayName.ToLower().Contains(filter); + inadequateSkills = selectedItem.RequiredSkills.FindAll(skill => user.GetSkillLevel(skill.Identifier) < skill.Level); + } + + if (selectedItem.RequiredSkills.Any()) + { + string text = TextManager.Get("FabricatorRequiredSkills") + ":\n"; + foreach (Skill skill in selectedItem.RequiredSkills) + { + text += " - " + TextManager.Get("SkillName." + skill.Identifier) + " " + TextManager.Get("Lvl").ToLower() + " " + skill.Level; + if (skill != selectedItem.RequiredSkills.Last()) { text += "\n"; } + } + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), paddedFrame.RectTransform), text, + textColor: inadequateSkills.Any() ? Color.Red : Color.LightGreen, font: GUI.SmallFont); } - itemList.UpdateScrollBarSize(); - itemList.BarScroll = 0.0f; + float degreeOfSuccess = user == null ? 0.0f : DegreeOfSuccess(user, selectedItem.RequiredSkills); + if (degreeOfSuccess > 0.5f) { degreeOfSuccess = 1.0f; } + + float requiredTime = user == null ? selectedItem.RequiredTime : GetRequiredTime(selectedItem, user); + string requiredTimeText = TextManager.Get("FabricatorRequiredTime") + ": " + ToolBox.SecondsToReadableTime(requiredTime); + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), paddedFrame.RectTransform), + requiredTimeText, textColor: ToolBox.GradientLerp(degreeOfSuccess, Color.Red, Color.Yellow, Color.LightGreen), font: GUI.SmallFont); + return true; } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs index c6ca050f5..ab68527c6 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs @@ -468,16 +468,9 @@ namespace Barotrauma.Items.Components " Remoteplayer: " + c.IsRemotePlayer); return false; } - - if (IsHorizontal) + else if (connection.Name == "set_state") { - if (body.SimPosition.X < doorRectSimPos.X || body.SimPosition.X > doorRectSimPos.X + doorRectSimSize.X) { return false; } - diff = body.SimPosition.Y - item.SimPosition.Y; - } - else - { - if (body.SimPosition.Y > doorRectSimPos.Y || body.SimPosition.Y < doorRectSimPos.Y - doorRectSimSize.Y) { return false; } - diff = body.SimPosition.X - item.SimPosition.X; + SetState(signal != "0", false, true); } #if SERVER diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 3ed1c2b74..c9862022b 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -1371,20 +1371,40 @@ namespace Barotrauma } else { - if (forceSelectKey) + if (picker.IsKeyDown(InputType.Aim)) { - if (ic.PickKey == InputType.Select) pickHit = true; - if (ic.SelectKey == InputType.Select) selectHit = true; - } - else if (forceActionKey) - { - if (ic.PickKey == InputType.Use) pickHit = true; - if (ic.SelectKey == InputType.Use) selectHit = true; + pickHit = false; + selectHit = false; } else { - pickHit = picker.IsKeyHit(ic.PickKey); - selectHit = picker.IsKeyHit(ic.SelectKey); + if (forceSelectKey) + { + if (ic.PickKey == InputType.Select) pickHit = true; + if (ic.SelectKey == InputType.Select) selectHit = true; + } + else if (forceActionKey) + { + if (ic.PickKey == InputType.Use) pickHit = true; + if (ic.SelectKey == InputType.Use) selectHit = true; + } + else + { + pickHit = picker.IsKeyHit(ic.PickKey); + selectHit = picker.IsKeyHit(ic.SelectKey); + +#if CLIENT + //if the cursor is on a UI component, disable interaction with the left mouse button + //to prevent accidentally selecting items when clicking UI elements + if (picker == Character.Controlled && GUI.MouseOn != null) + { + if (GameMain.Config.KeyBind(ic.PickKey).MouseButton == 0) pickHit = false; + if (GameMain.Config.KeyBind(ic.SelectKey).MouseButton == 0) selectHit = false; + } +#endif + } + } + } #if CLIENT //if the cursor is on a UI component, disable interaction with the left mouse button @@ -1398,9 +1418,6 @@ namespace Barotrauma } } - - if (!pickHit && !selectHit) continue; - if (!ic.HasRequiredSkills(picker, out Skill tempRequiredSkill)) hasRequiredSkills = false; bool showUiMsg = false;