public void PerformClearTask() { var clearedStages = ClearedStages.Load(); if (!clearedStages.stageIndices.Contains(stageIndex)) { clearedStages.stageIndices.Add(stageIndex); clearedStages.Write(); } SoundWareHouse.Instance.seGameClear.GetComponent <AudioSource>().Play(); var stageClearTextObject = Instantiate(Resources.Load <GameObject>(ResourceNames.stageClearText)); stageClearTextObject.transform.SetParent(canvas.transform, false); var stageClearTextRectTransform = stageClearTextObject.GetComponent <RectTransform>(); var textHeight = stageController.innerFrameSize.y * 0.4f; stageClearTextRectTransform.sizeDelta = new Vector2(textHeight * 2f, textHeight); var stageClearText = stageClearTextObject.GetComponent <Text>(); var stageClearTextColor = stageClearText.color; stageClearTextColor.a = 0; stageClearText.color = stageClearTextColor; stageClearText.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 1f, (animator) => { var textMarginTop = stageController.innerFrameSize.y * 0.05f; var y = stageController.innerFrameSize.y / 2f - textHeight / 2f - textMarginTop; animator.Animate(UIAnimator.AnimationKey.PositionY, animationDuration, y, (a) => { var buttonHeight = stageController.innerFrameSize.y * 0.2f; var buttonWidth = buttonHeight * 2f; var buttonMarginTop = buttonHeight / 4f; var buttonPadding = buttonHeight * 0.1f; void MakeButton(string title, int buttonIndex, Func <Button, bool> onClick) { var buttonObject = Instantiate(Resources.Load <GameObject>(ResourceNames.button)); buttonObject.transform.SetParent(canvas.transform, false); buttonObject.GetComponentInChildren <Text>().text = title; var rectTransform = buttonObject.GetComponent <RectTransform>(); rectTransform.anchorMin = new Vector2(0.5f, 0.5f); rectTransform.anchorMax = new Vector2(0.5f, 0.5f); rectTransform.pivot = new Vector2(0.5f, 0.5f); rectTransform.anchoredPosition = new Vector2( 0f, y - (textHeight / 2f) - buttonMarginTop - (buttonHeight * buttonIndex) - (buttonPadding * buttonIndex) ); rectTransform.sizeDelta = new Vector2(buttonWidth, buttonHeight); var button = buttonObject.GetComponent <Button>(); button.onClick.AddListener(() => { onClick(button); }); var image = buttonObject.GetComponentInChildren <Image>(); var imageColor = image.color; imageColor.a = 0f; image.color = imageColor; var buttonText = button.GetComponentInChildren <Text>(); var textColor = buttonText.color; textColor.a = 0f; buttonText.color = textColor; buttonObject.GetComponent <UIAnimator>().Animate(UIAnimator.AnimationKey.Alpha, animationDuration, 1f, null); } var isExistNextStage = (stageIndex + 1) < StageManager.Stages.Length; var index = 0; if (isExistNextStage) { MakeButton("次のステージ", index, (button) => { ++stageIndex; Transition(ResourceNames.gameScene); return(true); }); ++index; } MakeButton("ステージ選択", index, (button) => { Transition(ResourceNames.stageSelectionScene); return(true); }); ++index; MakeButton("タイトルに戻る", index, (button) => { Transition(ResourceNames.titleScene); return(true); }); ++index; return(true); }); return(true); }); }
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); }); }