Unstable 1.8.4.0
This commit is contained in:
@@ -22,6 +22,12 @@ namespace Barotrauma.Networking
|
||||
get; private set;
|
||||
}
|
||||
|
||||
public DateTime ReturnTime { get; private set; }
|
||||
public DateTime RespawnTime { get; private set; }
|
||||
public State CurrentState { get; private set; }
|
||||
public bool ReturnCountdownStarted { get; private set; }
|
||||
public bool RespawnCountdownStarted { get; private set; }
|
||||
|
||||
public static void ShowDeathPromptIfNeeded(float delay = 1.0f)
|
||||
{
|
||||
if (UseDeathPrompt)
|
||||
@@ -30,13 +36,18 @@ namespace Barotrauma.Networking
|
||||
}
|
||||
}
|
||||
|
||||
partial void UpdateTransportingProjSpecific(float deltaTime)
|
||||
partial void UpdateTransportingProjSpecific(TeamSpecificState teamSpecificState, float deltaTime)
|
||||
{
|
||||
if (GameMain.Client?.Character == null || GameMain.Client.Character.Submarine != RespawnShuttle) { return; }
|
||||
if (!ReturnCountdownStarted) { return; }
|
||||
if (GameMain.Client?.Character == null ||
|
||||
GameMain.Client.Character.Submarine is not { IsRespawnShuttle: true } ||
|
||||
GameMain.Client.Character.TeamID != teamSpecificState.TeamID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!teamSpecificState.ReturnCountdownStarted) { return; }
|
||||
|
||||
//show a warning when there's 20 seconds until the shuttle leaves
|
||||
if ((ReturnTime - DateTime.Now).TotalSeconds < 20.0f &&
|
||||
if ((teamSpecificState.ReturnTime - DateTime.Now).TotalSeconds < 20.0f &&
|
||||
(DateTime.Now - lastShuttleLeavingWarningTime).TotalSeconds > 30.0f)
|
||||
{
|
||||
lastShuttleLeavingWarningTime = DateTime.Now;
|
||||
@@ -46,43 +57,59 @@ namespace Barotrauma.Networking
|
||||
|
||||
public void ClientEventRead(IReadMessage msg, float sendingTime)
|
||||
{
|
||||
bool respawnPromptPending = false;
|
||||
var newState = (State)msg.ReadRangedInteger(0, Enum.GetNames(typeof(State)).Length);
|
||||
switch (newState)
|
||||
var myTeamId = (CharacterTeamType)msg.ReadByte();
|
||||
foreach (var teamSpecificState in teamSpecificStates.Values)
|
||||
{
|
||||
case State.Transporting:
|
||||
ReturnCountdownStarted = msg.ReadBoolean();
|
||||
maxTransportTime = msg.ReadSingle();
|
||||
float transportTimeLeft = msg.ReadSingle();
|
||||
var teamId = (CharacterTeamType)msg.ReadByte();
|
||||
|
||||
ReturnTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, milliseconds: (int)(transportTimeLeft * 1000.0f));
|
||||
RespawnCountdownStarted = false;
|
||||
if (CurrentState != newState)
|
||||
{
|
||||
CoroutineManager.StopCoroutines("forcepos");
|
||||
}
|
||||
break;
|
||||
case State.Waiting:
|
||||
PendingRespawnCount = msg.ReadUInt16();
|
||||
RequiredRespawnCount = msg.ReadUInt16();
|
||||
respawnPromptPending = msg.ReadBoolean();
|
||||
RespawnCountdownStarted = msg.ReadBoolean();
|
||||
ResetShuttle();
|
||||
float newRespawnTime = msg.ReadSingle();
|
||||
RespawnTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, milliseconds: (int)(newRespawnTime * 1000.0f));
|
||||
break;
|
||||
case State.Returning:
|
||||
RespawnCountdownStarted = false;
|
||||
break;
|
||||
bool respawnPromptPending = false;
|
||||
bool clientHasChosenNewBotViaShuttle = false;
|
||||
var newState = (State)msg.ReadRangedInteger(0, Enum.GetNames(typeof(State)).Length);
|
||||
switch (newState)
|
||||
{
|
||||
case State.Transporting:
|
||||
teamSpecificState.ReturnCountdownStarted = msg.ReadBoolean();
|
||||
maxTransportTime = msg.ReadSingle();
|
||||
float transportTimeLeft = msg.ReadSingle();
|
||||
teamSpecificState.ReturnTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, milliseconds: (int)(transportTimeLeft * 1000.0f));
|
||||
teamSpecificState.RespawnCountdownStarted = false;
|
||||
SetShuttleBodyType(teamSpecificState.TeamID, FarseerPhysics.BodyType.Dynamic);
|
||||
break;
|
||||
case State.Waiting:
|
||||
teamSpecificState.PendingRespawnCount = msg.ReadUInt16();
|
||||
teamSpecificState.RequiredRespawnCount = msg.ReadUInt16();
|
||||
respawnPromptPending = msg.ReadBoolean();
|
||||
clientHasChosenNewBotViaShuttle = msg.ReadBoolean();
|
||||
teamSpecificState.RespawnCountdownStarted = msg.ReadBoolean();
|
||||
ResetShuttle(teamSpecificState);
|
||||
float newRespawnTime = msg.ReadSingle();
|
||||
teamSpecificState.RespawnTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, milliseconds: (int)(newRespawnTime * 1000.0f));
|
||||
SetShuttleBodyType(teamSpecificState.TeamID, FarseerPhysics.BodyType.Static);
|
||||
break;
|
||||
case State.Returning:
|
||||
teamSpecificState.RespawnCountdownStarted = false;
|
||||
break;
|
||||
}
|
||||
teamSpecificState.CurrentState = newState;
|
||||
|
||||
if (respawnPromptPending && !clientHasChosenNewBotViaShuttle)
|
||||
{
|
||||
GameMain.Client.HasSpawned = true;
|
||||
DeathPrompt.Create(delay: 1.0f);
|
||||
}
|
||||
|
||||
if (teamId == myTeamId)
|
||||
{
|
||||
PendingRespawnCount = teamSpecificState.PendingRespawnCount;
|
||||
RequiredRespawnCount = teamSpecificState.RequiredRespawnCount;
|
||||
ReturnTime = teamSpecificState.ReturnTime;
|
||||
RespawnTime = teamSpecificState.RespawnTime;
|
||||
CurrentState = teamSpecificState.CurrentState;
|
||||
ReturnCountdownStarted = teamSpecificState.ReturnCountdownStarted;
|
||||
RespawnCountdownStarted = teamSpecificState.RespawnCountdownStarted;
|
||||
}
|
||||
}
|
||||
CurrentState = newState;
|
||||
|
||||
if (respawnPromptPending)
|
||||
{
|
||||
GameMain.Client.HasSpawned = true;
|
||||
DeathPrompt.Create(delay: 1.0f);
|
||||
}
|
||||
|
||||
|
||||
msg.ReadPadBits();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user