Merge branch 'master' of https://github.com/Faerdan/Barotrauma into Faerdan-master
Conflicts: Barotrauma/BarotraumaClient/Source/Map/MapEntity.cs Barotrauma/BarotraumaClient/Source/Screens/GameScreen.cs Barotrauma/BarotraumaShared/Source/Characters/Character.cs Barotrauma/BarotraumaShared/Source/Items/Item.cs
This commit is contained in:
@@ -134,69 +134,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
if (!LockHands)
|
||||
{
|
||||
//find the closest item if selectkey has been hit, or if the Character is being
|
||||
//controlled by the player (in order to highlight it)
|
||||
|
||||
if (findClosestTimer <= 0.0f || Screen.Selected == GameMain.EditMapScreen)
|
||||
{
|
||||
closestCharacter = FindClosestCharacter(mouseSimPos);
|
||||
if (closestCharacter != null && closestCharacter.info == null)
|
||||
{
|
||||
closestCharacter = null;
|
||||
}
|
||||
|
||||
float closestItemDist = 0.0f;
|
||||
closestItem = FindClosestItem(mouseSimPos, out closestItemDist);
|
||||
|
||||
if (closestCharacter != null && closestItem != null)
|
||||
{
|
||||
if (Vector2.DistanceSquared(closestCharacter.SimPosition, mouseSimPos) < ConvertUnits.ToSimUnits(closestItemDist) * ConvertUnits.ToSimUnits(closestItemDist))
|
||||
{
|
||||
if (selectedConstruction != closestItem) closestItem = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
closestCharacter = null;
|
||||
}
|
||||
}
|
||||
|
||||
findClosestTimer = 0.1f;
|
||||
}
|
||||
else
|
||||
{
|
||||
findClosestTimer -= deltaTime;
|
||||
}
|
||||
|
||||
if (selectedCharacter == null && closestItem != null)
|
||||
{
|
||||
closestItem.IsHighlighted = true;
|
||||
if (!LockHands && closestItem.Pick(this))
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (IsKeyHit(InputType.Select))
|
||||
{
|
||||
if (selectedCharacter != null)
|
||||
{
|
||||
DeselectCharacter();
|
||||
}
|
||||
else if (closestCharacter != null && closestCharacter.IsHumanoid && closestCharacter.CanBeSelected)
|
||||
{
|
||||
SelectCharacter(closestCharacter);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (selectedCharacter != null) DeselectCharacter();
|
||||
selectedConstruction = null;
|
||||
closestItem = null;
|
||||
closestCharacter = null;
|
||||
}
|
||||
DoInteractionUpdate(deltaTime, mouseSimPos);
|
||||
|
||||
DisableControls = false;
|
||||
}
|
||||
|
||||
@@ -182,27 +182,27 @@ namespace Barotrauma
|
||||
if (cprButton.Visible) cprButton.Draw(spriteBatch);
|
||||
}
|
||||
|
||||
if (character.ClosestCharacter != null && character.ClosestCharacter.CanBeSelected)
|
||||
if (character.FocusedCharacter != null && character.FocusedCharacter.CanBeSelected)
|
||||
{
|
||||
Vector2 startPos = character.DrawPosition + (character.ClosestCharacter.DrawPosition - character.DrawPosition) * 0.7f;
|
||||
Vector2 startPos = character.DrawPosition + (character.FocusedCharacter.DrawPosition - character.DrawPosition) * 0.7f;
|
||||
startPos = cam.WorldToScreen(startPos);
|
||||
|
||||
Vector2 textPos = startPos;
|
||||
textPos -= new Vector2(GUI.Font.MeasureString(character.ClosestCharacter.Info.Name).X / 2, 20);
|
||||
textPos -= new Vector2(GUI.Font.MeasureString(character.FocusedCharacter.Info.Name).X / 2, 20);
|
||||
|
||||
GUI.DrawString(spriteBatch, textPos, character.ClosestCharacter.Info.Name, Color.White, Color.Black, 2);
|
||||
GUI.DrawString(spriteBatch, textPos, character.FocusedCharacter.Info.Name, Color.White, Color.Black, 2);
|
||||
}
|
||||
else if (character.SelectedCharacter == null && character.ClosestItem != null && character.SelectedConstruction == null)
|
||||
else if (character.SelectedCharacter == null && character.FocusedItem != null && character.SelectedConstruction == null)
|
||||
{
|
||||
var hudTexts = character.ClosestItem.GetHUDTexts(character);
|
||||
var hudTexts = character.FocusedItem.GetHUDTexts(character);
|
||||
|
||||
Vector2 startPos = new Vector2((int)(GameMain.GraphicsWidth / 2.0f), GameMain.GraphicsHeight);
|
||||
startPos.Y -= 50 + hudTexts.Count * 25;
|
||||
|
||||
Vector2 textPos = startPos;
|
||||
textPos -= new Vector2((int)GUI.Font.MeasureString(character.ClosestItem.Name).X / 2, 20);
|
||||
textPos -= new Vector2((int)GUI.Font.MeasureString(character.FocusedItem.Name).X / 2, 20);
|
||||
|
||||
GUI.DrawString(spriteBatch, textPos, character.ClosestItem.Name, Color.White, Color.Black * 0.7f, 2);
|
||||
GUI.DrawString(spriteBatch, textPos, character.FocusedItem.Name, Color.White, Color.Black * 0.7f, 2);
|
||||
|
||||
textPos.Y += 30.0f;
|
||||
foreach (ColoredText coloredText in hudTexts)
|
||||
|
||||
@@ -387,7 +387,7 @@ namespace Barotrauma.Tutorials
|
||||
while (!HasItem("Diving Mask") && !HasItem("Diving Suit"))
|
||||
{
|
||||
if (!divingMaskSelected &&
|
||||
Character.Controlled.ClosestItem != null && Character.Controlled.ClosestItem.Name == "Diving Suit")
|
||||
Character.Controlled.FocusedItem != null && Character.Controlled.FocusedItem.Name == "Diving Suit")
|
||||
{
|
||||
infoBox = CreateInfoFrame("There can only be one item in each inventory slot, so you need to take off "
|
||||
+ "the jumpsuit if you wish to wear a diving suit.");
|
||||
|
||||
@@ -14,9 +14,9 @@ namespace Barotrauma.Items.Components
|
||||
GUI.DrawRectangle(spriteBatch, new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight),
|
||||
Color.Green * 0.1f, true);
|
||||
|
||||
if (character.ClosestCharacter == null) return;
|
||||
if (character.FocusedCharacter == null) return;
|
||||
|
||||
var target = character.ClosestCharacter;
|
||||
var target = character.FocusedCharacter;
|
||||
|
||||
Vector2 hudPos = GameMain.GameScreen.Cam.WorldToScreen(target.WorldPosition);
|
||||
hudPos += Vector2.UnitX * 50.0f;
|
||||
|
||||
@@ -20,7 +20,6 @@ namespace Barotrauma
|
||||
get { return prefab.sprite; }
|
||||
}
|
||||
|
||||
|
||||
public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true)
|
||||
{
|
||||
if (!Visible) return;
|
||||
@@ -32,8 +31,7 @@ namespace Barotrauma
|
||||
|
||||
if (prefab.sprite != null)
|
||||
{
|
||||
float depth = Sprite.Depth;
|
||||
depth += (ID % 255) * 0.000001f;
|
||||
float depth = GetDrawDepth();
|
||||
|
||||
if (body == null)
|
||||
{
|
||||
|
||||
@@ -163,15 +163,15 @@ namespace Barotrauma.Lights
|
||||
|
||||
if (Character.Controlled != null)
|
||||
{
|
||||
if (Character.Controlled.ClosestItem != null)
|
||||
if (Character.Controlled.FocusedItem != null)
|
||||
{
|
||||
Character.Controlled.ClosestItem.IsHighlighted = true;
|
||||
Character.Controlled.ClosestItem.Draw(spriteBatch, false, true);
|
||||
Character.Controlled.ClosestItem.IsHighlighted = true;
|
||||
Character.Controlled.FocusedItem.IsHighlighted = true;
|
||||
Character.Controlled.FocusedItem.Draw(spriteBatch, false, true);
|
||||
Character.Controlled.FocusedItem.IsHighlighted = true;
|
||||
}
|
||||
else if (Character.Controlled.ClosestCharacter != null)
|
||||
else if (Character.Controlled.FocusedCharacter != null)
|
||||
{
|
||||
Character.Controlled.ClosestCharacter.Draw(spriteBatch);
|
||||
Character.Controlled.FocusedCharacter.Draw(spriteBatch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1071,7 +1071,7 @@ namespace Barotrauma
|
||||
dummyCharacter.SelectedConstruction.UpdateHUD(cam, dummyCharacter);
|
||||
}
|
||||
|
||||
if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.ClosestItem != dummyCharacter.SelectedConstruction) dummyCharacter.SelectedConstruction = null;
|
||||
if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.FocusedItem != dummyCharacter.SelectedConstruction) dummyCharacter.SelectedConstruction = null;
|
||||
}
|
||||
|
||||
CharacterHUD.Update((float)deltaTime, dummyCharacter);
|
||||
|
||||
@@ -56,21 +56,16 @@ namespace Barotrauma
|
||||
|
||||
public override void AddToGUIUpdateList()
|
||||
{
|
||||
if (Character.Controlled != null && Character.Controlled.SelectedConstruction != null)
|
||||
if (Character.Controlled != null && Character.Controlled.SelectedConstruction != null && Character.Controlled.CanInteractWith(Character.Controlled.SelectedConstruction))
|
||||
{
|
||||
if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem)
|
||||
{
|
||||
Character.Controlled.SelectedConstruction.AddToGUIUpdateList();
|
||||
}
|
||||
Character.Controlled.SelectedConstruction.AddToGUIUpdateList();
|
||||
}
|
||||
|
||||
if (GameMain.GameSession != null) GameMain.GameSession.AddToGUIUpdateList();
|
||||
|
||||
Character.AddAllToGUIUpdateList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
|
||||
{
|
||||
cam.UpdateTransform(true);
|
||||
@@ -80,12 +75,9 @@ namespace Barotrauma
|
||||
|
||||
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, GameMain.ScissorTestEnable);
|
||||
|
||||
if (Character.Controlled != null && Character.Controlled.SelectedConstruction != null)
|
||||
if (Character.Controlled != null && Character.Controlled.SelectedConstruction != null && Character.Controlled.CanInteractWith(Character.Controlled.SelectedConstruction))
|
||||
{
|
||||
if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem)
|
||||
{
|
||||
Character.Controlled.SelectedConstruction.DrawHUD(spriteBatch, cam, Character.Controlled);
|
||||
}
|
||||
Character.Controlled.SelectedConstruction.DrawHUD(spriteBatch, cam, Character.Controlled);
|
||||
}
|
||||
|
||||
if (Character.Controlled != null && cam != null) Character.Controlled.DrawHUD(spriteBatch, cam);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="Skyholder Artifact"
|
||||
category="Alien"
|
||||
Tags="alien"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="artifact.png" depth="0.7" sourcerect="58,0,60,60"/>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
name="Thermal Artifact"
|
||||
category="Alien"
|
||||
Tags="alien"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="artifact.png" depth="0.7" sourcerect="1,0,57,56"/>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
name="Faraday Artifact"
|
||||
category="Alien"
|
||||
Tags="alien"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="artifact.png" depth="0.7" sourcerect="0,56,60,49"/>
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<Item
|
||||
name="Oxygenite Shard"
|
||||
category="Alien"
|
||||
pickdistance="150"
|
||||
|
||||
tags="alien,smallitem"
|
||||
impacttolerance="8">
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<Item
|
||||
name="Sulphurite Shard"
|
||||
category="Alien"
|
||||
pickdistance="150"
|
||||
|
||||
tags="alien,smallitem"
|
||||
impacttolerance="8"
|
||||
spritecolor="1.0,0.0,0.0,1.0">
|
||||
@@ -137,7 +137,7 @@
|
||||
name="Ancient Weapon"
|
||||
category="Alien"
|
||||
Tags="alien,smallitem"
|
||||
pickdistance="200">
|
||||
>
|
||||
|
||||
<Deconstruct time="20">
|
||||
<Item name="Steel Bar"/>
|
||||
@@ -188,7 +188,7 @@
|
||||
category="Alien"
|
||||
Tags="alien"
|
||||
linkable="true"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture="Content/Map/ruins.png" sourcerect="747,0,260,95" depth="0.8" origin="0.5,0.5"/>
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
category="Alien"
|
||||
linkable="true"
|
||||
Tags="alien"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture="Content/Map/ruins.png" sourcerect="746,101,93,259" depth="0.8" origin="0.5,0.5"/>
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
linkable="true"
|
||||
category="Alien"
|
||||
Tags="alien"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture="Content/Map/ruins.png" sourcerect="55,608,81,103" depth="0.8" origin="0.5,0.5"/>
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
linkable="true"
|
||||
category="Alien"
|
||||
Tags="alien"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture="artifactholder.png" depth="0.8"/>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
category="Electrical"
|
||||
linkable="true"
|
||||
tags="smallitem"
|
||||
pickdistance="150.0"
|
||||
|
||||
price="10">
|
||||
|
||||
<Sprite texture ="button.png" depth="0.8"/>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="Oxygen Tank"
|
||||
category="Equipment,Misc"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
price="50">
|
||||
|
||||
<Deconstruct time="10">
|
||||
@@ -26,7 +26,7 @@
|
||||
name="Diving Mask"
|
||||
category="Equipment"
|
||||
Tags="smallitem,diving"
|
||||
pickdistance="200"
|
||||
|
||||
price="50"
|
||||
description="Small enough to carry around in case of need, but won't protect you from the water pressure in the event of a full-blown hull breach.">
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
name="Diving Suit"
|
||||
category="Equipment"
|
||||
tags="diving"
|
||||
pickdistance="200"
|
||||
|
||||
price="200"
|
||||
fireproof="true"
|
||||
description="An atmospheric diving suit capable of withstanding the immense pressure under Europa's crust.">
|
||||
@@ -113,7 +113,7 @@
|
||||
name="Underwater Scooter"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="50"
|
||||
description="A battery-powered underwater propulsion device.">
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Door"
|
||||
linkable="true"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture ="door.png" sourcerect="1,0,48,208" depth="0.01" origin="0.5,0.5"/>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<Item
|
||||
name="Windowed Door"
|
||||
linkable="true"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture ="door.png" sourcerect="1,0,48,208" depth="0.01" origin="0.5,0.5"/>
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<Item
|
||||
name="Hatch"
|
||||
linkable="true"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture ="door.png" sourcerect="0,209,128,46" depth="0.01" origin="0.5,0.5"/>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
<Item
|
||||
name="Docking Port"
|
||||
linkable="true"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture ="dockingport.png" sourcerect="0,0,112,208" depth="0.94" origin="0.5,0.5"/>
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
<Item
|
||||
name="Docking Hatch"
|
||||
linkable="true"
|
||||
pickdistance="150.0">
|
||||
>
|
||||
|
||||
<Sprite texture ="dockingport2.png" sourcerect="0,0,128,112" depth="0.94" origin="0.5,0.5"/>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name="Lamp"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="lamp.png" sourcerect="0,0,16,32" depth="0.8"/>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
name="Emergency Light"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="lamp.png" sourcerect="0,48,48,16" depth="0.8"/>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Monitor"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="monitor.png" depth="0.85"/>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="Junction Box"
|
||||
category="Electrical"
|
||||
linkable="true"
|
||||
pickdistance="150"
|
||||
|
||||
description="Serves as a hub for power distribution and relaying signals between devices.">
|
||||
|
||||
<Sprite texture="junctionbox.png" depth="0.8" canflipx="false"/>
|
||||
@@ -40,7 +40,7 @@
|
||||
name="Battery"
|
||||
category="Electrical"
|
||||
linkable="true"
|
||||
pickdistance="150"
|
||||
|
||||
description="Generally used for storing backup power in case of a reactor failure.">
|
||||
|
||||
<Sprite texture ="battery.png" depth="0.8"/>
|
||||
@@ -68,7 +68,7 @@
|
||||
name="Supercapacitor"
|
||||
category="Electrical"
|
||||
linkable="true"
|
||||
pickdistance="150"
|
||||
|
||||
description="Can deliver charge much faster than batteries.">
|
||||
|
||||
<Sprite texture ="supercapacitor.png" depth="0.8"/>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name="Wire"
|
||||
category="Electrical"
|
||||
Tags="smallitem,wire"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
canbepicked="true"
|
||||
price="10">
|
||||
@@ -29,7 +29,7 @@
|
||||
category="Electrical"
|
||||
Tags="smallitem,wire"
|
||||
spritecolor="1.0,0.0,0.0,1.0"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
canbepicked="true"
|
||||
price="10">
|
||||
@@ -51,7 +51,7 @@
|
||||
category="Electrical"
|
||||
Tags="smallitem,wire"
|
||||
spritecolor="0.0,0.6,1.0,1.0"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
canbepicked="true"
|
||||
price="10">
|
||||
@@ -73,7 +73,7 @@
|
||||
category="Electrical"
|
||||
Tags="smallitem,wire"
|
||||
spritecolor="1.0,0.5,0.0,1.0"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
canbepicked="true"
|
||||
price="10">
|
||||
@@ -94,7 +94,7 @@
|
||||
name="FPGA Circuit"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="100"
|
||||
description="Field-programmable gate array - a multi-purpose circuit which can be reconfigured for use in a large variety of electrical devices.">
|
||||
@@ -110,7 +110,7 @@
|
||||
name="And Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends a signal when both inputs receive a signal within a set period of each other.">
|
||||
@@ -145,7 +145,7 @@
|
||||
name="Or Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends a signal if either of the inputs receive a signal.">
|
||||
@@ -179,7 +179,7 @@
|
||||
name="Not Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends a signal when the input is NOT receiving a signal.">
|
||||
@@ -211,7 +211,7 @@
|
||||
name="Relay Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="When switched on, forwards all received signals from the input connections to the outputs.">
|
||||
@@ -257,7 +257,7 @@
|
||||
name="Delay Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Delays all received signals for a specific amount of time.">
|
||||
@@ -289,7 +289,7 @@
|
||||
name="Light Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10">
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
name="Oxygen Detector"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends out a value between 0-100 depending on the quality of the surrounding air.">
|
||||
@@ -355,7 +355,7 @@
|
||||
name="Water Detector"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends out a signal when the detector is submerged.">
|
||||
@@ -386,7 +386,7 @@
|
||||
name="Signal Check Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends a signal when a signal matching a specific value is received.">
|
||||
@@ -420,7 +420,7 @@
|
||||
name="RegEx Find Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10"
|
||||
description="Sends a signal if the received signal matches a specific regular expression pattern.">
|
||||
@@ -452,7 +452,7 @@
|
||||
name="Wifi Component"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="20"
|
||||
description="Allows remote communication between other Wifi Components that are using the same channel.">
|
||||
@@ -484,7 +484,7 @@
|
||||
name="Emergency Siren"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10">
|
||||
|
||||
@@ -517,7 +517,7 @@
|
||||
name="Alarm Buzzer"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
linkable="true"
|
||||
price="10">
|
||||
|
||||
@@ -550,7 +550,7 @@
|
||||
name="Camera"
|
||||
category="Electrical"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
focusonselected="true"
|
||||
offsetonselected="500"
|
||||
linkable="true"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
linkable="true"
|
||||
category="Machine"
|
||||
pickthroughwalls="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="engine.png" depth="0.8" sourcerect="0,0,373,113" canflipx="true"/>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
linkable="true"
|
||||
category="Machine"
|
||||
pickthroughwalls="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="engine.png" depth="0.8" sourcerect="0,115,224,73" canflipx="true"/>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
name="Navigation Terminal"
|
||||
linkable="true"
|
||||
category="Machine"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="Content/Items/machines.png" depth="0.8" sourcerect="0,0,64,128"/>
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
name="Sonar Monitor"
|
||||
linkable="true"
|
||||
category="Machine"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="Content/Items/machines.png" depth="0.8" sourcerect="64,0,64,128"/>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<Item
|
||||
name="Fabricator"
|
||||
linkable="true"
|
||||
pickdistance="150"
|
||||
|
||||
category="Machine"
|
||||
description="A machine capable of manufacturing a wide range of items out of basic raw materials.">
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<Item
|
||||
name="Medical Fabricator"
|
||||
linkable="true"
|
||||
pickdistance="150"
|
||||
|
||||
category="Machine"
|
||||
description="A machine that can be used to manufacture various medicines.">
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
<Item
|
||||
name="Deconstructor"
|
||||
linkable="true"
|
||||
pickdistance="150"
|
||||
|
||||
category="Machine"
|
||||
description="Disassembles and breaks down items to reusable components and material bars.">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="Steel Bar"
|
||||
category="Material"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
canbepicked="true"
|
||||
price="50">
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
name="Uranium Bar"
|
||||
category="Material"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
spritecolor="0.2,0.35,0.06,1.0"
|
||||
canbepicked="true"
|
||||
price="100">
|
||||
@@ -45,7 +45,7 @@
|
||||
name="Copper Bar"
|
||||
category="Material"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
spritecolor="0.78,0.55,0.2,1.0"
|
||||
canbepicked="true"
|
||||
price="50">
|
||||
@@ -61,7 +61,7 @@
|
||||
name="Polycarbonate Bar"
|
||||
category="Material"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
spritecolor="0.9,0.9,1.0,0.9"
|
||||
canbepicked="true"
|
||||
price="50">
|
||||
@@ -77,7 +77,7 @@
|
||||
name="Incendium Bar"
|
||||
category="Material"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
spritecolor="0.5,0.0,0.0,1.0"
|
||||
canbepicked="true">
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
name="Fulgurium Bar"
|
||||
category="Material"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
spritecolor="1.0,0.7,0.05,1.0"
|
||||
canbepicked="true">
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Captain's Cap"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="A token of the Captain's unquestionable authority.">
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<Item
|
||||
name="Captain's Jacket"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem">
|
||||
|
||||
<Sprite texture ="captainLegs.png" sourcerect="0,49,52,17" depth="0.6"/>
|
||||
@@ -39,7 +39,7 @@
|
||||
<Item
|
||||
name="Captain's Trousers"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem">
|
||||
|
||||
<Sprite texture ="captainLegs.png" sourcerect="0,67,51,13" depth="0.6"/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Health Scanner HUD"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="A heads-up display that displays information of the vital signs and status of nearby humans.">
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<Item
|
||||
name="Doctor's Coat"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem">
|
||||
|
||||
<Sprite texture ="doctorgear.png" sourcerect="75,0,53,18" depth="0.6"/>
|
||||
@@ -45,7 +45,7 @@
|
||||
<Item
|
||||
name="Doctor's Trousers"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem">
|
||||
|
||||
<Sprite texture ="doctorgear.png" sourcerect="76,19,51,13" depth="0.6"/>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Orange Jumpsuit"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
fireproof="true"
|
||||
description="The fire-resistant fabric offers some protection against fires. Plenty of pockets for carrying any extra gear an engineer might need.">
|
||||
@@ -30,7 +30,7 @@
|
||||
<Item
|
||||
name="Blue Jumpsuit"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
fireproof="true"
|
||||
description="The fire-resistant fabric offers some protection against fires. Plenty of pockets for carrying any extra gear a mechanic might need.">
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Headset"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="Allows remote communication between the crew.">
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<Item
|
||||
name="Clown Mask"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="Praise the honkmother.">
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<Item
|
||||
name="Clown Costume"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="Praise the honkmother.">
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Item
|
||||
name="Body Armor"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="While the body armor won't offer adequate protection against most of the inhabitants of the subsurface ocean, it can be extremely useful if there are traitors on board.">
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<Item
|
||||
name="Ballistic Helmet"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem"
|
||||
description="While the helmet won't offer adequate protection against most of the inhabitants of the subsurface ocean, it can be extremely useful if there are traitors on board.">
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<Item
|
||||
name="Handcuffs"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem" >
|
||||
|
||||
<Sprite texture = "securitygear.png" sourcerect="0,63,32,14" depth="0.6"/>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="Medical Syringe"
|
||||
category="Equipment"
|
||||
Tags="smallitem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="50"
|
||||
canuseonself="true"
|
||||
description="Injection is often a much more effective method of administering drugs than taking them orally.">
|
||||
@@ -31,7 +31,7 @@
|
||||
name="Bandage"
|
||||
category="Equipment"
|
||||
Tags="smallitem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
canuseonself="true"
|
||||
price="20"
|
||||
description="Treated with a hemostatic agent that quickly seals most minor wounds.">
|
||||
@@ -51,7 +51,7 @@
|
||||
name="Iron Powder"
|
||||
category="Material"
|
||||
Tags="smallitem,chem"
|
||||
pickdistance="150"
|
||||
|
||||
price="5">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="24,16,8,16" depth="0.6" color="0.2,0.2,0.2,1.0"/>
|
||||
@@ -66,7 +66,7 @@
|
||||
category="Material"
|
||||
spritecolor="1.0,1.0,0.7,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
description="A mild stimulant which is used as an incredient in the manufacture of various medicines."
|
||||
price="10">
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.5,0.5,1.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
canuseonself="true"
|
||||
description="Most commonly used for treating oxygen deprivation."
|
||||
price="50">
|
||||
@@ -112,7 +112,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.6,0.4,0.2,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
canuseonself="true"
|
||||
description="A hemostatic agent that slows down bleeding."
|
||||
price="50">
|
||||
@@ -138,7 +138,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.8,0.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
canuseonself="true"
|
||||
description="Highly effective at treating various types of physical trauma."
|
||||
price="50">
|
||||
@@ -164,7 +164,7 @@
|
||||
category="Material"
|
||||
spritecolor="1.0,1.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
description="A highly potent corrigodone-based stimulant."
|
||||
price="150">
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
category="Material"
|
||||
spritecolor="1.0,1.0,1.0,0.6"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="20">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="15,15,8,17" depth="0.6"/>
|
||||
@@ -204,7 +204,7 @@
|
||||
spritecolor="0.0,0.9,0.1,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
canuseonself="true"
|
||||
pickdistance="150"
|
||||
|
||||
price="20">
|
||||
|
||||
<ItemComponent>
|
||||
@@ -228,7 +228,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.7,0.7,0.7,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="20">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="24,16,8,16" depth="0.6"/>
|
||||
@@ -247,7 +247,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.8,0.8,0.8,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="20">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="24,16,8,16" depth="0.6"/>
|
||||
@@ -266,7 +266,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.1,0.1,0.1,1.0"
|
||||
Tags="smallitem,chem,explosive"
|
||||
pickdistance="150"
|
||||
|
||||
price="50">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="24,16,8,16" depth="0.6"/>
|
||||
@@ -287,7 +287,7 @@
|
||||
category="Material"
|
||||
spritecolor="1.0,1.0,1.0,0.8"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="20">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="15,15,8,17" depth="0.6"/>
|
||||
@@ -306,7 +306,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.5,0.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="20">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="24,16,8,16" depth="0.6"/>
|
||||
@@ -325,7 +325,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.5,0.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="50">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="15,15,8,17" depth="0.6"/>
|
||||
@@ -344,7 +344,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.2,0.35,0.06,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
price="50">
|
||||
|
||||
<Sprite texture ="med.png" sourcerect="24,16,8,16" depth="0.6"/>
|
||||
@@ -363,7 +363,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.8,0.3,0.8,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
description="A potent muscle stimulant."
|
||||
price="50">
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.0,0.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
description="A highly potent neurotoxin."
|
||||
price="200">
|
||||
|
||||
@@ -403,7 +403,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.0,0.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
description="Dormant eggs of the Europan lifeform colloquially referred to as 'husk parasite'."
|
||||
price="200">
|
||||
|
||||
@@ -423,7 +423,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.0,0.0,0.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
description="An antiparasitic drug used in the treatment of husk parasite infections."
|
||||
price="300">
|
||||
|
||||
@@ -443,7 +443,7 @@
|
||||
category="Material"
|
||||
spritecolor="0.6,0.8,1.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
canuseonself="true"
|
||||
description="A mildy toxic solution that slowly releases oxygen into the bloodstream when injected.">
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
aliases="MiniMap"
|
||||
category="Machine"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="Content/Items/machines.png" depth="0.8" sourcerect="64,0,64,128"/>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name="Pump"
|
||||
linkable="true"
|
||||
category="Machine"
|
||||
pickdistance="200">
|
||||
>
|
||||
|
||||
<Sprite texture ="pump.png" depth="0.8"/>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
name="Small Pump"
|
||||
linkable="true"
|
||||
category="Machine"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="smallpump.png" depth="0.8" sourcerect="0,0,64,48"/>
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<Item
|
||||
name="Fuel Rod"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
price="200">
|
||||
|
||||
<Deconstruct time="10">
|
||||
@@ -73,7 +73,7 @@
|
||||
<Item
|
||||
name="Incendium Fuel Rod"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
spritecolor="0.5,0.0,0.0,1.0">
|
||||
|
||||
<Deconstruct time="10">
|
||||
@@ -92,7 +92,7 @@
|
||||
<Item
|
||||
name="Heat Absorber"
|
||||
Tags="smallitem"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="heatabsorber.png"/>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="Welding Tool"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="100"
|
||||
description="One of the most crucial tools on board the submarine. Also works underwater.">
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
name="Plasma Cutter"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="100"
|
||||
description="Cuts through various materials using a jet of ionized oxygen.">
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
name="Welding Fuel Tank"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
price="50">
|
||||
|
||||
<Deconstruct time="10">
|
||||
@@ -127,7 +127,7 @@
|
||||
name="Fire Extinguisher"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="100"
|
||||
description="A handheld carbon dioxide extinguisher.">
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
name="Screwdriver"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="10">
|
||||
|
||||
<Sprite texture ="tools.png" sourcerect="0,58,31,6" depth="0.55"/>
|
||||
@@ -171,7 +171,7 @@
|
||||
name="Wrench"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="10">
|
||||
|
||||
<Sprite texture ="tools.png" sourcerect="0,50,26,7" depth="0.55"/>
|
||||
@@ -188,7 +188,7 @@
|
||||
name="Handheld Sonar"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="10">
|
||||
|
||||
<Sprite texture ="tools.png" sourcerect="42,0,22,9" depth="0.55"/>
|
||||
@@ -218,7 +218,7 @@
|
||||
name="Flashlight"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="200"
|
||||
|
||||
price="10">
|
||||
|
||||
<Deconstruct time="15">
|
||||
@@ -249,7 +249,7 @@
|
||||
<Item
|
||||
name="Flare"
|
||||
category="Equipment"
|
||||
pickdistance="150"
|
||||
|
||||
price="5"
|
||||
spritecolor="1.0,0.0,0.0,1.0"
|
||||
tags="smallitem">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
focusonselected="true"
|
||||
offsetonselected="700"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="railgunetc.png" depth="0.01" sourcerect="64,180,47,76"/>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
name="Depth Charge Loader"
|
||||
category="Machine"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="railgunetc.png" depth="0.8" sourcerect="0,160,61,96"/>
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<Item
|
||||
name="Depth Charge Shell"
|
||||
category="Misc"
|
||||
pickdistance="150"
|
||||
|
||||
price="200">
|
||||
|
||||
<Deconstruct time="10">
|
||||
@@ -65,7 +65,7 @@
|
||||
<Item
|
||||
name="Nuclear Depth Charge"
|
||||
category="Misc"
|
||||
pickdistance="150"
|
||||
|
||||
price="500">
|
||||
|
||||
<Deconstruct time="20">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="C-4 Block"
|
||||
category="Equipment"
|
||||
Tags="smallitem,explosive"
|
||||
pickdistance="150"
|
||||
|
||||
price="100">
|
||||
|
||||
<Sprite texture="weapons.png" depth="0.8" sourcerect="112,0,16,7"/>
|
||||
@@ -22,7 +22,7 @@
|
||||
name="Compound N"
|
||||
category="Equipment"
|
||||
Tags="smallitem,explosive"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="weapons.png" depth="0.8" sourcerect="112,0,16,7"/>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
name="Volatile Compound N"
|
||||
category="Equipment"
|
||||
Tags="smallitem,explosive"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="weapons.png" depth="0.8" sourcerect="112,0,16,7"/>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
description="A compound made of C-4 and incendium."
|
||||
category="Equipment"
|
||||
Tags="smallitem,explosive"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture="weapons.png" depth="0.8" sourcerect="112,0,16,7"/>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
description="A device that detonates any contained explosive when receiving a signal."
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="150"
|
||||
|
||||
price="50">
|
||||
|
||||
<Sprite texture="weapons.png" depth="0.8" sourcerect="112,7,16,9"/>
|
||||
@@ -109,7 +109,7 @@
|
||||
description="A highly unstable liquid that may explode when subjected to heat or physical shock."
|
||||
spritecolor="1.0,1.0,1.0,1.0"
|
||||
Tags="smallitem,chem,medical"
|
||||
pickdistance="150"
|
||||
|
||||
impacttolerance="4">
|
||||
|
||||
<Sprite texture ="Content/Items/Medical/med.png" sourcerect="24,16,8,16" depth="0.6"/>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
focusonselected="true"
|
||||
offsetonselected="700"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="railgunbase.png" depth = "0.01"/>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
category="Machine"
|
||||
type="Controller"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="railgunetc.png" depth="0.8" sourcerect="182,0,61,97"/>
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
name="Railgun Loader"
|
||||
category="Machine"
|
||||
linkable="true"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="railgunetc.png" depth="0.8" sourcerect="0,0,177,128"/>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<Item
|
||||
name="Railgun Shell"
|
||||
category="Misc"
|
||||
pickdistance="200"
|
||||
|
||||
price="200">
|
||||
|
||||
<Deconstruct time="10">
|
||||
@@ -98,7 +98,7 @@
|
||||
<Item
|
||||
name="Nuclear Shell"
|
||||
category="Misc"
|
||||
pickdistance="200"
|
||||
|
||||
price="500">
|
||||
|
||||
<Deconstruct time="10">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<Item
|
||||
name="Spear"
|
||||
category="Equipment"
|
||||
pickdistance="200"
|
||||
|
||||
pickthroughwalls="true"
|
||||
price="50">
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<Item
|
||||
name="Harpoon Gun"
|
||||
category="Equipment"
|
||||
pickdistance="200"
|
||||
|
||||
price="500"
|
||||
tags="weapon">
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<Item
|
||||
name="Stun Grenade"
|
||||
category="Equipment"
|
||||
pickdistance="200"
|
||||
|
||||
price="200"
|
||||
tags="smallitem,weapon">
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
<Item
|
||||
name="Incendium Grenade"
|
||||
category="Equipment"
|
||||
pickdistance="200"
|
||||
|
||||
tags="smallitem,weapon">
|
||||
|
||||
<Sprite texture="weapons.png" sourcerect="98,0,11,24" depth="0.55"/>
|
||||
@@ -94,7 +94,7 @@
|
||||
name="Stun Baton"
|
||||
category="Equipment"
|
||||
Tags="smallitem,weapon"
|
||||
pickdistance="150"
|
||||
|
||||
price="100"
|
||||
description="If verbal orders are insufficient, a high-voltage shock from a Stun Baton may be enough to beat an unruly crew member into submission.">
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
<Item
|
||||
name="Battery Cell"
|
||||
category="Equipment,Electrical"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem,loadable"
|
||||
price="50"
|
||||
description="Used as a power source for various handheld devices. Most submarines have several stationary backup batteries with recharge docks for battery cells.">
|
||||
@@ -150,7 +150,7 @@
|
||||
<Item
|
||||
name="Fulgurium Battery Cell"
|
||||
category="Equipment,Electrical"
|
||||
pickdistance="150"
|
||||
|
||||
tags="smallitem,loadable"
|
||||
description="A battery cell contructed of the rare and poorly understood compound Fulgurium.">
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
<Item
|
||||
name="Bike Horn"
|
||||
category="Equipment"
|
||||
pickdistance="200"
|
||||
|
||||
tags="weapon,smallitem"
|
||||
description="HONK">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name="ID Card"
|
||||
category="Equipment"
|
||||
Tags="smallitem"
|
||||
pickdistance="150">
|
||||
>
|
||||
|
||||
<Sprite texture ="idcard.png" depth="0.8"/>
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ namespace Barotrauma
|
||||
{
|
||||
if (character.SelectedConstruction != currentPath.CurrentNode.Ladders.Item && currentPath.CurrentNode.Ladders.Item.IsInsideTrigger(character.WorldPosition))
|
||||
{
|
||||
currentPath.CurrentNode.Ladders.Item.Pick(character, false, true);
|
||||
currentPath.CurrentNode.Ladders.Item.TryInteract(character, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ namespace Barotrauma
|
||||
foreach (Controller controller in buttons)
|
||||
{
|
||||
float dist = Vector2.Distance(controller.Item.WorldPosition, character.WorldPosition);
|
||||
if (dist > controller.Item.PickDistance * 2.0f) continue;
|
||||
if (dist > controller.Item.InteractDistance * 2.0f) continue;
|
||||
|
||||
if (dist < closestDist || closestButton == null)
|
||||
{
|
||||
@@ -256,7 +256,7 @@ namespace Barotrauma
|
||||
return;
|
||||
}
|
||||
|
||||
closestButton.Item.Pick(character, false, true);
|
||||
closestButton.Item.TryInteract(character, false, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace Barotrauma
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Vector2.Distance(character.Position, container.Item.Position) > container.Item.PickDistance
|
||||
if (Vector2.Distance(character.Position, container.Item.Position) > container.Item.InteractDistance
|
||||
&& !container.Item.IsInsideTrigger(character.Position))
|
||||
{
|
||||
AddSubObjective(new AIObjectiveGoTo(container.Item, character));
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace Barotrauma
|
||||
FindTargetItem();
|
||||
if (targetItem == null || moveToTarget == null) return;
|
||||
|
||||
if (Vector2.Distance(character.Position, moveToTarget.Position) < targetItem.PickDistance*2.0f)
|
||||
if (Vector2.Distance(character.Position, moveToTarget.Position) < targetItem.InteractDistance*2.0f)
|
||||
{
|
||||
int targetSlot = -1;
|
||||
if (equip)
|
||||
@@ -91,7 +91,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
targetItem.Pick(character, false, true);
|
||||
targetItem.TryInteract(character, false, true);
|
||||
|
||||
if (targetSlot > -1 && character.Inventory.IsInLimbSlot(targetItem, InvSlotType.Any))
|
||||
{
|
||||
|
||||
@@ -126,7 +126,7 @@ namespace Barotrauma
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
allowedDistance = Math.Max(ConvertUnits.ToSimUnits(item.PickDistance), allowedDistance);
|
||||
allowedDistance = Math.Max(ConvertUnits.ToSimUnits(item.InteractDistance), allowedDistance);
|
||||
if (item.IsInsideTrigger(character.WorldPosition)) completed = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,12 +50,12 @@ namespace Barotrauma
|
||||
|
||||
if (target.CanBeSelected)
|
||||
{
|
||||
if (Vector2.Distance(character.Position, target.Item.Position) < target.Item.PickDistance
|
||||
if (Vector2.Distance(character.Position, target.Item.Position) < target.Item.InteractDistance
|
||||
|| target.Item.IsInsideTrigger(character.WorldPosition))
|
||||
{
|
||||
if (character.SelectedConstruction != target.Item && target.CanBeSelected)
|
||||
{
|
||||
target.Item.Pick(character, false, true);
|
||||
target.Item.TryInteract(character, false, true);
|
||||
}
|
||||
|
||||
if (component.AIOperate(deltaTime, character, this)) isCompleted = true;
|
||||
|
||||
@@ -1213,7 +1213,7 @@ namespace Barotrauma
|
||||
var newSelectedConstruction = (Item)character.MemState[0].Interact;
|
||||
if (newSelectedConstruction != null && character.SelectedConstruction != newSelectedConstruction)
|
||||
{
|
||||
newSelectedConstruction.Pick(character, true, true);
|
||||
newSelectedConstruction.TryInteract(character, true, true);
|
||||
}
|
||||
character.SelectedConstruction = newSelectedConstruction;
|
||||
}
|
||||
@@ -1305,7 +1305,7 @@ namespace Barotrauma
|
||||
var newSelectedConstruction = (Item)serverPos.Interact;
|
||||
if (newSelectedConstruction != null && character.SelectedConstruction != newSelectedConstruction)
|
||||
{
|
||||
newSelectedConstruction.Pick(character, true, true);
|
||||
newSelectedConstruction.TryInteract(character, true, true);
|
||||
}
|
||||
character.SelectedConstruction = newSelectedConstruction;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using Barotrauma.Items.Components;
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
@@ -71,8 +72,8 @@ namespace Barotrauma
|
||||
private float health, lastSentHealth;
|
||||
protected float minHealth, maxHealth;
|
||||
|
||||
protected Item closestItem;
|
||||
private Character closestCharacter, selectedCharacter;
|
||||
protected Item focusedItem;
|
||||
private Character focusedCharacter, selectedCharacter;
|
||||
|
||||
private bool isDead;
|
||||
private CauseOfDeath lastAttackCauseOfDeath;
|
||||
@@ -154,6 +155,11 @@ namespace Barotrauma
|
||||
get { return !IsUnconscious && Stun <= 0.0f && !isDead; }
|
||||
}
|
||||
|
||||
public bool CanInteract
|
||||
{
|
||||
get { return AllowInput && !LockHands; }
|
||||
}
|
||||
|
||||
public Vector2 CursorPosition
|
||||
{
|
||||
get { return cursorPosition; }
|
||||
@@ -169,9 +175,9 @@ namespace Barotrauma
|
||||
get { return Submarine == null ? cursorPosition : cursorPosition + Submarine.Position; }
|
||||
}
|
||||
|
||||
public Character ClosestCharacter
|
||||
public Character FocusedCharacter
|
||||
{
|
||||
get { return closestCharacter; }
|
||||
get { return focusedCharacter; }
|
||||
}
|
||||
|
||||
public Character SelectedCharacter
|
||||
@@ -386,9 +392,9 @@ namespace Barotrauma
|
||||
set { selectedConstruction = value; }
|
||||
}
|
||||
|
||||
public Item ClosestItem
|
||||
public Item FocusedItem
|
||||
{
|
||||
get { return closestItem; }
|
||||
get { return focusedItem; }
|
||||
}
|
||||
|
||||
public virtual AIController AIController
|
||||
@@ -569,7 +575,7 @@ namespace Barotrauma
|
||||
System.Diagnostics.Debug.Assert(item != null);
|
||||
if (item == null) continue;
|
||||
|
||||
item.Pick(this, true, true, true);
|
||||
item.TryInteract(this, true, true, true);
|
||||
inventory.TryPutItem(item, i, false, false);
|
||||
}
|
||||
}
|
||||
@@ -713,7 +719,7 @@ namespace Barotrauma
|
||||
return (Info==null || Info.Job==null) ? 0 : Info.Job.GetSkillLevel(skillName);
|
||||
}
|
||||
|
||||
float findClosestTimer;
|
||||
float findFocusedTimer;
|
||||
|
||||
public Vector2 GetTargetMovement()
|
||||
{
|
||||
@@ -950,7 +956,7 @@ namespace Barotrauma
|
||||
|
||||
public bool CanAccessInventory(Inventory inventory)
|
||||
{
|
||||
if (!AllowInput || LockHands) return false;
|
||||
if (!CanInteract) return false;
|
||||
|
||||
//the inventory belongs to some other character
|
||||
if (inventory.Owner is Character && inventory.Owner != this)
|
||||
@@ -958,14 +964,13 @@ namespace Barotrauma
|
||||
var owner = (Character)inventory.Owner;
|
||||
|
||||
//can only be accessed if the character is incapacitated and has been selected
|
||||
return selectedCharacter == owner &&
|
||||
(owner.isDead || owner.IsUnconscious || owner.Stun > 0.0f || owner.LockHands);
|
||||
return selectedCharacter == owner && (!owner.CanInteract);
|
||||
}
|
||||
|
||||
if (inventory.Owner is Item)
|
||||
{
|
||||
var owner = (Item)inventory.Owner;
|
||||
if (!CanAccessItem(owner))
|
||||
if (!CanInteractWith(owner))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -973,53 +978,162 @@ namespace Barotrauma
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool CanAccessItem(Item item)
|
||||
public bool CanInteractWith(Item item)
|
||||
{
|
||||
if (!AllowInput || LockHands) return false;
|
||||
float distanceToItem;
|
||||
return CanInteractWith(item, out distanceToItem);
|
||||
}
|
||||
|
||||
public bool CanInteractWith(Item item, out float distanceToItem)
|
||||
{
|
||||
distanceToItem = -1.0f;
|
||||
|
||||
if (!CanInteract) return false;
|
||||
|
||||
if (item.ParentInventory != null)
|
||||
{
|
||||
return CanAccessInventory(item.ParentInventory);
|
||||
}
|
||||
|
||||
float maxDist = item.PickDistance * 1.2f;
|
||||
if (maxDist <= 0.01f)
|
||||
{
|
||||
maxDist = 150.0f;
|
||||
}
|
||||
if (item.InteractDistance == 0.0f && !item.Prefab.Triggers.Any()) return false;
|
||||
|
||||
if (Vector2.DistanceSquared(WorldPosition, item.WorldPosition) < maxDist*maxDist ||
|
||||
item.IsInsideTrigger(WorldPosition))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
Pickable pickableComponent = item.GetComponent<Pickable>();
|
||||
if (pickableComponent != null && (pickableComponent.Picker != null && !pickableComponent.Picker.IsDead)) return false;
|
||||
|
||||
Vector2 characterDirection = Vector2.Transform(Vector2.UnitY, Matrix.CreateFromAxisAngle(Vector3.UnitZ, AnimController.Collider.Rotation));
|
||||
|
||||
return item.GetComponent<Items.Components.Ladder>() != null;
|
||||
}
|
||||
|
||||
private Item FindClosestItem(Vector2 mouseSimPos, out float distance)
|
||||
{
|
||||
distance = 0.0f;
|
||||
|
||||
Limb torso = AnimController.GetLimb(LimbType.Torso);
|
||||
|
||||
if (torso == null) return null;
|
||||
|
||||
Vector2 pos = (torso.body.TargetPosition != null) ? (Vector2)torso.body.TargetPosition : torso.SimPosition;
|
||||
Vector2 pickPos = mouseSimPos;
|
||||
Vector2 upperBodyPosition = Position + (characterDirection * 20.0f);
|
||||
Vector2 lowerBodyPosition = Position - (characterDirection * 60.0f);
|
||||
|
||||
if (Submarine != null)
|
||||
{
|
||||
pos += Submarine.SimPosition;
|
||||
pickPos += Submarine.SimPosition;
|
||||
upperBodyPosition += Submarine.Position;
|
||||
lowerBodyPosition += Submarine.Position;
|
||||
}
|
||||
|
||||
if (selectedConstruction != null) pickPos = ConvertUnits.ToSimUnits(selectedConstruction.WorldPosition);
|
||||
Vector2 playerDistanceCheckPosition;
|
||||
Rectangle itemDisplayRect;
|
||||
|
||||
return Item.FindPickable(pos, pickPos, AnimController.CurrentHull, selectedItems, out distance);
|
||||
bool insideTrigger = false;
|
||||
if (item.Prefab.Triggers.Any())
|
||||
{
|
||||
foreach (Rectangle trigger in item.Prefab.Triggers)
|
||||
{
|
||||
Rectangle transformedTrigger = new Rectangle(
|
||||
item.WorldRect.X + trigger.X,
|
||||
(item.WorldRect.Y + trigger.Y) - ((trigger.Height == 0) ? item.Rect.Height : trigger.Height),
|
||||
(trigger.Width == 0) ? item.Rect.Width : trigger.Width,
|
||||
(trigger.Height == 0) ? item.Rect.Height : trigger.Height);
|
||||
|
||||
// Get the point along the line between lowerBodyPosition and upperBodyPosition which is closest to the center of itemDisplayRect
|
||||
playerDistanceCheckPosition = Vector2.Clamp(transformedTrigger.Center.ToVector2(), lowerBodyPosition, upperBodyPosition);
|
||||
|
||||
if (!transformedTrigger.Contains(upperBodyPosition)) return false;
|
||||
|
||||
insideTrigger = true;
|
||||
}
|
||||
if (!insideTrigger) return false;
|
||||
}
|
||||
itemDisplayRect = new Rectangle(item.InteractionRect.X, item.InteractionRect.Y - item.InteractionRect.Height, item.InteractionRect.Width, item.InteractionRect.Height);
|
||||
|
||||
// Get the point along the line between lowerBodyPosition and upperBodyPosition which is closest to the center of itemDisplayRect
|
||||
playerDistanceCheckPosition = Vector2.Clamp(itemDisplayRect.Center.ToVector2(), lowerBodyPosition, upperBodyPosition);
|
||||
|
||||
// Here we get the point on the itemDisplayRect which is closest to playerDistanceCheckPosition
|
||||
Vector2 rectIntersectionPoint = new Vector2(Math.Max(itemDisplayRect.X, Math.Min(itemDisplayRect.X + itemDisplayRect.Width, playerDistanceCheckPosition.X)), Math.Max(itemDisplayRect.Y, Math.Min(itemDisplayRect.Y + itemDisplayRect.Height, playerDistanceCheckPosition.Y)));
|
||||
|
||||
// If playerDistanceCheckPosition is inside the itemDisplayRect then we consider the character to within 0 distance of the item
|
||||
if (!itemDisplayRect.Contains(playerDistanceCheckPosition))
|
||||
{
|
||||
distanceToItem = Vector2.Distance(rectIntersectionPoint, playerDistanceCheckPosition);
|
||||
}
|
||||
|
||||
if (distanceToItem > item.InteractDistance && item.InteractDistance > 0.0f) return false;
|
||||
|
||||
if (!item.Prefab.InteractThroughWalls && Screen.Selected != GameMain.EditMapScreen && !insideTrigger)
|
||||
{
|
||||
Vector2 itemPosition = item.SimPosition;
|
||||
if (Submarine == null && item.Submarine != null)
|
||||
{
|
||||
//character is outside, item inside
|
||||
itemPosition += item.Submarine.SimPosition;
|
||||
}
|
||||
else if (Submarine != null && item.Submarine == null)
|
||||
{
|
||||
//character is inside, item outside
|
||||
itemPosition -= Submarine.SimPosition;
|
||||
}
|
||||
else if (Submarine != item.Submarine)
|
||||
{
|
||||
//character and the item are inside different subs
|
||||
itemPosition += item.Submarine.SimPosition;
|
||||
itemPosition -= Submarine.SimPosition;
|
||||
}
|
||||
var body = Submarine.CheckVisibility(SimPosition, itemPosition, true);
|
||||
if (body != null && body.UserData as Item != item) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private Character FindClosestCharacter(Vector2 mouseSimPos, float maxDist = 150.0f)
|
||||
/// <summary>
|
||||
/// Finds the front (lowest depth) interactable item at a position. "Interactable" in this case means that the character can "reach" the item.
|
||||
/// </summary>
|
||||
/// <param name="character">The Character who is looking for the interactable item, only items that are close enough to this character are returned</param>
|
||||
/// <param name="simPosition">The item at the simPosition, with the lowest depth, is returned</param>
|
||||
/// <param name="allowFindingNearestItem">If this is true and an item cannot be found at simPosition then a nearest item will be returned if possible</param>
|
||||
/// <param name="hull">If a hull is specified, only items within that hull are returned</param>
|
||||
public Item FindItemAtPosition(Vector2 simPosition, float aimAssistModifier = 0.0f, Hull hull = null, Item[] ignoredItems = null)
|
||||
{
|
||||
if (Submarine != null)
|
||||
{
|
||||
simPosition += Submarine.SimPosition;
|
||||
}
|
||||
|
||||
Vector2 displayPosition = ConvertUnits.ToDisplayUnits(simPosition);
|
||||
|
||||
Item highestPriorityItemAtPosition = null;
|
||||
Item closestItem = null;
|
||||
float closestItemDistance = 0.0f;
|
||||
|
||||
foreach (Item item in Item.ItemList)
|
||||
{
|
||||
if (ignoredItems != null && ignoredItems.Contains(item)) continue;
|
||||
if (item.body != null && !item.body.Enabled) continue;
|
||||
|
||||
if (CanInteractWith(item))
|
||||
{
|
||||
if (item.IsMouseOn(displayPosition))
|
||||
{
|
||||
Console.WriteLine("Name: " + item.Name + " Priority:" + item.InteractPriority);
|
||||
}
|
||||
if (item.IsMouseOn(displayPosition) && (highestPriorityItemAtPosition == null ||
|
||||
((highestPriorityItemAtPosition.InteractPriority < item.InteractPriority) ||
|
||||
(highestPriorityItemAtPosition.InteractPriority == item.InteractPriority && highestPriorityItemAtPosition.GetDrawDepth() > item.GetDrawDepth()))))
|
||||
{
|
||||
highestPriorityItemAtPosition = item;
|
||||
}
|
||||
else if (aimAssistModifier > 0.0f)
|
||||
{
|
||||
float distanceToItem = Vector2.Distance(item.WorldPosition, displayPosition);
|
||||
if (distanceToItem < (100.0f * aimAssistModifier) && (closestItem == null || distanceToItem < closestItemDistance))
|
||||
{
|
||||
closestItem = item;
|
||||
closestItemDistance = distanceToItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (highestPriorityItemAtPosition == null)
|
||||
{
|
||||
return closestItem;
|
||||
}
|
||||
|
||||
return highestPriorityItemAtPosition;
|
||||
}
|
||||
|
||||
private Character FindCharacterAtPosition(Vector2 mouseSimPos, float maxDist = 150.0f)
|
||||
{
|
||||
Character closestCharacter = null;
|
||||
float closestDist = 0.0f;
|
||||
@@ -1028,17 +1142,25 @@ namespace Barotrauma
|
||||
|
||||
foreach (Character c in CharacterList)
|
||||
{
|
||||
if (c == this || !c.enabled) continue;
|
||||
|
||||
if (Vector2.DistanceSquared(SimPosition, c.SimPosition) > maxDist*maxDist) continue;
|
||||
if (c == this || !c.enabled || c.info == null || !c.IsHumanoid || !c.CanBeSelected) continue;
|
||||
|
||||
float dist = Vector2.DistanceSquared(mouseSimPos, c.SimPosition);
|
||||
if (dist < maxDist*maxDist && (closestCharacter==null || dist<closestDist))
|
||||
if (dist < maxDist*maxDist && (closestCharacter == null || dist < closestDist))
|
||||
{
|
||||
closestCharacter = c;
|
||||
closestDist = dist;
|
||||
continue;
|
||||
}
|
||||
|
||||
/*FarseerPhysics.Common.Transform transform;
|
||||
c.AnimController.Collider.FarseerBody.GetTransform(out transform);
|
||||
for (int i = 0; i < c.AnimController.Collider.FarseerBody.FixtureList.Count; i++)
|
||||
{
|
||||
if (c.AnimController.Collider.FarseerBody.FixtureList[i].Shape.TestPoint(ref transform, ref mouseSimPos))
|
||||
{
|
||||
Console.WriteLine("Hit: " + i);
|
||||
closestCharacter = c;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
return closestCharacter;
|
||||
@@ -1086,7 +1208,66 @@ namespace Barotrauma
|
||||
|
||||
selectedCharacter = null;
|
||||
}
|
||||
|
||||
|
||||
public void DoInteractionUpdate(float deltaTime, Vector2 mouseSimPos)
|
||||
{
|
||||
bool isLocalPlayer = (controlled == this);
|
||||
if (!isLocalPlayer && (this is AICharacter || !IsRemotePlayer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!AllowInput || LockHands)
|
||||
{
|
||||
if (selectedCharacter != null)
|
||||
{
|
||||
DeselectCharacter();
|
||||
}
|
||||
selectedConstruction = null;
|
||||
focusedItem = null;
|
||||
focusedCharacter = null;
|
||||
return;
|
||||
}
|
||||
if ((!isLocalPlayer && IsKeyHit(InputType.Select) && GameMain.Server == null) || (isLocalPlayer && (findFocusedTimer <= 0.0f || Screen.Selected == GameMain.EditMapScreen)))
|
||||
{
|
||||
focusedCharacter = FindCharacterAtPosition(mouseSimPos);
|
||||
if (focusedCharacter != null)
|
||||
{
|
||||
focusedItem = null; // We can only focus one thing at a time
|
||||
}
|
||||
else
|
||||
{
|
||||
focusedItem = FindItemAtPosition(mouseSimPos, AnimController.InWater ? 0.5f : 0.25f);
|
||||
}
|
||||
findFocusedTimer = 0.05f;
|
||||
}
|
||||
else
|
||||
{
|
||||
findFocusedTimer -= deltaTime;
|
||||
}
|
||||
|
||||
if (focusedCharacter != null && IsKeyHit(InputType.Select))
|
||||
{
|
||||
if (selectedCharacter != null)
|
||||
{
|
||||
DeselectCharacter();
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectCharacter(focusedCharacter);
|
||||
}
|
||||
}
|
||||
else if (focusedItem != null)
|
||||
{
|
||||
focusedItem.IsHighlighted = true;
|
||||
focusedItem.TryInteract(this);
|
||||
}
|
||||
else if (IsKeyHit(InputType.Select) && selectedConstruction != null)
|
||||
{
|
||||
selectedConstruction = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateAnimAll(float deltaTime)
|
||||
{
|
||||
foreach (Character c in CharacterList)
|
||||
@@ -1194,7 +1375,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
UpdateControlled(deltaTime,cam);
|
||||
UpdateControlled(deltaTime, cam);
|
||||
|
||||
if (Stun > 0.0f)
|
||||
{
|
||||
@@ -1211,77 +1392,17 @@ namespace Barotrauma
|
||||
UpdateUnconscious(deltaTime);
|
||||
return;
|
||||
}
|
||||
|
||||
Control(deltaTime, cam);
|
||||
|
||||
if (selectedConstruction != null && !selectedConstruction.IsInPickRange(WorldPosition))
|
||||
{
|
||||
selectedConstruction = null;
|
||||
}
|
||||
|
||||
Control(deltaTime, cam);
|
||||
if (controlled != this && (!(this is AICharacter) || IsRemotePlayer))
|
||||
{
|
||||
if (!LockHands)
|
||||
{
|
||||
Vector2 mouseSimPos = ConvertUnits.ToSimUnits(cursorPosition);
|
||||
|
||||
if (IsKeyHit(InputType.Select) && GameMain.Server==null)
|
||||
{
|
||||
closestCharacter = FindClosestCharacter(mouseSimPos);
|
||||
if (closestCharacter != null && closestCharacter.info == null)
|
||||
{
|
||||
closestCharacter = null;
|
||||
}
|
||||
|
||||
float closestItemDist = 0.0f;
|
||||
closestItem = FindClosestItem(mouseSimPos, out closestItemDist);
|
||||
|
||||
if (closestCharacter != null && closestItem != null)
|
||||
{
|
||||
if (closestItem != null) closestItemDist = (closestItem.Position - AnimController.Collider.Position).Length();
|
||||
if (Vector2.Distance(closestCharacter.SimPosition, mouseSimPos) < ConvertUnits.ToSimUnits(closestItemDist))
|
||||
{
|
||||
if (selectedConstruction != closestItem) closestItem = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
closestCharacter = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedCharacter == null && closestItem != null)
|
||||
{
|
||||
//DebugConsole.NewMessage(closestItem.ToString(), Color.Yellow);
|
||||
//closestItem.IsHighlighted = true;
|
||||
if (!LockHands && closestItem.Pick(this))
|
||||
{
|
||||
if (AnimController.Anim == AnimController.Animation.Climbing)
|
||||
{
|
||||
//DebugConsole.NewMessage("ladder woo",Color.Lime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsKeyHit(InputType.Select))
|
||||
{
|
||||
if (selectedCharacter != null)
|
||||
{
|
||||
DeselectCharacter();
|
||||
}
|
||||
else if (closestCharacter != null && closestCharacter.IsHumanoid && closestCharacter.CanBeSelected)
|
||||
{
|
||||
SelectCharacter(closestCharacter);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (selectedCharacter != null) DeselectCharacter();
|
||||
selectedConstruction = null;
|
||||
closestItem = null;
|
||||
closestCharacter = null;
|
||||
}
|
||||
Vector2 mouseSimPos = ConvertUnits.ToSimUnits(cursorPosition);
|
||||
DoInteractionUpdate(deltaTime, mouseSimPos);
|
||||
}
|
||||
|
||||
if (selectedConstruction != null && !CanInteractWith(selectedConstruction))
|
||||
{
|
||||
selectedConstruction = null;
|
||||
}
|
||||
|
||||
if (selectedCharacter != null && AnimController.Anim == AnimController.Animation.CPR)
|
||||
@@ -1304,7 +1425,7 @@ namespace Barotrauma
|
||||
if (!IsDead) LockHands = false;
|
||||
}
|
||||
|
||||
partial void UpdateControlled(float deltaTime,Camera cam);
|
||||
partial void UpdateControlled(float deltaTime, Camera cam);
|
||||
|
||||
private void UpdateOxygen(float deltaTime)
|
||||
{
|
||||
@@ -1355,7 +1476,7 @@ namespace Barotrauma
|
||||
speechBubbleTimer = Math.Max(speechBubbleTimer, duration);
|
||||
speechBubbleColor = color;
|
||||
}
|
||||
|
||||
|
||||
public virtual void AddDamage(CauseOfDeath causeOfDeath, float amount, IDamageable attacker)
|
||||
{
|
||||
Health = health-amount;
|
||||
@@ -1616,7 +1737,7 @@ namespace Barotrauma
|
||||
|
||||
foreach (Character c in CharacterList)
|
||||
{
|
||||
if (c.closestCharacter == this) c.closestCharacter = null;
|
||||
if (c.focusedCharacter == this) c.focusedCharacter = null;
|
||||
if (c.selectedCharacter == this) c.selectedCharacter = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,13 +147,13 @@ namespace Barotrauma
|
||||
var closestEntity = Entity.FindEntityByID(memInput[memInput.Count - 1].interact);
|
||||
if (closestEntity is Item)
|
||||
{
|
||||
closestItem = (Item)closestEntity;
|
||||
closestCharacter = null;
|
||||
focusedItem = (Item)closestEntity;
|
||||
focusedCharacter = null;
|
||||
}
|
||||
else if (closestEntity is Character)
|
||||
{
|
||||
closestCharacter = (Character)closestEntity;
|
||||
closestItem = null;
|
||||
focusedCharacter = (Character)closestEntity;
|
||||
focusedItem = null;
|
||||
}
|
||||
|
||||
memInput.RemoveAt(memInput.Count - 1);
|
||||
@@ -205,13 +205,13 @@ namespace Barotrauma
|
||||
NetInputMem newMem = new NetInputMem();
|
||||
newMem.states = newInput;
|
||||
newMem.intAim = intAngle;
|
||||
if (closestItem != null)
|
||||
if (focusedItem != null)
|
||||
{
|
||||
newMem.interact = closestItem.ID;
|
||||
newMem.interact = focusedItem.ID;
|
||||
}
|
||||
else if (closestCharacter != null)
|
||||
else if (focusedCharacter != null)
|
||||
{
|
||||
newMem.interact = closestCharacter.ID;
|
||||
newMem.interact = focusedCharacter.ID;
|
||||
}
|
||||
|
||||
memInput.Insert(0, newMem);
|
||||
|
||||
@@ -101,9 +101,7 @@ namespace Barotrauma.Items.Components
|
||||
pickTimer = 0.0f;
|
||||
while (pickTimer < requiredTime && Screen.Selected != GameMain.EditMapScreen)
|
||||
{
|
||||
if (picker.IsKeyDown(InputType.Aim) ||
|
||||
!item.IsInPickRange(picker.WorldPosition) ||
|
||||
picker.Stun > 0.0f || picker.IsDead)
|
||||
if (picker.IsKeyDown(InputType.Aim) || !picker.CanInteractWith(item))
|
||||
{
|
||||
StopPicking(picker);
|
||||
yield return CoroutineStatus.Success;
|
||||
|
||||
@@ -76,10 +76,8 @@ namespace Barotrauma.Items.Components
|
||||
this.cam = cam;
|
||||
|
||||
if (character == null
|
||||
|| character.IsDead
|
||||
|| character.Stun > 0.0f
|
||||
|| character.SelectedConstruction != item
|
||||
|| Vector2.Distance(character.Position, item.Position) > item.PickDistance * 2.0f)
|
||||
|| !character.CanInteractWith(item))
|
||||
{
|
||||
if (character != null)
|
||||
{
|
||||
@@ -149,7 +147,7 @@ namespace Barotrauma.Items.Components
|
||||
|
||||
public override bool Use(float deltaTime, Character activator = null)
|
||||
{
|
||||
if (character == null || activator != character || character.SelectedConstruction != item)
|
||||
if (character == null || activator != character || character.SelectedConstruction != item || !character.CanInteractWith(item))
|
||||
{
|
||||
character = null;
|
||||
return false;
|
||||
@@ -164,7 +162,7 @@ namespace Barotrauma.Items.Components
|
||||
|
||||
public override void SecondaryUse(float deltaTime, Character character = null)
|
||||
{
|
||||
if (this.character == null || this.character != character || this.character.SelectedConstruction != item)
|
||||
if (this.character == null || this.character != character || this.character.SelectedConstruction != item || !character.CanInteractWith(item))
|
||||
{
|
||||
character = null;
|
||||
return;
|
||||
|
||||
@@ -128,19 +128,33 @@ namespace Barotrauma
|
||||
{
|
||||
get { return prefab.ImpactTolerance; }
|
||||
}
|
||||
|
||||
public float PickDistance
|
||||
|
||||
public float InteractDistance
|
||||
{
|
||||
get { return prefab.PickDistance; }
|
||||
get { return prefab.InteractDistance; }
|
||||
}
|
||||
|
||||
public float InteractPriority
|
||||
{
|
||||
get { return prefab.InteractPriority; }
|
||||
}
|
||||
|
||||
public override Vector2 SimPosition
|
||||
{
|
||||
get
|
||||
{
|
||||
return (body==null) ? base.SimPosition : body.SimPosition;
|
||||
return (body == null) ? base.SimPosition : body.SimPosition;
|
||||
}
|
||||
}
|
||||
|
||||
public Rectangle InteractionRect
|
||||
{
|
||||
get
|
||||
{
|
||||
return WorldRect;
|
||||
}
|
||||
}
|
||||
|
||||
public bool NeedsPositionUpdate
|
||||
{
|
||||
get
|
||||
@@ -910,7 +924,7 @@ namespace Barotrauma
|
||||
{
|
||||
return drawableComponents.Count > 0 || body == null || body.Enabled;
|
||||
}
|
||||
|
||||
|
||||
public List<T> GetConnectedComponents<T>(bool recursive = false)
|
||||
{
|
||||
List<T> connectedComponents = new List<T>();
|
||||
@@ -999,77 +1013,11 @@ namespace Barotrauma
|
||||
yield return CoroutineStatus.Success;
|
||||
}
|
||||
|
||||
public static Item FindPickable(Vector2 position, Vector2 pickPosition, Hull hull = null, Item[] ignoredItems = null)
|
||||
public float GetDrawDepth()
|
||||
{
|
||||
float dist;
|
||||
return FindPickable(position, pickPosition, hull, ignoredItems, out dist);
|
||||
return Sprite.Depth + ((ID % 255) * 0.000001f);
|
||||
}
|
||||
|
||||
/// <param name="position">Position of the Character doing the pick, only items that are close enough to this are checked</param>
|
||||
/// <param name="pickPosition">the item closest to pickPosition is returned</param>
|
||||
/// <param name="hull">If a hull is specified, only items within that hull are checked</param>
|
||||
public static Item FindPickable(Vector2 position, Vector2 pickPosition, Hull hull, Item[] ignoredItems, out float distance)
|
||||
{
|
||||
float closestDist = 0.0f, dist;
|
||||
Item closest = null;
|
||||
|
||||
Vector2 displayPos = ConvertUnits.ToDisplayUnits(position);
|
||||
Vector2 displayPickPos = ConvertUnits.ToDisplayUnits(pickPosition);
|
||||
|
||||
distance = 1000.0f;
|
||||
|
||||
foreach (Item item in ItemList)
|
||||
{
|
||||
if (ignoredItems != null && ignoredItems.Contains(item)) continue;
|
||||
if (item.body != null && !item.body.Enabled) continue;
|
||||
|
||||
if (item.PickDistance == 0.0f && !item.prefab.Triggers.Any()) continue;
|
||||
|
||||
Pickable pickableComponent = item.GetComponent<Pickable>();
|
||||
if (pickableComponent != null && (pickableComponent.Picker != null && !pickableComponent.Picker.IsDead)) continue;
|
||||
|
||||
float pickDist = Vector2.Distance(item.WorldPosition, displayPickPos);
|
||||
|
||||
bool insideTrigger = false;
|
||||
foreach (Rectangle trigger in item.prefab.Triggers)
|
||||
{
|
||||
Rectangle transformedTrigger = item.TransformTrigger(trigger, true);
|
||||
|
||||
if (!Submarine.RectContains(transformedTrigger, displayPos)) continue;
|
||||
|
||||
insideTrigger = true;
|
||||
|
||||
Vector2 triggerCenter = new Vector2(transformedTrigger.Center.X, transformedTrigger.Y - transformedTrigger.Height / 2);
|
||||
pickDist = Math.Min(Math.Abs(triggerCenter.X - displayPickPos.X), Math.Abs(triggerCenter.Y - displayPickPos.Y));
|
||||
}
|
||||
|
||||
if (!insideTrigger && item.prefab.Triggers.Any()) continue;
|
||||
|
||||
if (pickDist > item.PickDistance && item.PickDistance > 0.0f) continue;
|
||||
|
||||
dist = item.Sprite.Depth * 10.0f + pickDist;
|
||||
if (item.IsMouseOn(displayPickPos)) dist = dist * 0.1f;
|
||||
|
||||
if (closest == null || dist < closestDist)
|
||||
{
|
||||
if (item.PickDistance > 0.0f && Vector2.Distance(displayPos, item.WorldPosition) > item.prefab.PickDistance) continue;
|
||||
|
||||
if (!item.prefab.PickThroughWalls && Screen.Selected != GameMain.EditMapScreen && !insideTrigger)
|
||||
{
|
||||
Body body = Submarine.CheckVisibility(item.Submarine == null ? position : position - item.Submarine.SimPosition, item.SimPosition, true);
|
||||
if (body != null && body.UserData as Item != item) continue;
|
||||
}
|
||||
|
||||
closestDist = dist;
|
||||
closest = item;
|
||||
|
||||
distance = pickDist;
|
||||
}
|
||||
}
|
||||
|
||||
return closest;
|
||||
}
|
||||
|
||||
public bool IsInsideTrigger(Vector2 worldPosition)
|
||||
{
|
||||
foreach (Rectangle trigger in prefab.Triggers)
|
||||
@@ -1082,26 +1030,19 @@ namespace Barotrauma
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsInPickRange(Vector2 worldPosition)
|
||||
{
|
||||
if (IsInsideTrigger(worldPosition)) return true;
|
||||
|
||||
return Vector2.Distance(WorldPosition, worldPosition) < PickDistance;
|
||||
}
|
||||
|
||||
public bool CanClientAccess(Client c)
|
||||
{
|
||||
return c != null && c.Character != null && c.Character.CanAccessItem(this);
|
||||
return c != null && c.Character != null && c.Character.CanInteractWith(this);
|
||||
}
|
||||
|
||||
public bool Pick(Character picker, bool ignoreRequiredItems=false, bool forceSelectKey=false, bool forceActionKey=false)
|
||||
public bool TryInteract(Character picker, bool ignoreRequiredItems=false, bool forceSelectKey=false, bool forceActionKey=false)
|
||||
{
|
||||
bool hasRequiredSkills = true;
|
||||
|
||||
bool picked = false, selected = false;
|
||||
|
||||
Skill requiredSkill = null;
|
||||
|
||||
|
||||
foreach (ItemComponent ic in components)
|
||||
{
|
||||
bool pickHit = false, selectHit = false;
|
||||
@@ -1129,7 +1070,6 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!pickHit && !selectHit) continue;
|
||||
|
||||
Skill tempRequiredSkill;
|
||||
@@ -1139,7 +1079,7 @@ namespace Barotrauma
|
||||
|
||||
bool showUiMsg = picker == Character.Controlled && Screen.Selected != GameMain.EditMapScreen;
|
||||
if (!ignoreRequiredItems && !ic.HasRequiredItems(picker, showUiMsg)) continue;
|
||||
if ((ic.CanBePicked && pickHit && ic.Pick(picker)) ||
|
||||
if ((ic.CanBePicked && pickHit && ic.Pick(picker)) ||
|
||||
(ic.CanBeSelected && selectHit && ic.Select(picker)))
|
||||
{
|
||||
picked = true;
|
||||
@@ -1164,24 +1104,24 @@ namespace Barotrauma
|
||||
if (picker.IsKeyHit(InputType.Select) || forceSelectKey) picker.SelectedConstruction = null;
|
||||
}
|
||||
else if (selected)
|
||||
{
|
||||
{
|
||||
picker.SelectedConstruction = this;
|
||||
}
|
||||
|
||||
#if CLIENT
|
||||
if (!hasRequiredSkills && Character.Controlled==picker && Screen.Selected != GameMain.EditMapScreen)
|
||||
if (!hasRequiredSkills && Character.Controlled == picker && Screen.Selected != GameMain.EditMapScreen)
|
||||
{
|
||||
GUI.AddMessage("Your skills may be insufficient to use the item!", Color.Red, 5.0f);
|
||||
if (requiredSkill != null)
|
||||
{
|
||||
GUI.AddMessage("("+requiredSkill.Name+" level "+requiredSkill.Level+" required)", Color.Red, 5.0f);
|
||||
GUI.AddMessage("(" + requiredSkill.Name + " level " + requiredSkill.Level + " required)", Color.Red, 5.0f);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (Container!=null) Container.RemoveContained(this);
|
||||
if (Container != null) Container.RemoveContained(this);
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1366,7 +1306,7 @@ namespace Barotrauma
|
||||
int requirementIndex = FixRequirements.Count == 1 ?
|
||||
0 : msg.ReadRangedInteger(0, FixRequirements.Count - 1);
|
||||
|
||||
if (c.Character == null || !c.Character.CanAccessItem(this)) return;
|
||||
if (c.Character == null || !c.Character.CanInteractWith(this)) return;
|
||||
if (!FixRequirements[requirementIndex].CanBeFixed(c.Character)) return;
|
||||
|
||||
FixRequirements[requirementIndex].Fixed = true;
|
||||
@@ -1379,7 +1319,7 @@ namespace Barotrauma
|
||||
|
||||
break;
|
||||
case NetEntityEvent.Type.ApplyStatusEffect:
|
||||
if (c.Character == null || !c.Character.CanAccessItem(this)) return;
|
||||
if (c.Character == null || !c.Character.CanInteractWith(this)) return;
|
||||
|
||||
ApplyStatusEffects(ActionType.OnUse, (float)Timing.Step, c.Character);
|
||||
|
||||
|
||||
@@ -33,9 +33,11 @@ namespace Barotrauma
|
||||
protected Vector2 size;
|
||||
|
||||
//how close the Character has to be to the item to pick it up
|
||||
private float pickDistance;
|
||||
private float interactDistance;
|
||||
// this can be used to allow items which are behind other items tp
|
||||
private float interactPriority;
|
||||
|
||||
private bool pickThroughWalls;
|
||||
private bool interactThroughWalls;
|
||||
|
||||
//an area next to the construction
|
||||
//the construction can be Activated() by a Character inside the area
|
||||
@@ -78,14 +80,19 @@ namespace Barotrauma
|
||||
private set;
|
||||
}
|
||||
|
||||
public float PickDistance
|
||||
public float InteractDistance
|
||||
{
|
||||
get { return pickDistance; }
|
||||
get { return interactDistance; }
|
||||
}
|
||||
|
||||
public bool PickThroughWalls
|
||||
public float InteractPriority
|
||||
{
|
||||
get { return pickThroughWalls; }
|
||||
get { return interactPriority; }
|
||||
}
|
||||
|
||||
public bool InteractThroughWalls
|
||||
{
|
||||
get { return interactThroughWalls; }
|
||||
}
|
||||
|
||||
public override bool IsLinkable
|
||||
@@ -238,9 +245,10 @@ namespace Barotrauma
|
||||
|
||||
Description = ToolBox.GetAttributeString(element, "description", "");
|
||||
|
||||
pickThroughWalls = ToolBox.GetAttributeBool(element, "pickthroughwalls", false);
|
||||
pickDistance = ToolBox.GetAttributeFloat(element, "pickdistance", 0.0f);
|
||||
|
||||
interactThroughWalls = ToolBox.GetAttributeBool(element, "interactthroughwalls", false);
|
||||
interactDistance = ToolBox.GetAttributeFloat(element, "interactdistance", 120.0f); // Default to 120 as the new item picking method is tuned to this number
|
||||
interactPriority = ToolBox.GetAttributeFloat(element, "interactpriority", 0.0f);
|
||||
|
||||
isLinkable = ToolBox.GetAttributeBool(element, "linkable", false);
|
||||
|
||||
resizeHorizontal = ToolBox.GetAttributeBool(element, "resizehorizontal", false);
|
||||
|
||||
@@ -91,12 +91,9 @@ namespace Barotrauma
|
||||
if (Level.Loaded != null) Level.Loaded.Update((float)deltaTime);
|
||||
|
||||
#if CLIENT
|
||||
if (Character.Controlled != null && Character.Controlled.SelectedConstruction != null)
|
||||
if (Character.Controlled != null && Character.Controlled.SelectedConstruction != null && Character.Controlled.CanInteractWith(Character.Controlled.SelectedConstruction))
|
||||
{
|
||||
if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem)
|
||||
{
|
||||
Character.Controlled.SelectedConstruction.UpdateHUD(cam, Character.Controlled);
|
||||
}
|
||||
Character.Controlled.SelectedConstruction.UpdateHUD(cam, Character.Controlled);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user