예제 #1
0
    /*
     #region 实例化UI布局管理器与视频播放管理器
     * CanvasManagerObject = GameObject.FindGameObjectWithTag("UIManager");
     *      movieManagerObject = GameObject.FindGameObjectWithTag("MovieManager");
     *     // DialogueManagerObject = GameObject.FindGameObjectWithTag("DialogueManager");
     *
     *      _UIManager = CanvasManagerObject.AddComponent<UGUIManager>();
     *      _MovieManager = movieManagerObject.AddComponent<MovieManager>();
     *      _WorkDialogManger = CanvasManagerObject.transform.GetChild(8).GetComponentInChildren<WorkDialog>();
     *
     #endregion
     *
     */

    //定义触发事件的方法。
    public void OnBellySub()
    {
        //判断是否有方法订阅了该事件,如果有则,通知
        if (OnReduceBellyPointEvent != null)
        {
            //根据情况触发通知。

            //OnSubBelly(10f);

            OnReduceBellyPointEvent.Invoke(10f);
        }
    }
예제 #2
0
    //饱食度变化协程
    IEnumerator BellyPointChangeCoroutine()
    {
        float currentBellyState;//当前饱食度状态

        // float currentBellyPoint = playerDataUtils.getBellyPoint();

        //第一次启动游戏,将会在一小时后,数值变化。

        while (true)
        {
            // Debug.Log(timePerBellyCoroutinesChange + " 秒后开始更新。。。");

            yield return(new WaitForSeconds(timePerBellyCoroutinesChange));//间隔多长时间,调用一次

            //this.OnBellySub();

            //判断当前睡眠状态,自动睡眠状态下,饱食不会降低.
            //如果为睡眠状态不调用
            //如果为清醒状态则调用

            //睡眠状态
            bool sleepState = playerDataUtils.isAutoSleep();

            if (sleepState)//当前状态为睡眠
            {
                Debug.Log("当前女主为睡眠状态,饱食管理器退出此次循环逻辑,等待下次再进行判断");
                continue; //退出此次循环,进行下一次循环
            }

            #region //数据变化逻辑


            #endregion

            //降低10点饱食度
            //根据返回的饱食度状态进行判断
            currentBellyState = playerDataUtils.ReduceBellyPoint(10f); //降低10点饱食度,返回当前饱食度数值
            //对currentBellyState进行判断
            if (currentBellyState == 0)                                /***为0,降到底,停止此次循环逻辑判断***/
            {
                // Debug.Log("饱食降到0,停止饱食管理器");

                //通知UI更新
                if (OnReduceBellyPointEvent != null)
                {
                    OnReduceBellyPointEvent.Invoke(0);
                }

                //饱食为0,考虑下次循环时饱食依旧为0时,会多调用UI更新.
                //玩家操作,可增加饱食度,
                isMoodEventNoticed = false;//重置
                //停止此次循环
                continue;
            }
            else
            {                              //饱食为0后,再次增加饱食度,后的变换情况---判断??心情协成又调用了一次.
                //可用bool值判断,是否进行.
                if (currentBellyState < 0) //当前的饱食度低于33, 心情开始降低
                {
                    //toDO
                    //通知UI更新
                    //更新饱食度进度条。。。。。subBellyPointPerHour = 5f

                    if (OnReduceBellyPointEvent != null)
                    {
                        OnReduceBellyPointEvent.Invoke(-currentBellyState);
                    }

                    // _UIManager.UpdateBellyPmgressbar(curBellyPoint);

                    //当前饱食度小于33
                    //开始降低心情值
                    //这里是用C#的事件机制来实现
                    //定义委托类型,让心情管理器模块订阅该事件,以便在饱食度低于33时通知心情管理模块

                    //注意:在下一次生命周期内,本通知只执行一次
                    if (OnReduceMoodPointEvent != null) //说明心情管理模块已经订阅该事件,
                    {
                        if (!isMoodEventNoticed)        //心情变化事件未触发
                        {
                            Debug.Log("饱食度低于33,进入饥饿状态,心情开始降低...");
                            // Debug.Log("当前饱食度:" + -currentBellyState);

                            OnReduceMoodPointEvent.Invoke(); //触发通知
                            isMoodEventNoticed = true;       //心情变换事件已经触发,在心情值高于33时,其值为false.需要在心情管理模块判断
                        }
                    }
                    else
                    {
                        //心情管理模块未订阅心情变化事件
                        Debug.Log("心情管理模块未订阅心情变化事件,请查看心情管理模块订阅");
                    }
                }
                else
                {
                    //正常变化

                    //修改心情变换事件状态为未触发.
                    isMoodEventNoticed = false;

                    //UI变化
                    //通知UI更新

                    //更新饱食度进度条。。。。。subBellyPointPerHour = 5f
                    // _UIManager.UpdateBellyPmgressbar(curBellyPoint);

                    //  Debug.Log("当前饱食度:" + currentBellyState);
                    if (OnReduceBellyPointEvent != null)
                    {
                        OnReduceBellyPointEvent.Invoke(currentBellyState);
                    }
                }
            }
        }
    }