PickItem networkevents include whether the item was selected instead of toggling selected/deselected, items can be picked when inside their trigger even if the position of the item isn't visible (i.e. ladders in Nehalennia can be climbed again)
This commit is contained in:
@@ -1479,6 +1479,10 @@ namespace Barotrauma
|
||||
message.Write((ushort)pickData[0]);
|
||||
message.Write((int)pickData[1] == 1);
|
||||
message.Write((int)pickData[2] == 1);
|
||||
|
||||
var pickedItem = Entity.FindEntityByID((ushort)pickData[0]);
|
||||
message.Write(pickedItem != null && selectedConstruction == pickedItem);
|
||||
|
||||
message.WritePadBits();
|
||||
|
||||
return true;
|
||||
@@ -1613,6 +1617,8 @@ namespace Barotrauma
|
||||
bool pickHit = message.ReadBoolean();
|
||||
bool actionHit = message.ReadBoolean();
|
||||
|
||||
bool isSelected = message.ReadBoolean();
|
||||
|
||||
data = new int[] { (int)itemId, pickHit ? 1 : 0, actionHit ? 1: 0 };
|
||||
|
||||
System.Diagnostics.Debug.WriteLine("item id: "+itemId);
|
||||
@@ -1629,7 +1635,7 @@ namespace Barotrauma
|
||||
GameServer.Log(Name + " selected " + pickedItem.Name, Color.Orange);
|
||||
}
|
||||
pickedItem.Pick(this, false, pickHit, actionHit);
|
||||
|
||||
selectedConstruction = isSelected ? pickedItem : null;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
@@ -1178,22 +1178,20 @@ namespace Barotrauma
|
||||
|
||||
float pickDist = Vector2.Distance(item.WorldPosition, displayPickPos);
|
||||
|
||||
bool outsideTrigger = false;
|
||||
bool insideTrigger = false;
|
||||
foreach (Rectangle trigger in item.prefab.Triggers)
|
||||
{
|
||||
Rectangle transformedTrigger = item.TransformTrigger(trigger, true);
|
||||
|
||||
if (!Submarine.RectContains(transformedTrigger, displayPos))
|
||||
{
|
||||
outsideTrigger = true;
|
||||
continue;
|
||||
}
|
||||
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 (outsideTrigger) continue;
|
||||
if (!insideTrigger && item.prefab.Triggers.Any()) continue;
|
||||
|
||||
if (pickDist > item.PickDistance && item.PickDistance > 0.0f) continue;
|
||||
|
||||
@@ -1204,7 +1202,7 @@ namespace Barotrauma
|
||||
{
|
||||
if (item.PickDistance > 0.0f && Vector2.Distance(displayPos, item.WorldPosition) > item.prefab.PickDistance) continue;
|
||||
|
||||
if (!item.prefab.PickThroughWalls)
|
||||
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;
|
||||
@@ -1301,19 +1299,14 @@ namespace Barotrauma
|
||||
|
||||
System.Diagnostics.Debug.WriteLine("Item.Pick(" + picker + ", " + forceSelectKey + ")");
|
||||
|
||||
if (selected)
|
||||
if (picker.SelectedConstruction == this)
|
||||
{
|
||||
if (picker.SelectedConstruction == this)
|
||||
{
|
||||
picker.SelectedConstruction = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
picker.SelectedConstruction = this;
|
||||
}
|
||||
if (picker.IsKeyHit(InputType.Select) || forceSelectKey) picker.SelectedConstruction = null;
|
||||
}
|
||||
else if (selected)
|
||||
{
|
||||
picker.SelectedConstruction = this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!hasRequiredSkills && Character.Controlled==picker && Screen.Selected != GameMain.EditMapScreen)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user