// 移除角色
	public void RemoveCharacter(List<ICharacter> Characters, List<ICharacter> Opponents, ENUM_GameEvent emEvent)
	{
		// 分別取得可以移除及存活的角色
		List<ICharacter> CanRemoves = new List<ICharacter>();
		foreach( ICharacter Character in Characters)
		{
			// 是否陣亡
			if( Character.IsKilled() == false)
				continue;

			//  是否確認過陣亡事情
			if( Character.CheckKilledEvent()==false)			
				m_PBDGame.NotifyGameEvent( emEvent,Character );

			// 是否可以移除
			if( Character.CanRemove())
				CanRemoves.Add (Character);
		}

		// 移除
		foreach( ICharacter CanRemove in CanRemoves)
		{
			// 通知對手移除
			foreach(ICharacter Opponent in Opponents)
				Opponent.RemoveAITarget( CanRemove );

			// 釋放資源並移除
			CanRemove.Release();
			Characters.Remove( CanRemove );
		}
	}
	// 註冊一個事件
	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;
	}
示例#3
0
    //为指定事件添加监听器(添加观察者)
    public void addGameEventListener(ENUM_GameEvent emGameEvent, IGameEventListener listener)
    {
        IGameEvent gameEvent = getGameEvent(emGameEvent);

        gameEvent.addListener(listener);
        listener.setGameEvent(gameEvent);
    }
示例#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);
    }
示例#5
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);
        }
	// 通知一個GameEvent更新
	public void NotifySubject( ENUM_GameEvent emGameEvnet, System.Object Param)
	{
		// 是否存在
		if( m_GameEvents.ContainsKey( emGameEvnet )==false)
			return ;
		//Debug.Log("SubjectAddCount["+emGameEvnet+"]");
		m_GameEvents[emGameEvnet].SetParam( Param );
	}
示例#7
0
 //通知事件监听
 public void notifyGameEvent(ENUM_GameEvent emGameEvent, System.Object eventParam)
 {
     if (m_gameEvents.ContainsKey(emGameEvent))
     {
         m_gameEvents[emGameEvent].setEventParam(eventParam);
         m_gameEvents[emGameEvent].notify();
     }
 }
示例#8
0
 /// <summary>
 /// 通知主题中的观察者
 /// </summary>
 /// <param name="emGameEvnet"></param>
 /// <param name="Param"></param>
 public void NotifySubject(ENUM_GameEvent emGameEvnet, System.Object Param)
 {
     if (m_GameEvents.ContainsKey(emGameEvnet))
     {
         //子类中会有派发           在这里我们只设置参数
         m_GameEvents[emGameEvnet].SetParam(Param);
     }
 }
示例#9
0
 public void NotifySubject(ENUM_GameEvent emGameEvent, System.Object Param)
 {
     if (m_GameEvents.ContainsKey(emGameEvent) == false)
     {
         return;
     }
     m_GameEvents[emGameEvent].SetParam(Param);
 }
	// 替某一主題註冊一個觀測者
	public void RegisterObserver(ENUM_GameEvent emGameEvnet, IGameEventObserver Observer)
	{
		// 取得事件
		IGameEventSubject Subject = GetGameEventSubject( emGameEvnet );
		if( Subject!=null)
		{
			Subject.Attach( Observer );
			Observer.SetSubject( Subject );
		}
	}
 // 通知一个GameEvent更新
 public void NotifySubject(ENUM_GameEvent emGameEvnet, System.Object Param)
 {
     // 是否存在
     if (m_GameEvents.ContainsKey(emGameEvnet) == false)
     {
         return;
     }
     //Debug.Log("SubjectAddCount["+emGameEvnet+"]");
     m_GameEvents[emGameEvnet].SetParam(Param);
 }
    // 替某一主题注册一个观測者
    public void RegisterObserver(ENUM_GameEvent emGameEvnet, IGameEventObserver Observer)
    {
        // 取得事件
        IGameEventSubject Subject = GetGameEventSubject(emGameEvnet);

        if (Subject != null)
        {
            Subject.Attach(Observer);
            Observer.SetSubject(Subject);
        }
    }
示例#13
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);
        }
    }
		// 通知遊戲事件發生
		public void NotifyGameEvent(ENUM_GameEvent emGameEvent, System.Object Param1, System.Object Param2)
		{
			// 依遊戲事件
			switch( emGameEvent )
			{
			case ENUM_GameEvent.EnemyKilled:	// 敵方單位陣亡
				Notify_EnemyKilled(Param1 as IEnemy );
				break;
			case ENUM_GameEvent.SoldierKilled:	// 玩家單位陣亡
				Notify_SoldierKilled( Param1 as ISoldier );
				break;
			case ENUM_GameEvent.SoldierUpgate:	// 玩家單位升級
				Notify_SoldierUpgate( Param1 as ISoldier );
				break;
			case ENUM_GameEvent.NewStage:		// 新關卡
				Notify_NewStage((int)Param1);
				break;
			}
		}
        // 通知遊戲事件發生
        public void NotifyGameEvent(ENUM_GameEvent emGameEvent, System.Object Param1, System.Object Param2)
        {
            // 依遊戲事件
            switch (emGameEvent)
            {
            case ENUM_GameEvent.EnemyKilled:                    // 敵方單位陣亡
                Notify_EnemyKilled(Param1 as IEnemy);
                break;

            case ENUM_GameEvent.SoldierKilled:                  // 玩家單位陣亡
                Notify_SoldierKilled(Param1 as ISoldier);
                break;

            case ENUM_GameEvent.SoldierUpgate:                  // 玩家單位升級
                Notify_SoldierUpgate(Param1 as ISoldier);
                break;

            case ENUM_GameEvent.NewStage:                       // 新關卡
                Notify_NewStage((int)Param1);
                break;
            }
        }
    // 注册一个事件
    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);
    }
