Beispiel #1
0
 void StartWave()
 {
     m_hazardSpawned = 1;
     m_spawnTime     = spawnWait;
     m_playState     = ePlayState.PLAY_STATE_WAVE;
     SpawnHazard();
 }
Beispiel #2
0
    void LoseUserMode()
    {
        // 클리어 실패.
        FailedStage();

        eventer.onComplete = () =>
        {
            // 좋아요, 리스타트, 스테이지.
            btnLike.gameObject.SetActive(true);
            btnRestart.gameObject.SetActive(true);
            btnBackStage.gameObject.SetActive(true);
        };

        // 엔드 오브젝트
        goEnd.SetActive(true);
        animEnd.Play("UIstageEndPopupLose");

        if (YellowBean.SoundManager.Instance != null)
        {
            YellowBean.SoundManager.Instance.bgm.enabled = false;
            YellowBean.SoundManager.Instance.PlaySFX("defeat");
        }

        playState = ePlayState.End;
    }
Beispiel #3
0
    void StartRound()
    {
        enemiesKilledText.gameObject.SetActive(false);
        asteroidsDestroyedText.gameObject.SetActive(false);
        shotsFiredText.gameObject.SetActive(false);
        accuracyText.gameObject.SetActive(false);
        gamesPlayedText.gameObject.SetActive(false);
        clickToStartText.gameObject.SetActive(false);
        brainCloudStatusText.gameObject.SetActive(false);
        scoreText.gameObject.SetActive(true);

        m_enemiesKilledThisRound      = 0;
        m_asteroidsDestroyedThisRound = 0;
        m_shotsFiredThisRound         = 0;

        // don't reset this every round... m_totalGamesPlayed = 0;

        m_accuracy = 0;
        m_score    = 0;

        UpdateScoreText();
        m_state       = eGameState.GAME_STATE_PLAYING;
        m_playState   = ePlayState.PLAY_STATE_STARTUP;
        m_startupTime = startWait;

        SpawnPlayer();
    }
        /// <summary>
        /// Starts the game playing...
        /// </summary>
        public void StartGame()
        {
            playState = ePlayState.Playing;

            //Reset scores...
            m_redScore  = 0;
            m_blueScore = 0;

            //Send out a warning to players to equip and get ready for the battle!
            foreach (GamePlayer pl in m_playingPlayers)
            {
                if (pl == null || pl.ObjectState != GameObject.eObjectState.Active) //incase of linkdead players
                {
                    continue;
                }

                pl.Out.SendMessage("The game has now begun! Equip the hockey sticks in your inventory and swing at the puck to move it to your opponents goal. First to the score limit wins!", DOL.GS.PacketHandler.eChatType.CT_Broadcast, DOL.GS.PacketHandler.eChatLoc.CL_ChatWindow);

                pl.Out.SendMessage("The game has begun! Adorn your hockey stick!", DOL.GS.PacketHandler.eChatType.CT_ScreenCenterSmaller, DOL.GS.PacketHandler.eChatLoc.CL_SystemWindow);
                pl.Out.SendMessage("The game has begun! Adorn your hockey stick!", DOL.GS.PacketHandler.eChatType.CT_SpellResisted, DOL.GS.PacketHandler.eChatLoc.CL_SystemWindow);
            }

            //Create the puck...
            TomteHockeyPuck puck = new TomteHockeyPuck(this);

            puck.CurrentRegionID = Region;
            puck.X = X;
            puck.Y = Y;
            puck.Z = Z;
            puck.AddToWorld();

            //Assign the puck to this game.
            Puck = puck;
        }
