private void RenderRoomBehaviorButtons() { roomBehaviorItems = new List <GameObject>(); UnityEngine.Object buttonPrefab = Resources.Load("UI/MenuLeft/ConstructionMenu/Button"); Transform contentTransform = this.transform.FindChild("Scroll View").FindChild("Viewport").FindChild("Content"); BuildModeController buildModeController = WorldController.Instance.buildModeController; // For each furniture prototype in our world, create one instance // of the button to be clicked! foreach (string roomBehaviorKey in PrototypeManager.RoomBehavior.Keys) { if (PrototypeManager.RoomBehavior.Get(roomBehaviorKey).HasTypeTag("Non-buildable") && showAllFurniture == false) { continue; } GameObject gameObject = (GameObject)Instantiate(buttonPrefab); gameObject.transform.SetParent(contentTransform); roomBehaviorItems.Add(gameObject); RoomBehavior proto = PrototypeManager.RoomBehavior.Get(roomBehaviorKey); string objectId = roomBehaviorKey; gameObject.name = "Button - Designate " + objectId; gameObject.transform.GetComponentInChildren <TextLocalizer>().formatValues = new string[] { LocalizationTable.GetLocalization(proto.LocalizationCode) }; Button button = gameObject.GetComponent <Button>(); button.onClick.AddListener(delegate { buildModeController.SetMode_DesignateRoomBehavior(objectId); menuLeft.CloseMenu(); }); // http://stackoverflow.com/questions/1757112/anonymous-c-sharp-delegate-within-a-loop string roomBehavior = roomBehaviorKey; LocalizationTable.CBLocalizationFilesChanged += delegate { gameObject.transform.GetComponentInChildren <TextLocalizer>().formatValues = new string[] { LocalizationTable.GetLocalization(PrototypeManager.RoomBehavior.Get(roomBehavior).LocalizationCode) }; }; Image image = gameObject.transform.GetChild(0).GetComponentsInChildren <Image>().First(); image.sprite = SpriteManager.GetSprite("RoomBehavior", roomBehaviorKey); } }