コード例 #1
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    public void SetupDateTurn()
    {
        // unused
        //DialogueStoryTab.SetActive (false);
        //DateProgressBarBkg.SetActive (true);

        // todo: migrate over to the right
        DateProressBar.SetActive(true);
        DateActionTab.transform.localPosition = new Vector3(0, 0, 0);
        DateProgressSkipBtn.GetComponentInChildren <Text> ().text = "Skip";
        ResultTxt.gameObject.SetActive(false);
        DateProressBar.gameObject.transform.localScale = new Vector3(0, 1, 1);
        DateActionTab.SetActive(true);
        DateActCount = 0;

        //NextText.text = "(Date Acting)";
        CurrState = ActState.DateAction;
        phaseName = "Date's Turn";
        phaseHandler.UpdateActiveUser(phaseName);

        //Added Excited date audio.
        //TODO
        //int dateConnection = MapHandler.GetComponent<MapHandler>().LeadPlayerScript.Connection;
        if (phaseHandler.thisHour > 7)
        {
            GameObject source = Instantiate(soundSource, mainCamera.transform.position, Quaternion.identity);
            source.transform.SetParent(mainCamera.transform);
            source.GetComponent <AudioSource> ().clip = excitedSound;
            source.GetComponent <AudioSource> ().Play();
        }
    }
コード例 #2
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    private void AdvanceNPCMoveCounter(float amt)
    {
        NPCMoveCount += amt;

        // TODO: Update NPC movement

        // Trigger?
        if (NPCMoveCount >= NPCMoveCountMaxNow)
        {
            // What were we in the middle of?
            if (CurrState == ActState.FansAction)
            {
                // Move a fan randomly, if one is next
                if (MapHandler.GetComponent <MapHandler> ().MoveNextNPC())
                {
                    if (CurrState != ActState.GameOverFadein)
                    {
                        NPCMoveCount = 0;
                    }
                }
                else
                {
                    // Is the state done, or are we doing it again?
                    if (firstTurnMoveNPC)
                    {
                        MakeMaxCount('F');
                        NPCMoveCount = 0;
                        MapHandler.GetComponent <MapHandler> ().ResetNPCMoves();
                        firstTurnMoveNPC = false;
                    }
                    else
                    {
                        // Ok, we're actualy done
                        CurrState = ActState.WaitingFanAckFromPlayer;
                        NextStamp.GetComponent <StampHandler> ().HideStamp();
                        NextText.text = "Time Marches On...";
                    }
                }

                // Update HP
                int totalDmg = preFanHP - MapHandler.GetComponent <MapHandler>().LeadPlayerScript.SelfEsteem;
                if (totalDmg > 0)
                {
                    StoryTxt.text = "Fans have done a total of " + totalDmg + " damage to your self esteem.";
                }
                else if (CurrState == ActState.WaitingFanAckFromPlayer)
                {
                    StoryTxt.text = "You have weathered the onslaught of your fans with your self esteem intact (for now).";
                }
            }
            else
            {
                ThrowException("Bad NPC current state: " + CurrState);
            }
        }
    }
コード例 #3
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    private void ShowFinalScreen()
    {
        Lead player = MapHandler.GetComponent <MapHandler> ().LeadPlayerScript;
        int  score  = player.Connection * 1000 + player.SelfEsteem * 100 + player.FanCount;

        FinalScreenObj.SetActive(true);
        FinalScreenTxt.GetComponent <Text> ().text = "Final Score: " + score;

        CurrState = ActState.FinalScreenOnscreen;
    }
コード例 #4
0
 // Start is called before the first frame update
 public virtual void Start()
 {
     facingRight = true;
     MyAnimator  = GetComponent <Animator>();
     myAudio     = FindObjectOfType <AudioManager>();
     stat.Initialize();
     dirQ      = new Queue <bool>();
     actState  = ActState.StandBy;
     moveState = MoveState.Idle;
 }
コード例 #5
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
 private void StartFansActionState()
 {
     CurrState = ActState.FansAction;
     phaseName = "Fans' Turns";
     phaseHandler.UpdateActiveUser(phaseName);
     MapHandler.GetComponent <MapHandler> ().ResetNPCMoves();
     NPCMoveCountMaxNow = MakeMaxCount('S');
     NPCMoveCount       = 0;
     firstTurnMoveNPC   = true;
 }
