online fix
This commit is contained in:
@@ -12,7 +12,10 @@ namespace MegaKoop.Game.Networking
|
||||
WeaponFire = 4,
|
||||
HealthSync = 5,
|
||||
ProjectileSpawn = 6,
|
||||
ProjectileImpact = 7
|
||||
ProjectileImpact = 7,
|
||||
GameState = 8,
|
||||
EnemySpawn = 9,
|
||||
EnemyDespawn = 10
|
||||
}
|
||||
|
||||
public enum ProjectileImpactKind : byte
|
||||
@@ -252,4 +255,139 @@ namespace MegaKoop.Game.Networking
|
||||
return new ProjectileImpactMessage(kind, position, normal);
|
||||
}
|
||||
}
|
||||
|
||||
public enum GameStateEvent : byte
|
||||
{
|
||||
Started = 0,
|
||||
Paused = 1,
|
||||
Resumed = 2,
|
||||
Stopped = 3,
|
||||
WaveAdvanced = 4,
|
||||
BossSpawned = 5,
|
||||
Heartbeat = 6
|
||||
}
|
||||
|
||||
public readonly struct GameStateMessage
|
||||
{
|
||||
public readonly GameStateEvent Event;
|
||||
public readonly float Elapsed;
|
||||
public readonly int CurrentWave;
|
||||
public readonly int PreviousWave;
|
||||
public readonly bool IsPaused;
|
||||
public readonly bool IsRunning;
|
||||
public readonly string DefinitionId;
|
||||
public readonly int Count;
|
||||
|
||||
public GameStateMessage(GameStateEvent evt, float elapsed, int currentWave, int previousWave, bool isPaused, bool isRunning, string definitionId, int count)
|
||||
{
|
||||
Event = evt;
|
||||
Elapsed = elapsed;
|
||||
CurrentWave = currentWave;
|
||||
PreviousWave = previousWave;
|
||||
IsPaused = isPaused;
|
||||
IsRunning = isRunning;
|
||||
DefinitionId = definitionId ?? string.Empty;
|
||||
Count = count;
|
||||
}
|
||||
|
||||
public static byte[] Serialize(GameStateMessage message)
|
||||
{
|
||||
using var writer = new NetworkWriter();
|
||||
writer.Write((byte)message.Event);
|
||||
writer.Write(message.Elapsed);
|
||||
writer.Write(message.CurrentWave);
|
||||
writer.Write(message.PreviousWave);
|
||||
writer.Write(message.IsPaused);
|
||||
writer.Write(message.IsRunning);
|
||||
writer.Write(message.DefinitionId ?? string.Empty);
|
||||
writer.Write(message.Count);
|
||||
return writer.ToArray();
|
||||
}
|
||||
|
||||
public static GameStateMessage Deserialize(byte[] buffer)
|
||||
{
|
||||
using var reader = new NetworkReader(buffer);
|
||||
GameStateEvent evt = (GameStateEvent)reader.ReadByte();
|
||||
float elapsed = reader.ReadFloat();
|
||||
int currentWave = reader.ReadInt();
|
||||
int previousWave = reader.ReadInt();
|
||||
bool isPaused = reader.ReadBool();
|
||||
bool isRunning = reader.ReadBool();
|
||||
string definitionId = reader.ReadString();
|
||||
int count = reader.ReadInt();
|
||||
return new GameStateMessage(evt, elapsed, currentWave, previousWave, isPaused, isRunning, definitionId, count);
|
||||
}
|
||||
}
|
||||
|
||||
public readonly struct EnemySpawnMessage
|
||||
{
|
||||
public readonly string DefinitionId;
|
||||
public readonly Vector3 Position;
|
||||
public readonly Quaternion Rotation;
|
||||
public readonly int NetworkId;
|
||||
public readonly bool IsBoss;
|
||||
public readonly int WaveIndex;
|
||||
public readonly float Timestamp;
|
||||
|
||||
public EnemySpawnMessage(string definitionId, Vector3 position, Quaternion rotation, int networkId, bool isBoss, int waveIndex, float timestamp)
|
||||
{
|
||||
DefinitionId = definitionId ?? string.Empty;
|
||||
Position = position;
|
||||
Rotation = rotation;
|
||||
NetworkId = networkId;
|
||||
IsBoss = isBoss;
|
||||
WaveIndex = waveIndex;
|
||||
Timestamp = timestamp;
|
||||
}
|
||||
|
||||
public static byte[] Serialize(EnemySpawnMessage message)
|
||||
{
|
||||
using var writer = new NetworkWriter();
|
||||
writer.Write(message.DefinitionId ?? string.Empty);
|
||||
writer.Write(message.Position);
|
||||
writer.Write(message.Rotation);
|
||||
writer.Write(message.NetworkId);
|
||||
writer.Write(message.IsBoss);
|
||||
writer.Write(message.WaveIndex);
|
||||
writer.Write(message.Timestamp);
|
||||
return writer.ToArray();
|
||||
}
|
||||
|
||||
public static EnemySpawnMessage Deserialize(byte[] buffer)
|
||||
{
|
||||
using var reader = new NetworkReader(buffer);
|
||||
string definitionId = reader.ReadString();
|
||||
Vector3 position = reader.ReadVector3();
|
||||
Quaternion rotation = reader.ReadQuaternion();
|
||||
int networkId = reader.ReadInt();
|
||||
bool isBoss = reader.ReadBool();
|
||||
int waveIndex = reader.ReadInt();
|
||||
float timestamp = reader.ReadFloat();
|
||||
return new EnemySpawnMessage(definitionId, position, rotation, networkId, isBoss, waveIndex, timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
public readonly struct EnemyDespawnMessage
|
||||
{
|
||||
public readonly int NetworkId;
|
||||
|
||||
public EnemyDespawnMessage(int networkId)
|
||||
{
|
||||
NetworkId = networkId;
|
||||
}
|
||||
|
||||
public static byte[] Serialize(EnemyDespawnMessage message)
|
||||
{
|
||||
using var writer = new NetworkWriter();
|
||||
writer.Write(message.NetworkId);
|
||||
return writer.ToArray();
|
||||
}
|
||||
|
||||
public static EnemyDespawnMessage Deserialize(byte[] buffer)
|
||||
{
|
||||
using var reader = new NetworkReader(buffer);
|
||||
int id = reader.ReadInt();
|
||||
return new EnemyDespawnMessage(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user