示例#17
0
    //获取指定事件对象(如果不存在就进行添加(注册事件))
    public IGameEvent getGameEvent(ENUM_GameEvent emGameEvent)
    {
        if (m_gameEvents.ContainsKey(emGameEvent))
        {
            return(m_gameEvents[emGameEvent]);
        }

        switch (emGameEvent)
        {
        case ENUM_GameEvent.EnemyKilled:
            m_gameEvents[emGameEvent] = new EnemyKilledEvent();
            break;

        case ENUM_GameEvent.EnemyCount:
            m_gameEvents[emGameEvent] = new EnemyCountEvent();
            break;

        default:
            Debug.Log("没有名为[" + emGameEvent + "]的游戏事件");
            return(null);
        }
        return(m_gameEvents[emGameEvent]);
    }
示例#18
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);
    }
示例#19
0
 //通知事件监听
 public void notifyGameEvent(ENUM_GameEvent gameEvent, System.Object eventParam)
 {
     m_gameEventSystem.notifyGameEvent(gameEvent, eventParam);
 }
示例#20
0
 public void RegisterGameEvent(ENUM_GameEvent emGameEvent, IGameEventObserver Observer)
 {
     m_GameEventSystem.RegisterObserver(emGameEvent, Observer);
 }
	// 註冊遊戲事件
	public void RegisterGameEvent( ENUM_GameEvent emGameEvent, IGameEventObserver Observer)
	{
		m_GameEventSystem.RegisterObserver( emGameEvent , Observer );
	}
	// 通知遊戲事件
	public void NotifyGameEvent( ENUM_GameEvent emGameEvent, System.Object Param )
	{
		m_GameEventSystem.NotifySubject( emGameEvent, Param);
	}
    // 移除角色
    public void RemoveCharacter(List <ICharacter> Characters, List <ICharacter> Opponents, ENUM_GameEvent emEvent)
    {
        // 分別取得可以移除及存活的角色
        List <ICharacter> CanRemoves = new List <ICharacter>();

        foreach (ICharacter Character in Characters)
        {
            // 是否陣亡
            if (Character.IsKilled() == false)
            {
                continue;
            }

            //  是否確認過陣亡事情
            if (Character.CheckKilledEvent() == false)
            {
                m_PBDGame.NotifyGameEvent(emEvent, Character);
            }

            // 是否可以移除
            if (Character.CanRemove())
            {
                CanRemoves.Add(Character);
            }
        }

        // 移除
        foreach (ICharacter CanRemove in CanRemoves)
        {
            // 通知對手移除
            foreach (ICharacter Opponent in Opponents)
            {
                Opponent.RemoveAITarget(CanRemove);
            }

            // 釋放資源並移除
            CanRemove.Release();
            Characters.Remove(CanRemove);
        }
    }
示例#24
0
        // 删除角色
        public void RemoveCharacter(List <ICharacter> Characters, List <ICharacter> Opponents, ENUM_GameEvent emEvent)
        {
            // 分别获取可以删除的角色
            List <ICharacter> CanRemoves = new List <ICharacter>();

            foreach (var character in Characters)
            {
                // 是否阵亡
                if (character.IsKilled() == false)
                {
                    continue;
                }
                // 是否确认过阵亡事件
                if (character.CheckKilledEvent() == false)
                {
                    m_RTSGame.NotifyGameEvent(emEvent, character);
                }
                // 是否可以删除
                if (character.CanRemove())
                {
                    CanRemoves.Add(character);
                }
            }

            // 删除
            foreach (var canRemove in CanRemoves)
            {
                // 通知对手删除
                foreach (var opponent in Opponents)
                {
                    opponent.RemoveAITarget(canRemove);
                }

                // 释放资源
                canRemove.Release();
                Characters.Remove(canRemove);
            }
        }
示例#25
0
 // 通知游戏事件
 public void NotifyGameEvent(ENUM_GameEvent emGameEvent, System.Object Param)
 {
     m_GameEventSystem.NotifySubject(emGameEvent, Param);
 }
示例#26
0
 //注册事件监听
 public void registerGameEvent(ENUM_GameEvent gameEvent, IGameEventListener listener)
 {
     m_gameEventSystem.addGameEventListener(gameEvent, listener);
 }