Example #1
0
        // 根据Canvas状态变化,调用
        // Wake(), Sleep()函数
        // 分别调用SpriteSleeperImage的Sleep()函数
        protected void OnCanvasHierarchyChanged()
        {
            if (_hasCanvas)
            {
                // 根据Canvas,设置SleepState
                // 如果状态发生了变化
                SleepState state = (_canvas.isActiveAndEnabled) ? SleepState.Awake : SleepState.Sleeping;
                if (state != _currentSleepState)
                {
                    _currentSleepState = state;

                    if (state == SleepState.Awake)
                    {
                        //
                        Wake();
                    }
                    else
                    {
#if UNITY_EDITOR
                        if (!_canvas.gameObject.activeInHierarchy)
                        {
                            if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode &&
                                UnityEditor.EditorApplication.isPlaying)
                            {
                                Debug.LogWarning("Did you know it's more efficient to disable the Canvas component than to deactivate the GameObject? Read more here https://unity3d.com/learn/tutorials/topics/best-practices/other-ui-optimization-techniques-and-tips");
                            }
                        }
#endif
                        Sleep();
                    }
                }
            }
        }
Example #2
0
    // Start is called before the first frame update
    void Start()
    {
        manager = new HFSMManagerSystem();

        HomeSystem homeSystem = new HomeSystem("HomeSystem", manager);

        ReadBookState readBookState = new ReadBookState("ReadBookState", homeSystem, systemText, stateText);

        readBookState.AddTransition("Cook", "CookState");
        CookState cookState = new CookState("CookState", homeSystem, systemText, stateText);

        cookState.AddTransition("Sleep", "SleepState");
        SleepState sleepState = new SleepState("SleepState", homeSystem, systemText, stateText);

        sleepState.AddTransition("ReadBook", "ReadBookState");

        homeSystem.AddState(readBookState);
        homeSystem.AddState(cookState);
        homeSystem.AddState(sleepState);

        MarketSystem marketSystem = new MarketSystem("MarketSystem", manager);

        BuyState buyState = new BuyState("BuyState", marketSystem, systemText, stateText);

        buyState.AddTransition("Pay", "PayState");
        PayState payState = new PayState("PayState", marketSystem, systemText, stateText);

        payState.AddTransition("Buy", "BuyState");

        marketSystem.AddState(buyState);
        marketSystem.AddState(payState);

        manager.AddSubSystem(homeSystem);
        manager.AddSubSystem(marketSystem);
    }
Example #3
0
    void Awake()
    {
        homeSet         = false;
        survivorFood    = 0;
        survivorWater   = 0;
        survivorBandage = 0;
        survivorScrap   = 0;

        survivorHealth    = 100;
        survivorHunger    = 90;
        survivorThirst    = 90;
        survivorTiredness = 90;

        wayPointsList = new List <Vector3>();

        collectState  = new CollectState(this);
        buildState    = new BuildState(this);
        nourrishState = new NourrishState(this);
        fightState    = new FightState(this);
        repairState   = new RepairState(this);
        sleepState    = new SleepState(this);
        homeState     = new HomeState(this);
        healState     = new HealState(this);
        currentMap    = GameObject.Find("Map");
    }
Example #4
0
    // Use this for initialization
    void Start()
    {
        states = new List <State>();
        //Patroll state
        List <Transition> patrolltrans = new List <Transition>();

        patrolltrans.Add(new SeeMonsterTrans(gameObject));
        PatrollState patroll = new PatrollState(gameObject, patrolltrans);

        states.Add(patroll);

        //Scream state
        List <Transition> screamtrans = new List <Transition>();

        screamtrans.Add(new SeeMonsterTrans(gameObject));
        screamtrans.Add(new SeeAngerTrans(gameObject));
        screamtrans.Add(new TimePassTrans(gameObject, 25f, "sleep"));
        ScreamState scream = new ScreamState(gameObject, screamtrans, 10f);

        states.Add(scream);

        //Sleep state
        List <Transition> sleeptrans = new List <Transition>();

        sleeptrans.Add(new TimePassTrans(gameObject, 40f, "patroll"));
        SleepState sleep = new SleepState(gameObject, sleeptrans);

        states.Add(sleep);

        initialState        = patroll;
        currentState        = patroll;
        triggeredTransition = null;
        gameObject.GetComponent <GraphPathFollowing>().astar_target = null;      //Set to null just in case
        initialSpeed = gameObject.GetComponent <Agent>().maxSpeed;
    }
