public SharedWorldSyncActions ToActions(ISharedWorldFrame baseline) { var realBaseline = baseline ?? new SharedWorldFrame(Enumerable.Empty<ISharedEntity>()); return new SharedWorldSyncActions { AddActions = _entities.Values.Where(entity => !baseline.Entities.ContainsKey(entity.Id)).Select(entity => new SharedWorldSyncActionAddEntity { NewEntityId = entity.Id, NewEntityTypeId = entity.TypeId }).ToArray(), MoveActions = _entities.Values.Where(entity => HasMovedFromBaseline(entity, baseline)).Select(entity => new SharedWorldSyncActionMoveEntity { EntityId = entity.Id, Pos = entity.Position }).ToArray() }; }
private bool HasMovedFromBaseline(ISharedEntity entity, ISharedWorldFrame baseline) { ISharedEntity baselineEntity; return baseline.Entities.TryGetValue(entity.Id, out baselineEntity) && entity.Position != baselineEntity.Position; }