Beispiel #5
0
    void Start()
    {
        // 플레이 데이터가 있으면 초기화 한다.
        Initialize();

        // UI 관련 부분을 초기화한다.
        InitUI();

        // 튜토리얼 초기화.
        goTutorial.GetComponent <UITutorial>().onComplete = () =>
        {
            goTutorial.SetActive(false);
            playState = ePlayState.CameraZoom;
        };
    }
        /// <summary>
        /// Clears up the match - removes goalposts and puck, ad decides the winning team.
        /// </summary>
        public void EndGame()
        {
            bool redWon = false;

            if (m_redScore >= 3)
            {
                redWon = true;
            }

            //By default, blue has won, unless red has.

            string winner = (redWon) ? "Reds" : "Blues";

            foreach (GamePlayer pl in PlayingPlayers)
            {
                if (pl == null)
                {
                    continue;
                }
                if (pl.ObjectState != GameObject.eObjectState.Active)
                {
                    continue;
                }

                //Inform the players of the winner!
                pl.Out.SendMessage("The game is over! Congratulations to the winning team, the " + winner + "!", DOL.GS.PacketHandler.eChatType.CT_Broadcast, DOL.GS.PacketHandler.eChatLoc.CL_ChatWindow);

                //Remove the stick from the player.
                RemoveStick(pl);
            }

            if (Puck != null)
            {
                Puck.RemoveFromWorld();
                Puck.Delete();
            }

            playState = ePlayState.Waiting;

            //Flush player lists...
            m_redTeam        = new List <GamePlayer>();
            m_blueTeam       = new List <GamePlayer>();
            m_playingPlayers = new List <GamePlayer>();
        }
Beispiel #7
0
    void WinUserMode()
    {
        // 클리어 스테이지.
        ClearStage();

        // 좋아요, 리스타트, 스테이지.
        btnLike.gameObject.SetActive(true);
        btnRestart.gameObject.SetActive(true);
        btnBackStage.gameObject.SetActive(true);

        // 엔드 오브젝트
        goEnd.SetActive(true);
        animEnd.Play("UIstageEndPopupTrophy");
        if (YellowBean.SoundManager.Instance != null)
        {
            YellowBean.SoundManager.Instance.bgm.enabled = false;
            YellowBean.SoundManager.Instance.PlaySFX("victory");
        }

        playState = ePlayState.End;
    }
