Exemple #1
0
        static void Postfix(Rect inRect, Outfit ___selOutfitInt)
        {
            var selectedOutfit = ___selOutfitInt as ExtendedOutfit;

            DrawCloneButton(selectedOutfit);

            if (selectedOutfit == null)
            {
                return;
            }

            Rect canvas = new Rect(
                marginLeft,
                Dialog_ManageOutfits.TopAreaHeight + marginTop,
                inRect.xMax - marginLeft - marginRight,
                inRect.yMax - Dialog_ManageOutfits.TopAreaHeight - marginTop - marginBottom
                );

            GUI.BeginGroup(canvas);
            Vector2 cur = Vector2.zero;

            if (MP.IsInMultiplayer)
            {
                MP.WatchBegin();

                ExtendedOutfitProxy.Watch(ref selectedOutfit);
            }
            DrawDeadmanToogle(selectedOutfit, ref cur, canvas);
            DrawAutoWorkPrioritiesToggle(selectedOutfit, ref cur, canvas);
            DrawAutoTempToggle(selectedOutfit, ref cur, canvas);
            if (!selectedOutfit.AutoTemp)
            {
                DrawTemperatureStats(selectedOutfit, ref cur, canvas);
            }
            else
            {
                DrawAutoTempOffsetInput(selectedOutfit, ref cur, canvas);
            }
            cur.y += marginVertical;
            DrawApparelStats(selectedOutfit, cur, canvas);

            if (MP.IsInMultiplayer)
            {
                MP.WatchEnd();
            }
            else if (GUI.changed)
            {
                var affected = Find.CurrentMap.mapPawns.FreeColonists
                               .Where(i => i.outfits.CurrentOutfit == selectedOutfit);
                foreach (var pawn in affected)
                {
                    pawn.mindState?.Notify_OutfitChanged();
                }
            }

            GUI.EndGroup();

            GUI.color   = Color.white;
            Text.Anchor = TextAnchor.UpperLeft;
        }
Exemple #2
0
        static void WatchPrefix(ITab_Pawn_Visitor __instance)
        {
            if (MP.IsInMultiplayer)
            {
                MP.WatchBegin();

                Pawn pawn = __instance.SelPawn;

                object comp = GetCompMethod.Invoke(pawn, null);

                _chat.Watch(comp);
                _recruit.Watch(comp);
                _arrived.Watch(comp);
                _sentAway.Watch(comp);

                _areaGuest.Watch(comp);
                _areaShop.Watch(comp);

                object worldComp = GetMapCompMethod.Invoke(null, new object[] { pawn.Map });

                _defMode.Watch(worldComp);
                _defAreaGuest.Watch(worldComp);
                _defAreaShop.Watch(worldComp);
            }
        }
Exemple #3
0
        private static void PreFillTab(ITab __instance, ref object[] __state)
        {
            if (MP.IsInMultiplayer)
            {
                __state = new object[2];

                var soul = pawnSoulITabSoulToShowGetter.Invoke(__instance, Array.Empty <object>());

                if (soul != null)
                {
                    MP.WatchBegin();
                    var prayerTracker = compSoulPrayerTrackerField(soul);
                    prayerTrackerAllowPrayingSync.Watch(prayerTracker);
                    prayerTrackerShowPrayerSync.Watch(prayerTracker);
                    __state[0] = true;


                    var favourTracker = compSoulFavourTrackerField(soul);
                    var favoursList   = soulFavourTrackerFavoursField(favourTracker);

                    var favorValues = new float[favoursList.Count];
                    for (var i = 0; i < favoursList.Count; i++)
                    {
                        favorValues[i] = favourProgressFavourValueField(favoursList[i]);
                    }

                    __state[1] = favorValues;
                }
                else
                {
                    __state[0] = false;
                }
            }
        }
 private static void PreSyncBombType(ThingComp __instance)
 {
     if (MP.IsInMultiplayer)
     {
         MP.WatchBegin();
         bombTypeSync.Watch(__instance);
     }
 }
 // Used to watch for changes to the temple name
 private static void RenameTemplePrefix(Building ___Altar)
 {
     if (MP.enabled)
     {
         MP.WatchBegin();
         altarNameSyncField.Watch(___Altar);
     }
 }
 private static void CommonSensePatchPrefix(Thing thing)
 {
     if (MP.IsInMultiplayer)
     {
         MP.WatchBegin();
         var comp = getCompUnlockerCheckerMethod.Invoke(null, new object[] { thing, false, false });
         shouldUnloadSyncField.Watch(comp);
     }
 }
