Exemple #1
0
    public IGameEventSubject GetGameEventSub(GameEventType eventType)
    {
        IGameEventSubject sub = null;

        if (mGameEvents.ContainsKey(eventType))
        {
            sub = mGameEvents[eventType];
        }
        else
        {
            switch (eventType)
            {
            case GameEventType.EnemyKilled:
                sub = new EnemyKilledSubject();
                mGameEvents.Add(GameEventType.EnemyKilled, sub);
                break;

            case GameEventType.SoldierKilled:
                sub = new SoldierKilledSubject();
                mGameEvents.Add(GameEventType.SoldierKilled, sub);
                break;

            case GameEventType.NewStage:
                sub = new NewStageSubject();

                mGameEvents.Add(GameEventType.NewStage, sub);
                break;

            default:
                Debug.LogError("没有对应被观察事件类型:" + eventType + "的主题类!");
                break;
            }
        }
        return(sub);
    }
Exemple #2
0
        private IGameEventSubject GetGameEventSubject(ENUM_GameEvent emGameEvent)
        {
            if (m_GameEvents.ContainsKey(emGameEvent))
            {
                return(m_GameEvents[emGameEvent]);
            }

            IGameEventSubject rtsSubject = null;

            switch (emGameEvent)
            {
            case ENUM_GameEvent.EnemyKilled:
                rtsSubject = new EnemyKilledSubject();
                break;

            case ENUM_GameEvent.SoldierKilled:
                rtsSubject = new SoldierKilledSubject();
                break;

            case ENUM_GameEvent.SoldierUpgate:
                rtsSubject = new SoldierUpgateSubject();
                break;

            case ENUM_GameEvent.NewStage:
                rtsSubject = new NewStageSubject();
                break;

            default:
                Debug.Log("还没有针对[" + emGameEvent + "]指定要产生的Subject类");
                return(null);
            }

            m_GameEvents.Add(emGameEvent, rtsSubject);
            return(rtsSubject);
        }
	// 設定觀察的主題
	public override	void SetSubject( IGameEventSubject theSubject )
	{
		if( theSubject is SoldierKilledSubject )
			m_SoldierKilledSubject = theSubject as SoldierKilledSubject;
		if( theSubject is EnemyKilledSubject)
			m_EnemyKilledSubject = theSubject as EnemyKilledSubject;
	}
Exemple #4
0
    /// <summary>
    /// 获取游戏事件的主题
    /// </summary>
    /// <param name="emGameEvnet"></param>
    /// <returns></returns>
    private IGameEventSubject GetGameEventSubject(ENUM_GameEvent emGameEvnet)
    {
        // 判断库里是否存在这个监听
        if (m_GameEvents.ContainsKey(emGameEvnet))
        {
            return(m_GameEvents[emGameEvnet]);
        }

        IGameEventSubject pSujbect = null;

        switch (emGameEvnet)
        {
        /*************根据对应的枚举生成不同的子类**************/
        case ENUM_GameEvent.Null:

            break;

        default:
            Debug.LogError("无对应子类模块关联");
            return(null);
        }

        m_GameEvents.Add(emGameEvnet, pSujbect);
        return(pSujbect);
    }
    private IGameEventSubject GetGameEvent(GameEventType eventType)
    {
        if (mGameEvents.ContainsKey(eventType) == false)
        {
            switch (eventType)
            {
            case GameEventType.EnemyKilled:
                mGameEvents.Add(GameEventType.EnemyKilled, new EnemyKilledSubject());
                break;

            case GameEventType.NewStage:
                mGameEvents.Add(GameEventType.NewStage, new NewStageSubject());

                break;

            case GameEventType.SoldierKilled:
                mGameEvents.Add(GameEventType.SoldierKilled, new SoldierKilledSubject());
                break;

            default:
                Debug.LogError("没有对应事件类型");
                break;
            }
        }
        IGameEventSubject sub = mGameEvents[eventType];

        return(sub);
    }
Exemple #6
0
    public void NotifySubject(GameEventType eventType)
    {
        IGameEventSubject sub = GetGameEvent(eventType);

        if (sub != null)
        {
            sub.Notify();
        }
    }
Exemple #7
0
    /// <summary>
    /// 广播
    /// </summary>
    /// <param name="eventType"></param>
    /// <param name="args"></param>
    public void NotifySubject(GameEventType eventType, params int[] args)
    {
        IGameEventSubject subject = GetGameEventSubject(eventType);

        if (subject == null)
        {
            return;
        }
        subject.Notify(args);
    }
