public BattleMapSystem(IBattleManager manager) : base(manager) { width = battleManager.mapWidth; height = battleManager.mapHeight; _YDelta = new Vector3Int(-1, 0, 1); _XDelta = new Vector3Int(1, 0, 1); //测试数据赋值 tileNames = new string[] { "Hill", "Gobi", "Plain", "River" }; weights = new float[] { 100, 100, 100, 100 }; walkable = new bool[] { false, true, true, true }; xOriMax = 2; yOriMax = 2; scale = 5f; _SceneCamera = GameObject.FindGameObjectWithTag(GlobalSetting.TAG_BATTLE_SCENE_CAMERA_NAME).GetComponent <Camera>(); _CameraTF = _SceneCamera.transform; _CameraParentTF = _CameraTF.parent; tileParent = GameObject.FindGameObjectWithTag(GlobalSetting.TAG_TILE_PARENT_NAME).transform; tiles = new GameObject[4]; tiles[0] = ResourcesMgr.Instance.Load <GameObject>("Hill").res; tiles[1] = ResourcesMgr.Instance.Load <GameObject>("Gobi").res; tiles[2] = ResourcesMgr.Instance.Load <GameObject>("Plain").res; tiles[3] = ResourcesMgr.Instance.Load <GameObject>("River").res; _Creator = new MapCreator(this); _Checker = new MapChecker(this); _Printer = new Map45DegreesPrinter(this, tileParent); _MapProxy = facade.RetrieveProxy(MapVOProxy.NAME) as MapVOProxy; for (int i = 0; i < tileNames.Length; i++) { //PoolManager.Instance.IncreaseObjectCache(tileNames[i], maxShowX * maxShowY * 3); } }
public override void Execute(INotification notification) { var msgParam = notification.Body as TwoMsgParams <PlayerVO, IBuildingVO>; if (msgParam != null && msgParam.first != null && msgParam.second != null) { PlayerVO playerVo = msgParam.first; IBuildingVO building = msgParam.second; PlayerVOProxy playerVOProxy = Facade.RetrieveProxy(PlayerVOProxy.NAME) as PlayerVOProxy; MapVOProxy mapVOProxy = Facade.RetrieveProxy(MapVOProxy.NAME) as MapVOProxy; BuildingVOProxy buildingProxy = Facade.RetrieveProxy(BuildingVOProxy.NAME) as BuildingVOProxy; //判断资源是否满足创建需求 if (playerVo.gold < building.createCostGold || playerVo.grain < building.createCostGrain) { return; } playerVo.gold -= building.createCostGold; playerVo.grain -= building.createCostGrain; switch (building.buildingType) { case E_Building.None: break; case E_Building.MainBase: //判断是否可以被添加.... MainBaseVO mainBaseVO = building as MainBaseVO; if (mainBaseVO != null) { if (mapVOProxy.IsCanOccupedArea(mainBaseVO.tilePositon, mainBaseVO.radius)) { mainBaseVO.SetOwer(playerVo); buildingProxy.CreateBuilding(mainBaseVO, mainBaseVO, playerVo); //更新地图建筑信息 mapVOProxy.SetBuildingInfo(true, building.tilePositon, building.rect); //更新占领信息 mapVOProxy.SetOccupiedInfo(true, building.tilePositon, mainBaseVO.radius); } } break; case E_Building.FarmLand: case E_Building.GoldMine: case E_Building.MilitaryCamp: MainBaseVO mainBase = playerVOProxy.GetMainBasePlayerBuildingBelongTo(building, playerVo); if (mainBase != null) { //添加建筑 mainBase.AddBuilding(building); //更新地图建筑信息 mapVOProxy.SetBuildingInfo(true, building.tilePositon, building.rect); buildingProxy.CreateBuilding(building, mainBase, playerVo); } break; default: break; } TwoMsgParamsPool <PlayerVO, IBuildingVO> .Instance.Push(msgParam); } BattleManager.Instance.CancelConstraction(); }