Beispiel #8
0
    InitUI()
    {
        if (btnUndo != null)
        {
            btnUndo.onClick.AddListener(() =>
            {
                int cnt = listUnit.Count;

                if (cnt > 0)
                {
                    var unit = listUnit[cnt - 1];

                    maxCost     += DataManager.GetInstance().GetUnitData(unit.status.name).cost;
                    txtCost.text = maxCost.ToString();

                    listUnit.Remove(unit);
                    Destroy(unit.gameObject);
                }
            });
        }

        if (btnReset != null)
        {
            btnReset.onClick.AddListener(() =>
            {
                foreach (var unit in listUnit)
                {
                    Destroy(unit.gameObject);
                }

                listUnit.Clear();

                maxCost      = PlayData.cost;
                txtCost.text = maxCost.ToString();
            });
        }


        if (btnPause != null)
        {
            btnPause.onClick.AddListener(() =>
            {
                goPause.SetActive(true);
            });
        }


        if (btnPlay != null)
        {
            btnPlay.onClick.AddListener(() =>
            {
                YellowBean.SoundManager.Instance.bgm.enabled = true;
                YellowBean.SoundManager.Instance.PlayBgm("Castle in the sky");
                // 현재 유닛 이름을 저장한다.
                for (int i = 0; i < listUnit.Count; i++)
                {
                    string unitName = listUnit[i].status.name;
                    UnityAnalyticsManager.GetInstance().UseUnit(unitName);
                }

                var arrSR = goBase.GetComponentsInChildren <SpriteRenderer>();

                for (int i = 0; i < arrSR.Length; i++)
                {
                    arrSR[i].DOColor(new Color(0, 0, 0, 0), 1f);
                }

                animBottom.Play("move", () =>
                {
                    animTop.Play("move", () =>
                    {
                        foreach (var unit in listUnit)
                        {
                            yMaxCost += unit.status.cost;

                            StartCoroutine(StartAI(unit));
                        }

                        foreach (var enemy in listEnemies)
                        {
                            gMaxCost += enemy.status.cost;

                            StartCoroutine(StartAI(enemy));
                        }

                        yOldCost = yMaxCost;
                        gOldCost = gMaxCost;

                        playState = ePlayState.Play;
                        startTime = Time.time;
                    });
                });
            });
        }

        for (int i = 0; i < arrUnitToggle.LongLength; i++)
        {
            // 토글을 가져온다.
            var toggleUnit = arrUnitToggle[i];

            // 토글에 맞는 유닛의 데이터를 가져온다.
            var data = DataManager.GetInstance().GetUnitData(toggleUnit.name);

            var txtCost = toggleUnit.GetComponentInChildren <Text>();
            txtCost.text = data.cost.ToString();

            // 토글에 이벤트를 추가한다.
            toggleUnit.onValueChanged.AddListener((on) =>
            {
                if (on)
                {
                    selectedUnitName = toggleUnit.name;
                }
            });
        }

        btnLike.onClick.AddListener(() =>
        {
            DoFavoriteStage();
        });

        btnRestart.onClick.AddListener(() =>
        {
            if (App.Instance != null)
            {
                btnRestart.enabled = false;
                App.Instance.LoadScene(playSceneName);
            }
        });

        btnBackStage.onClick.AddListener(() =>
        {
            if (App.Instance != null)
            {
                btnBackStage.enabled = false;
                App.Instance.LoadScene(modeSelectSceneName);
            }
        });

        btnNextStage.onClick.AddListener(() =>
        {
            int stageID = PlayData.id;
            Debug.Log(stageID);

            if (DataManager.GetInstance().dicStoryStageData.ContainsKey(stageID++))
            {
                var stageData          = DataManager.GetInstance().dicStoryStageData[stageID];
                PlayData.id            = stageData.id;
                PlayData.map_id        = stageData.map_id;
                PlayData.cost          = stageData.cost;
                PlayData.Mode          = PlayData.ePlayMode.Story;
                PlayData.listUnitInfos = stageData.listUnitInfos;

                if (App.Instance != null)
                {
                    App.Instance.LoadScene(playSceneName);
                }
            }
        });

        btnSave.onClick.AddListener(() =>
        {
            if (PlayData.cost - GetCurrentCost(listUnit) > 40f)
            {
                animBall.Rewind();
                var animClip = animBall.clip;

                goBalloon.SetActive(true);

                if (animBallRoutine != null)
                {
                    StopCoroutine(animBallRoutine);
                    animBallRoutine = null;
                }
                animBallRoutine = StartCoroutine(this.WaitForTime(animClip.length, () =>
                {
                    goBalloon.SetActive(false);
                }));

                return;
            }

            ifTitle.text = DataManager.GetInstance().dicMapData[PlayData.map_id].map_name;
            goSave.SetActive(true);
        });

        btnSaveOK.onClick.AddListener(() =>
        {
            DoSave();
        });

        // 콘텐츠 맨 앞.
        rtContent.anchoredPosition3D = Vector3.zero;

        // 애니메이션
        animBottom.Play("start", null);
    }