コード例 #6
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    private void AdvanceCounter(float amt)
    {
        DateActCount += amt;

        // Always update the progress bar
        float perc = DateActCount / DateActCountMax;

        if (perc > 1.0f)
        {
            perc = 1.0f;
        }
        DateProressBar.gameObject.transform.localScale = new Vector3(perc, 1, 1);

        // Trigger?
        if (DateActCount >= DateActCountMax)
        {
            // What were we in the middle of?
            if (CurrState == ActState.DateAction)
            {
                MakeDateDecision();
            }
            else if (CurrState == ActState.DateActSocialMedia || CurrState == ActState.DateActTalkToYou)
            {
                // Show "rewards"
                DateActionTab.SetActive(false);
                //DateProressBar.SetActive (false);
                //DateProgressSkipBtn.transform.localPosition = new Vector3 (165, 120, 0);
                //DateProgressSkipBtn.GetComponentInChildren <Text> ().text = "Ok";
                //ResultTxt.gameObject.SetActive (true);

                if (CurrState == ActState.DateActSocialMedia)
                {
                    StoryTxt.text += "\n" + RandomlyModifyStatsFromTweet();
                }
                else
                {
                    StoryTxt.text += "\n" + RandomlyModifyStatsFromPersonal();
                }

                if (CurrState != ActState.GameOverFadein)
                {
                    // Set up next button again
                    NextStamp.GetComponent <StampHandler>().HideStamp();
                    NextText.text = "Fan Phase";

                    CurrState = ActState.DateActShowReward;
                }
            }
            else
            {
                ThrowException("Bad current state: " + CurrState);
            }
        }
    }
コード例 #7
0
ファイル: Player.cs プロジェクト: sheriff124/TechAssignment
        public Player()
        {
            texInfo = new TextureInfo("/Application/textures/spacebro2.png");
            sprite  = new SpriteUV(texInfo);

            sprite.Quad.S   = texInfo.TextureSizef;
            sprite.Position = new Vector2(0, 0);

            dirState  = DirState.Still;
            actState  = ActState.Ground;
            walkSpeed = 2.0f;
        }
コード例 #8
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    public void SetupInteractWithDate()
    {
        StoryTxt.text = "How will you interact with your date?";
        ShowBoxes(
            "Talk to Them",
            "Impress Them",
            "Encourage Them"
            );

        DialogueStoryTab.SetActive(true);
        CurrState = ActState.ChooseInteractWithDate;
    }
コード例 #9
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    public void GameoverTracker(int selfEsteem)
    {
        if (selfEsteem <= 0)
        {
            CurrState = ActState.GameOverFadein;

            //Flip Leads
            MapHandler.GetComponent <MapHandler>().LeadPlayer.GetComponent <TokenHandler>().RemoveToken();
            MapHandler.GetComponent <MapHandler>().LeadDate.GetComponent <TokenHandler>().RemoveToken();

            // Reset practically everything
            DateActCount = DateActCountMax;
            NPCMoveCount = 9999;
        }
    }
コード例 #10
0
    private void Start()
    {
        renderComponent = GetComponent <SpriteRenderer>();
        trailComponent  = GetComponent <TrailRenderer>();
        anim            = GetComponent <Animator>();

        menuIdle   = new MenuIdle(this);
        intoScene  = new IntoScene(this);
        gameIdle   = new GameIdle(this);
        sliceState = new SliceState(this, 10, 0.5f);
        passState  = new PassState(this, 1f);
        failState  = new FailState(this, 0.5f);
        actState   = new ActState(this);
        TranslateState(null, menuIdle);
    }
コード例 #11
0
    protected virtual void SetState(ActState state)
    {
        CurrentActState = state;

        switch (state)
        {
        case ActState.Move:
        {
            TargetPosition = PreferredPosition;
        }
        break;
        }

        Attacker.CanAttack = false;

        _onStateChanged.Invoke(CurrentActState);
    }
コード例 #12
0
    void Start()
    {
        personCtrl        = this.GetComponent <HeroCtrl>();
        heroStateActVer   = new IdleStateActVer(this.gameObject);
        heroStateMoveVer  = new IdleStateMoveVer(this.gameObject);
        inputArgs         = new InputEventArgs("", "", "");
        hero_act_state[0] = new IdleStateActVer(this.gameObject);
        hero_act_state[1] = new ActState(this.gameObject);
        hero_act_state[2] = new DefenseState(this.gameObject);

        hero_move_state[0] = new IdleStateMoveVer(this.gameObject);
        hero_move_state[1] = new MoveState(this.gameObject);
        hero_move_state[2] = new JumpState(this.gameObject);

        InputTran += new InputEventHandler(heroStateActVer.handleInput);
        InputTran += new InputEventHandler(heroStateMoveVer.handleInput);
    }