Example #5
0
 // Start is called before the first frame update
 void Awake()
 {
     navMeshAgent = GetComponent <UnityEngine.AI.NavMeshAgent>();
     normalState  = new NormalState(this);
     hungryState  = new HungryState(this);
     sleepState   = new SleepState(this);
     runAwayState = new RunAwayState(this);
 }
Example #6
0
    private SleepState()
    {
        if (_instance != null)
        {
            return;
        }

        _instance = this;
    }
Example #7
0
    void InitFSM()
    {
        fsm = new FSMSystem();
        FSMState sleepState = new SleepState(fsm);

        sleepState.AddTransition(Transition.Open, StateID.Idle);


        FSMState IdleState = new IdleState(fsm);

        IdleState.AddTransition(Transition.Close, StateID.Sleep);
        IdleState.AddTransition(Transition.SeePlayer, StateID.Patrol);
        IdleState.AddTransition(Transition.Shopping, StateID.GoOut);
        IdleState.AddTransition(Transition.StartPlay, StateID.Play);

        FSMState patrolState = new PatrolState(fsm);

        patrolState.AddTransition(Transition.Open, StateID.Idle);
        patrolState.AddTransition(Transition.SeePlayer, StateID.Chase);


        FSMState chaseState = new ChaseState(fsm);

        chaseState.AddTransition(Transition.LostPlayer, StateID.Patrol);
        chaseState.AddTransition(Transition.FindEnemy, StateID.Bark);

        FSMState barkState = new BarkState(fsm);

        barkState.AddTransition(Transition.LostPlayer, StateID.Patrol);

        FSMState gooutState = new GoOutState(fsm);

        gooutState.AddTransition(Transition.Back, StateID.ComeBack);
        gooutState.AddTransition(Transition.SeePlayer, StateID.Patrol);

        FSMState comebackState = new ComeBackState(fsm);

        comebackState.AddTransition(Transition.Open, StateID.Idle);

        FSMState playState = new PlayState(fsm);

        playState.AddTransition(Transition.Open, StateID.Idle);
        playState.AddTransition(Transition.Close, StateID.Sleep);
        playState.AddTransition(Transition.SeePlayer, StateID.Patrol);
        playState.AddTransition(Transition.Shopping, StateID.GoOut);

        fsm.AddState(sleepState);
        fsm.AddState(IdleState);
        fsm.AddState(patrolState);
        fsm.AddState(chaseState);
        fsm.AddState(barkState);
        fsm.AddState(comebackState);
        fsm.AddState(gooutState);
        fsm.AddState(playState);
    }
Example #8
0
 private bool HandleWake(uint ms)
 {
     if (this.lastMs < ms)
     {
         return(false);
     }
     if (this.WokeUp != null && this.SleepLevel != SleepState.None)
     {
         this.WokeUp.Invoke(null, this.SleepLevel);
     }
     this.SleepLevel = SleepState.None;
     return(true);
 }
Example #9
0
    /// <summary>
    /// public function for triggering dreams on eye close.
    /// </summary>
    public void Sleep()
    {
        sleepState = SleepState.asleep;

        if (DreamController.loadedScene == Scenes.Cell)
        {
            r_dreamController.StartDream();
        }
        else
        {
            r_dreamController.EndDream();
        }
    }
Example #10
0
        public void StateSequenceCheckingLogEntryVisitorTest_FailingCase()
        {
            var stateA  = new SleepState(2);
            var stateB  = new TurnState(0.0, 1.0);
            var checker = new StateSequenceCheckingLogEntryVisitor();

            checker.RegisterAsVisitor(brain);
            checker.StateTypeSequence.Enqueue(stateA.GetType());
            checker.StateTypeSequence.Enqueue(stateB.GetType());

            brain.CurrentState = stateB;
            brain.CurrentState = stateA;
            Assert.False(checker.AreAllStatesVisited());
        }