Beispiel #9
0
    void WinStoryMode()
    {
        // 승리 조건을 계산한다.
        int starCnt = 0;

        // 승리 했다면.
        {
            starCnt += 1;
        }

        // 1분 안으로 끝냈다면.
        {
            float t = Time.time - startTime;

            starCnt = (t < limitTime) ? starCnt += 1 : starCnt;
        }

        // 체력이 10프로 이상이라면.
        {
            float currentYellowHp = 0f;
            foreach (var unit in listUnit)
            {
                if (unit.alive)
                {
                    currentYellowHp += unit.status.cost;
                }
            }

            starCnt = (currentYellowHp / yMaxCost > 0.1f) ? starCnt += 1 : starCnt;
        }

        // 이겼을 때.
        // 유저 정보를 갱신한다.
        var arr = DataManager.GetInstance().userInfo.arrStageInfo;

        // 별 개수가 현재 클리어한 별 개수보다 작다면.
        // 갱신한다.
        if (arr[PlayData.id - 1].starCnt < starCnt)
        {
            arr[PlayData.id - 1].starCnt = starCnt;
        }

        // 다음 스테이지를 오픈한다.
        if (PlayData.id < arr.Length)
        {
            if (!arr[PlayData.id].opened)
            {
                arr[PlayData.id].opened  = true;
                arr[PlayData.id].starCnt = 0;
            }
        }

        // 리스타트, 스테이지.
        btnNextStage.gameObject.SetActive(true);
        btnRestart.gameObject.SetActive(true);
        btnBackStage.gameObject.SetActive(true);

        // 엔드 오브젝트
        goEnd.SetActive(true);
        animEnd.Play(string.Format("UIstageEndPopupStar{0}", starCnt));
        if (YellowBean.SoundManager.Instance != null)
        {
            YellowBean.SoundManager.Instance.bgm.enabled = false;
            YellowBean.SoundManager.Instance.PlaySFX("victory");
        }

        // 저장한다.
        DataManager.GetInstance().SaveUserInfo();

        playState = ePlayState.End;
    }
Beispiel #10
0
    void Play()
    {
        // 시간을 센다.
        {
            float t = Time.time - startTime;

            if (!overTime)
            {
                if (t > limitTime)
                {
                    overTime = true;

                    //// 타이머
                    //txtTime.rectTransform.DOScale(new Vector3(1.5f,2,1), 1).onComplete = () => {
                    //    txtTime.rectTransform.DOScale(new Vector3(1, 1, 1), 1f);
                    //};
                    txtTime.DOColor(new Color(1, 0, 0, 1), 30);
                }
            }

            string sec = t.ToString("f2");

            txtTime.text = string.Format("{0}", sec);
        }

        // 코스트를 계산한다.
        {
            float yNewCost = GetCurrentCost(listUnit);
            float gNewCost = GetCurrentCost(listEnemies);

            // 만약 코스트가 바꼈다면.
            if (yNewCost != yOldCost)
            {
                if (ySliderTweener != null)
                {
                    ySliderTweener.Kill();
                    ySliderTweener = null;
                }
                ySliderTweener            = imgSliderY.rectTransform.DOShakeScale(.25f, .14f);
                ySliderTweener.onComplete = () =>
                {
                    ySliderTweener = imgSliderY.rectTransform.DOScale(Vector3.one, .1f);
                };


                // 코스트를 줄인다.
                if (yellowSlideCoroutine != null)
                {
                    StopCoroutine(yellowSlideCoroutine);
                    yellowSlideCoroutine = null;
                }

                yellowSlideCoroutine = StartCoroutine(FadeSlider(sliderY, yNewCost / yMaxCost));

                // 올드 코스트를 갱신한다.
                yOldCost = yNewCost;
            }

            // 만약 코스트가 바꼈다면.
            if (gNewCost != gOldCost)
            {
                if (gSliderTweener != null)
                {
                    gSliderTweener.Kill();
                    gSliderTweener = null;
                }
                gSliderTweener = imgSliderG.rectTransform.DOShakeScale(.25f, .14f);

                gSliderTweener.onComplete = () =>
                {
                    gSliderTweener = imgSliderG.rectTransform.DOScale(Vector3.one, .1f);
                };

                // 코스트를 줄인다.
                if (greeenSlideCoroutine != null)
                {
                    StopCoroutine(greeenSlideCoroutine);
                    greeenSlideCoroutine = null;
                }

                greeenSlideCoroutine = StartCoroutine(FadeSlider(sliderG, gNewCost / gMaxCost));

                // 올드 코스트를 갱신한다.
                gOldCost = gNewCost;
            }


            if (gNewCost <= 0)
            {
                playState = ePlayState.Win;

                return;
            }

            if (yNewCost <= 0)
            {
                playState = ePlayState.Lose;

                return;
            }
        }
    }