Exemple #7
0
 // Token: 0x0600008B RID: 139 RVA: 0x0000764A File Offset: 0x0000584A
 private static void WatchBegin()
 {
     if (!MP.IsInMultiplayer)
     {
         return;
     }
     MP.WatchBegin();
     MultiplayerSupport.DRSettingsFields.Watch(null);
 }
        static void HandleInteractionPrefix()
        {
            if (MP.IsInMultiplayer)
            {
                MP.WatchBegin();

                watching = true;
            }
        }
Exemple #9
0
        static void DrawLockPrefix(object __instance, object handler)
        {
            if (MP.IsInMultiplayer)
            {
                MP.WatchBegin();

                autoLockOnManualSwapSyncField.Watch(handler);
            }
        }
Exemple #10
0
        private static void PreDoCell(Pawn pawn)
        {
            if (!MP.IsInMultiplayer)
            {
                return;
            }

            MP.WatchBegin();
            syncMedCare.Watch(pawn);
        }
        private static void PreDoWindowContents(Window __instance)
        {
            if (!MP.IsInMultiplayer)
            {
                return;
            }

            MP.WatchBegin();
            newFacepaintComboSync.Watch(__instance);
            coloursTiedSync.Watch();
        }
Exemple #12
0
        private static void PreDrawOptions()
        {
            if (!MP.IsInMultiplayer)
            {
                return;
            }

            MP.WatchBegin();
            var target = medicalCareField();

            diseaseMarginField.Watch(target);
            minorWoundsThresholdField.Watch(target);
            diseaseThresholdField.Watch(target);
        }
        private static void PrePsykerDoWindowContents(Window __instance, ref object[] __state)
        {
            if (MP.IsInMultiplayer)
            {
                var comp = psykerWindowCompField.GetValue(__instance);
                // SyncField
                MP.WatchBegin();
                compPsykerXpSyncField.Watch(comp);

                // Copy all the currently learned minor disciplines, we'll check later if there were any changes
                var list = (IList)compPsykerMinorDisciplinesField.GetValue(comp);
                __state = new object[list.Count];
                list.CopyTo(__state, 0);
            }
        }
Exemple #14
0
        private static void PreDoHeader()
        {
            if (!MP.IsInMultiplayer)
            {
                return;
            }

            MP.WatchBegin();
            foreach (var syncField in syncDefaultCare)
            {
                syncField.Watch();
            }
            foreach (var pawn in mainTabGetter().table.PawnsListForReading)
            {
                syncMedCare.Watch(pawn);
            }
        }
        private static void PreDoCell(Pawn target)
        {
            if (!MP.IsInMultiplayer)
            {
                return;
            }

            MP.WatchBegin();
            var comp = target.comps.FirstOrDefault(c => c.GetType() == compHandlerSettingsType);

            if (comp == null)
            {
                return;
            }
            modeField.Watch(comp);
            levelField.Watch(comp);
        }
Exemple #16
0
        // Called before the tab is drawn, we set our field watches in here
        // On top of that, we set our ThingFilterOwner like the MP
        // https://github.com/rwmt/Multiplayer/blob/7aac8b54727d8626ec39429b97225fc88c807ab8/Source/Client/Sync/SyncHandlers.cs#L975
        private static void FillTabPrefix(ref object[] __state)
        {
            if (MP.IsInMultiplayer)
            {
                // ITab_Register.Register points to ITab.SelThing, which points to Find.Selector.SingleSelectedThing
                var controller = restaurantControllerField.GetValue(Find.Selector.SingleSelectedThing);
                var timetable  = controllerTimetableField.GetValue(controller);
                __state = new object[] { timetable, ((List <bool>)timetableTimesField.GetValue(timetable)).ToArray() };

                MP.WatchBegin();
                restaurantController = controller;

                foreach (var field in controllerFieldsToSync)
                {
                    field.Watch(controller);
                }
            }
        }
        private static void PreDoHeader(PawnTable table)
        {
            if (!MP.IsInMultiplayer)
            {
                return;
            }

            MP.WatchBegin();
            foreach (var pawn in table.PawnsListForReading)
            {
                var comp = pawn.comps.FirstOrDefault(c => c.GetType() == compHandlerSettingsType);
                if (comp == null)
                {
                    continue;
                }
                modeField.Watch(comp);
                levelField.Watch(comp);
            }
        }
Exemple #18
0
 internal static void WatchBegin() => MP.WatchBegin();