中介者模式中的时间管理

在实际开发中,常常需要添加设定一些一段时间以后发生的事件,这里主要通过一个dictionary<delegate,float> 来处理,通过Gamefacade来进行统一管理。

管理器基类

public  class BaseManager 
{
    protected GameFacade _facade;

    public BaseManager(GameFacade facade)
    {
        this._facade = facade;
    }

    public virtual void OnInit()
    { }

    public virtual void OnUpdate()
    { }

    public virtual void OnDestory()
    { }

}

 时间管理类,构造函数传入facade,方便后期管理

public class TimeManager : BaseManager
{
    public delegate void Interval();
    private Dictionary<Interval, float> mDicinterval = new Dictionary<Interval, float>();

    public TimeManager(GameFacade facade) : base(facade)
    {
    }

    public override void OnInit()
    {
        base.OnInit();
    }

    public override void OnUpdate()
    {
        if (mDicinterval.Count > 0)
        {
            List<Interval> remove = new List<Interval>();
            foreach (KeyValuePair<Interval, float> KeyValue in mDicinterval)
            {
                if (KeyValue.Value <= Time.time)
                {
                    remove.Add(KeyValue.Key);
                }
            }
            for (int i = 0; i < remove.Count; i++)
            {
                remove[i]();
                mDicinterval.Remove(remove[i]);
            }
        }
    }

    public override void OnDestory()
    {
        base.OnDestory();
    }

    public void AddInterval(Interval interval, float time)
    {
        if (null != interval)
            mDicinterval[interval] = Time.time + time;
    }

    public void RemoveInterval(Interval interval)
    {
        if (null != interval)
        {
            if (mDicinterval.ContainsKey(interval))
            {
                mDicinterval.Remove(interval);
            }
        }
    }
}

facade类对管理类进行集合管理,此脚本挂在GameManager物体上,永远不消失,通过单利模式,其他类可以方便调用时间方法。

public class GameFacade : MonoBehaviour
{
    private static GameFacade _instance;

    public GameFacade Instance
    {
        get
        {
            if (_instance==null)
            {
                _instance=this;
            }
            return _instance;
        }
    }

    TimeManager timeMng;

    void Awake()
    {
        _instance = this;
        DontDestroyOnLoad(this.gameObject);
    }


	// Use this for initialization
	void Start ()
    {
        MngInit();
	}
	
	// Update is called once per frame
	void Update ()
    {
        MngUpdate();


        if (Input.GetKeyDown(KeyCode.A))
        {
            timeMng.AddInterval(SayOne, 10f);
            Debug.Log("添加1");
        }

        if (Input.GetKeyDown(KeyCode.B))
        {
            timeMng.AddInterval(SayTwo, 10f);
            Debug.Log("添加2");
        }

        if (Input.GetKeyDown(KeyCode.C))
        {
            timeMng.AddInterval(SayThree, 10f);
            Debug.Log("添加3");
        }

        if (Input.GetKeyDown(KeyCode.D))
        {
            timeMng.AddInterval(SayFour, 10f);
            Debug.Log("添加4");
        }
    }

    void OnDestory()
    {
        MngOnDestory();
    }

    private void MngInit()
    {
        timeMng = new TimeManager(this);

        timeMng.OnInit();
    }

    private void MngUpdate()
    {
        timeMng.OnUpdate();
    }

    private void MngOnDestory()
    {
        timeMng.OnDestory();
    }


    //要定时加入的方法
    public void SayOne()
    {
        Debug.Log("一只法克鱿");
    }
    public void SayTwo()
    {
        Debug.Log("二只法克鱿");
    }
    public void SayThree()
    {
        Debug.Log("三只法克鱿");
    }
    public void SayFour()
    {
        Debug.Log("四只法克鱿");
    }
}

 运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值