コード例 #13
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
 // What action will our date take?
 public void MakeDateDecision()
 {
     // TODO : More structured randomness, incorporate Pablo's actors
     if (rng.Next(100) < 50)
     {
         CurrState = ActState.DateActSocialMedia;
         string txt = dateDialogues.DateToFansInteractions [rng.Next(dateDialogues.DateToFansInteractions.Count)];
         StoryTxt.text += "\n" + txt;
     }
     else
     {
         CurrState = ActState.DateActTalkToYou;
         string txt = dateDialogues.DateToYouInteractions [rng.Next(dateDialogues.DateToYouInteractions.Count)];
         StoryTxt.text += "\n" + txt;
     }
     DateActionTab.transform.localPosition          = new Vector3(0, -100, 0);
     DateProressBar.gameObject.transform.localScale = new Vector3(0, 1, 1);
     DateActionTab.SetActive(true);
     DateActCount = 0;
 }
コード例 #14
0
        /// <summary>
        /// Der Input wird, wenn im aktuellen Zustand möglich, verarbeitet.
        /// Der Folgezustand wird zum aktuellen Zustand
        /// </summary>
        /// <param name="input">Eingangssignal</param>
        /// <returns>true, wenn die Verarbeitung möglich war</returns>
        public bool HandleInput(Enum input)
        {
            if (!IsRunning)
            {
                return(false); // Input ignorieren
            }
            //_actInput = input;
            Transition transition = ActState.GetTransitionByInput(input);

            if (transition == null)
            {
                Log.Error($"Fsm;HandleInput;{Name}; {input} im Zustand {ActState}");

                return(false);
            }
            ActState.Leave();    // aktuellen Zustand verlassen
            transition.Select(); // Etwaige Beobachter des Zustandsübergangs verständigen
            ActState = transition.ToState;
            ActState.Enter();    // Folgezustand aktivieren
            return(true);
        }
コード例 #15
0
    public virtual void ActManager()
    {
        //       ActState curentState;
        CurrentState = FSM();

        if (CurrentState == ActState._IDLE)
        {
            Idle();
        }
        else if (CurrentState == ActState._Detect)
        {
            Detect();
        }
        else if (CurrentState == ActState._ATTACK)
        {
            Attack();
        }
        else if (CurrentState == ActState._DEATH)
        {
            Death();
        }
    }
コード例 #16
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    // TEST

    /*public void TestFunction(uint val) {
     *      Debug.Log ("TEST: " + val);
     * }*/

    public void SetupChoosePlayerAction()
    {
        StoryTxtHeader.text = "Date Action";
        StoryTxt.text       = "What will you do this turn?";
        string changeStr = phaseHandler.thisHour < 9 ? "Change Date Location" : "End Date";

        if (TooLateMustMove())
        {
            ShowBoxes(
                null,
                null,
                changeStr
                );
        }
        else
        {
            ShowBoxes(
                "Talk to Date",
                "Tweet @Fans",
                changeStr
                );
        }

        //DialogueStoryTab.SetActive (true);
        CurrState = ActState.PlayerActionSelect;

        // Set Next button text
        SkipText.text = "Main Action";
        NextText.text = "(In Story)";

        // Reset button stamp statuses (but not for the bottom item).
        // TODO

        // Update Phase name
        phaseName = "Your Turn";
        phaseHandler.UpdateActiveUser(phaseName);
    }
