Beispiel #1
0
        static void HSceneEnd(HScene __instance, ChaControl[] ___chaFemales, ChaControl[] ___chaMales)
        {
            try
            {
#if DEBUG
                AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo("HScene End Event");
#endif
                foreach (ChaControl female in ___chaFemales)
                {
                    if (female == null)
                    {
                        continue;
                    }

                    AdditionalAccessoryControlsController aacController = female.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                    aacController.HandleVisibilityRules(hend: true);
                }
                foreach (ChaControl male in ___chaMales)
                {
                    if (male == null)
                    {
                        continue;
                    }

                    AdditionalAccessoryControlsController aacController = male.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                    aacController.HandleVisibilityRules(hend: true);
                }
            }
            catch (Exception e)
            {
                AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Visibility Updates Not Thrown. {e.Message} {e.StackTrace}");
            }
        }
Beispiel #2
0
        static void OnCoordSavePostfix(ChaFileCoordinate __instance)
        {
            try
            {
                ChaControl owner = null;
                foreach (KeyValuePair <int, ChaControl> pair in Character.Instance.dictEntryChara)
                {
                    if (pair.Value.nowCoordinate == __instance || pair.Value.chaFile.coordinate == __instance)
                    {
                        owner = pair.Value;
                        break;
                    }
                }

                if (owner == null)
                {
                    AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo($"Unidentified Coordinate being saved: {__instance?.coordinateName} - {__instance?.coordinateFileName}");
                    return;
                }

                // Find Controller
                AdditionalAccessoryControlsController aacController = owner.gameObject.GetComponent <AdditionalAccessoryControlsController>();

                aacController.RestoreCharacterAccessoriesForSave(__instance);
            }
            catch (Exception e)
            {
                AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Character Accessories may not be restored after this save. {e.Message} {e.StackTrace}");
            }
        }
Beispiel #3
0
        private void ClearAndResyncSlot()
        {
            if (!MakerAPI.InsideAndLoaded)
            {
                return;
            }

            AdditionalAccessoryControlsController aacController = MakerAPI.GetCharacterControl().gameObject.GetComponent <AdditionalAccessoryControlsController>();

            aacController.ClearAndResyncSlot(AccessoriesApi.SelectedMakerAccSlot);
        }
Beispiel #4
0
 public static void ChangingClothes(ChaControl __instance, int kind)
 {
     try
     {
         AdditionalAccessoryControlsController aacController = __instance.gameObject.GetComponent <AdditionalAccessoryControlsController>();
         aacController.HandleVisibilityRules(clothes: true);
     }
     catch (Exception e)
     {
         AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Visibility Updates Not Thrown. {e.Message} {e.StackTrace}");
     }
 }
Beispiel #5
0
 public static void ShowAccessory(ChaControl __instance, int slotNo)
 {
     try
     {
         AdditionalAccessoryControlsController aacController = __instance.gameObject.GetComponent <AdditionalAccessoryControlsController>();
         aacController.HandleVisibilityRules(accessory: true, sourceSlot: slotNo);
     }
     catch (Exception e)
     {
         AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Visibility Updates Not Thrown. {e.Message} {e.StackTrace}");
     }
 }
Beispiel #6
0
 static void beforeCoordinateCapture()
 {
     try
     {
         ChaControl chaCtrl = Singleton <CustomBase> .Instance.chaCtrl;
         AdditionalAccessoryControlsController aacController = chaCtrl.gameObject.GetComponent <AdditionalAccessoryControlsController>();
         aacController.HideCharacterAccessories();
     }
     catch (Exception e)
     {
         AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Character accessories may not have been hidden prior to save. {e.Message} {e.StackTrace}");
     }
 }
Beispiel #7
0
        private void ReloadCustomInterface(object sender, EventArgs eventArgs)
        {
            AdditionalAccessoryControlsController aacController = MakerAPI.GetCharacterControl().gameObject.GetComponent <AdditionalAccessoryControlsController>();
            int currentSlot = AccessoriesApi.SelectedMakerAccSlot;

            if (currentSlot != -1 && aacController != null)
            {
                advancedParentLabel.Text = $"Adv Parent: {aacController.SlotData[currentSlot].AdvancedParentShort}";
            }
            else
            {
                advancedParentLabel.Text = "Adv Parent: None";
            }
        }
