Sending NetTime at the start of a combined networkevent instead of individual networkevents, syncing itemcomponents for spectators, AICharacter importantentityupdates are sent again, misc bugfixes, some new heads

This commit is contained in:
Regalis
2015-11-20 17:12:33 +02:00
parent 8ec7fd44ff
commit cddf4f1bde
37 changed files with 269 additions and 130 deletions
+4 -8
View File
@@ -112,9 +112,7 @@ namespace Barotrauma
return true;
case NetworkEventType.EntityUpdate:
if (AnimController.RefLimb.SimPosition.Length() > NetConfig.CharacterIgnoreDistance) return false;
message.Write((float)NetTime.Now);
message.Write(AnimController.TargetDir == Direction.Right);
message.WriteRangedSingle(MathHelper.Clamp(AnimController.TargetMovement.X, -1.0f, 1.0f), -1.0f, 1.0f, 8);
message.WriteRangedSingle(MathHelper.Clamp(AnimController.TargetMovement.X, -1.0f, 1.0f), -1.0f, 1.0f, 8);
@@ -127,8 +125,8 @@ namespace Barotrauma
return true;
}
public override void ReadNetworkData(NetworkEventType type, NetIncomingMessage message, out object data)
public override void ReadNetworkData(NetworkEventType type, NetIncomingMessage message, float sendingTime, out object data)
{
data = null;
Enabled = true;
@@ -182,11 +180,9 @@ namespace Barotrauma
aiController.ReadNetworkData(message);
return;
case NetworkEventType.EntityUpdate:
float sendingTime = 0.0f;
Vector2 targetMovement = Vector2.Zero;
bool targetDir = false;
sendingTime = message.ReadFloat();
if (sendingTime <= LastNetworkUpdate) return;
Vector2 pos = Vector2.Zero, vel = Vector2.Zero;
+6 -24
View File
@@ -581,19 +581,7 @@ namespace Barotrauma
}
}
}
public void CreateUpdateNetworkEvent(bool isClient)
{
//new NetworkEvent(importantUpdateTimer <= 0 ? NetworkEventType.ImportantEntityUpdate : NetworkEventType.EntityUpdate, ID, isClient);
new NetworkEvent(NetworkEventType.EntityUpdate, ID, isClient);
//importantUpdateTimer -= 1;
//if (importantUpdateTimer < 0) importantUpdateTimer = (this is AICharacter) ? 30 : 10;
}
public bool HasSelectedItem(Item item)
{
return selectedItems.Contains(item);
@@ -1035,7 +1023,7 @@ namespace Barotrauma
health -= attackResult.Damage;
if (health <= 0.0f && damageType == DamageType.Burn) Kill(CauseOfDeath.Burn);
bleeding += attackResult.Bleeding;
Bleeding += attackResult.Bleeding;
return attackResult;
}
@@ -1274,9 +1262,6 @@ namespace Barotrauma
return true;
case NetworkEventType.EntityUpdate:
message.Write((float)NetTime.Now);
message.Write(keys[(int)InputType.Use].DequeueHeld);
bool secondaryHeld = keys[(int)InputType.Aim].DequeueHeld;
@@ -1321,7 +1306,7 @@ namespace Barotrauma
}
}
public override void ReadNetworkData(NetworkEventType type, NetIncomingMessage message, out object data)
public override void ReadNetworkData(NetworkEventType type, NetIncomingMessage message, float sendingTime, out object data)
{
Enabled = true;
data = null;
@@ -1362,7 +1347,7 @@ namespace Barotrauma
if (GameMain.Server != null)
{
Client sender =GameMain.Server.ConnectedClients.Find(c => c.Connection == message.SenderConnection);
if (sender ==null || sender.Character != this)
if (sender == null || sender.Character != this)
throw new Exception("Received a KillCharacter message from someone else than the client controlling the Character!");
}
@@ -1390,7 +1375,7 @@ namespace Barotrauma
return;
case NetworkEventType.InventoryUpdate:
if (inventory == null) return;
inventory.ReadNetworkData(NetworkEventType.InventoryUpdate, message);
inventory.ReadNetworkData(NetworkEventType.InventoryUpdate, message, sendingTime);
return;
case NetworkEventType.ImportantEntityUpdate:
@@ -1406,8 +1391,7 @@ namespace Barotrauma
Bleeding = message.ReadRangedSingle(0.0f, 5.0f, 8);
return;
case NetworkEventType.EntityUpdate:
float sendingTime = 0.0f;
case NetworkEventType.EntityUpdate:
Vector2 relativeCursorPos = Vector2.Zero;
bool actionKeyState, secondaryKeyState;
@@ -1416,8 +1400,6 @@ namespace Barotrauma
try
{
sendingTime = message.ReadFloat();
if (sendingTime > LastNetworkUpdate) ClearInputs();
actionKeyState = message.ReadBoolean();
@@ -55,7 +55,7 @@ namespace Barotrauma
headSpriteId = value;
Vector2 spriteRange = headSpriteRange[gender == Gender.Male ? 0 : 1];
if (headSpriteId < (int)spriteRange.X) headSpriteId = (int)(spriteRange.Y-1);
if (headSpriteId < (int)spriteRange.X) headSpriteId = (int)(spriteRange.Y);
if (headSpriteId > (int)spriteRange.Y) headSpriteId = (int)(spriteRange.X);
if (headSpriteId != oldId) headSprite = null;