예제 #1
0
 public TaigaGenerator(int treeHeight, bool vines, PlantsType treeType)
 {
     _minTreeHeight = treeHeight;
     _vines         = vines;
     _wood          = BlockStates.SpruceLog();
     _leaves        = BlockStates.SpruceLeaves(SpruceLeavesDistanceType.Distance1, SpruceLeavesPersistentType.False);
 }
예제 #2
0
 public Taiga2Generator(int treeHeight, bool vines, PlantsType treeType)
 {
     _minTreeHeight = treeHeight;
     _vines         = vines;
     _wood          = BlockStates.Wood(WoodType.Spruce);
     _leaves        = BlockStates.Leaves(LeaveType.Spruce);
 }
예제 #3
0
 public GameProcessData()
 {
     Instance        = this;
     ActualBedCount  = 0;
     ActualAction    = ActualActionType.none;
     ActualPlantType = PlantsType.none;
 }
        private async Task <bool> CanPlaceAt(IWorld world, BlockWorldPos pos, PlantsType type)
        {
            var block = await world.GetBlockStateUnsafe(this.GrainFactory, pos);

            var upBlock = await world.GetBlockStateUnsafe(this.GrainFactory, pos.Up());

            return(block.IsAir() && upBlock.IsAir());
        }
        private async Task PlaceAt(IWorld world, BlockWorldPos pos, PlantsType type)
        {
            if (type == PlantsType.DoubleTallgrass)
            {
                await world.SetBlockStateUnsafe(this.GrainFactory, pos, BlockStates.Grass(GrassType.TallGrass));

                await world.SetBlockStateUnsafe(this.GrainFactory, pos.Up(), BlockStates.Grass(GrassType.TallGrass));
            }
        }
예제 #6
0
        public Taiga2Generator(int treeHeight, bool vines, PlantsType treeType)
        {
            _minTreeHeight = treeHeight;
            _vines         = vines;
            _wood          = BlockStates.SpruceLog();

            // TODO distance should use the distance to the nearest log
            _leaves = BlockStates.SpruceLeaves(SpruceLeavesDistanceType.Distance1, SpruceLeavesPersistentType.False);
        }
