// 移除角色 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; }
//为指定事件添加监听器(添加观察者) public void addGameEventListener(ENUM_GameEvent emGameEvent, IGameEventListener listener) { IGameEvent gameEvent = getGameEvent(emGameEvent); gameEvent.addListener(listener); listener.setGameEvent(gameEvent); }
/// <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 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 ); }
//通知事件监听 public void notifyGameEvent(ENUM_GameEvent emGameEvent, System.Object eventParam) { if (m_gameEvents.ContainsKey(emGameEvent)) { m_gameEvents[emGameEvent].setEventParam(eventParam); m_gameEvents[emGameEvent].notify(); } }
/// <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); } }
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); } }
/// <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); }
//获取指定事件对象(如果不存在就进行添加(注册事件)) 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]); }
// 註冊一個事件 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); }
//通知事件监听 public void notifyGameEvent(ENUM_GameEvent gameEvent, System.Object eventParam) { m_gameEventSystem.notifyGameEvent(gameEvent, eventParam); }
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); } }
// 删除角色 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); } }
// 通知游戏事件 public void NotifyGameEvent(ENUM_GameEvent emGameEvent, System.Object Param) { m_GameEventSystem.NotifySubject(emGameEvent, Param); }
//注册事件监听 public void registerGameEvent(ENUM_GameEvent gameEvent, IGameEventListener listener) { m_gameEventSystem.addGameEventListener(gameEvent, listener); }