private void Start() { canvasObject = GameObject.Find(ResourceNames.canvas); if (!SoundWareHouse.Instance.bgmNormal.isPlaying) { SoundWareHouse.Instance.StopAllBGM(); SoundWareHouse.Instance.bgmNormal.Play(); } var screenComponents = ScreenComponentsFactory.Make(); var headerWidth = screenComponents.headerWidth; var headerHeight = screenComponents.headerHeight; var headerMarginTop = screenComponents.headerMarginTop; var headerToolsMargin = screenComponents.headerToolsMargin; var innerFrameObject = screenComponents.innerFrameObject; var innerFrameSize = innerFrameObject.GetComponent <RectTransform>().sizeDelta; var titleImageObject = Instantiate(Resources.Load <GameObject>(ResourceNames.titleImage)); //Debug.Log(titleImageObject); titleImageObject.transform.SetParent(canvasObject.transform, false); var titleImageRectTransform = titleImageObject.GetComponent <RectTransform>(); var titleImageSize = new Vector2( headerHeight * 4f, headerHeight ); var titleImageAnchoredPosition = new Vector2( 0f, -(Screen.height / 2f) + (titleImageSize.y / 2f) ); titleImageRectTransform.anchoredPosition = titleImageAnchoredPosition; titleImageRectTransform.sizeDelta = Vector2.zero; var buttonPadding = innerFrameSize.y * 0.05f; var buttonMarginTop = innerFrameSize.y * 0.13f; var buttonMarginBottom = innerFrameSize.y * 0.13f; var buttonCount = 5; GameObject makeButton(string title, int index, Func <Button, bool> onClick) { var buttonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.titleButton)); buttonObject.transform.SetParent(innerFrameObject.transform, false); var rectTransform = buttonObject.GetComponent <RectTransform>(); var height = (innerFrameSize.y - buttonMarginTop - buttonMarginBottom - (buttonPadding * (buttonCount - 1))) / buttonCount; var width = height * 4f; rectTransform.anchoredPosition = new Vector2( 0f, -buttonMarginTop - (buttonPadding * index) - (height * index) ); rectTransform.sizeDelta = new Vector2( width, height ); var text = buttonObject.GetComponentInChildren <Text>(); text.text = title; var button = buttonObject.GetComponent <Button>(); button.onClick.AddListener(() => { onClick(button); }); return(buttonObject); } var curtainObject = Instantiate(Resources.Load <GameObject>(ResourceNames.curtainImage)); curtainObject.transform.SetParent(canvasObject.transform, false); var curtainManager = curtainObject.GetComponent <CurtainManager>(); var startButton = makeButton("ゲームスタート", 0, (button) => { Transition(ResourceNames.stageSelectionScene, curtainManager); return(true); }); var tutorialButton = makeButton("操作説明", 1, (button) => { curtainObject.transform.SetAsLastSibling(); curtainManager.Close(() => { TutorialViewFactory.Make(canvasObject, curtainManager); return(true); }); return(true); }); var resetButton = makeButton("初期化", 2, (button) => { var blackoutImageObject = Instantiate(Resources.Load <GameObject>(ResourceNames.blackoutImage)); blackoutImageObject.transform.SetParent(canvasObject.transform, false); var resetConfirmation = Instantiate(Resources.Load <GameObject>(ResourceNames.resetCofirmation)); resetConfirmation.transform.SetParent(canvasObject.transform, false); var resetConfirmationText = resetConfirmation.transform.Find(ResourceNames.titleText).gameObject; var resetConfirmationTextRectTransform = resetConfirmationText.GetComponent <RectTransform>(); resetConfirmationTextRectTransform.sizeDelta = new Vector2( Screen.width, Screen.height * 0.2f ); GameObject MakeButton(int sign, string name, Func <bool> onClick) { var buttonObject = resetConfirmation.transform.Find(name).gameObject; var rectTransform = buttonObject.GetComponent <RectTransform>(); var width = innerFrameSize.x * 0.3f; var height = width / 4f; rectTransform.anchoredPosition = new Vector2(sign * (width + Screen.width * 0.05f) / 2f, 0f); rectTransform.sizeDelta = new Vector2(width, height); var yesButton = buttonObject.GetComponent <Button>(); yesButton.onClick.AddListener(() => { onClick(); }); return(buttonObject); } MakeButton(-1, ResourceNames.yesButton, () => { ClearedStages.Reset(); resetConfirmation.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 0f, (animator) => { var resetAlert = Instantiate(Resources.Load <GameObject>(ResourceNames.resetAlert)); resetAlert.transform.SetParent(canvasObject.transform, false); var resetAlertText = resetAlert.transform.Find(ResourceNames.titleText).gameObject; resetAlertText.GetComponent <RectTransform>().sizeDelta = resetConfirmationTextRectTransform.sizeDelta; var closeButtonObject = resetAlert.transform.Find(ResourceNames.closeButton).gameObject; var closeButtonRectTransform = closeButtonObject.GetComponent <RectTransform>(); var closeButtonWidth = Screen.width * 0.3f; var closeButtonHeight = closeButtonWidth / 4f; closeButtonRectTransform.sizeDelta = new Vector2(closeButtonWidth, closeButtonHeight); var closeButton = closeButtonObject.GetComponent <Button>(); closeButton.onClick.AddListener(() => { blackoutImageObject.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 0f, (a2) => { Destroy(blackoutImageObject); return(true); }); resetAlert.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 0f, (a2) => { Destroy(resetAlert); return(true); }); }); resetAlert.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 1f, (a2) => { return(true); }); Destroy(resetConfirmation); return(true); }); return(true); }); MakeButton(1, ResourceNames.noButton, () => { blackoutImageObject.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 0f, (animator) => { Destroy(blackoutImageObject); return(true); }); resetConfirmation.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 0f, (animator) => { Destroy(resetConfirmation); return(true); }); return(true); }); resetConfirmation.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 1f, (animator) => { return(true); }); return(true); }); var configButton = makeButton("設定", 3, (button) => { curtainObject.transform.SetAsLastSibling(); curtainManager.Close(() => { var configView = ConfigViewFactory.Make(canvasObject); curtainObject.transform.SetAsLastSibling(); curtainManager.Open(() => { curtainObject.transform.SetAsFirstSibling(); var closeConfigButton = configView.transform.Find(ResourceNames.closeConfigButton).GetComponent <Button>(); closeConfigButton.onClick.AddListener(() => { curtainObject.transform.SetAsLastSibling(); curtainManager.Close(() => { Destroy(configView); curtainManager.Open(() => { curtainObject.transform.SetAsFirstSibling(); return(true); }); return(true); }); }); return(true); }); return(true); }); return(true); }); var endButton = makeButton("終了", 4, (button) => { UnityEngine.Application.Quit(); return(true); }); curtainManager.Open(() => { curtainObject.transform.SetAsFirstSibling(); titleImageRectTransform.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Size, animationDuration, titleImageSize * 2f, (animator) => { animator.Animate(UIAnimator.AnimationKey.Size, animationDuration, titleImageSize, (a2) => { animator.Animate(UIAnimator.AnimationKey.PositionY, animationDuration, -headerMarginTop, (a3) => { var buttons = new GameObject[] { startButton, tutorialButton, resetButton, configButton, endButton }; foreach (var button in buttons) { button.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 1f, (a4) => { return(true); }); } return(true); }); return(true); }); return(true); }); return(true); }, animationDuration); }
public void Build(StageData stageData, bool fieldOnly = false, bool curtain = true, bool withSnapShot = true, bool dropAnimation = true) { this.stageData = stageData; var canvas = GameObject.Find(ResourceNames.canvas); var innerFramePaddingBottom = 5f; if (gameDirector == null) { gameDirector = GameObject.Find(ResourceNames.gameDirector).GetComponent <GameDirector>(); } if (!fieldOnly) { var screenComponents = ScreenComponentsFactory.Make(); var fieldMarginBottom = screenComponents.fieldMarginBottom; var fieldWidth = screenComponents.fieldWidth; var fieldHeight = screenComponents.fieldHeight; var headerHeight = screenComponents.headerHeight; var headerToolsWidth = screenComponents.headerToolsWidth; var headerMarginTop = screenComponents.headerMarginTop; var headerMarginBottom = screenComponents.headerMarginBottom; var headerToolsMargin = screenComponents.headerToolsMargin; var decorationCirclesWidth = screenComponents.decorationCirclesWidth; var decorationCirclesHeight = screenComponents.decorationCirclesHeight; var menuButtonWidth = headerToolsWidth * 0.1f; var formulaImageWidth = headerToolsWidth - menuButtonWidth - decorationCirclesWidth; var formulaImageHeight = formulaImageWidth / 10f; var menuButtonHeight = menuButtonWidth; var menuButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.menuButton)); menuButtonObject.transform.SetParent(canvas.transform, false); var menuButtonRectTransform = menuButtonObject.GetComponent <RectTransform>(); menuButtonRectTransform.anchoredPosition = new Vector2( (Screen.width - fieldWidth) / 2, -headerMarginTop - (menuButtonHeight / 2f) - ((headerHeight - menuButtonHeight) / 2f) ); menuButtonRectTransform.sizeDelta = new Vector2(menuButtonWidth, menuButtonHeight); var menuButton = menuButtonObject.GetComponent <Button>(); menuButton.onClick.AddListener(() => { if (isAnimation || IsEmpty) { SoundWareHouse.Instance.seButtonError.Play(); return; } SoundWareHouse.Instance.seSpecialButton.Play(); gameDirector.ShowMenu(); }); var formulaImageObject = Instantiate(Resources.Load <GameObject>(ResourceNames.formulaImage)); formulaImageObject.transform.SetParent(canvas.transform, false); var formulaImageRectTransform = formulaImageObject.GetComponent <RectTransform>(); formulaImageRectTransform.anchoredPosition = new Vector2( menuButtonRectTransform.anchoredPosition.x + menuButtonRectTransform.sizeDelta.x + headerToolsMargin, -headerMarginTop - (formulaImageHeight / 2f) - ((headerHeight - formulaImageHeight) / 2f) ); formulaImageRectTransform.sizeDelta = new Vector2( formulaImageWidth, formulaImageHeight ); formulaText = formulaImageObject.GetComponentInChildren <FormulaText>(); var formulaTextRectTransform = formulaText.GetComponent <RectTransform>(); formulaTextRectTransform.anchoredPosition = new Vector2( formulaImageWidth * 0.01f, 0f ); formulaTextRectTransform.sizeDelta = formulaImageRectTransform.sizeDelta; formulaText.text = ""; var decorationCirclesObject = Instantiate(Resources.Load <GameObject>(ResourceNames.decorationCirclesImage)); decorationCirclesObject.transform.SetParent(canvas.transform, false); var decorationCirclesRectTransform = decorationCirclesObject.GetComponent <RectTransform>(); decorationCirclesRectTransform.anchoredPosition = new Vector2( formulaImageRectTransform.anchoredPosition.x + formulaImageRectTransform.sizeDelta.x + headerToolsMargin, -headerMarginTop - (decorationCirclesHeight / 2f) - ((headerHeight - decorationCirclesHeight) / 2f) ); decorationCirclesRectTransform.sizeDelta = new Vector2( decorationCirclesWidth, decorationCirclesHeight ); var outerFrameObject = Instantiate(Resources.Load <GameObject>(ResourceNames.gameFieldOuterFrameImage)); outerFrameObject.transform.SetParent(canvas.transform, false); var outerFrameRectTransform = outerFrameObject.GetComponent <RectTransform>(); outerFrameRectTransform.sizeDelta = new Vector2(fieldWidth, fieldHeight); outerFrameRectTransform.anchoredPosition = new Vector2(0f, fieldMarginBottom); innerFrameObject = Instantiate(Resources.Load <GameObject>(ResourceNames.gameFieldInnerFrameImage)); innerFrameObject.transform.SetParent(outerFrameObject.transform, false); var innerFrameRectTransform = innerFrameObject.GetComponent <RectTransform>(); innerFrameSize = new Vector2(fieldWidth - 30f, fieldHeight - 30f); innerFrameRectTransform.sizeDelta = innerFrameSize; //innerFrameRectTransform.sizeDelta = outerFrameRectTransform.sizeDelta * 0.97f; var numberOfButtonsInColumn = 5; buttonSize = (innerFrameRectTransform.sizeDelta.y - innerFramePaddingBottom - (padding * (numberOfButtonsInColumn - 1))) / numberOfButtonsInColumn; var maxToolCount = 4; var toolMargin = innerFrameSize.y * 0.05f; var maxButtonCount = 7; var rightSpace = (innerFrameSize.x - (buttonSize * maxButtonCount) - (padding * (maxButtonCount - 1))) / 2f; var toolSize = (innerFrameSize.y - (toolMargin * (maxToolCount + 2))) / maxToolCount; //Debug.Log(toolSize); var toolPositionX = (innerFrameSize.x / 2f) - ((rightSpace - toolSize) / 2f) - (toolSize / 2f); var helpButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.helpButton)); helpButtonObject.transform.SetParent(innerFrameObject.transform, false); var helpButtonRectTransform = helpButtonObject.GetComponent <RectTransform>(); helpButtonRectTransform.anchoredPosition = new Vector2(toolPositionX, -(innerFrameSize.y / 2f) + (toolSize / 2f) + toolMargin); helpButtonRectTransform.sizeDelta = new Vector2(toolSize, toolSize); var helpButton = helpButtonObject.GetComponent <Button>(); helpButton.onClick.AddListener(() => { if (isAnimation || IsEmpty) { SoundWareHouse.Instance.seButtonError.Play(); return; } SoundWareHouse.Instance.seSpecialButton.Play(); gameDirector.ShowClearConditionAlert(); }); var backButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.backButton)); backButtonObject.transform.SetParent(innerFrameObject.transform, false); var backButtonRectTransform = backButtonObject.GetComponent <RectTransform>(); backButtonRectTransform.anchoredPosition = new Vector2(toolPositionX, -(innerFrameSize.y / 2f) + (toolSize * 1.5f) + (toolMargin * 2f)); backButtonRectTransform.sizeDelta = new Vector2(toolSize, toolSize); var backButton = backButtonObject.GetComponent <Button>(); backButton.onClick.AddListener(() => { if (GoBackTurn()) { SoundWareHouse.Instance.seControlButton.GetComponent <AudioSource>().Play(); } else { SoundWareHouse.Instance.seButtonError.GetComponent <AudioSource>().Play(); } }); var forwardButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.forwardButton)); forwardButtonObject.transform.SetParent(innerFrameObject.transform, false); var forwardButtonRectTransform = forwardButtonObject.GetComponent <RectTransform>(); forwardButtonRectTransform.anchoredPosition = new Vector2(toolPositionX, -(innerFrameSize.y / 2f) + (toolSize * 2.5f) + (toolMargin * 3f)); forwardButtonRectTransform.sizeDelta = new Vector2(toolSize, toolSize); var forwardButton = forwardButtonObject.GetComponent <Button>(); forwardButton.onClick.AddListener(() => { if (GoForwardTurn()) { SoundWareHouse.Instance.seControlButton.GetComponent <AudioSource>().Play(); } else { SoundWareHouse.Instance.seButtonError.GetComponent <AudioSource>().Play(); } }); var movesTextObject = Instantiate(Resources.Load <GameObject>(ResourceNames.movesText)); movesTextObject.transform.SetParent(innerFrameObject.transform, false); var movesTextRectTransform = movesTextObject.GetComponent <RectTransform>(); movesTextRectTransform.anchoredPosition = new Vector2(toolPositionX, -(innerFrameSize.y / 2f) + (toolSize * 3.5f) + (toolMargin * 5f)); movesTextRectTransform.sizeDelta = new Vector2(toolSize, toolSize); movesText = movesTextObject.GetComponent <Text>(); movesText.text = "0/" + stageData.moves.ToString() + "手"; } void MakeButtons() { var termButtons = new List <TermButton>(); var maxX = 0; foreach (var operand in stageData.operands) { maxX = Math.Max(maxX, operand.position.x); var operandButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.operandButton)); var operandButton = operandButtonObject.GetComponent <OperandButton>(); operandButton.Operand = operand; operandButton.onClick.AddListener(() => { HandleOperandButton(operandButton); }); termButtons.Add(operandButton); } foreach (var oper in stageData.operators) { maxX = Math.Max(maxX, oper.position.x); var operatorButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.operatorButton)); var operatorButton = operatorButtonObject.GetComponent <OperatorButton>(); operatorButton.Operator = oper; operatorButton.onClick.AddListener(() => { HandleOperatorButton(operatorButton); }); termButtons.Add(operatorButton); } foreach (var equal in stageData.equals) { maxX = Math.Max(maxX, equal.position.x); var equalButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.equalButton)); var equalButton = equalButtonObject.GetComponent <EqualButton>(); equalButton.equal = equal; equalButton.onClick.AddListener(() => { HandleEqualButton(equalButton); }); termButtons.Add(equalButton); } termButtons.Sort((a, b) => { var pa = a.GetPosition(); var pb = b.GetPosition(); if (pa.y != pb.y) { return(pa.y - pb.y); } return(pa.x - pb.x); }); var index = 0; var paddingBetweenTermButtons = Screen.height * 0.05f; var notificationCount = 0; var buttonCount = termButtons.Count; if (this.maxX == int.MaxValue) { this.maxX = maxX; } else { maxX = this.maxX; } foreach (var termButton in termButtons) { termButton.transform.SetParent(innerFrameObject.transform, false); var rect = termButton.GetComponent <RectTransform>(); rect.sizeDelta = new Vector2(buttonSize, buttonSize); var buttonPosition = termButton.GetPosition(); var offsetX = innerFrameSize.x / 2f - ((float)(maxX + 1) / 2 * buttonSize) - ((float)maxX / 2 * padding); var x = buttonSize * buttonPosition.x + padding * buttonPosition.x + offsetX; var y = buttonSize * buttonPosition.y + padding * buttonPosition.y + innerFramePaddingBottom; if (dropAnimation) { rect.anchoredPosition = new Vector2( x, y + Screen.height + (paddingBetweenTermButtons * buttonPosition.y) + (paddingBetweenTermButtons / (maxX - buttonPosition.x + 1)) ); var delay = 0.1f; var animationDuration = 0.5f + (delay * index); termButton.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.PositionY, animationDuration, y, (animator) => { ++notificationCount; if (notificationCount == buttonCount) { gameDirector.ShowClearConditionAlert(); } SoundWareHouse.Instance.seButtonDropped.GetComponent <AudioSource>().Play(); return(true); }); } else { rect.anchoredPosition = new Vector2( x, y ); } ++index; } TermButtons = termButtons; if (withSnapShot) { SaveSnapShot(); } } if (curtain) { curtainObject.transform.SetAsLastSibling(); curtainObject.GetComponent <CurtainManager>().Open(() => { curtainObject.transform.SetAsFirstSibling(); MakeButtons(); return(true); }); } else { MakeButtons(); } }
private void Start() { canvasObject = GameObject.Find(ResourceNames.canvas); if (!SoundWareHouse.Instance.bgmNormal.isPlaying) { SoundWareHouse.Instance.StopAllBGM(); SoundWareHouse.Instance.bgmNormal.Play(); } var screenComponents = ScreenComponentsFactory.Make(); var headerWidth = screenComponents.headerWidth; var headerHeight = screenComponents.headerHeight; var headerMarginTop = screenComponents.headerMarginTop; var headerToolsMargin = screenComponents.headerToolsMargin; var innerFrameObject = screenComponents.innerFrameObject; var innerFrameSize = innerFrameObject.GetComponent <RectTransform>().sizeDelta; var stageSelectionTextObject = Instantiate(Resources.Load <GameObject>(ResourceNames.stageSelectionText)); stageSelectionTextObject.transform.SetParent(canvasObject.transform, false); var stageSelectionTextRectTransform = stageSelectionTextObject.GetComponent <RectTransform>(); var stageSelectionTextAnchoredPosition = new Vector2( 0f, -headerMarginTop ); var stageSelectionTextSize = new Vector2( headerWidth * 0.8f, headerHeight ); stageSelectionTextRectTransform.anchoredPosition = stageSelectionTextAnchoredPosition; stageSelectionTextRectTransform.sizeDelta = stageSelectionTextSize; var backToPreviousSceneButtonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.backToPreviousSceneButton)); backToPreviousSceneButtonObject.transform.SetParent(canvasObject.transform, false); var backToPreviousSceneButtonRectTransform = backToPreviousSceneButtonObject.GetComponent <RectTransform>(); backToPreviousSceneButtonRectTransform.anchoredPosition = new Vector2( (Screen.width - headerWidth) / 2, -headerMarginTop ); backToPreviousSceneButtonRectTransform.sizeDelta = new Vector2( headerHeight, headerHeight ); // screenComponents.outerFrameObject.transform.SetAsLastSibling(); // var curtainObject = Instantiate(Resources.Load <GameObject>(ResourceNames.curtainImage)); curtainObject.transform.SetParent(canvasObject.transform, false); var curtainManager = curtainObject.GetComponent <CurtainManager>(); var backToPreviousSceneButton = backToPreviousSceneButtonObject.GetComponent <Button>(); backToPreviousSceneButton.onClick.AddListener(() => { curtainManager.transform.SetAsLastSibling(); curtainManager.Close(() => { SceneManager.LoadScene(ResourceNames.titleScene); return(true); }); }); curtainManager.Open(() => { curtainObject.transform.SetAsFirstSibling(); var numberOfButtonsInRow = 10; var stageCount = StageManager.Stages.Length; //Debug.Log(stageCount); var numberOfButtonsInColumn = Mathf.Ceil((float)stageCount / (float)numberOfButtonsInRow); var expectedButtonWidth = (innerFrameSize.x / numberOfButtonsInRow); var expectedButtonHeight = (innerFrameSize.y / numberOfButtonsInColumn); var padding = innerFrameSize.y * 0.05f; var buttonSize = (expectedButtonWidth < expectedButtonHeight) ? (innerFrameSize.x - (padding * (numberOfButtonsInRow + 1))) / numberOfButtonsInRow : (innerFrameSize.y - (padding * (numberOfButtonsInColumn + 1))) / numberOfButtonsInColumn; var horizontalMargin = (expectedButtonWidth < expectedButtonHeight) ? padding : (innerFrameSize.x - (buttonSize * numberOfButtonsInRow) - (padding * (numberOfButtonsInRow - 1))) / 2f; var verticalMargin = (expectedButtonWidth < expectedButtonHeight) ? (innerFrameSize.y - (buttonSize * numberOfButtonsInColumn) - (padding * (numberOfButtonsInColumn - 1))) / 2f : padding; var baseButtonY = -verticalMargin; var clearedStages = ClearedStages.Load(); var buttonObjectHolders = new List <ButtonObjectHolder>(); for (var stageIndex = 0; stageIndex < stageCount; ++stageIndex) { var buttonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.stageButton)); buttonObjectHolders.Add(new ButtonObjectHolder( stageIndex, baseButtonY, buttonObject )); buttonObject.transform.SetParent(innerFrameObject.transform, false); var buttonRectTransform = buttonObject.GetComponent <RectTransform>(); var indexInRow = (stageIndex % numberOfButtonsInRow); buttonRectTransform.anchoredPosition = new Vector2( (buttonSize * indexInRow) + (padding * indexInRow) + horizontalMargin, baseButtonY + Screen.height ); buttonRectTransform.sizeDelta = new Vector2(buttonSize, buttonSize); var button = buttonObject.GetComponent <Button>(); button.onClick.AddListener(() => { curtainObject.transform.SetAsLastSibling(); HandleStageButton(button, curtainManager); }); var text = buttonObject.GetComponentInChildren <Text>(); text.text = (stageIndex + 1).ToString(); if (clearedStages.stageIndices.Contains(stageIndex)) { var image = buttonObject.GetComponentInChildren <Image>(); image.sprite = Resources.Load <Sprite>(ResourceNames.stageButtonCleared); } if ((stageIndex + 1) % (numberOfButtonsInRow) == 0) { baseButtonY -= (padding + buttonSize); } } buttonObjectHolders.Sort((h1, h2) => { var y1 = h1.stageIndex / numberOfButtonsInRow; var y2 = h2.stageIndex / numberOfButtonsInRow; if (y1 != y2) { return(y2 - y1); } var x1 = h1.stageIndex % numberOfButtonsInRow; var x2 = h2.stageIndex % numberOfButtonsInRow; return(x1 - x2); }); var index = 0; var delay = 0.05f; foreach (var buttonObjectHolder in buttonObjectHolders) { var buttonObject = buttonObjectHolder.buttonObject; var animationDuration = 0.5f + (delay * index); buttonObject.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.PositionY, animationDuration, buttonObjectHolder.y, (animator) => { SoundWareHouse.Instance.seButtonDropped.GetComponent <AudioSource>().Play(); return(true); }); ++index; } return(true); }); }