internal void AccessoryTransferredHandler(int SourceSlotIndex, int DestinationSlotIndex, int CoordinateIndex) { if (!MakerAPI.InsideAndLoaded) { return; } Logger.Log(DebugLogLevel, $"[AccessoryTransferredHandler][{ChaControl.chaFile.parameter?.fullname}] Fired!!"); CheckOutfitTriggerInfoCount(CoordinateIndex); if (!TriggerEnabled) { Logger.Log(DebugLogLevel, $"[AccessoryTransferredHandler][{ChaControl.chaFile.parameter?.fullname}] TriggerEnabled false"); return; } OutfitTriggerInfo Todo = CharaTriggerInfo.ElementAtOrDefault(CoordinateIndex); CopySlotTriggerInfo(Todo.Parts[SourceSlotIndex], Todo.Parts[DestinationSlotIndex]); Todo.Parts[DestinationSlotIndex].Slot = DestinationSlotIndex; }
internal void SyncOutfitTriggerInfo(int CoordinateIndex) { if (!TriggerEnabled) { Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] TriggerEnabled false"); return; } List <ChaFileAccessory.PartsInfo> PartsInfo = MoreAccessories_Support.GetCoordinatePartsInfo(ChaControl, CoordinateIndex); OutfitTriggerInfo OutfitTriggerInfo = CharaTriggerInfo.ElementAtOrDefault(CoordinateIndex); Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}]Process OutfitTriggerInfo for Coordinate {CoordinateIndex}"); List <AccTriggerInfo> TriggerParts = OutfitTriggerInfo.Parts; int PartsInfoCount = PartsInfo.Count(); int TriggerPartsCount = TriggerParts.Count(); Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}][{CoordinateIndex}] Count {TriggerPartsCount} : {PartsInfoCount}"); if (TriggerPartsCount > PartsInfoCount) { CharaTriggerInfo[CoordinateIndex].Parts = CharaTriggerInfo[CoordinateIndex].Parts.Take(PartsInfoCount).ToList(); Logger.LogWarning($"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] AccTriggerInfo for Coordinate {CoordinateIndex} Slot {TriggerPartsCount} -> {PartsInfoCount}"); } else if (TriggerPartsCount < PartsInfoCount) { for (int j = TriggerPartsCount; j < PartsInfoCount; j++) { CharaTriggerInfo[CoordinateIndex].Parts.Add(new AccTriggerInfo(j)); } Logger.Log(DebugLogLevel, $"[SyncOutfitTriggerInfo][{ChaControl.chaFile.parameter?.fullname}] AccTriggerInfo for Coordinate {CoordinateIndex} Slot {TriggerPartsCount} -> {PartsInfoCount - 1}"); } for (int i = 0; i < PartsInfoCount; i++) { AccTriggerInfo TriggerPart = TriggerParts.ElementAtOrDefault(i); if ((TriggerPart.Kind != -1) && (PartsInfo[i].type == 120)) { CharaTriggerInfo[CoordinateIndex].Parts[i] = new AccTriggerInfo(i); Logger.LogMessage($"AccTriggerInfo for Coordinate {CoordinateIndex} Slot {i + 1:00} has been reset"); } else { if (TriggerPart.Kind == -1) { CharaTriggerInfo[CoordinateIndex].Parts[i] = new AccTriggerInfo(i); } else if (MathfEx.RangeEqualOn(0, TriggerPart.Kind, 7)) { CharaTriggerInfo[CoordinateIndex].Parts[i].Group = ""; } else if (TriggerPart.Kind == 9) { CharaTriggerInfo[CoordinateIndex].Parts[i].Group = PartsInfo[i].parentKey; } else if (TriggerPart.Kind > 9) { CharaTriggerInfo[CoordinateIndex].Parts[i].Group = "custom_" + (TriggerPart.Kind - 9).ToString(); } } } }
internal void AccSlotChangedHandler(int SlotIndex, bool Skip = false) { Logger.Log(DebugLogLevel, $"[AccSlotChangedHandler][{ChaControl.chaFile.parameter?.fullname}] Fired!!"); if (!MakerAPI.InsideAndLoaded) { return; } if (!TriggerEnabled) { Logger.Log(DebugLogLevel, $"[AccSlotChangedHandler][{ChaControl.chaFile.parameter?.fullname}] TriggerEnabled false"); return; } CurOutfitTriggerInfo = CharaTriggerInfo.ElementAtOrDefault(CurrentCoordinateIndex); if (CurOutfitTriggerInfo == null) // basically won't happen { Logger.Log(DebugLogLevel, $"[AccSlotChangedHandler][{ChaControl.chaFile.parameter?.fullname}] CurOutfitTriggerInfo is null"); return; } CheckOutfitTriggerInfoCount(CurrentCoordinateIndex); Logger.Log(DebugLogLevel, $"[AccSlotChangedHandler][{ChaControl.chaFile.parameter?.fullname}][SlotIndex]: {SlotIndex}"); List <ChaFileAccessory.PartsInfo> PartsInfo = CharaAccInfo; ChaFileAccessory.PartsInfo PartInfo = PartsInfo.ElementAtOrDefault(SlotIndex); if ((PartInfo == null) || (CurOutfitTriggerInfo.Parts.ElementAtOrDefault(SlotIndex) == null)) { Logger.LogError($"[AccSlotChangedHandler][{ChaControl.chaFile.parameter?.fullname}][PartInfo: {PartInfo}][CurSlotTriggerInfo: {CurSlotTriggerInfo}]"); return; } CopySlotTriggerInfo(CurOutfitTriggerInfo.Parts[SlotIndex], CurSlotTriggerInfo); if (!Skip) { if ((CurSlotTriggerInfo.Kind > -1) && (PartInfo.type == 120)) { CurOutfitTriggerInfo.Parts[SlotIndex] = new AccTriggerInfo(SlotIndex); Logger.LogMessage($"AccTriggerInfo for Coordinate {CurrentCoordinateIndex} Slot {CurSlotTriggerInfo.Slot + 1:00} has been reset"); } } int ddASSListVal = CurSlotTriggerInfo.Kind < 10 ? ddASSListVals.IndexOf(CurSlotTriggerInfo.Kind) : CurSlotTriggerInfo.Kind; GameObject.Find("ddASSList").GetComponentInChildren <TMP_Dropdown>().value = ddASSListVal; GameObject.Find("tglASS0").GetComponentInChildren <Toggle>().isOn = CurSlotTriggerInfo.State[0]; GameObject.Find("tglASS1").GetComponentInChildren <Toggle>().isOn = CurSlotTriggerInfo.State[1]; GameObject.Find("tglASS2").GetComponentInChildren <Toggle>().isOn = CurSlotTriggerInfo.State[2]; GameObject.Find("tglASS3").GetComponentInChildren <Toggle>().isOn = CurSlotTriggerInfo.State[3]; int refIndex = ddASSListVal < 10 ? ddASSListVal : 9; GameObject.Find("tglASS0").GetComponentInChildren <TextMeshProUGUI>().alpha = clothesStates[refIndex][0] ? 1f : 0.2f; GameObject.Find("tglASS1").GetComponentInChildren <TextMeshProUGUI>().alpha = clothesStates[refIndex][1] ? 1f : 0.2f; GameObject.Find("tglASS2").GetComponentInChildren <TextMeshProUGUI>().alpha = clothesStates[refIndex][2] ? 1f : 0.2f; GameObject.Find("tglASS3").GetComponentInChildren <TextMeshProUGUI>().alpha = clothesStates[refIndex][3] ? 1f : 0.2f; foreach (string group in VirtualGroupNames) { Object.Destroy(GameObject.Find(group)); } VirtualGroupNames.Clear(); FillVirtualGroupStates(); AnchorOffsetMinY = (int)GameObject.Find("tglASS0").GetComponent <RectTransform>().offsetMin.y - 80; List <string> names = VirtualGroupStates.OrderBy(x => x.Key).Select(x => x.Key).ToList <string>(); foreach (string group in names) { CreateMakerVirtualGroupToggle(group); } GameObject accw = GameObject.Find("04_AccessoryTop/AcsMoveWindow01"); RectTransform windRt = accw.transform.Find("BasePanel/imgWindowBack").GetComponent <RectTransform>(); windRt.offsetMin = new Vector2(0, ContainerOffsetMinY - 40 * names.Count()); Logger.Log(DebugLogLevel, $"[AccSlotChangedHandler][{ChaControl.chaFile.parameter?.fullname}][Slot: {CurSlotTriggerInfo.Slot}][Kind: {CurSlotTriggerInfo.Kind}][State: {CurSlotTriggerInfo.State[0]}|{CurSlotTriggerInfo.State[1]}|{CurSlotTriggerInfo.State[2]}|{CurSlotTriggerInfo.State[3]}]"); ChaControl.StartCoroutine(CoroutineSyncAllAccToggle(CoroutineSlotChangeDelay.Value)); }