Beispiel #8
0
        // Open/Close the Visibility Rules UI
        private void VisibilityRulesListener()
        {
            if (!MakerAPI.InsideAndLoaded)
            {
                return;
            }

            if (AdditionalAccessoryUI.Instance.enabled)
            {
                AdditionalAccessoryUI.Hide();
                return;
            }

            int currentSlot = AccessoriesApi.SelectedMakerAccSlot;

            if (currentSlot != -1)
            {
                AdditionalAccessoryControlsController aacController = MakerAPI.GetCharacterControl().gameObject.GetComponent <AdditionalAccessoryControlsController>();
                if (currentSlot >= aacController.SlotData.Length)
                {
#if DEBUG
                    Log.LogInfo("Invalid Slot (Beyond current length)");
#endif
                    AdditionalAccessoryUI.Hide();
                }
                else if (aacController.SlotData[currentSlot] != null && !aacController.SlotData[currentSlot].IsEmpty)
                {
#if DEBUG
                    Log.LogInfo($"Showing Rules for {MakerAPI.GetCharacterControl()?.chaFile?.parameter?.fullname}");
#endif
                    AdditionalAccessoryUI.Show(aacController.SlotData[currentSlot], MakerAPI.GetCharacterControl());
                }
                else
                {
#if DEBUG
                    Log.LogInfo("No Acc Slot Data and/or Empty");
#endif
                    AdditionalAccessoryUI.Hide();
                }
            }
            else
            {
#if DEBUG
                Log.LogInfo("No Slot Selected");
#endif
                AdditionalAccessoryUI.Hide();
            }
        }
Beispiel #9
0
        static void HSceneStartPost(HScene __instance, ChaControl[] ___chaFemales, ChaControl[] ___chaMales)
        {
            try
            {
                if (HStartInit)
                {
                    HStartInit = false;
                    foreach (ChaControl female in ___chaFemales)
                    {
                        if (female != null)
                        {
#if DEBUG
                            AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo($"Sending event for: {female?.fileParam?.fullname}");
#endif
                            AdditionalAccessoryControlsController aacController = female.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                            aacController.HandleVisibilityRules(hstart: true);
                        }
                    }
                    foreach (ChaControl male in ___chaMales)
                    {
                        if (male != null)
                        {
#if DEBUG
                            AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo($"Sending event for: {male?.fileParam?.fullname}");
#endif
                            AdditionalAccessoryControlsController aacController = male.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                            aacController.HandleVisibilityRules(hstart: true);
                        }
                    }
                }

                foreach (ChaControl control in dirtyChars)
                {
#if DEBUG
                    AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo($"Sending event for: {control?.fileParam?.fullname}");
#endif
                    AdditionalAccessoryControlsController aacController = control.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                    aacController.HandleVisibilityRules(hstart: true);
                }

                dirtyChars.Clear();
            }
            catch (Exception e)
            {
                AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Visibility Updates Not Thrown. {e.Message} {e.StackTrace}");
            }
        }
Beispiel #10
0
        private void AdvancedParent()
        {
            if (!MakerAPI.InsideAndLoaded)
            {
                return;
            }

            if (AdditionalAccessoryAdvancedParentUI.Instance.enabled)
            {
                AdditionalAccessoryAdvancedParentUI.Hide();
            }
            else
            {
                int currentSlot = AccessoriesApi.SelectedMakerAccSlot;
                AdditionalAccessoryControlsController aacController = MakerAPI.GetCharacterControl().gameObject.GetComponent <AdditionalAccessoryControlsController>();
                AdditionalAccessoryAdvancedParentUI.Show(aacController.SlotData[currentSlot], MakerAPI.GetCharacterControl());
            }
        }
        static void OnStudioCoordLoadPrefix(OCIChar __instance)
        {
            try
            {
#if DEBUG
                AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo($"Saving Coord Preload Snapshots");
#endif
                // Find Controller
                AdditionalAccessoryControlsController aacController = __instance.charInfo.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                if (aacController != null)
                {
                    aacController.MaterialEditorHelper.UpdateOnCoordinateLoadSnapshot();
                    aacController.DBHelper.UpdateOnCoordinateLoadSnapshot();
                }
            }
            catch (Exception e)
            {
                AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Character Accessories may not be restored after this load. {e.Message} {e.StackTrace}");
            }
        }