コード例 #17
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    public void ReactToStamp(int stampId)       // 1, 2, 3 for stamp ID
    // Beginning of game: show the timer, show the dialogue box
    {
        if (CurrState == ActState.Nothing)
        {
            //TEMP:DEBUG:TESTING
            //StartFansActionState();return;
            //END:TEMP:DEBUG:TESTING


            PlayButtonSound();

            // Start Invisible
            StoryTxtHeader.text = "Date Action";
            StoryTxt.text       = "";
            ShowBoxes(null, null, null);

            // First interpolation
            interpEndPos   = PhasePanel.transform.position;
            interpStartPos = PhasePanel.transform.position + new Vector3(1.3f, 0, 0);
            interpEndSz    = new Vector3(1, 1, 1);
            interpStartSz  = new Vector3(0.1f, 0.1f, 0.1f);
            interpTarget   = PhasePanel.transform;
            PhasePanel.SetActive(true);

            // Second interpolation
            interpEndPos2   = DialoguePanel.transform.position;
            interpStartPos2 = DialoguePanel.transform.position + new Vector3(0, 0, -0.5f);
            interpEndSz2    = new Vector3(1, 1, 1);
            interpStartSz2  = new Vector3(0.1f, 0.1f, 0.1f);
            interpTarget2   = DialoguePanel.transform;
            DialoguePanel.SetActive(true);

            // Third interpolation
            interpEndPos3   = AttributesPanel.transform.position;
            interpStartPos3 = AttributesPanel.transform.position + new Vector3(0, 0, 1f);
            interpEndSz3    = new Vector3(1, 1, 1);
            interpStartSz3  = new Vector3(0.1f, 0.1f, 0.1f);
            interpTarget3   = AttributesPanel.transform;
            AttributesPanel.SetActive(true);

            // Set up the interpolation
            interpStartTime   = Time.time;
            interpTotalLength = Vector3.Distance(interpStartPos, interpEndPos);

            // Update all
            updateInterpolation();

            // Temp
            phaseHandler.UpdateColoring();

            CurrState = ActState.DoingInterp;
            return;
        }

        // Phase 1C: Try to move to new location
        if (CurrState == ActState.MoveToNewLocation)
        {
            // Go back
            if (TooSoonToMove())
            {
                // Fade text to player's turn
                CurrState      = ActState.FadingTextOut;
                AfterFadeState = ActState.PlayerActionSelect;
            }
            else
            {
                if (phaseHandler.thisHour == 10)
                {
                    // TODO: End date code here.
                    ShowFinalScreen();
                }
                else
                {
                    // Fade back to start
                    CurrState      = ActState.FadingTextOut;
                    AfterFadeState = ActState.PlayerActionSelect;
                }
            }

            PlayButtonSound();
            return;
        }

        // Phase 1: Select talk, tweet, or move
        if (CurrState == ActState.PlayerActionSelect)
        {
            PlayButtonSound();


            if (stampId == 1)
            {
                // Talk to date
                // Fade out text, fade in new text
                CurrState      = ActState.FadingTextOut;
                AfterFadeState = ActState.ChooseInteractTalk;
            }
            else if (stampId == 2)
            {
                // Tweet @ fans
                StoryTxt.text += "\n\nUse the mouse to aim; click to fire off a tweet.";

                tweetHandler.StartTweeting();
            }
            else if (stampId == 3)
            {
                // Move date location
                CurrState      = ActState.FadingTextOut;
                AfterFadeState = ActState.MoveToNewLocation;
            }

            return;
        }

        // Phase 1.A - Date reacts to dialogue choice
        if (CurrState == ActState.ChooseInteractTalk)
        {
            CurrState      = ActState.FadingTextOut;
            AfterFadeState = ActState.TalkDateViewResponse;

            ChoiceParticles.GetComponent <ParticleOrientor>().OrientParticles();
            ChoiceParticles.Clear();
            ChoiceParticles.gameObject.SetActive(true);
            // Particles
            LastDateResponse = new char[] { 'G', 'B', 'N' }[rng.Next(3)];
            if (LastDateResponse == 'G')
            {
                ChoiceParticles.GetComponent <Renderer> ().material = GoodOptionTexture;


                MapHandler.GetComponent <MapHandler> ().LeadPlayerScript.SelfEsteem += GetAtmoMod(2);
            }
            else if (LastDateResponse == 'N')
            {
                ChoiceParticles.GetComponent <Renderer> ().material = NeutralOptionTexture;


                MapHandler.GetComponent <MapHandler> ().LeadPlayerScript.SelfEsteem += GetAtmoMod(1);
                //MapHandler.GetComponent<MapHandler> ().CreateHeart (tileX, tileY);
            }
            else
            {
                ChoiceParticles.GetComponent <Renderer> ().material = BadOptionTexture;
                MapHandler.GetComponent <MapHandler> ().LeadPlayerScript.SelfEsteem -= 1;
            }

            // TODO:TEMP:DEBUG
            //MapHandler.GetComponent<MapHandler> ().LeadPlayerScript.SelfEsteem -= 99;


            PlayButtonSound();

            ChoiceParticles.Play();
            return;
        }

        // Phase 1.B - Saw date react, move to next phase
        if (CurrState == ActState.TalkDateViewResponse)
        {
            CurrState      = ActState.FadingTextOut;
            AfterFadeState = ActState.DateAction;
            PlayButtonSound();
            return;
        }

        // Phase 2 - Ready to switch to fan phase?
        if (CurrState == ActState.DateActShowReward)
        {
            CurrState      = ActState.FadingTextOut;
            AfterFadeState = ActState.FansAction;
            PlayButtonSound();
            return;
        }

        // Phase 3 - Ready to switch back to player phase?
        if (CurrState == ActState.WaitingFanAckFromPlayer)
        {
            //Update Phase Clock
            phaseHandler.UpdateMinute();
            phaseHandler.UpdateTime();

            // Add some new fans
            MapHandler.GetComponent <MapHandler>().SpawnFans(3);

            // Fade text to player's turn
            CurrState      = ActState.FadingTextOut;
            AfterFadeState = ActState.PlayerActionSelect;
            PlayButtonSound();
            return;
        }
    }
