Exemplo n.º 1
0
    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);
        });
    }
Exemplo n.º 2
0
    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);
        });
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    public static void Reset()
    {
        var empty = new ClearedStages();

        empty.Write();
    }