/** * <summary>Recalculates the element's size. * This should be called whenever a Menu's shape is changed.</summary> * <param name = "source">How the parent Menu is displayed (AdventureCreator, UnityUiPrefab, UnityUiInScene)</param> */ public override void RecalculateSize(MenuSource source) { if (Application.isPlaying) { if (linkedConversation != null) { numOptions = linkedConversation.GetCount(); if (fixedOption) { if (numOptions < optionToShow) { numSlots = 0; } else { numSlots = 1; labels = new string[numSlots]; labels[0] = linkedConversation.GetOptionName(optionToShow - 1); labels[0] = AddIndexNumber(labels[0], optionToShow); icons = new CursorIconBase[numSlots]; icons[0] = new CursorIconBase(); icons[0].Copy(linkedConversation.GetOptionIcon(optionToShow - 1)); chosens = new bool[numSlots]; chosens[0] = linkedConversation.OptionHasBeenChosen(optionToShow - 1); } } else { numSlots = numOptions; if (numSlots > maxSlots) { numSlots = maxSlots; } labels = new string[numSlots]; icons = new CursorIconBase[numSlots]; chosens = new bool[numSlots]; for (int i = 0; i < numSlots; i++) { labels[i] = linkedConversation.GetOptionName(i + offset); labels[i] = AddIndexNumber(labels[i], i + offset + 1); icons[i] = new CursorIconBase(); icons[i].Copy(linkedConversation.GetOptionIcon(i + offset)); chosens[i] = linkedConversation.OptionHasBeenChosen(i + offset); } if (markAlreadyChosen && source != MenuSource.AdventureCreator) { for (int i = 0; i < chosens.Length; i++) { bool chosen = chosens[i]; if (uiSlots.Length > i) { if (chosen) { uiSlots[i].SetColour(alreadyChosenFontColour); } else { uiSlots[i].RestoreColour(); } } } } LimitOffset(numOptions); } } else { numSlots = 0; } } else if (fixedOption) { numSlots = 1; offset = 0; labels = new string[numSlots]; icons = new CursorIconBase[numSlots]; chosens = new bool[numSlots]; } if (Application.isPlaying && uiSlots != null) { ClearSpriteCache(uiSlots); } if (!isVisible) { LimitUISlotVisibility(uiSlots, 0, uiHideStyle); } base.RecalculateSize(source); }