Пример #1
0
        private void DefineStateMachine()
        {
            stateMachine = new StateMachine();
            //Define states
            startGame = new StartGameState(startScreen, startFartButton);
            var fart      = new FartState(fartParticleSystem, farterAnimator, poopChance);
            var lidOn     = new LidOnState(jar, lid);
            var lidClosed = new LidClosedState();
            var poop      = new PoopState(poopScreen);

            //Define transitions
            At(fart, startGame, FartStarted());
            At(lidOn, fart, LidIsOn());
            At(lidClosed, lidOn, LidClosed());
            At(poop, fart, Pooped());


            void At(IState to, IState from, Func <bool> condition) => stateMachine.AddTransition(@from, to, condition);

            //Define predicates as Func<bool>
            Func <bool> FartStarted() => () => startFartButton.fartPressed && Time.timeScale != 0;
            Func <bool> LidIsOn() => () => jar.GetComponentInChildren <LidTrigger>().lidOn;
            Func <bool> LidClosed() => () => lid.GetComponent <LidTwist>().jarClosed;
            Func <bool> Pooped() => () => pooped;
        }
Пример #2
0
    IEnumerator Poop()
    {
        poopState = PoopState.Cooldown;

        GameObject poop = Instantiate(poopPrefab, TournamentManager.Instance.playersParent.transform);

        poop.transform.position = new Vector3(transform.position.x, 0f, transform.position.z);
        yield return(new WaitForSeconds(poopCooldown));

        poopState = PoopState.CanPoop;
    }