Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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;
            }
        }