예제 #7
0
 public bool CanFlowerGrow(PlantsType type, ChunkColumnStorage chunk, BlockChunkPos pos)
 {
     if (chunk[pos.X, pos.Y - 1, pos.Z] == BlockStates.GrassBlock() ||
         chunk[pos.X, pos.Y - 1, pos.Z] == BlockStates.Dirt())
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
 public static bool CanSustainTree(PlantsType type, BlockState state)
 {
     if (state == BlockStates.Dirt() ||
         state == BlockStates.GrassBlock())
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #9
0
        public Plant GetPlantByType(PlantsType type)
        {
            foreach (var plant in _plants)
            {
                if (plant.GetPlantsType.Equals(type))
                {
                    return(plant);
                }
            }

            Debug.LogFormat("Plant by type {0} is not found", type.ToString());
            return(null);
        }
예제 #10
0
        public async override Task OnActivateAsync()
        {
            await base.OnActivateAsync();

            _minTreeHeight = _generatorSettings.TreeHeight;
            _vines         = _generatorSettings.TreeVine;
            _treeType      = _generatorSettings.PlantType;
            if (_generatorSettings.PlantType == PlantsType.Spruce)
            {
                _wood   = BlockStates.Wood(WoodType.Spruce);
                _leaves = BlockStates.Leaves(LeaveType.Spruce);
            }
        }
예제 #11
0
        public async override Task OnActivateAsync()
        {
            await base.OnActivateAsync();

            _minTreeHeight = _generatorSettings.TreeHeight;
            _vines         = _generatorSettings.TreeVine;
            _treeType      = _generatorSettings.PlantType;
            if (_generatorSettings.PlantType == PlantsType.Spruce)
            {
                _wood   = BlockStates.SpruceLog();
                _leaves = BlockStates.SpruceLeaves(SpruceLeavesDistanceType.Distance1, SpruceLeavesPersistentType.False);
            }
        }
예제 #12
0
 public TreeGenerator(int treeHeight, bool vines, PlantsType treeType)
 {
     _minTreeHeight = treeHeight;
     _vines         = vines;
     _treeType      = treeType;
     if (treeType == PlantsType.Oak)
     {
         _wood   = BlockStates.Wood(WoodType.Oak);
         _leaves = BlockStates.Leaves(LeaveType.Oak);
     }
     else if (treeType == PlantsType.Spruce)
     {
         _wood   = BlockStates.Wood(WoodType.Spruce);
         _leaves = BlockStates.Leaves(LeaveType.Spruce);
     }
     else if (treeType == PlantsType.Birch)
     {
         _wood   = BlockStates.Wood(WoodType.Birch);
         _leaves = BlockStates.Leaves(LeaveType.Birch);
     }
 }
예제 #13
0
 public TreeGenerator(int treeHeight, bool vines, PlantsType treeType)
 {
     _minTreeHeight = treeHeight;
     _vines         = vines;
     _treeType      = treeType;
     if (treeType == PlantsType.Oak)
     {
         _wood   = BlockStates.OakLog();
         _leaves = BlockStates.OakLeaves(OakLeavesDistanceType.Distance1, OakLeavesPersistentType.False);
     }
     else if (treeType == PlantsType.Spruce)
     {
         _wood   = BlockStates.SpruceLog();
         _leaves = BlockStates.SpruceLeaves(SpruceLeavesDistanceType.Distance1, SpruceLeavesPersistentType.False);
     }
     else if (treeType == PlantsType.Birch)
     {
         _wood   = BlockStates.BirchLog();
         _leaves = BlockStates.BirchLeaves(BirchLeavesDistanceType.Distance1, BirchLeavesPersistentType.False);
     }
 }
예제 #14
0
 private void PickUpPlant(PlantsType type, int count) => _wheatCounter.Increase(count);
예제 #15
0
 public DoubleFlowersGenerator(PlantsType type, int maxNum = 16)
 {
     _flowerType    = type;
     _flowersMaxNum = maxNum;
 }
        public async override Task OnActivateAsync()
        {
            await base.OnActivateAsync();

            _plantType = _generatorSettings.PlantType;
        }
예제 #17
0
        // 添加其他东西
        public override void Decorate(IWorld world, IGrainFactory grainFactory, ChunkColumnStorage chunk, Random rand, BlockWorldPos pos)
        {
            float grassColor = (_grassColorNoise.Noise((pos.X + 8) / 200.0F, 0.0F, (pos.Z + 8) / 200.0F) - 0.5F) * 2;

            if (grassColor < -0.8F)
            {
                _flowersPerChunk = 15;
                _grassPerChunk   = 5 * 7;
                GenDoubleFlowers(world, grainFactory, chunk, rand, pos);
            }
            else
            {
                _flowersPerChunk = 4;
                _grassPerChunk   = 10 * 7;
            }

            GenGrass(world, grainFactory, chunk, rand, pos);
            GenFlowers(world, grainFactory, chunk, rand, pos);
            GenDoubleGrass(world, grainFactory, chunk, rand, pos);

            int treesPerChunk = _treesPerChunk;

            if (rand.NextDouble() < _extraTreeChance)
            {
                ++treesPerChunk;
            }

            for (int num = 0; num < treesPerChunk; ++num)
            {
                int x = rand.Next(10) + 3;
                int z = rand.Next(10) + 3;

                AbstractTreeGenerator treeGenerator;
                PlantsType            type = GetRandomTree(rand);

                if (type == PlantsType.Spruce)
                {
                    if (x % 2 == 0)
                    {
                        treeGenerator = new Taiga2Generator(5, false, type);
                    }
                    else
                    {
                        treeGenerator = new TaigaGenerator(5, false, type);
                    }
                }
                else
                {
                    treeGenerator = new TreeGenerator(5, false, type);
                }

                // 获得地表面高度
                int h = 0;
                for (int y = 255; y >= 0; --y)
                {
                    if (!chunk[x, y, z].IsAir())
                    {
                        h = y + 1;
                        break;
                    }
                }

                treeGenerator.Generate(world, grainFactory, chunk, this, rand, new BlockWorldPos(pos.X + x, h, pos.Z + z));
            }

            base.Decorate(world, grainFactory, chunk, rand, pos);
        }
예제 #18
0
 public DoubleGrassGenerator(PlantsType type, int maxNum = 16)
 {
     _grassType   = type;
     _grassMaxNum = maxNum;
 }