public static void WriteContext(SyncHandler handler, ByteWriter data) { if (handler.context == SyncContext.None) { return; } if (handler.context.HasFlag(SyncContext.CurrentMap)) { data.MpContext().map = Find.CurrentMap; } if (handler.context.HasFlag(SyncContext.MapMouseCell)) { data.MpContext().map = Find.CurrentMap; SyncSerialization.WriteSync(data, UI.MouseCell()); } if (handler.context.HasFlag(SyncContext.MapSelected)) { SyncSerialization.WriteSync(data, Find.Selector.selected.Cast <ISelectable>().ToList()); } if (handler.context.HasFlag(SyncContext.WorldSelected)) { SyncSerialization.WriteSync(data, Find.WorldSelector.selected.Cast <ISelectable>().ToList()); } if (handler.context.HasFlag(SyncContext.QueueOrder_Down)) { data.WriteBool(KeyBindingDefOf.QueueOrder.IsDownEvent); } }
public static void HandleCmd(ByteReader data) { int syncId = data.ReadInt32(); SyncHandler handler = handlers[syncId]; List <object> prevSelected = Find.Selector.selected; List <WorldObject> prevWorldSelected = Find.WorldSelector.selected; bool shouldQueue = false; if (handler.context != SyncContext.None) { if (handler.context.HasFlag(SyncContext.MapMouseCell)) { IntVec3 mouseCell = ReadSync <IntVec3>(data); MouseCellPatch.result = mouseCell; } if (handler.context.HasFlag(SyncContext.MapSelected)) { List <ISelectable> selected = ReadSync <List <ISelectable> >(data); Find.Selector.selected = selected.Cast <object>().NotNull().ToList(); } if (handler.context.HasFlag(SyncContext.WorldSelected)) { List <ISelectable> selected = ReadSync <List <ISelectable> >(data); Find.WorldSelector.selected = selected.Cast <WorldObject>().NotNull().ToList(); } if (handler.context.HasFlag(SyncContext.QueueOrder_Down)) { shouldQueue = data.ReadBool(); } } KeyIsDownPatch.shouldQueue = shouldQueue; try { handler.Handle(data); } finally { MouseCellPatch.result = null; KeyIsDownPatch.shouldQueue = null; Find.Selector.selected = prevSelected; Find.WorldSelector.selected = prevWorldSelected; } }