private void Decorade(Chunk chunk, int x, int z, PopulationParam populationParam, IDecoration decoration)
        {
            if (decoration == null || chunk == null)
            {
                return;
            }
            int height = populationParam.maxDecorationHeight < heightCap ? populationParam.maxDecorationHeight : heightCap;

            //找出适合当前装饰品的高度
            for (int y = height - 1; y >= populationParam.minDecorationHeight; y--)
            {
                BlockType curType = chunk.GetBlock(x, y, z).BlockType;
                if (curType != BlockType.Air && curType != BlockType.StillWater)
                {
                    List <CheckCondition> conditions = populationParam.checkConditions;
                    bool canDecorate = CheckConditionMeet(chunk, conditions, x, y, z);
                    if (canDecorate && _random.Range(0, 100) < populationParam.heightGenerateRate)
                    {
                        if (decoration.Decorade(chunk, x, y + 1, z, _random))
                        {
                            return;
                        }
                    }
                }
            }
        }
 public GrowDecoration(GrowDecorationParam paras)
 {
     _params            = paras;
     _params.growedTime = 0;
     _growMark          = true;
     _curDecoration     = DecorationFactory.GetDecorationInstance((DecorationType)_params.plantData.decorationType);
     (_curDecoration as DecorationRemoveBase).isGrow = true;
     _attachChunk = World.world.GetChunk((int)_params.pos.x, (int)_params.pos.y, (int)_params.pos.z);
     _curDecoration.Decorade(_attachChunk, (int)_params.loacalPos.x, (int)_params.loacalPos.y, (int)_params.loacalPos.z, _params.random);
     _growNeedTime = _params.plantData.growTime;
 }
 private void changeToNextState()
 {
     _params.growedTime = 0;
     (_curDecoration as DecorationRemoveBase).removeDecoration(_attachChunk);
     if (_params.plantData.nextId == 0)
     {
         HasActionObjectManager.Instance.plantManager.endGrow(_params.aoId);
         dispose();
         return;
     }
     _params.plantData = MTBPlantDataManager.Instance.getData(_params.plantData.nextId);
     _curDecoration    = DecorationFactory.GetDecorationInstance((DecorationType)_params.plantData.decorationType);
     _curDecoration.Decorade(_attachChunk, (int)_params.loacalPos.x, (int)_params.loacalPos.y, (int)_params.loacalPos.z, _params.random);
     _growNeedTime = DayNightTime.Instance.normalTimeConfig.daySeconds * _params.plantData.growTime;
     World.world.CheckAndRecalculateMesh((int)_params.pos.x, (int)_params.pos.y, (int)_params.pos.z, World.world.GetBlock((int)_params.pos.x, (int)_params.pos.y, (int)_params.pos.z));
 }