public RemovableObjectLogicObject BuyRemovableObject(RemovableObjectType type, TilePosition position, int propsNo, ref bool isRewardProps) { RemovableObjectData data = new RemovableObjectData(); data.Position = position; data.RemovableObjectNo = ++this.m_RemovableObjectStartNo; data.RemovableObjectType = type; data.ConfigData = ConfigInterface.Instance.RemovableConfigHelper.GetRemovableObjectData(type); RemovableObjectLogicObject result = new RemovableObjectLogicObject(data); isRewardProps = result.GenerateRewardData(propsNo); this.m_ObjectDict.Add(data.RemovableObjectNo, result); result.RemoveTimeUp += ObjectRemoveTimeUp; BuyRemovableObjectRequestParameter request = new BuyRemovableObjectRequestParameter(); request.PositionColumn = data.Position.Column; request.PositionRow = data.Position.Row; request.RemovableObjectType = type; request.RewardExp = data.RewardExp; request.RewardGem = data.RewardGem; request.RewardPropsType = data.RewardPropsType; CommunicationUtility.Instance.BuyRemovableObject(request); return(result); }
public void CancelRemove(int removableObjectNo) { RemovableObjectLogicObject logicObject = this.m_RemovableModule.GetRemovableObject(removableObjectNo); this.ReturnResource(logicObject.LogicData.GoldCost, logicObject.LogicData.FoodCost, logicObject.LogicData.OilCost, logicObject.LogicData.GemCost); this.m_BuilderModule.RecycleBuilder(logicObject.LogicData.CurrentAttachedBuilderNO); logicObject.CancelRemove(); }
public void Remove(int removableObjectNo, int builderNO) { RemovableObjectLogicObject logicObject = this.m_RemovableModule.GetRemovableObject(removableObjectNo); this.ConsumeResource(logicObject.LogicData.GoldCost, logicObject.LogicData.FoodCost, logicObject.LogicData.OilCost, logicObject.LogicData.GemCost); logicObject.Remove(builderNO); this.m_BuilderModule.SendBuilder(builderNO, logicObject.LogicData); }
public void InitialWithData(List <RemovableObjectData> datas, int removableObjectStartNo) { foreach (RemovableObjectData data in datas) { RemovableObjectLogicObject removable = new RemovableObjectLogicObject(data); removable.RemoveTimeUp += ObjectRemoveTimeUp; this.m_ObjectDict.Add(data.RemovableObjectNo, removable); if (data.BuilderBuildingNO.HasValue) { this.m_BuilderManager.AddBusyBuilder(data.BuilderBuildingNO.Value, removable.LogicData); } } this.m_RemovableObjectStartNo = removableObjectStartNo; }
public bool GeneratePosition(int removableObjectNo, IMapData mapData) { RemovableObjectLogicObject logicObject = this.GetRemovableObject(removableObjectNo); List <TilePosition> validPosition = new List <TilePosition>(); for (int r = 0; r < ClientSystemConstants.BUILDING_TILE_MAP_SIZE.height; r++) { for (int c = 0; c < ClientSystemConstants.BUILDING_TILE_MAP_SIZE.width; c++) { bool isValid = true; TilePosition position = new TilePosition(c, r); foreach (TilePosition offset in logicObject.LogicData.BuildingObstacleList) { TilePosition p = position + offset; if (!p.IsValidBuildingTilePosition() || mapData.GetBuildingObjectFromBuildingObstacleMap(p.Row, p.Column) != null) { isValid = false; break; } if (LogicController.Instance.IsNewPlayer && ClientSystemConstants.INITIAL_REMOVABLE_OBJECT_INVALID_RECT.Contains( new Vector2(position.Column, position.Row))) { isValid = false; break; } } if (isValid) { validPosition.Add(position); } } } if (validPosition.Count == 0) { this.m_ObjectDict.Remove(removableObjectNo); return(false); } else { TilePosition position = validPosition[CommonHelper.GetRandomNumber(0, validPosition.Count)]; logicObject.GeneratePosition(position); return(true); } }