Beispiel #11
0
    void Update()
    {
        switch (playState)
        {
        case ePlayState.Tutorial:
        {
            if (PlayData.Mode != PlayData.ePlayMode.Story || PlayData.id != 1)
            {
                playState = ePlayState.CameraZoom;
                return;
            }
            goTutorial.SetActive(true);
        }
        break;

        case ePlayState.CameraZoom:
        {
            if (!cameraMode)
            {
                cameraMode = true;

                mainCamera.DOOrthoSize(11f, 0.8f).onComplete = () =>
                {
                    mainCamera.DOOrthoSize(7f, 0.8f).onComplete = () =>
                    {
                        playState           = ePlayState.Ready;
                        touchCamera.enabled = true;
                    };
                };
            }
        }
        break;

        case ePlayState.Ready:
        {
            if (Input.touchCount == 2)
            {
                twoTouch = true;
            }

            if (twoTouch)
            {
                if (Input.touchCount == 0)
                {
                    twoTouch = false;
                }
            }

            touchTime += Time.deltaTime;

            // 터치
            if (Input.touchCount == 1 && touchTime >= touchTimeLimit && !IsPointerOverUIObject() && !twoTouch)
            {
                touchTime = 0f;
                StartCoroutine(this.Touch());
            }

            else
            {
                //if (Input.GetMouseButtonDown(0))
                //{
                //    StartCoroutine(this.Touch());
                //}
            }
        }
        break;

        case ePlayState.Play:
        {
            Play();
        }
        break;

        case ePlayState.Win:
        {
            if (!imgEndDim.gameObject.activeSelf)
            {
                imgEndDim.gameObject.SetActive(true);
                imgEndDim.color = new Color(0.11f, 0.025f, 0.025f, 0);

                DOTween.ToAlpha(() => imgEndDim.color, x => imgEndDim.color = x, 0.89f, 0.8f).onComplete = () =>
                {
                    imgEndDim.enabled = false;

                    if (PlayData.Mode == PlayData.ePlayMode.Story)
                    {
                        WinStoryMode();
                    }

                    else
                    {
                        WinUserMode();
                    }
                };
            }
        }
        break;

        case ePlayState.Lose:
        {
            if (!imgEndDim.gameObject.activeSelf)
            {
                imgEndDim.gameObject.SetActive(true);
                imgEndDim.color = new Color(0.11f, 0.025f, 0.025f, 0);

                DOTween.ToAlpha(() => imgEndDim.color, x => imgEndDim.color = x, 0.89f, 0.8f).onComplete = () =>
                {
                    imgEndDim.enabled = false;

                    if (PlayData.Mode == PlayData.ePlayMode.Story)
                    {
                        LoseStoryMode();
                    }

                    else
                    {
                        LoseUserMode();
                    }
                };
            }
        }
        break;

        case ePlayState.End:
        {
        }
        break;
        }
    }
    void Update()
    {
        switch (m_state)
        {
        case eGameState.GAME_STATE_START_SCREEN:
            if (Input.GetMouseButtonDown(0))
            {
                StartRound();
            }
            break;
        case eGameState.GAME_STATE_PLAYING:
            switch (m_playState)
            {
            case ePlayState.PLAY_STATE_STARTUP:
            case ePlayState.PLAY_STATE_IN_BETWEEN_WAVES:
                m_startupTime -= Time.deltaTime;
                if (m_startupTime <= 0)
                {
                    StartWave();
                }
                break;
            case ePlayState.PLAY_STATE_WAVE:
                m_spawnTime -= Time.deltaTime;
                if (m_spawnTime <= 0)
                {
                    if (m_hazardSpawned >= hazardCount)
                    {
                        // We have done the wave.
                        m_playState = ePlayState.PLAY_STATE_IN_BETWEEN_WAVES;
                        m_startupTime = waveWait;
                    }
                    else
                    {
                        m_hazardSpawned++;
                        m_spawnTime = spawnWait;
                        SpawnHazard();
                    }
                }
                break;
            }
            break;
        case eGameState.GAME_STATE_GAME_OVER:
            m_gameOverTime -= Time.deltaTime;
            if (m_gameOverTime <= 0)
            {
                m_state = eGameState.GAME_STATE_SCORE_SCREEN;
                scoreText.gameObject.SetActive(false);
                gameOverText.gameObject.SetActive(false);

                clickToStartText.text = "Click to Restart";
                clickToStartText.gameObject.SetActive(true);

                SaveStatisticsLocally();
            }
            break;
        case eGameState.GAME_STATE_SCORE_SCREEN:
            if (Input.GetMouseButtonDown(0))
            {
                StartRound();
            }
            break;
        }
    }
 void StartWave()
 {
     m_hazardSpawned = 1;
     m_spawnTime = spawnWait;
     m_playState = ePlayState.PLAY_STATE_WAVE;
     SpawnHazard();
 }
    void StartRound()
    {
        enemiesKilledText.gameObject.SetActive(false);
        asteroidsDestroyedText.gameObject.SetActive(false);
        shotsFiredText.gameObject.SetActive(false);
        accuracyText.gameObject.SetActive(false);
        gamesPlayedText.gameObject.SetActive(false);
        clickToStartText.gameObject.SetActive(false);
        //		brainCloudStatusText.gameObject.SetActive(false);
        scoreText.gameObject.SetActive(true);

        m_enemiesKilledThisRound = 0;
        m_asteroidsDestroyedThisRound = 0;
        m_shotsFiredThisRound = 0;

        // don't reset this every round... m_totalGamesPlayed = 0;

        m_accuracy = 0;
        m_score = 0;

        UpdateScoreText ();
        m_state = eGameState.GAME_STATE_PLAYING;
        m_playState = ePlayState.PLAY_STATE_STARTUP;
        m_startupTime = startWait;

        //		Debug.Log ("here in start round");

        SpawnPlayer();
    }
