Fixed far-away AI characters staying disabled when switching control to them + minor optimization

This commit is contained in:
Joonas Rikkonen
2017-07-11 20:01:49 +03:00
parent 935b1ff837
commit af1a681da0
3 changed files with 8 additions and 6 deletions

View File

@@ -1288,22 +1288,22 @@ namespace Barotrauma
if (GameMain.Server != null)
{
//disable AI characters that are far away from all clients and the host's character
//disable AI characters that are far away from all clients and the host's character and not controlled by anyone
c.Enabled =
c == controlled ||
CharacterList.Any(c2 =>
(c2.IsRemotePlayer || c2 == GameMain.Server.Character) &&
Vector2.Distance(c2.WorldPosition, c.WorldPosition) < NetConfig.CharacterIgnoreDistance);
Vector2.DistanceSquared(c2.WorldPosition, c.WorldPosition) < NetConfig.CharacterIgnoreDistanceSqr);
}
else if (Submarine.MainSub != null)
{
//disable AI characters that are far away from the sub and the controlled character
c.Enabled = Vector2.Distance(Submarine.MainSub.WorldPosition, c.WorldPosition) < NetConfig.CharacterIgnoreDistance ||
(controlled != null && Vector2.Distance(controlled.WorldPosition, c.WorldPosition) < NetConfig.CharacterIgnoreDistance);
c.Enabled = Vector2.DistanceSquared(Submarine.MainSub.WorldPosition, c.WorldPosition) < NetConfig.CharacterIgnoreDistanceSqr ||
(controlled != null && Vector2.DistanceSquared(controlled.WorldPosition, c.WorldPosition) < NetConfig.CharacterIgnoreDistanceSqr);
}
}
}
for (int i = 0; i < CharacterList.Count; i++)
{
CharacterList[i].Update(deltaTime, cam);

View File

@@ -842,7 +842,7 @@ namespace Barotrauma.Networking
if (!character.Enabled) continue;
if (c.Character != null &&
Vector2.DistanceSquared(character.WorldPosition, c.Character.WorldPosition) >=
NetConfig.CharacterIgnoreDistance * NetConfig.CharacterIgnoreDistance)
NetConfig.CharacterIgnoreDistanceSqr)
{
continue;
}
@@ -1876,6 +1876,7 @@ namespace Barotrauma.Networking
newCharacter.LastNetworkUpdateID = client.Character.LastNetworkUpdateID;
newCharacter.IsRemotePlayer = true;
newCharacter.Enabled = true;
client.Character = newCharacter;
CreateEntityEvent(newCharacter, new object[] { NetEntityEvent.Type.Control, client });
}

View File

@@ -14,6 +14,7 @@
//if a Character is further than this from the sub, the server will ignore it
//(in display units)
public const float CharacterIgnoreDistance = 20000.0f;
public const float CharacterIgnoreDistanceSqr = CharacterIgnoreDistance * CharacterIgnoreDistance;
//how much the physics body of an item has to move until the server
//send a position update to clients (in sim units)