// common accept effect
    public void AcceptEffect(RunState runState)
    {
        int chosenJumpPower = GameObject.FindObjectOfType <JumpArrow>().GetJumpPower();

        runState.jumpPower = chosenJumpPower;
        runState.IncreaseEnergy(-energyCost);
        // make thought-specific effects
        CustomAcceptEffect(runState);
    }
    // for when the player enters the jump Pad
    public void EnterJumpPad(ActivityPlatform activityPlatform)
    {
        // if failed tutorial, try again
        if (runState.timeSteps == 0 && runState.rhythmCombo == 0)
        {
            gameManager.showRhythmTutorial = true;
            gameManager.StartRun();
        }
        // if done, end run (and skip the rest of the procedure)
        if (runState.done)
        {
            gameManager.EndRun(runState);
            return;
        }
        // trigger end activity animation
        player.GetComponent <Animator>().SetTrigger("finishActivity");

        // Zoom out for jump
        camera.ZoomOut();

        if (activityPlatform != null)
        {
            // stop rhythm game
            if (runState.CurrentActivityPlatform())
            {
                rhythmManager.StopRhythm();
            }
        }

        // regenerate energy - ABORTED DUE TO ENERGY = COMBO
        runState.IncreaseEnergy(gameManager.profile.energyRegen);

        // cap energy
        // runState.energy = System.Math.Min(runState.energy, gameManager.profile.energyCap);

        // DEPRECATED  - now thru thought costs/ visibility + randomized heights
        // emotions take effect on difficulty of jumping to activities
        // (by adjusting height of current platform)
        // activityPlatform.Raise(runState.GetRaiseAmount());

        // spawn new set of platforms
        List <Activity> activities = SelectActivities();

        Debug.Assert(activities.Count() < 5);
        for (int i = 0; i < activities.Count(); i++)
        {
            SpawnPlatform(activities[i], i + 1);
        }
        SpawnPlatform(SelectDefaultActivity(), 0);
        SpawnPlatform(SelectBreakdownActivity(), -1);
        // clear out all other animation triggers
        player.GetComponent <Animator>().ResetTrigger(StartJump);
        player.GetComponent <Animator>().ResetTrigger(ActivityFail);
        player.GetComponent <Animator>().ResetTrigger(StartActivity);
        player.GetComponent <Animator>().SetBool(ChantBeforeBed, GameManager.Instance.profile.meditateBeforeBed);
        player.GetComponent <Animator>().SetBool(ExerciseKick, GameManager.Instance.profile.exerciseMartialArts);
    }
 // common reject effect
 public void RejectEffect(RunState runState, int rejectCost)
 {
     if (rejectCost == 0)
     {
         return;
     }
     // if we reject a thought with no energy and nowhere left to go, explode emotions
     if (runState.energy < rejectCost)
     {
         const int explosion = 5;
         runState.emotions.Add(EmotionType.anxiety, explosion);
         runState.emotions.Add(EmotionType.frustration, explosion);
         runState.emotions.Add(EmotionType.despair, explosion);
     }
     // drain energy
     runState.IncreaseEnergy(-rejectCost);
     // make thought-specific effects
     CustomRejectEffect(runState);
 }
    public void OnSuppress(RunState runState)
    {
        // AudioSource audioSource = gameObject.GetComponent<AudioSource>();
        // audioSource.clip = Resources.Load<AudioClip>("drum_kit/Crash_Cymbal");

        // you can hit them invisibly!
        if (this.isInvisibleHit)
        {
            StartCoroutine(HitAfterDelay(0, runState));
            runState.CurrentActivityPlatform().unSuppressedEmotions.Add(emotionType);
        }
        else
        {
            // if not hit, fail silently
            runState.IncreaseEnergy(-1);
            runState.emotions.Add(emotionType, 1);
            Instantiate(missPrefab, transform.position, Quaternion.identity, hitArea);
            runState.BreakCombo();
        }
    }
 public override void HitEffect(RunState runState)
 {
     runState.IncreaseEnergy(1);
 }