private GameEntity RollBackEntityBase(GameContext context, GameEntity localEntity, GameEntity serverEntity) { if (localEntity == null) { localEntity = context.CreateEntity(); } GameObject obj = null; if (localEntity.hasView) { obj = localEntity.view.gameObject; } localEntity.RemoveAllComponents(); serverBuffer.Clear(); PackEntityUtility.Pack(serverEntity, serverBuffer); DoCover(serverBuffer, localEntity); if (localEntity.hasId) { localEntity.RemoveId(); } if (obj != null) { localEntity.AddView(obj); } return(localEntity); }
public void Initialize() { var e = _context.tickEntity; e.isSync = true; PackEntityUtility.Pack(e, _server.CreatedEntities); e.isWasSynced = true; _server.CreatedEntitiesCount++; _context.SetStartTime(0, DateTime.Now); _context.SetLastTick(0); }
protected override void Execute(List <GameEntity> entities) { if (_server.State != ServerState.Working) { return; } foreach (var e in entities) { PackEntityUtility.Pack(e, _server.CreatedEntities); e.isWasSynced = true; _server.CreatedEntitiesCount++; } }
protected override void Execute(List <GameEntity> entities) { Logger.I.Log(this, "Creating world snapshot."); var e = _game.CreateEntity(); e.AddWorldState(0, _buffer); e.isDestroyed = true; _buffer.Clear(); _syncGroup.GetEntities(_syncBuffer); foreach (var entity in _syncBuffer) { if (!entity.isDestroyed) { e.worldState.EntityCount++; PackEntityUtility.Pack(entity, _buffer); } } }
public static ClientWorldState MakeState(GameContext game, List <GameEntity> syncBuffer) { var buffer = new BitBuffer(512); ushort entityCount = 0; var syncGroup = game.GetGroup(GameMatcher.Sync); syncGroup.GetEntities(syncBuffer); foreach (var entity in syncBuffer) { if (!entity.isDestroyed) { entityCount++; PackEntityUtility.Pack(entity, buffer); } } var worldState = new ClientWorldState { EntityCount = entityCount, Buffer = buffer }; return(worldState); }