- items can be equipped/unequipped by double clicking

- items inside the respawn shuttle
- using the teleport method when moving a character into or out from a sub
- removing dropped items from the respawn shuttle when respawning
This commit is contained in:
Regalis
2016-07-29 21:22:08 +03:00
parent 4252f4b9d0
commit 1a0451d0a8
4 changed files with 36 additions and 7 deletions
@@ -586,18 +586,18 @@ namespace Barotrauma
if (Gap.FindAdjacent(currentHull.ConnectedGaps, findPos, 150.0f) != null) return; if (Gap.FindAdjacent(currentHull.ConnectedGaps, findPos, 150.0f) != null) return;
Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position), currentHull.Submarine.Velocity, true); Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position), currentHull.Submarine.Velocity);
} }
//out -> in //out -> in
else if (currentHull == null && newHull.Submarine != null) else if (currentHull == null && newHull.Submarine != null)
{ {
Teleport(-ConvertUnits.ToSimUnits(newHull.Submarine.Position), -newHull.Submarine.Velocity, false); Teleport(-ConvertUnits.ToSimUnits(newHull.Submarine.Position), -newHull.Submarine.Velocity);
} }
//from one sub to another //from one sub to another
else if (newHull != null && currentHull != null && newHull.Submarine != currentHull.Submarine) else if (newHull != null && currentHull != null && newHull.Submarine != currentHull.Submarine)
{ {
Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position - newHull.Submarine.Position), Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position - newHull.Submarine.Position),
Vector2.Zero, false); Vector2.Zero);
} }
} }
@@ -608,7 +608,7 @@ namespace Barotrauma
UpdateCollisionCategories(); UpdateCollisionCategories();
} }
private void Teleport(Vector2 moveAmount, Vector2 velocityChange, bool inToOut) public void Teleport(Vector2 moveAmount, Vector2 velocityChange)
{ {
foreach (Limb limb in Limbs) foreach (Limb limb in Limbs)
{ {
@@ -1782,6 +1782,11 @@ namespace Barotrauma
pos.X = message.ReadFloat(); pos.X = message.ReadFloat();
pos.Y = message.ReadFloat(); pos.Y = message.ReadFloat();
if (inSub != (Submarine != null))
{
AnimController.Teleport(pos - SimPosition, Vector2.Zero);
}
if (inSub) if (inSub)
{ {
//AnimController.FindHull(ConvertUnits.ToDisplayUnits(pos) - Submarine.Loaded.WorldPosition); //AnimController.FindHull(ConvertUnits.ToDisplayUnits(pos) - Submarine.Loaded.WorldPosition);
+16 -2
View File
@@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
@@ -81,7 +82,7 @@ namespace Barotrauma
default: default:
SlotPositions[i] = new Vector2( SlotPositions[i] = new Vector2(
spacing * 2 + rectWidth + (spacing + rectWidth) * ((i - 6)%5), spacing * 2 + rectWidth + (spacing + rectWidth) * ((i - 6)%5),
GameMain.GraphicsHeight - (spacing + rectHeight) * ((i>10) ? 2 : 1)); GameMain.GraphicsHeight - (spacing + rectHeight) * ((i>10) ? 1 : 2));
break; break;
} }
} }
@@ -143,7 +144,7 @@ namespace Barotrauma
/// </summary> /// </summary>
public override bool TryPutItem(Item item, List<InvSlotType> allowedSlots = null, bool createNetworkEvent = true) public override bool TryPutItem(Item item, List<InvSlotType> allowedSlots = null, bool createNetworkEvent = true)
{ {
if (allowedSlots == null) return false; if (allowedSlots == null || ! allowedSlots.Any()) return false;
//try to place the item in LimBlot.Any slot if that's allowed //try to place the item in LimBlot.Any slot if that's allowed
if (allowedSlots.Contains(InvSlotType.Any)) if (allowedSlots.Contains(InvSlotType.Any))
@@ -303,6 +304,19 @@ namespace Barotrauma
{ {
character.SelectedCharacter.Inventory.TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots, true); character.SelectedCharacter.Inventory.TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots, true);
} }
else //doubleclicked and no other inventory is selected
{
//not equipped -> attempt to equip
if (IsInLimbSlot(doubleClickedItem, InvSlotType.Any))
{
TryPutItem(doubleClickedItem, doubleClickedItem.AllowedSlots.FindAll(i => i != InvSlotType.Any), true);
}
//equipped -> attempt to unequip
else if (doubleClickedItem.AllowedSlots.Contains(InvSlotType.Any))
{
TryPutItem(doubleClickedItem, new List<InvSlotType>() { InvSlotType.Any }, true);
}
}
} }
} }
+11 -1
View File
@@ -314,6 +314,16 @@ namespace Barotrauma.Networking
shuttleTransportTimer = maxTransportTime; shuttleTransportTimer = maxTransportTime;
shuttleReturnTimer = maxTransportTime; shuttleReturnTimer = maxTransportTime;
foreach (Item item in Item.ItemList)
{
if (item.Submarine != respawnShuttle) continue;
if (item.body != null && item.body.Enabled && item.ParentInventory == null)
{
Item.Remover.QueueItem(item);
}
}
foreach (Structure wall in Structure.WallList) foreach (Structure wall in Structure.WallList)
{ {
if (wall.Submarine != respawnShuttle) continue; if (wall.Submarine != respawnShuttle) continue;
@@ -397,7 +407,7 @@ namespace Barotrauma.Networking
var divingSuit = new Item(divingSuitPrefab, pos, respawnShuttle); var divingSuit = new Item(divingSuitPrefab, pos, respawnShuttle);
var oxyTank = new Item(oxyPrefab, pos, respawnShuttle); var oxyTank = new Item(oxyPrefab, pos, respawnShuttle);
oxyTank.Combine(divingSuit); divingSuit.Combine(oxyTank);
spawnedItems.Add(divingSuit); spawnedItems.Add(divingSuit);
spawnedItems.Add(oxyTank); spawnedItems.Add(oxyTank);