Example #11
0
    private void Awake()
    {
        sleepState  = new SleepState(this);
        outState    = new OutState(this);
        useState    = new UseState(this);
        wanderState = new WanderState(this);

        timesRefused = 1;
        navMeshAgent = GetComponent <NavMeshAgent>();
        time         = clock.GetComponent <DigitalGameTimeClock>().currentTime;

        prefKeys = new float[activities.Length];
        SortPreferences();
    }
Example #12
0
        public static void StateDemo()
        {
            MonsterContext Context     = new MonsterContext();
            IMonsterState  SleepState  = new SleepState();
            IMonsterState  AttackState = new AttackState();
            IMonsterState  SpeakState  = new SpeakState();

            Context.SetState(AttackState);
            Context.Action();
            Context.SetState(SleepState);
            Context.Action();
            Context.SetState(SpeakState);
            Context.Action();
        }
Example #13
0
    protected override void CheckTransitions(FiniteStateMachine controller)
    {
        if (playerThrown)
        {
            ResetValues();
            //Transition
            //PatrolState state = GetComponent<PatrolState>();
            //controller.TransitionToState(state);

            SleepState state = GetComponent <SleepState>();
            state.StartAnimation();
            controller.TransitionToState(state);
        }
    }
Example #14
0
 void PopSleep()
 {
     InSleepCycle     = false;
     sleepState       = SleepState.None;
     body.isKinematic = false;
     if (TargetBed != null)
     {
         Physics.IgnoreCollision(ball.Sphere, TargetBed.GetComponent <Collider>(), false);
     }
     ball.LockToGround       = true;
     FaceDirectionOfMovement = true;
     moveTransform.parent    = null;
     billboard.faceCamera    = true;
     walk.enabled            = true;
     PlayFaceAnimation("idle");
 }
Example #15
0
 public void HandleBreakStart(uint ms, double minutes)
 {
     if (this.SleepLevel != SleepState.None)
     {
         return;
     }
     if (ms < this.breakLimit)
     {
         return;
     }
     this.SleepLevel = SleepState.Break;
     if (this.BreakLimitReached != null)
     {
         this.BreakLimitReached.Invoke(null, (int)minutes);
     }
 }
Example #16
0
 private void HandleEodStart(uint ms, double minutes)
 {
     if (this.SleepLevel != SleepState.Break)
     {
         return;
     }
     if (ms < this.limit)
     {
         return;
     }
     this.SleepLevel = SleepState.EndOfDay;
     if (this.IdleLimitReached != null)
     {
         this.IdleLimitReached.Invoke(null, (int)minutes);
     }
 }
Example #17
0
        public void TestDetectingSequenceOfStateChanges()
        {
            var stateA = new SleepState(2);
            var stateB = new TurnState(0.0, 1.0);

            var sleepCheckerVisitor = RegisterTestLogVisitor(typeof(SleepState));
            var turnCheckerVisitor  = RegisterTestLogVisitor(typeof(TurnState));

            brain.CurrentState = stateA;
            for (int i = 0; i < 2; i++)
            {
                env.Tick();
            }
            brain.CurrentState = stateB;

            Assert.True(sleepCheckerVisitor.DidEnterCheckedState);
            Assert.True(turnCheckerVisitor.DidEnterCheckedState);
        }
Example #18
0
    public void WakeUp()
    {
        sleepState = SleepState.lyingAwake;

        if (DreamController.loadedScene == Scenes.Mountain)
        {
            dreamTransform = GameObject.Find("MountainStandingTransform").transform;
            SetPosition(dreamTransform);
        }
        else if (DreamController.loadedScene == Scenes.Columns)
        {
            dreamTransform = GameObject.Find("ColumnStandingTransform").transform;
            SetPosition(dreamTransform);
        }
        else if (DreamController.loadedScene == Scenes.Fire)
        {
            dreamTransform = GameObject.Find("FireStandingTransform").transform;
            SetPosition(dreamTransform);
        }
    }
Example #19
0
 private void Wake(object sender, SleepState from)
 {
     Logger.Log($"Waking from {from}");
     if (from == SleepState.Break && this.BreakStart.HasValue)
     {
         try
         {
             var start = this.BreakStart.Value;
             this.BreakStart = null;
             CreateToast(start, DateTime.UtcNow);
         } catch (Exception ex)
         {
             Logger.Log(ex.Message, true);
         }
     }
     else if (from == SleepState.EndOfDay)
     {
         Data.AddStartOfDay();
         this.TimerTick = TimeSpan.FromMinutes(5.0);
         this.TimerCB(null);
     }
 }