Exemple #8
0
    /// <summary>
    /// 触发
    /// </summary>
    /// <param name="gameEventType"></param>
    public void NotifySubject(GameEventType gameEventType)
    {
        IGameEventSubject sub = GetGameEventSubject(gameEventType);

        if (sub == null)
        {
            return;
        }
        sub.Notify();
    }
Exemple #9
0
    public void NotifySubjects(GameEventType eventType)
    {
        IGameEventSubject sub = GetGameEventSub(eventType);

        if (sub == null)
        {
            return;
        }
        sub.NotifyObserver();
    }
    /// <summary>
    /// 发布消息,带参数
    /// </summary>
    /// <param name="eventType">消息类型</param>
    /// <param name="paremter">需要传递的参数(Object方便转换,比如Struct或者Class)</param>
    public void NotyfySubject(GameEventType eventType, System.Object paremter)
    {
        IGameEventSubject sub = GetGameEventSub(eventType);

        if (sub == null)
        {
            return;
        }
        sub.Notify(paremter);
    }
Exemple #11
0
    public void RemoveObserver(GameEventType eventType, IGameEventObserver observer)
    {
        IGameEventSubject sub = GetGameEvent(eventType);

        if (sub != null)
        {
            sub.RemoveObserver(observer);
            observer.SetSubject(null);
        }
    }
Exemple #12
0
    /// <summary>
    /// 移除
    /// </summary>
    /// <param name="eventType"></param>
    /// <param name="observer"></param>
    public void RemoveObserver(GameEventType eventType, IGameEventObserver observer)
    {
        IGameEventSubject subject = GetGameEventSubject(eventType);

        if (subject == null)
        {
            return;
        }
        subject.RemoveObserver(observer);
        observer.SetSubject(null);
    }
 // 設定觀察的主題
 public override void SetSubject(IGameEventSubject theSubject)
 {
     if (theSubject is SoldierKilledSubject)
     {
         m_SoldierKilledSubject = theSubject as SoldierKilledSubject;
     }
     if (theSubject is EnemyKilledSubject)
     {
         m_EnemyKilledSubject = theSubject as EnemyKilledSubject;
     }
 }
    // 替某一主题注册一个观測者
    public void RegisterObserver(ENUM_GameEvent emGameEvnet, IGameEventObserver Observer)
    {
        // 取得事件
        IGameEventSubject Subject = GetGameEventSubject(emGameEvnet);

        if (Subject != null)
        {
            Subject.Attach(Observer);
            Observer.SetSubject(Subject);
        }
    }
Exemple #15
0
    //移除
    public void RemoveObserver(GameEventType gameEventType, IGameEventObserver eventObserver)
    {
        IGameEventSubject sub = GetGameEventSubject(gameEventType);

        if (sub == null)
        {
            return;
        }
        sub.RemoveObserver(eventObserver);
        eventObserver.SetSubject(null);
    }
    public void RegisterObserver(GameEventType eventType, IGameEventObserver observer)
    {
        IGameEventSubject sub = GetGameEvent(eventType);

        if (sub == null)
        {
            return;
        }
        sub.RegisterObserver(observer);
        observer.SetSubject(sub);
    }
Exemple #17
0
    /// <summary>
    /// 给某一个主题注册观察者
    /// </summary>
    /// <param name="emGameEvnet"></param>
    /// <param name="Observer"></param>
    public void RegisterObserver(ENUM_GameEvent emGameEvnet, IGameEventObserver Observer)
    {
        IGameEventSubject Subject = GetGameEventSubject(emGameEvnet);

        //当事件主题不为空,注册进去
        if (Subject != null)
        {
            Subject.Attach(Observer);
            Observer.SetSubject(Subject);
        }
    }
    // 注册一个事件
    private IGameEventSubject GetGameEventSubject(ENUM_GameEvent emGameEvnet)
    {
        // 是否已經存在
        if (m_GameEvents.ContainsKey(emGameEvnet))
        {
            return(m_GameEvents[emGameEvnet]);
        }

        // 产生对应的GameEvent
        IGameEventSubject pSujbect = null;

        switch (emGameEvnet)
        {
        case ENUM_GameEvent.EnemyKilled:
            pSujbect = new EnemyKilledSubject();
            break;

        case ENUM_GameEvent.SoldierKilled:
            pSujbect = new SoldierKilledSubject();
            break;

        case ENUM_GameEvent.SoldierUpgate:
            pSujbect = new SoldierUpgateSubject();
            break;

        case ENUM_GameEvent.NewStage:
            pSujbect = new NewStageSubject();
            break;

        default:
            Debug.LogWarning("还沒有针对[" + emGameEvnet + "]指定要产生的Subject类别");
            return(null);
        }

        // 加入后并回传
        m_GameEvents.Add(emGameEvnet, pSujbect);
        return(pSujbect);
    }
