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);
    }
Example #2
0
    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();
    }
Example #3
0
    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);
        }
    }