コード例 #18
0
ファイル: Hero.cs プロジェクト: wolf96/Game-Pattern-Unity3d
    void Start()
    {
        personCtrl = this.GetComponent<HeroCtrl>();
        heroStateActVer = new IdleStateActVer(this.gameObject);
        heroStateMoveVer = new IdleStateMoveVer(this.gameObject);
        inputArgs = new InputEventArgs("", "", "");
        hero_act_state[0] = new IdleStateActVer(this.gameObject);
        hero_act_state[1] = new ActState(this.gameObject);
        hero_act_state[2] = new DefenseState(this.gameObject);

        hero_move_state[0] = new IdleStateMoveVer(this.gameObject);
        hero_move_state[1] = new MoveState(this.gameObject);
        hero_move_state[2] = new JumpState(this.gameObject);

        InputTran += new InputEventHandler(heroStateActVer.handleInput);
        InputTran += new InputEventHandler(heroStateMoveVer.handleInput);
    }
コード例 #19
0
 public void SetActState(ActState _state)
 {
     actState = _state;
 }
コード例 #20
0
 public void SetReady()
 {
     actState = ActState.StandBy;
 }
コード例 #21
0
ファイル: GameState.cs プロジェクト: sorlok/LD41
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Exit();
        }

        // Gameover fading takes priority
        if (CurrState == ActState.GameOverFadein)
        {
            if (GameOverFirstTime)
            {
                // Init
                Color clr = GameOverObj.GetComponent <Image> ().color;
                GameOverObj.GetComponent <Image> ().color = new Color(clr.r, clr.g, clr.b, 0);
                GameOverObj.SetActive(true);

                PlayEvilLaugh();

                GameOverFirstTime = false;
            }
            else
            {
                // Music fade out
                float newVol = bgmSource.volume - 0.02f;
                if (newVol < 0)
                {
                    newVol = 0;
                }
                bgmSource.volume = newVol;


                // Fade in
                Color clr      = GameOverObj.GetComponent <Image> ().color;
                float newAlpha = clr.a += 0.01f;
                bool  overflow = false;
                if (newAlpha >= 0.98f)
                {
                    newAlpha = 1;
                    overflow = true;
                }
                GameOverObj.GetComponent <Image> ().color = new Color(clr.r, clr.g, clr.b, newAlpha);

                if (overflow)
                {
                    // Show text
                    GameOverTxt.SetActive(true);

                    // Done
                    CurrState = ActState.GameOverOnscreen;
                }
            }

            return;
        }

        if (CurrState == ActState.GameOverOnscreen)
        {
            return;
        }


        // Hack to avoid double-clicking
        if (Input.GetMouseButtonDown(0))
        {
            if (EventSystem.current.IsPointerOverGameObject())
            {
                SkipPhase = CurrState;
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            if (SkipPhase == CurrState && DateActCount < DateActCountMax)
            {
                if (EventSystem.current.IsPointerOverGameObject())
                {
                    AdvanceCounter(9999);
                }
            }
            SkipPhase = ActState.Nothing;
        }

        /*if (Input.GetKey (KeyCode.W)) {
         *      if (CurrState == GameState.ActState.Nothing) {
         *              SetupChoosePlayerAction();
         *              return;
         *      }
         * }*/

        //  Deal with interpolation?
        if (CurrState == ActState.DoingInterp)
        {
            if (updateInterpolation())
            {
                // What to do next?
                SetupChoosePlayerAction();
            }
        }

        // Deal with text fading?
        if (CurrState == ActState.FadingTextOut)
        {
            bool  overflow = false;
            float newAlpha = StoryTxt.color.a - 1.2f * Time.deltaTime;
            if (newAlpha <= 0)
            {
                newAlpha = 0;
                overflow = true;
            }
            Color newAlphaColor = new Color(StoryTxt.color.r, StoryTxt.color.g, StoryTxt.color.b, newAlpha);
            StoryTxt.color       = newAlphaColor;
            StoryTxtHeader.color = newAlphaColor;
            Response1.GetComponentInChildren <Text> ().color = newAlphaColor;
            Response2.GetComponentInChildren <Text> ().color = newAlphaColor;
            Response3.GetComponentInChildren <Text> ().color = newAlphaColor;
            if (overflow)
            {
                // Set Story text or response text
                if (AfterFadeState == ActState.TalkDateViewResponse)
                {
                    List <DateDialogue> resp = dateDialogues.DialogueBadResponses;
                    if (LastDateResponse == 'G')
                    {
                        resp = dateDialogues.DialogueGoodResponses;
                    }
                    else if (LastDateResponse == 'N')
                    {
                        resp = dateDialogues.DialogueNeutralResponses;
                    }

                    DateDialogue dd = resp [rng.Next(resp.Count)];
                    StoryTxtHeader.text = "Date Dialogue";
                    StoryTxt.text       = dd.storyText;

                    if (LastDateResponse == 'G')
                    {
                        StoryTxt.text += "\n\n  +" + (GetAtmoMod(2)) + " Self Esteem";
                    }
                    else if (LastDateResponse == 'N')
                    {
                        StoryTxt.text += "\n\n  +" + (GetAtmoMod(1)) + " Self Esteem";
                    }
                    else
                    {
                        StoryTxt.text += "\n\n  -1 Self Esteem";
                    }

                    // Add connection
                    int conn = GetAtmoMod(MapHandler.GetComponent <MapHandler>().LeadPlayerScript.SelfEsteem);
                    MapHandler.GetComponent <MapHandler>().LeadPlayerScript.Connection += conn;
                    StoryTxt.text += "\n  + " + conn + " Connection";


                    // Set response text
                    ShowBoxes(
                        dd.option1,
                        dd.option2,
                        dd.option3
                        );
                }
                else if (AfterFadeState == ActState.DateAction)
                {
                    StoryTxtHeader.text = "Date Dialogue";
                    StoryTxt.text       = "Your date is deciding what to do...";
                    NextText.text       = "(Date Acting)";

                    // No responses here
                    ShowBoxes(null, null, null);
                }
                else if (AfterFadeState == ActState.FansAction)
                {
                    StoryTxtHeader.text = "Fan Reactions";
                    StoryTxt.text       = "";
                    NextText.text       = "(Fan Phase)";

                    // No responses here
                    ShowBoxes(null, null, null);

                    preFanHP = MapHandler.GetComponent <MapHandler> ().LeadPlayerScript.SelfEsteem;
                }
                else if (AfterFadeState == ActState.PlayerActionSelect)
                {
                    StoryTxtHeader.text = "Date Action";
                    StoryTxt.text       = "";
                    SkipText.text       = "Main Action";
                    NextText.text       = "(In Story)";

                    // No responses here
                    ShowBoxes(null, null, null);
                }
                else if (AfterFadeState == ActState.MoveToNewLocation)
                {
                    StoryTxtHeader.text = "Date Action";
                    SkipText.text       = "Main Action";
                    NextText.text       = "(Moving Locations)";

                    if (TooSoonToMove())
                    {
                        StoryTxt.text = "You can't move to a new date location yet; you basically just arrived here!";
                        ShowBoxes(null, "Ok", null);
                    }
                    else
                    {
                        TokenHandler leadPlayer = MapHandler.GetComponent <MapHandler> ().LeadPlayer.GetComponent <TokenHandler> ();
                        TokenHandler leadDate   = MapHandler.GetComponent <MapHandler> ().LeadDate.GetComponent <TokenHandler> ();
                        if (phaseHandler.thisHour == 7)
                        {
                            StoryTxt.text  = "You leave the romantic highway overlook behind, and move to your backyard, dodging fans along the way.";
                            StoryTxt.text += "\n\n  +25 Atmosphere";
                            MapHandler.GetComponent <MapHandler> ().LeadPlayerScript.Atmosphere = "B";
                            ShowBoxes(null, "Resume Date", null);

                            // Actually move
                            leadPlayer.MoveToTile(9, 5);
                            leadDate.MoveToTile(9, 4);
                        }
                        else if (phaseHandler.thisHour == 8)
                        {
                            StoryTxt.text  = "Your friend with the fancy house invites you both to hang out by the pool.";
                            StoryTxt.text += "\n\n  +50 Atmosphere";
                            MapHandler.GetComponent <MapHandler> ().LeadPlayerScript.Atmosphere = "A+";
                            ShowBoxes(null, "Resume Date", null);

                            // Actually move
                            leadPlayer.MoveToTile(4, 9);
                            leadDate.MoveToTile(5, 9);
                        }
                        else if (phaseHandler.thisHour == 9)
                        {
                            StoryTxt.text = "You both had a great time! You part and go your separate ways.";
                            ShowBoxes(null, "Date Complete!", null);

                            // Actually move ("home")
                            leadPlayer.MoveToTile(3, 4);
                            leadDate.MoveToTile(8, 8);
                        }

                        // Kill all fans
                        MapHandler.GetComponent <MapHandler>().DestroyAllFans();
                        if (phaseHandler.thisHour == 7)
                        {
                            MapHandler.GetComponent <MapHandler> ().SpawnFans(4);
                        }
                        else if (phaseHandler.thisHour == 8)
                        {
                            MapHandler.GetComponent <MapHandler> ().SpawnFans(5);
                        }                         // No fans when going home


                        // Actually do our update
                        phaseHandler.UpdateHour();
                        phaseHandler.UpdateTime();
                    }
                }
                else
                {
                    // Standard date text
                    DateDialogue dd = dateDialogues.DialogueOptions [rng.Next(dateDialogues.DialogueOptions.Count)];
                    StoryTxtHeader.text = "Date Dialogue";
                    StoryTxt.text       = dd.storyText;

                    // Set response text
                    ShowBoxes(
                        dd.option1,
                        dd.option2,
                        dd.option3
                        );
                }

                // Hide stamps; change to fade-in
                RespStamp1.GetComponent <StampHandler>().HideStamp();
                RespStamp2.GetComponent <StampHandler>().HideStamp();
                RespStamp3.GetComponent <StampHandler>().HideStamp();
                CurrState = ActState.FadingTextIn;
            }
        }

        // Deal with text fading?
        if (CurrState == ActState.FadingTextIn)
        {
            bool  overflow = false;
            float newAlpha = StoryTxt.color.a + 1.2f * Time.deltaTime;
            if (newAlpha >= 0.85)
            {
                newAlpha = 1;
                overflow = true;
            }
            Color newAlphaColor = new Color(StoryTxt.color.r, StoryTxt.color.g, StoryTxt.color.b, newAlpha);
            StoryTxt.color       = newAlphaColor;
            StoryTxtHeader.color = newAlphaColor;
            Response1.GetComponentInChildren <Text> ().color = newAlphaColor;
            Response2.GetComponentInChildren <Text> ().color = newAlphaColor;
            Response3.GetComponentInChildren <Text> ().color = newAlphaColor;
            if (overflow)
            {
                if (AfterFadeState == ActState.DateAction)
                {
                    SetupDateTurn();
                }
                else if (AfterFadeState == ActState.FansAction)
                {
                    StartFansActionState();
                }
                else if (AfterFadeState == ActState.PlayerActionSelect)
                {
                    SetupChoosePlayerAction();
                }
                else
                {
                    CurrState = AfterFadeState;
                }
            }
        }

        // Test-driven development for heart animation... >3>
        if (Input.GetKey(KeyCode.F))
        {
            MapHandler.GetComponent <MapHandler> ().CreateHeart(5, 5);
            return;
        }

        // Deal with counter
        if (DateActCount < DateActCountMax)
        {
            // Any key will advance the counter 100%
            if (Input.anyKeyDown && SkipPhase == ActState.Nothing)
            {
                AdvanceCounter(9999);
            }
            else
            {
                AdvanceCounter(Time.deltaTime);
            }
        }

        // Deal with NPCs
        if (NPCMoveCount < NPCMoveCountMaxNow)
        {
            AdvanceNPCMoveCounter(Time.deltaTime);
        }
    }