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); }); }
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 static void Reset() { var empty = new ClearedStages(); empty.Write(); }