Beispiel #12
0
        static void OnCoordLoadPrefix(ChaFileCoordinate __instance)
        {
            try
            {
                ChaControl owner = null;
                if (Character.Instance == null || Character.Instance.dictEntryChara == null)
                {
                    return;
                }

                foreach (KeyValuePair <int, ChaControl> pair in Character.Instance.dictEntryChara)
                {
                    if (pair.Value.nowCoordinate == __instance || pair.Value.chaFile.coordinate == __instance)
                    {
                        owner = pair.Value;
                        break;
                    }
                }

                if (owner == null)
                {
                    return;
                }

#if DEBUG
                AdditionalAccessoryControlsPlugin.Instance.Log.LogInfo($"Saving Coord Preload Snapshots");
#endif

                // Find Controller
                AdditionalAccessoryControlsController aacController = owner.gameObject.GetComponent <AdditionalAccessoryControlsController>();
                if (aacController != null)
                {
                    aacController.MaterialEditorHelper.UpdateOnCoordinateLoadSnapshot();
                    aacController.DBHelper.UpdateOnCoordinateLoadSnapshot();
                }
            }
            catch (Exception e)
            {
                AdditionalAccessoryControlsPlugin.Instance.Log.LogWarning($"Exception in AACP Hook, Character Accessories may not be restored after this load. {e.Message} {e.StackTrace}");
            }
        }
Beispiel #13
0
        // Handle Maker Acc Slot Change
        private void UpdateUI(object sender, AccessorySlotEventArgs args)
        {
            if (args.SlotIndex >= 0)
            {
#if DEBUG
                Log.LogInfo($"Changing Displayed Slot to {args.SlotIndex}");
#endif
                AdditionalAccessoryControlsController aacController = MakerAPI.GetCharacterControl().gameObject.GetComponent <AdditionalAccessoryControlsController>();

                if (args.SlotIndex >= aacController.SlotData.Length)
                {
#if DEBUG
                    Log.LogInfo($"New Slot Added: {args.SlotIndex}");
#endif
                    aacController.AddOrUpdateSlot(args.SlotIndex, AdditionalAccessorySlotData.EmptySlot(args.SlotIndex));
                }

                if (aacController.SlotData[args.SlotIndex] != null && !aacController.SlotData[args.SlotIndex].IsEmpty)
                {
#if DEBUG
                    Log.LogInfo($"New Slot Set: {aacController.SlotData[args.SlotIndex]}");
#endif
                    AdditionalAccessoryUI.Change(aacController.SlotData[args.SlotIndex], aacController.ChaControl);
                    advancedParentLabel.Text = $"Adv Parent: {aacController.SlotData[args.SlotIndex].AdvancedParentShort}";
                    AdditionalAccessoryAdvancedParentUI.Change(aacController.SlotData[args.SlotIndex], aacController.ChaControl);
                }
                else
                {
#if DEBUG
                    Log.LogInfo("No Slot Data or Slot Empty.");
#endif
                    advancedParentLabel.Text = "Adv Parent: None";
                    AdditionalAccessoryUI.Hide();
                    AdditionalAccessoryAdvancedParentUI.Hide();
                }
            }
        }
        private string[] AvailableSlotsNums()
        {
            AdditionalAccessoryControlsController aacController = Controller.gameObject.GetComponent <AdditionalAccessoryControlsController>();

            return(aacController.SlotData.Where <AdditionalAccessorySlotData>(slot => !slot.IsEmpty && slot.SlotNumber != CurrentSlot.SlotNumber).Select <AdditionalAccessorySlotData, string>(slot => (slot.SlotNumber).ToString("00")).ToArray());
        }
Beispiel #15
0
 private void OnDestroy()
 {
     Controller  = null;
     CurrentSlot = null;
 }