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((ushort)pickData[0]);
|
||||||
message.Write((int)pickData[1] == 1);
|
message.Write((int)pickData[1] == 1);
|
||||||
message.Write((int)pickData[2] == 1);
|
message.Write((int)pickData[2] == 1);
|
||||||
|
|
||||||
|
var pickedItem = Entity.FindEntityByID((ushort)pickData[0]);
|
||||||
|
message.Write(pickedItem != null && selectedConstruction == pickedItem);
|
||||||
|
|
||||||
message.WritePadBits();
|
message.WritePadBits();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -1613,6 +1617,8 @@ namespace Barotrauma
|
|||||||
bool pickHit = message.ReadBoolean();
|
bool pickHit = message.ReadBoolean();
|
||||||
bool actionHit = message.ReadBoolean();
|
bool actionHit = message.ReadBoolean();
|
||||||
|
|
||||||
|
bool isSelected = message.ReadBoolean();
|
||||||
|
|
||||||
data = new int[] { (int)itemId, pickHit ? 1 : 0, actionHit ? 1: 0 };
|
data = new int[] { (int)itemId, pickHit ? 1 : 0, actionHit ? 1: 0 };
|
||||||
|
|
||||||
System.Diagnostics.Debug.WriteLine("item id: "+itemId);
|
System.Diagnostics.Debug.WriteLine("item id: "+itemId);
|
||||||
@@ -1629,7 +1635,7 @@ namespace Barotrauma
|
|||||||
GameServer.Log(Name + " selected " + pickedItem.Name, Color.Orange);
|
GameServer.Log(Name + " selected " + pickedItem.Name, Color.Orange);
|
||||||
}
|
}
|
||||||
pickedItem.Pick(this, false, pickHit, actionHit);
|
pickedItem.Pick(this, false, pickHit, actionHit);
|
||||||
|
selectedConstruction = isSelected ? pickedItem : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1178,22 +1178,20 @@ namespace Barotrauma
|
|||||||
|
|
||||||
float pickDist = Vector2.Distance(item.WorldPosition, displayPickPos);
|
float pickDist = Vector2.Distance(item.WorldPosition, displayPickPos);
|
||||||
|
|
||||||
bool outsideTrigger = false;
|
bool insideTrigger = false;
|
||||||
foreach (Rectangle trigger in item.prefab.Triggers)
|
foreach (Rectangle trigger in item.prefab.Triggers)
|
||||||
{
|
{
|
||||||
Rectangle transformedTrigger = item.TransformTrigger(trigger, true);
|
Rectangle transformedTrigger = item.TransformTrigger(trigger, true);
|
||||||
|
|
||||||
if (!Submarine.RectContains(transformedTrigger, displayPos))
|
if (!Submarine.RectContains(transformedTrigger, displayPos)) continue;
|
||||||
{
|
|
||||||
outsideTrigger = true;
|
insideTrigger = true;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector2 triggerCenter = new Vector2(transformedTrigger.Center.X, transformedTrigger.Y - transformedTrigger.Height / 2);
|
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));
|
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;
|
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.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);
|
Body body = Submarine.CheckVisibility(item.Submarine == null ? position : position - item.Submarine.SimPosition, item.SimPosition, true);
|
||||||
if (body != null && body.UserData as Item != item) continue;
|
if (body != null && body.UserData as Item != item) continue;
|
||||||
@@ -1301,19 +1299,14 @@ namespace Barotrauma
|
|||||||
|
|
||||||
System.Diagnostics.Debug.WriteLine("Item.Pick(" + picker + ", " + forceSelectKey + ")");
|
System.Diagnostics.Debug.WriteLine("Item.Pick(" + picker + ", " + forceSelectKey + ")");
|
||||||
|
|
||||||
if (selected)
|
if (picker.SelectedConstruction == this)
|
||||||
{
|
{
|
||||||
if (picker.SelectedConstruction == this)
|
if (picker.IsKeyHit(InputType.Select) || forceSelectKey) picker.SelectedConstruction = null;
|
||||||
{
|
}
|
||||||
picker.SelectedConstruction = null;
|
else if (selected)
|
||||||
}
|
{
|
||||||
else
|
picker.SelectedConstruction = this;
|
||||||
{
|
|
||||||
picker.SelectedConstruction = this;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!hasRequiredSkills && Character.Controlled==picker && Screen.Selected != GameMain.EditMapScreen)
|
if (!hasRequiredSkills && Character.Controlled==picker && Screen.Selected != GameMain.EditMapScreen)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user