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:
Regalis
2016-08-13 18:33:42 +03:00
parent 66df9c1dd0
commit aa2dbab579
2 changed files with 19 additions and 20 deletions

View File

@@ -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;

View File

@@ -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)
{