Exemple #19
0
    public void RemoveObserver(GameEventType eventType, IGameEventObserver observer)
    {
        //if (mGameEvents.ContainsKey(eventType))
        //{
        //    IGameEventSubject sub = mGameEvents[eventType];
        //    sub.RemoveObserver(observer);  //注册sub事件的观察者
        //    observer.SetSubject(null); // 设置观察者观察的主题。
        //}
        //else
        //{
        //    Debug.LogError("没有对应被观察事件类型:" + eventType + "的主题类!");

        //}

        IGameEventSubject sub = GetGameEventSub(eventType);

        if (sub == null)
        {
            return;
        }
        sub.RemoveObserver(observer); //注册sub事件的观察者
        observer.SetSubject(null);    // 设置观察者观察的主题。
    }
Exemple #20
0
    // 註冊一個事件
    private IGameEventSubject GetGameEventSubject(ENUM_GameEvent emGameEvnet)
    {
        // 是否已經存在
        if (m_GameEvents.ContainsKey(emGameEvnet))
        {
            return(m_GameEvents[emGameEvnet]);
        }


        // 產生對映的GameEvent
        IGameEventSubject pSujbect = null;

        switch (emGameEvnet)
        {       /*
                 * case ENUM_GameEvent.EnemyKilled:
                 * pSujbect = new EnemyKilledSubject();
                 * break;
                 * case ENUM_GameEvent.SoldierKilled:
                 * pSujbect = new SoldierKilledSubject();
                 * break;
                 * case ENUM_GameEvent.SoldierUpgate:
                 * pSujbect = new SoldierUpgateSubject();
                 * break;
                 * case ENUM_GameEvent.NewStage:
                 * pSujbect = new NewStageSubject();
                 * break;
                 */
        default:
            Debug.LogWarning("還沒有針對[" + emGameEvnet + "]指定要產生的Subject類別");
            return(null);
        }

        // 加入後並回傳
        m_GameEvents.Add(emGameEvnet, pSujbect);
        return(pSujbect);
    }
Exemple #21
0
 public override void SetSubject(IGameEventSubject subject)
 {
     return;
 }
Exemple #22
0
 public override void SetSubject(IGameEventSubject sub)
 {
     NewDaySubject = sub as NewDaySubject;
 }
	public abstract	void SetSubject( IGameEventSubject Subject );
	// 設定觀察的主題
	public override	void SetSubject( IGameEventSubject Subject )
	{
		m_Subject = Subject as NewStageSubject;
	}
 public override void SetSubject(IGameEventSubject sub)
 {
     mSubject = sub as PlayerOnHurtSubject;
 }
Exemple #26
0
 public override void SetSubject(IGameEventSubject sub)
 {
     mSubject = sub as NewStageSubject;
 }
	// 設定觀察的主題
	public override	void SetSubject( IGameEventSubject Subject )
	{
		m_Subject = Subject as EnemyKilledSubject;
	}
 public override void SetSubject(IGameEventSubject eventSubject)
 {
 }
 // 设定观察的主题
 public override void SetSubject(IGameEventSubject Subject)
 {
     m_Subject = Subject as SoldierKilledSubject;
 }
 public override void SetSubject(IGameEventSubject sub)
 {
     mSubject = sub as CheckPullWaterSubject;
 }
	// 設定觀察的主題
	public override	void SetSubject( IGameEventSubject Subject )
	{
		m_Subject = Subject as SoldierKilledSubject;
	}
 public override void SetSubject(IGameEventSubject sub)
 {
     //m_Subject = sub as EnemyKilledSubject;
 }
 public abstract void SetSubject(IGameEventSubject theSubject);
Exemple #34
0
 public override void SetSubject(IGameEventSubject subject)
 {
     mSubject = subject as EnemyKilledSubject;;
 }
 public abstract void SetSubject(IGameEventSubject sub);
	// 設定觀察的主題
	public override	void SetSubject( IGameEventSubject Subject )
	{
		m_Subject = Subject as SoldierUpgateSubject;
	}