Example #20
0
        public void StateSequenceCheckingLogEntryVisitorTest_SuccessfulCase()
        {
            var stateA  = new SleepState(2);
            var stateB  = new TurnState(0.0, 1.0);
            var checker = new StateSequenceCheckingLogEntryVisitor();

            checker.RegisterAsVisitor(brain);
            checker.IgnoreIdleState = true;
            checker.StateTypeSequence.Enqueue(stateA.GetType());
            checker.StateTypeSequence.Enqueue(stateB.GetType());
            Assert.False(checker.AreAllStatesVisited());
            brain.CurrentState = stateA;
            WaitTicks(2);
            Assert.False(checker.AreAllStatesVisited());
            brain.CurrentState = stateB;
            WaitTicks(3);
            Assert.True(checker.AreAllStatesVisited());

            brain.CurrentState = stateA;
            WaitTicks(2);
            Assert.False(checker.AreAllStatesVisited());
        }
Example #21
0
    void PushSleep()
    {
        InSleepCycle = true;

        CurrentMoveSpeed = SprintSpeed;
        SleepInterrupt   = false;

        spriteLerp = billboard.gameObject.GetComponent <LerpToTarget>();
        if (spriteLerp == null)
        {
            spriteLerp = billboard.gameObject.AddComponent <LerpToTarget>();
        }

        moveTransformLerp = moveTransform.gameObject.GetComponent <LerpToTarget>();
        if (moveTransformLerp == null)
        {
            moveTransformLerp = moveTransform.gameObject.AddComponent <LerpToTarget>();
        }


        if (!isPlayerControlled && TargetBed != null && Vector3.Distance(moveTransform.position, TargetBed.transform.position) > MaxBedLerpDistance)
        {
            sleepState       = SleepState.MovingToBed;
            CurrentMoveSpeed = WalkSpeed;
            if (!SetPath(TargetBed.destination.transform.position, delegate
            {
                StartSleep();
            }))
            {
                Debug.Log("path failed");
            }
        }
        else
        {
            sleepState = SleepState.GettingIntoBed;
            StartSleep();
        }
    }
Example #22
0
    void UpdateSleep()
    {
        if (!InSleepCycle)
        {
            return;
        }

        if (isPlayerControlled)
        {
            if (Input.GetButtonDown("Interact"))
            {
                SleepInterrupt = true;
            }
        }

        if (SleepInterrupt && sleepState != SleepState.WakingUp)
        {
            sleepState = SleepState.WakingUp;
            wakeStart  = Time.time;

            if (isPlayerControlled)
            {
                Time.timeScale = 1;
                musicSource.Stop();
                Global.Instance.AudioWakeUp(1);
                cam.LookControlEnabled = true;
            }

            if (TargetBed != null)
            {
                moveTransformLerp.moveTransform   = moveTransform;
                moveTransformLerp.targetTransform = TargetBed.wakeTarget;
                moveTransformLerp.lerpType        = LerpToTarget.LerpType.Curve;
                moveTransformLerp.duration        = spriteLerp.duration;
                moveTransformLerp.LerpRotation    = false;
                moveTransformLerp.enabled         = true;
                moveTransformLerp.OnLerpEnd       = delegate
                {
                    PopState();
                };
            }
            else
            {
                PopState();
            }
        }

        switch (sleepState)
        {
        case SleepState.MovingToBed:
            break;

        case SleepState.GettingIntoBed:
            if (isPlayerControlled)
            {
                if (Time.unscaledTime - start < sleepCameraLerpDurationIn)
                {
                    float alpha = (Time.unscaledTime - start) / sleepCameraLerpDurationIn;
                    cam.lookInput.y = Mathf.Lerp(cam.lookInput.y, 90, alpha);
                }
            }
            break;

        case SleepState.Sleeping:
            Wake = Mathf.Clamp(Wake + WakeGainRate * Time.deltaTime, 0, WakeFull);
            if (Time.time - SleepStartTime > SleepDuration)
            {
                SleepInterrupt = true;
            }
            if (isPlayerControlled)
            {
                if (Time.unscaledTime - start < sleepTODWait)
                {
                    float alpha = (Time.unscaledTime - start) / sleepTODWait;
                    Global.Instance.CurrentTimeOfDay = todStart + sleepTODDuration * alpha;
                    Global.Instance.UpdateTimeOfDay();
                }
            }
            break;

        case SleepState.WakingUp:
            if (isPlayerControlled)
            {
                if (Time.unscaledTime - wakeStart < sleepCameraLerpDurationOut)
                {
                    float alpha = (Time.unscaledTime - wakeStart) / sleepCameraLerpDurationOut;
                    cam.lookInput.y = Mathf.Lerp(cam.lookInput.y, 15, alpha);
                }
            }
            break;

        default:
            break;
        }
    }
