(3f015888d) Implement manual doors that can be opened simply by clicking on them. Add a test sub (not added in the project -> have to manually place in the local bin folder to test it).
This commit is contained in:
@@ -10,6 +10,7 @@ using System.Xml.Linq;
|
|||||||
#if CLIENT
|
#if CLIENT
|
||||||
using Barotrauma.Lights;
|
using Barotrauma.Lights;
|
||||||
#endif
|
#endif
|
||||||
|
using Barotrauma.Extensions;
|
||||||
|
|
||||||
namespace Barotrauma.Items.Components
|
namespace Barotrauma.Items.Components
|
||||||
{
|
{
|
||||||
@@ -210,12 +211,13 @@ namespace Barotrauma.Items.Components
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool HasRequiredItems(Character character, bool addMessage)
|
private string text = TextManager.Get("DoorMsgCannotOpen");
|
||||||
|
public override bool HasRequiredItems(Character character, bool addMessage, string msg = null)
|
||||||
{
|
{
|
||||||
if (item.Condition <= RepairThreshold) return true; //For repairing
|
if (item.Condition <= RepairThreshold) return true; //For repairing
|
||||||
|
|
||||||
//this is a bit pointless atm because if canBePicked is false it won't allow you to do Pick() anyway, however it's still good for future-proofing.
|
//this is a bit pointless atm because if canBePicked is false it won't allow you to do Pick() anyway, however it's still good for future-proofing.
|
||||||
return requiredItems.Any() ? base.HasRequiredItems(character, addMessage) : canBePicked;
|
return requiredItems.Any() ? base.HasRequiredItems(character, addMessage, msg ?? text) : canBePicked;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Pick(Character picker)
|
public override bool Pick(Character picker)
|
||||||
@@ -226,18 +228,27 @@ namespace Barotrauma.Items.Components
|
|||||||
public override bool OnPicked(Character picker)
|
public override bool OnPicked(Character picker)
|
||||||
{
|
{
|
||||||
if (item.Condition <= RepairThreshold) return true; //repairs
|
if (item.Condition <= RepairThreshold) return true; //repairs
|
||||||
|
if (requiredItems.Any())
|
||||||
|
{
|
||||||
|
ForceOpen(ActionType.OnPicked);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ForceOpen(ActionType actionType)
|
||||||
|
{
|
||||||
SetState(PredictedState == null ? !isOpen : !PredictedState.Value, false, true); //crowbar function
|
SetState(PredictedState == null ? !isOpen : !PredictedState.Value, false, true); //crowbar function
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
PlaySound(ActionType.OnPicked, item.WorldPosition, picker);
|
PlaySound(actionType, item.WorldPosition, picker);
|
||||||
#endif
|
#endif
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Select(Character character)
|
public override bool Select(Character character)
|
||||||
{
|
{
|
||||||
//can only be selected if the item is broken
|
//can only be selected if the item is broken
|
||||||
return item.Condition <= RepairThreshold;
|
if (item.Condition <= RepairThreshold) return true; //repairs
|
||||||
|
ForceOpen(ActionType.OnUse);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(float deltaTime, Camera cam)
|
public override void Update(float deltaTime, Camera cam)
|
||||||
|
|||||||
@@ -554,7 +554,7 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
public virtual void FlipY(bool relativeToSub) { }
|
public virtual void FlipY(bool relativeToSub) { }
|
||||||
|
|
||||||
public bool HasRequiredContainedItems(bool addMessage)
|
public bool HasRequiredContainedItems(bool addMessage, string msg = null)
|
||||||
{
|
{
|
||||||
if (!requiredItems.ContainsKey(RelatedItem.RelationType.Contained)) return true;
|
if (!requiredItems.ContainsKey(RelatedItem.RelationType.Contained)) return true;
|
||||||
if (item.OwnInventory == null) return false;
|
if (item.OwnInventory == null) return false;
|
||||||
@@ -564,7 +564,11 @@ namespace Barotrauma.Items.Components
|
|||||||
if (!item.OwnInventory.Items.Any(it => it != null && it.Condition > 0.0f && ri.MatchesItem(it)))
|
if (!item.OwnInventory.Items.Any(it => it != null && it.Condition > 0.0f && ri.MatchesItem(it)))
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
if (addMessage && !string.IsNullOrEmpty(ri.Msg)) GUI.AddMessage(ri.Msg, Color.Red);
|
msg = msg ?? ri.Msg;
|
||||||
|
if (addMessage && !string.IsNullOrEmpty(msg))
|
||||||
|
{
|
||||||
|
GUI.AddMessage(msg, Color.Red);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -573,7 +577,7 @@ namespace Barotrauma.Items.Components
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool HasRequiredItems(Character character, bool addMessage)
|
public virtual bool HasRequiredItems(Character character, bool addMessage, string msg = null)
|
||||||
{
|
{
|
||||||
if (!requiredItems.Any()) return true;
|
if (!requiredItems.Any()) return true;
|
||||||
if (character.Inventory == null) return false;
|
if (character.Inventory == null) return false;
|
||||||
@@ -585,7 +589,11 @@ namespace Barotrauma.Items.Components
|
|||||||
if (character.SelectedItems.FirstOrDefault(it => it != null && it.Condition > 0.0f && ri.MatchesItem(it)) == null)
|
if (character.SelectedItems.FirstOrDefault(it => it != null && it.Condition > 0.0f && ri.MatchesItem(it)) == null)
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
if (addMessage && !string.IsNullOrEmpty(ri.Msg)) GUI.AddMessage(ri.Msg, Color.Red);
|
msg = msg ?? ri.Msg;
|
||||||
|
if (addMessage && !string.IsNullOrEmpty(msg))
|
||||||
|
{
|
||||||
|
GUI.AddMessage(msg, Color.Red);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -598,7 +606,11 @@ namespace Barotrauma.Items.Components
|
|||||||
if (character.Inventory.Items.FirstOrDefault(it => it != null && it.Condition > 0.0f && ri.MatchesItem(it)) == null)
|
if (character.Inventory.Items.FirstOrDefault(it => it != null && it.Condition > 0.0f && ri.MatchesItem(it)) == null)
|
||||||
{
|
{
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
if (addMessage && !string.IsNullOrEmpty(ri.Msg)) GUI.AddMessage(ri.Msg, Color.Red);
|
msg = msg ?? ri.Msg;
|
||||||
|
if (addMessage && !string.IsNullOrEmpty(msg))
|
||||||
|
{
|
||||||
|
GUI.AddMessage(msg, Color.Red);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1619,7 +1619,12 @@ namespace Barotrauma
|
|||||||
if (ic is Holdable holdable && !holdable.CanBeDeattached()) continue;
|
if (ic is Holdable holdable && !holdable.CanBeDeattached()) continue;
|
||||||
|
|
||||||
Color color = Color.Red;
|
Color color = Color.Red;
|
||||||
if (ic.HasRequiredSkills(character) && ic.HasRequiredItems(character, false)) color = Color.Orange;
|
bool hasRequiredSkillsAndItems = ic.HasRequiredSkills(character) && ic.HasRequiredItems(character, false);
|
||||||
|
if (hasRequiredSkillsAndItems)
|
||||||
|
{
|
||||||
|
color = Color.Orange;
|
||||||
|
}
|
||||||
|
// TODO: Blue color if the item is selected
|
||||||
|
|
||||||
texts.Add(new ColoredText(ic.DisplayMsg, color, false));
|
texts.Add(new ColoredText(ic.DisplayMsg, color, false));
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user