C#开发的OpenRA游戏的加载地图流程
C#开发的OpenRA游戏的加载地图流程
OpenRA游戏里,地图是一个很关键的数据,
因为地图里包括了地面状态,地面上建筑物状态,
还有玩家在地图上的布局情况,以及各种活动限制的条件。
在OpenRA里,需要把地图目录:OpenRA\mods\cnc\maps 里所有的文件进行加载,
并且保存在缓存队列。由于缓存队列采用MAP容器保存,
需要把每一个地图计算一串唯一的Key出来,
因此调用函数:
public static string ComputeUID(IReadOnlyPackage package)
ComputeUID是实现计算一个地图的HASH值。
比如文件valley-of-gold.oramap,计算出来的HASH值是:"387dc690871685a44b10e6d625ad44b6f1b2d47b"。
后面地图的选择和使用,就可以使用这串ID来表示地图了。
所有的地图先在类MapCache里调用函数LoadMaps()进行加载,以便保存到缓冲队列。
接着在游戏开始之前,显示所有地图,让玩家对地图进行选择。如果玩家选择好了地图,
就会发送给服务器,服务器再同步到所有其它玩家。
这时候,就可以拿到地图的ID,就可以开始新的游戏:
Game.StartGame(orderManager.LobbyInfo.GlobalSettings.Map, WorldType.Regular);
orderManager.LobbyInfo.GlobalSettings.Map就是地图的HASH值。
紧接着会在游戏开始函数StartGame()里加载地图的数据:
map =