Example #23
0
    void StartSleep()
    {
        sleepState              = SleepState.GettingIntoBed;
        CurrentMoveSpeed        = 0;
        body.isKinematic        = true;
        ball.LockToGround       = false;
        FaceDirectionOfMovement = false;
        billboard.faceCamera    = false;
        walk.enabled            = false;

        spriteLerp.moveTransform = billboard.transform;
        if (TargetBed != null && Vector3.Distance(moveTransform.position, TargetBed.transform.position) < MaxBedLerpDistance)
        {
            Physics.IgnoreCollision(ball.Sphere, TargetBed.GetComponent <Collider>(), true);
            moveTransform.parent              = TargetBed.sleepTarget;
            moveTransformLerp.moveTransform   = moveTransform;
            moveTransformLerp.targetTransform = TargetBed.sleepTarget;
            moveTransformLerp.lerpType        = LerpToTarget.LerpType.Curve;
            moveTransformLerp.duration        = LerpDuration;
            moveTransformLerp.LerpRotation    = false;
            moveTransformLerp.OnLerpEnd       = null;
            moveTransformLerp.enabled         = true;
            spriteLerp.targetTransform        = TargetBed.sleepTarget;
            spriteLerp.WorldTarget            = false;
        }
        else
        {
            spriteLerp.WorldTarget           = true;
            spriteLerp.targetPositionWorld   = new Vector3(moveTransform.position.x, Global.Instance.GlobalSpriteOnGroundY, moveTransform.position.z);
            spriteLerp.targetRotationForward = Vector3.up;
            spriteLerp.targetRotationUp      = moveTransform.forward;
        }
        spriteLerp.lerpType     = LerpToTarget.LerpType.Curve;
        spriteLerp.duration     = LerpDuration;
        spriteLerp.LerpRotation = true;
        spriteLerp.enabled      = true;
        spriteLerp.OnLerpEnd    = delegate
        {
            if (!SleepInterrupt)
            {
                sleepState     = SleepState.Sleeping;
                SleepStartTime = Time.time;
                PlayFaceAnimation("sleep");
                if (isPlayerControlled)
                {
                    Time.timeScale = sleepTimescale;
                    start          = Time.unscaledTime;
                }
            }
        };



        if (isPlayerControlled)
        {
            Zone zone = Global.Instance.GetZone(gameObject);
            musicSource      = zone.GetComponent <AudioSource>();
            musicSource.clip = sleepyMusic;
            musicSource.Play();
            Global.Instance.AudioGoSleep(1);
            cam = Global.Instance.cameraController;
            cam.LookControlEnabled = false;
            start    = Time.unscaledTime;
            todStart = Global.Instance.CurrentTimeOfDay;
        }
    }
Example #24
0
    public bool UpdateSleepState(Transform player, FirstPersonController fpsController)
    {
        switch (sleepState)
        {
        case SleepState.lyingGoingToSleep:

            if (DreamController.loadedScene == Scenes.Cell && CheckPlayerFacing(player))
            {
                sleepState = SleepState.goingUp;
            }
            break;

        case SleepState.lyingAwake:
            r_dreamController.SetActiveScene();

            if (CheckPlayerFacing(player))
            {
                sleepState = SleepState.goingUp;
            }
            break;

        case SleepState.goingUp:
            Vector3 standUpPosition;
            Vector3 standUpRotation;

            if (DreamController.loadedScene == Scenes.Cell)
            {
                standUpPosition = cellStandingTransform.position;
                standUpRotation = cellStandingTransform.rotation.eulerAngles;
            }
            else if (DreamController.loadedScene != Scenes.Cell)
            {
                standUpPosition = dreamTransform.position;
                standUpRotation = dreamTransform.rotation.eulerAngles;
            }
            else
            {
                standUpPosition = transform.position;
                standUpRotation = Vector3.zero;
            }

            if (PlayerLerp(player, fpsController, standUpPosition, standUpRotation))
            {
                sleepState = SleepState.standing;
                fpsController.ResetMouseLook();
            }
            return(true);


        case SleepState.standing:
            _controller.enabled = true;
            break;

        case SleepState.goingDown:

            if (DreamController.loadedScene == Scenes.Cell)
            {
                sleepingPosition = cellSleepTransform.position;
                sleepingRotation = cellSleepTransform.rotation.eulerAngles;
            }

            if (PlayerLerp(player, fpsController, sleepingPosition, sleepingRotation))
            {
                sleepState = SleepState.lyingGoingToSleep;
                fpsController.ResetMouseLook();
            }
            return(true);

        case SleepState.asleep:
            //wait for a trigger from another script, such as text finishing on DreamController
            break;
        }

        return(false);
    }
Example #25
0
 //Vector3 zero = new Vector3(0, 0, 0);
 /// <summary>
 /// public function for sending the player to sleep.
 /// </summary>
 public void LieDown(Vector3 position, Vector3 rotation)
 {
     sleepState       = SleepState.goingDown;
     sleepingPosition = position;
     sleepingRotation = rotation;
 }
    // Update is called once per frame
    void Update()
    {
        sleepState = r_sleepingScript.sleepState;

        switch (eye)
        {
        case Lid.opening:
            if (progress < 1)
            {
                MoveEyelid(topEyelid_Rect, eyeOpenSpeed * 2);
                MoveEyelid(bottomEyelid_Rect, -eyeOpenSpeed);

                blur.blurSize = negProgress * blurSpeed;
                r_mouseLook.EyelidSlow(false, 1);
            }
            else
            {
                eye = Lid.wakeBlink;
            }
            break;

        case Lid.wakeBlink:
            if (Blink(false))
            {
                eye = Lid.open;
            }
            break;

        case Lid.open:
            if (sleepState == SleepState.lyingGoingToSleep && !blurIsOn)
            {
                eye = Lid.sleepBlink;
            }
            break;

        case Lid.sleepBlink:
            if (Blink(true))
            {
                eye = Lid.closing;
            }
            break;

        case Lid.closing:
            if (sleepState != SleepState.lyingGoingToSleep)
            {
                eye = Lid.opening;
                r_mouseLook.EyelidSlow(false, 1);
            }

            if (progress > 0.2f)
            {
                MoveEyelid(topEyelid_Rect, -eyeOpenSpeed * 1.5f);
                MoveEyelid(bottomEyelid_Rect, eyeOpenSpeed);

                blur.blurSize = negProgress * blurSpeed;
                r_mouseLook.EyelidSlow(true, progress);
            }
            else
            {
                eye = Lid.closed;
                r_mouseLook.EyelidSlow(false, 1);
                //CLOSED EYELIDS POINT
                //the PC is asleep. I need to send a message out.

                r_sleepingScript.Sleep();
            }
            break;

        case Lid.closed:
            //this causes it to wait for sleeping script
            if (sleepState == SleepState.lyingAwake)
            {
                eye = Lid.opening;
            }
            break;
        }
        progress_TopEyelid    = topEyelid_Rect.anchoredPosition.y / (max_Y_TopEyelid - normal_Y_TopEyelid);
        progress_BottomEyelid = bottomEyelid_Rect.anchoredPosition.y / (max_Y_BottomEyelid - normal_Y_BottomEyelid);
        progress = (progress_BottomEyelid + progress_TopEyelid) / 2;

        negProgress = Mathf.Abs(progress - 1);
    }
Example #27
0
 private void UpdateSleepPhaseDisplay(object sender, SleepState phase)
 {
     this.sleepPhaseLabel.Text = phase.GetType().ToString();
 }