Beispiel #15
0
    void Update()
    {
        switch (m_state)
        {
        case eGameState.GAME_STATE_START_SCREEN:
            if (Input.GetMouseButtonDown(0))
            {
                StartRound();
            }
            break;

        case eGameState.GAME_STATE_PLAYING:
            switch (m_playState)
            {
            case ePlayState.PLAY_STATE_STARTUP:
            case ePlayState.PLAY_STATE_IN_BETWEEN_WAVES:
                m_startupTime -= Time.deltaTime;
                if (m_startupTime <= 0)
                {
                    StartWave();
                }
                break;

            case ePlayState.PLAY_STATE_WAVE:
                m_spawnTime -= Time.deltaTime;
                if (m_spawnTime <= 0)
                {
                    if (m_hazardSpawned >= hazardCount)
                    {
                        // We have done the wave.
                        m_playState   = ePlayState.PLAY_STATE_IN_BETWEEN_WAVES;
                        m_startupTime = waveWait;
                    }
                    else
                    {
                        m_hazardSpawned++;
                        m_spawnTime = spawnWait;
                        SpawnHazard();
                    }
                }
                break;
            }
            break;

        case eGameState.GAME_STATE_GAME_OVER:
            m_gameOverTime -= Time.deltaTime;
            if (m_gameOverTime <= 0)
            {
                m_state = eGameState.GAME_STATE_SCORE_SCREEN;
                scoreText.gameObject.SetActive(false);
                gameOverText.gameObject.SetActive(false);

                clickToStartText.text = "Click to Restart";
                clickToStartText.gameObject.SetActive(true);

                SaveStatisticsToBrainCloud();
            }
            break;

        case eGameState.GAME_STATE_SCORE_SCREEN:
            if (Input.GetMouseButtonDown(0))
            {
                StartRound();
            }
            break;
        }
    }
 public FileEventArg(ePlayState state)
 {
     this.State = state;
 }