Build 0.18.0.0

This commit is contained in:
Markus Isberg
2022-05-13 00:55:52 +09:00
parent 15d18e6ff6
commit 7547a9b78a
218 changed files with 3881 additions and 2192 deletions
@@ -99,8 +99,8 @@ namespace Barotrauma.Items.Components
{
if (!docked && value)
{
if (DockingTarget == null) AttemptDock();
if (DockingTarget == null) return;
if (DockingTarget == null) { AttemptDock(); }
if (DockingTarget == null) { return; }
docked = true;
}
@@ -126,6 +126,14 @@ namespace Barotrauma.Items.Components
/// </summary>
public event Action OnUnDocked;
private bool outpostAutoDockingPromptShown;
enum AllowOutpostAutoDocking
{
Ask, Yes, No
}
private AllowOutpostAutoDocking allowOutpostAutoDocking = AllowOutpostAutoDocking.Ask;
public DockingPort(Item item, ContentXElement element)
: base(item, element)
{
@@ -622,7 +630,8 @@ namespace Barotrauma.Items.Components
{
bodies[i + j * 2] = GameMain.World.CreateEdge(
ConvertUnits.ToSimUnits(new Vector2(hullRects[i].X, hullRects[i].Y - hullRects[i].Height * j)),
ConvertUnits.ToSimUnits(new Vector2(hullRects[i].Right, hullRects[i].Y - hullRects[i].Height * j)));
ConvertUnits.ToSimUnits(new Vector2(hullRects[i].Right, hullRects[i].Y - hullRects[i].Height * j)),
BodyType.Static);
}
}
@@ -632,7 +641,9 @@ namespace Barotrauma.Items.Components
ConvertUnits.ToSimUnits(hullRects[0].Width + hullRects[1].Width),
ConvertUnits.ToSimUnits(hullRects[0].Height),
density: 0.0f,
offset: ConvertUnits.ToSimUnits(new Vector2(hullRects[0].Right, hullRects[0].Y - hullRects[0].Height / 2) - hulls[0].Submarine.HiddenSubPosition));
offset: ConvertUnits.ToSimUnits(new Vector2(hullRects[0].Right, hullRects[0].Y - hullRects[0].Height / 2) - hulls[0].Submarine.HiddenSubPosition),
Physics.CollisionWall,
Physics.CollisionCharacter | Physics.CollisionItem | Physics.CollisionCharacter | Physics.CollisionItemBlocking | Physics.CollisionProjectile);
outsideBlocker.UserData = this;
}
@@ -742,7 +753,8 @@ namespace Barotrauma.Items.Components
{
bodies[i + j * 2] = GameMain.World.CreateEdge(
ConvertUnits.ToSimUnits(new Vector2(hullRects[i].X + hullRects[i].Width * j, hullRects[i].Y)),
ConvertUnits.ToSimUnits(new Vector2(hullRects[i].X + hullRects[i].Width * j, hullRects[i].Y - hullRects[i].Height)));
ConvertUnits.ToSimUnits(new Vector2(hullRects[i].X + hullRects[i].Width * j, hullRects[i].Y - hullRects[i].Height)),
BodyType.Static);
}
}
@@ -752,7 +764,9 @@ namespace Barotrauma.Items.Components
ConvertUnits.ToSimUnits(hullRects[0].Width),
ConvertUnits.ToSimUnits(hullRects[0].Height + hullRects[1].Height),
density: 0.0f,
offset: ConvertUnits.ToSimUnits(new Vector2(hullRects[0].Center.X, hullRects[0].Y) - hulls[0].Submarine.HiddenSubPosition));
offset: ConvertUnits.ToSimUnits(new Vector2(hullRects[0].Center.X, hullRects[0].Y) - hulls[0].Submarine.HiddenSubPosition),
Physics.CollisionWall,
Physics.CollisionCharacter | Physics.CollisionItem | Physics.CollisionCharacter | Physics.CollisionItemBlocking | Physics.CollisionProjectile);
outsideBlocker.UserData = this;
}
@@ -778,8 +792,6 @@ namespace Barotrauma.Items.Components
if (body == null) { continue; }
body.BodyType = BodyType.Static;
body.Friction = 0.5f;
body.CollisionCategories = Physics.CollisionWall;
}
}
@@ -947,7 +959,7 @@ namespace Barotrauma.Items.Components
{
foreach (Body body in bodies)
{
if (body == null) continue;
if (body == null) { continue; }
GameMain.World.Remove(body);
}
bodies = null;
@@ -961,6 +973,9 @@ namespace Barotrauma.Items.Components
{
item.CreateServerEvent(this);
}
#elif CLIENT
autodockingVerification?.Close();
autodockingVerification = null;
#endif
OnUnDocked?.Invoke();
OnUnDocked = null;
@@ -1140,27 +1155,86 @@ namespace Barotrauma.Items.Components
public override void ReceiveSignal(Signal signal, Connection connection)
{
if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; }
#if CLIENT
if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient &&
!(GameMain.GameSession?.Campaign?.AllowedToManageCampaign(ClientPermissions.ManageMap) ?? false))
{
return;
}
#endif
if (dockingCooldown > 0.0f) { return; }
bool wasDocked = docked;
DockingPort prevDockingTarget = DockingTarget;
bool newDockedState = wasDocked;
switch (connection.Name)
{
case "toggle":
if (signal.value != "0")
{
Docked = !docked;
newDockedState = !docked;
}
break;
case "set_active":
case "set_state":
Docked = signal.value != "0";
newDockedState = signal.value != "0";
break;
}
if (newDockedState != wasDocked)
{
bool tryingToToggleOutpostDocking = docked ?
DockingTarget?.Item?.Submarine?.Info?.IsOutpost ?? false :
FindAdjacentPort()?.Item?.Submarine?.Info?.IsOutpost ?? false;
//trying to dock/undock from an outpost and the signal was sent by some automated system instead of a character
// -> ask if the player really wants to dock/undock to prevent a softlock if someone's wired the docking port
// in a way that makes always makes it dock/undock immediately at the start of the roun
if (tryingToToggleOutpostDocking && signal.sender == null)
{
if (allowOutpostAutoDocking == AllowOutpostAutoDocking.Ask)
{
#if CLIENT
if (!outpostAutoDockingPromptShown)
{
autodockingVerification = new GUIMessageBox(string.Empty,
TextManager.Get(newDockedState ? "autodockverification" : "autoundockverification"),
new LocalizedString[] { TextManager.Get("Yes"), TextManager.Get("No") });
autodockingVerification.Buttons[0].OnClicked += (btn, userdata) =>
{
autodockingVerification?.Close();
autodockingVerification = null;
if (item.Removed || GameMain.Client == null) { return false; }
allowOutpostAutoDocking = AllowOutpostAutoDocking.Yes;
item.CreateClientEvent(this);
return true;
};
autodockingVerification.Buttons[1].OnClicked += (btn, userdata) =>
{
autodockingVerification?.Close();
autodockingVerification = null;
if (item.Removed || GameMain.Client == null) { return false; }
allowOutpostAutoDocking = AllowOutpostAutoDocking.No;
item.CreateClientEvent(this);
return true;
};
}
#endif
outpostAutoDockingPromptShown = true;
return;
}
else if (allowOutpostAutoDocking == AllowOutpostAutoDocking.No)
{
return;
}
}
if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; }
Docked = newDockedState;
}
#if SERVER
if (signal.sender != null && docked != wasDocked)
{