您的位置:首页 > 其它

strange IOC框架 塔防游戏实例应用 (二)

2017-03-23 09:51 459 查看
源码在最后一章放上

应用场景:点击地图弹出相应炮塔弹窗


分层逻辑: 地图View点击 —> 发出地图事件 —> 地图根据参数做出反应 —>与Model层交互数据并把数据传输到相应View层做出反应

1.地图View点击发出事件

void OnMapTileClick(int mouseButton, Data_Tile tile)
{
dispatcher.Dispatch(EventType.GameMapClick, new Args_GameMapClick() { Map = View_Spawner.m_Map,Tile = tile });
}


2.事件Command做出相应反应并通知View

public class Command_GameMapClick : EventCommand {

[Inject]
public Model_Game Model_Game { get; set; }

public override void Execute()
{
Args_GameMapClick e = evt.data as Args_GameMapClick;

//与Model交互并解析数据
if(Model_Game.IsPlaying && e.Tile.CanHold)
{
if(e.Tile.Data == null)
{
//通知对应View
dispatcher.Dispatch(ViewEventType.ShowSpawnPanel, new Args_ShowSpawnPanel() { Model_Game = Model_Game, Pos = e.Map.GetPosition(e.Tile), UpSide = e.Tile.Y < Object_Map.RowCount / 2 });
}
else
{
//通知对应View
dispatcher.Dispatch(ViewEventType.ShowUpgradePanel, new Args_ShowUpgradePanel() { Model_Game = Model_Game, Tower = e.Tile.Data as Object_Tower });
}
}

}

}


3.View层的Mediator监听并处理相应事件

public class Mediator_TowerPopup : EventMediator {

[Inject]
public View_TowerPopup View_TowerPopup { get; set; }

//监听事件
public override void OnRegister()
{
View_TowerPopup.Init();
dispatcher.AddListener(ViewEventType.ShowSpawnPanel, OnShowSpawnPanel);
dispatcher.AddListener(ViewEventType.ShowUpgradePanel, OnShowUpgradePanel);
}

void OnDestroy()
{
dispatcher.RemoveListener(ViewEventType.ShowSpawnPanel, OnShowSpawnPanel);
dispatcher.RemoveListener(ViewEventType.ShowUpgradePanel, OnShowUpgradePanel);
}

//对事件做出反应
void OnShowSpawnPanel(IEvent e)
{
Args_ShowSpawnPanel ee = e.data as Args_ShowSpawnPanel;
View_TowerPopup.ShowSpawnPanel(ee.Model_Game, ee.Pos, ee.UpSide);
}

void OnShowUpgradePanel(IEvent e)
{
Args_ShowUpgradePanel ee = e.data as Args_ShowUpgradePanel;
View_TowerPopup.ShowUpgradePanel(ee.Model_Game, ee.Tower);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: