コード例 #1
0
        public void saveChunk(Chunk.Chunk _Chunk)
        {
            //Speichere erst mal nur blöcke
            String var_Path = "Save/" + this.Position.X + "_" + this.Position.Y + "/Chunks/" + _Chunk.Position.X + "_" + _Chunk.Position.Y + ".sav";

            Utility.IO.IOManager.SaveISerializeAbleObjectToFile(var_Path, _Chunk);
        }
コード例 #2
0
 public Object.Object addObject(Object.Object _Object, Boolean _InsertInQuadTree, Region.Region _Region)
 {
     if (_InsertInQuadTree)
     {
         this.quadTreeObject.Insert(_Object);
     }
     if (_Region != null)
     {
         Chunk.Chunk chunk = _Region.getChunkAtPosition(_Object.Position);
         if (chunk != null)
         {
             Block.Block var_Block = chunk.getBlockAtCoordinate(_Object.Position);
             if (var_Block != null)
             {
                 var_Block.addObject(_Object);
                 if (Configuration.Configuration.isHost)
                 {
                     Configuration.Configuration.networkManager.addEvent(new GameLibrary.Connection.Message.UpdateObjectMessage(_Object), GameMessageImportance.VeryImportant);
                 }
             }
         }
     }
     else
     {
         Logger.Logger.LogInfo("World.addObject: Object konnte der Region nicht hinzugefügt werden, da diese null war");
     }
     return(_Object);
 }
コード例 #3
0
        public TeleportBlock(Vector3 _Position, BlockEnum _BlockEnum, Chunk.Chunk _ParentChunk, Vector3 _Destination, int _DimensionId)
            : base((int)_Position.X, (int)_Position.Y, _BlockEnum, _ParentChunk)
        {
            this.destinationLocation = _Destination;
            this.dimensionId         = _DimensionId;

            this.allowedFlags = new List <Searchflag>();
            this.allowedFlags.Add(new PlayerObjectFlag());
        }
コード例 #4
0
 public bool setBlockAtCoordinate(Vector3 _Position, Block.Block _Block)
 {
     Chunk.Chunk var_Chunk = this.getChunkAtPosition(_Position);
     if (var_Chunk != null)
     {
         return(var_Chunk.setBlockAtCoordinate(_Position, _Block));
     }
     return(false);
 }
コード例 #5
0
 public bool removeChunk(Chunk.Chunk _Chunk)
 {
     Region.Region var_Region = this.getRegionAtPosition(_Chunk.Position);
     if (var_Region != null)
     {
         return(var_Region.removeChunk(_Chunk));
     }
     return(false);
 }
コード例 #6
0
 public Block.Block getBlockAtCoordinate(Vector3 _Position)
 {
     Chunk.Chunk var_Chunk = this.getChunkAtPosition(_Position);
     if (var_Chunk != null)
     {
         return(var_Chunk.getBlockAtCoordinate(_Position));
     }
     return(null);
 }
コード例 #7
0
        public void loadAllObjectsFromChunkToQuadTree(Chunk.Chunk _Chunk)
        {
            List <Object.Object> var_ObjectsList = _Chunk.getAllObjectsInChunk();

            for (int i = 0; i < var_ObjectsList.Count; i++)
            {
                this.getParent().QuadTreeObject.Insert(var_ObjectsList[i]);
            }
        }
 private bool IsFileUploadComplete(Chunk.Chunk chunk)
 {
     for (var chunkNumber = 1; chunkNumber <= chunk.TotalChunks; chunkNumber++)
     {
         var chunkUniqueName = _chunkNameGenerator.Generate(chunk.FileName, chunk.Identifier, chunkNumber);
         if (!_fileManager.Exits(chunkUniqueName))
         {
             return(false);
         }
     }
     return(true);
 }
        private void MergeFile(Chunk.Chunk chunk)
        {
            var finalFile = _fileManager.Create(chunk.FileName);

            for (var chunkNumber = 1; chunkNumber <= chunk.TotalChunks; chunkNumber++)
            {
                var chunkUniqueName = _chunkNameGenerator.Generate(chunk.FileName, chunk.Identifier, chunkNumber);
                var chunkFile       = _fileManager.Read(chunkUniqueName);
                chunkFile.CopyTo(finalFile);

                _fileManager.Delete(chunkUniqueName);
            }
        }
コード例 #10
0
 public Chunk.Chunk createChunkAt(Vector3 _Position)
 {
     _Position = Chunk.Chunk.parsePosition(_Position);
     Chunk.Chunk var_Chunk = this.loadChunk(_Position.X, _Position.Y);
     if (var_Chunk == null)
     {
         var_Chunk = GameLibrary.Factory.RegionFactory.createChunkInRegion(this, (int)_Position.X, (int)_Position.Y);
     }
     else
     {
         this.setChunkAtPosition(_Position, var_Chunk, true);
     }
     return(var_Chunk);
 }
コード例 #11
0
        public bool removeChunk(Chunk.Chunk _Chunk)
        {
            int var_X = (int)Math.Abs(_Chunk.Position.X - this.Position.X) / (Block.Block.BlockSize * Chunk.Chunk.chunkSizeX);
            int var_Y = (int)Math.Abs(_Chunk.Position.Y - this.Position.Y) / (Block.Block.BlockSize * Chunk.Chunk.chunkSizeY);

            int var_Position = (int)(var_X + var_Y * regionSizeX);

            if (var_Position < this.chunks.Length)
            {
                this.chunks[var_Position] = null;
                return(true);
            }

            return(false);
        }
コード例 #12
0
        public Block(int _PosX, int _PosY, BlockEnum _BlockEnum, Chunk.Chunk _ParentChunk)
            : base()
        {
            this.layer    = new BlockEnum[Enum.GetValues(typeof(BlockLayerEnum)).Length];
            this.layer[0] = _BlockEnum;
            this.objects  = new List <Object.Object>();
            this.Position = new Vector3(_PosX, _PosY, 0);
            this.Parent   = _ParentChunk;

            this.objectsPreEnviorment = new List <Object.Object>();

            this.isWalkAble = true;
            this.height     = 0;
            this.Size       = new Vector3(Block.BlockSize, Block.BlockSize, 0);
        }
コード例 #13
0
        public bool setChunkAtPosition(Vector3 _Position, Chunk.Chunk _Chunk, bool _Loaded)
        {
            Chunk.Chunk var_Chunk = this.getChunkAtPosition(_Chunk.Position);
            if (var_Chunk == null)
            {
                /*if (_PosX >= Bounds.Left && _PosX <= Bounds.Right)
                 * {
                 *  if (_PosY >= Bounds.Top && _PosY <= Bounds.Bottom)
                 *  {*/
                int var_X = (int)Math.Abs(_Position.X - this.Position.X) / (Block.Block.BlockSize * Chunk.Chunk.chunkSizeX);
                int var_Y = (int)Math.Abs(_Position.Y - this.Position.Y) / (Block.Block.BlockSize * Chunk.Chunk.chunkSizeY);

                int var_Position = (int)(var_X + var_Y * regionSizeX);
                this.chunks[var_Position] = _Chunk;
                _Chunk.setNeighbours();

                /*if (Configuration.Configuration.isHost || Configuration.Configuration.isSinglePlayer)
                 * {
                 *  this.loadAllObjectsFromChunkToQuadTree(_Chunk);
                 * }*/

                if (_Loaded)
                {
                    this.loadAllObjectsFromChunkToQuadTree(_Chunk);
                }
                else
                {
                }

                return(true);

                /*    }
                 * }*/
                Logger.Logger.LogErr("Region->setChunkAtPosition(...) : Platzierung nicht möglich: PosX " + _Position.X + " PosY " + _Position.Y);
                return(false);
            }
            else
            {
                Logger.Logger.LogErr("Region->setChunkAtPosition(...) : Chunk mit Id: " + _Chunk.Id + " schon vorhanden!");
                return(false);
            }
        }
コード例 #14
0
        public Chunk.Chunk loadChunk(float _PosX, float _PosY)
        {
            String var_Path = "Save/" + this.getParent().Id + "/" + this.Position.X + "_" + this.Position.Y + "/Chunks/" + _PosX + "_" + _PosY + ".sav";

            if (System.IO.File.Exists(var_Path))
            {
                Chunk.Chunk var_Chunk = (Chunk.Chunk)Utility.IO.IOManager.LoadISerializeAbleObjectFromFile(var_Path);
                if (var_Chunk != null)
                {
                    var_Chunk.Parent = this;
                    return(var_Chunk);
                }
                else
                {
                    System.IO.File.Delete(var_Path);
                    Logger.Logger.LogErr("Chunk konnte nicht geladen werden, obwohl vorhanden -> Datei wird gelöscht");
                }
            }
            return(null);
        }
コード例 #15
0
        public Chunk.Chunk loadChunk(float _PosX, float _PosY)
        {
            String var_Path = "Save/" + this.Position.X + "_" + this.Position.Y + "/Chunks/" + _PosX + "_" + _PosY + ".sav";

            if (System.IO.File.Exists(var_Path))
            {
                Chunk.Chunk var_Chunk = (Chunk.Chunk)Utility.IO.IOManager.LoadISerializeAbleObjectFromFile(var_Path);//Utility.Serializer.DeSerializeObject(var_Path);
                if (var_Chunk != null)
                {
                    var_Chunk.Parent = Model.Map.World.World.world.getRegion(this.id);
                    var_Chunk.setAllNeighboursOfBlocks();
                    return(var_Chunk);
                }
                else
                {
                    System.IO.File.Delete(var_Path);
                    Logger.Logger.LogErr("Chunk konnte nicht geladen werden, obwohl vorhanden -> Datei wird gelöscht");
                }
            }
            return(null);
        }
コード例 #16
0
        public static void Generate(Chunk.Chunk chunk)
        {
            for (int x = 0; x < Chunk.SubChunk.WIDTH; x++)
            {
                for (int z = 0; z < Chunk.SubChunk.DEPTH; z++)
                {
                    float noiseHeight = (HeightMap.GetSimplexFractal(x + chunk.Position.X, z + chunk.Position.Z) + 1.0f);
                    float prev        = 0;
                    int   height      = (int)(noiseHeight * 32f);

                    chunk.AddBlock(x, height, z, Blocks.Grass);
                    //for (int y = Chunk.Chunk.HEIGHT * SubChunk.HEIGHT; y > height; y--)
                    //{
                    //    if (y == height)
                    //        chunk.AddBlock(x, y, z, Blocks.Grass);
                    //    else if (y > height - 5 && y < height)
                    //        chunk.AddBlock(x, y, z, Blocks.Dirt);
                    //
                    //    float noiseM = Mountains.GetSimplex(x + chunk.Position.X, y, z + chunk.Position.Z);
                    //    noiseM *= (float)Math.Tanh(Mountains.GetPerlin(x + chunk.Position.X, y, z + chunk.Position.Z));
                    //    noiseM -= (float)(y - height) / (float)((Chunk.Chunk.HEIGHT * SubChunk.HEIGHT) - height);
                    //    if ((noiseM + noiseHeight * 0.25f) > 0)
                    //    {
                    //        if(y == height || y == height + 1)
                    //            chunk.AddBlock(x, y, z, Blocks.Grass);
                    //        if (prev - 0.006f > noiseM)
                    //            chunk.AddBlock(x, y, z, Blocks.Grass);
                    //        else if (prev - 0.003f > noiseM)
                    //            chunk.AddBlock(x, y, z, Blocks.Dirt);
                    //        else
                    //        {
                    //            chunk.AddBlock(x, y, z, Blocks.Stone);
                    //        }
                    //    }
                    //
                    //    prev = noiseM;
                    //}
                }
            }
        }
コード例 #17
0
        public bool setChunkAtPosition(Vector3 _Position, Chunk.Chunk _Chunk)
        {
            Chunk.Chunk var_Chunk = this.getChunkAtPosition(_Chunk.Position);
            if (var_Chunk == null)
            {
                /*if (_PosX >= Bounds.Left && _PosX <= Bounds.Right)
                 * {
                 *  if (_PosY >= Bounds.Top && _PosY <= Bounds.Bottom)
                 *  {*/
                int var_X = (int)Math.Abs(_Position.X - this.Position.X) / (Block.Block.BlockSize * Chunk.Chunk.chunkSizeX);
                int var_Y = (int)Math.Abs(_Position.Y - this.Position.Y) / (Block.Block.BlockSize * Chunk.Chunk.chunkSizeY);

                int var_Position = (int)(var_X + var_Y * regionSizeY);
                this.chunks[var_Position] = _Chunk;
                //this.setAllNeighboursOfChunk(_Chunk);
                this.setAllNeighboursOfChunks();
                //World.World.world.setAllNeighboursOfRegion((Region)_Chunk.Parent);
                if (GameLibrary.Configuration.Configuration.isHost)
                {
                    //GameLibrary.Commands.Executer.Executer.executer.addCommand(new Commands.CommandTypes.UpdateChunkCommand(_Chunk));
                    //this.saveChunk(_Chunk);
                }
                else
                {
                }

                return(true);

                /*    }
                 * }*/
                Logger.Logger.LogErr("Region->setChunkAtPosition(...) : Platzierung nicht möglich: PosX " + _Position.X + " PosY " + _Position.Y);
                return(false);
            }
            else
            {
                Logger.Logger.LogErr("Region->setChunkAtPosition(...) : Chunk mit Id: " + _Chunk.Id + " schon vorhanden!");
                return(false);
            }
        }
コード例 #18
0
        public void updatePlayerObjectNeighborhood(GameTime _GameTime, Object.PlayerObject _PlayerObject)
        {
            List <Chunk.Chunk> var_ChunksInRange = new List <Chunk.Chunk>();

            foreach (Chunk.Chunk var_Chunk in this.chunksOutOfRange)
            {
                if (Vector3.Distance(var_Chunk.Position, new Vector3(_PlayerObject.Position.X, _PlayerObject.Position.Y, 0)) <= (Setting.Setting.blockDrawRange * Block.Block.BlockSize))
                {
                    var_ChunksInRange.Add(var_Chunk);
                }
            }

            foreach (Chunk.Chunk var_Chunk in var_ChunksInRange)
            {
                this.chunksOutOfRange.Remove(var_Chunk);
            }

            if (_PlayerObject != null)
            {
                Vector3 var_PlayerPos = _PlayerObject.Position;

                if (_PlayerObject.CurrentBlock != null)
                {
                    var_PlayerPos = _PlayerObject.CurrentBlock.Position;
                }
                int var_DrawSizeX = Setting.Setting.blockDrawRange;
                int var_DrawSizeY = Setting.Setting.blockDrawRange;

                for (int x = 0; x < var_DrawSizeX; x++)
                {
                    for (int y = 0; y < var_DrawSizeY; y++)
                    {
                        Vector3     var_Position = new Vector3(var_PlayerPos.X + (-var_DrawSizeX / 2 + x) * Block.Block.BlockSize, var_PlayerPos.Y + (-var_DrawSizeY / 2 + y) * Block.Block.BlockSize, 0);
                        Block.Block var_Block    = this.getBlockAtCoordinate(var_Position);
                        if (var_Block != null)
                        {
                            var_Block.update(_GameTime);
                        }
                        else
                        {
                            Region.Region var_Region = this.getRegionAtPosition(var_Position);
                            if (var_Region == null)
                            {
                                var_Region = this.createRegionAt(var_Position);
                            }
                            else
                            {
                                Chunk.Chunk var_Chunk = this.getChunkAtPosition(var_Position);
                                if (var_Chunk == null)
                                {
                                    var_Chunk = this.createChunkAt(var_Position);
                                }
                            }
                        }
                    }
                }
            }

            List <Object.Object> var_Objects = this.getObjectsInRange(_PlayerObject.Position, 600);

            foreach (Object.Object var_Object in var_Objects)
            {
                if (!this.objectsToUpdate.Contains(var_Object))
                {
                    this.objectsToUpdate.Add(var_Object);
                }
            }
        }
コード例 #19
0
        public void saveChunk(Chunk.Chunk _Chunk)
        {
            String var_Path = "Save/" + this.getParent().Id + "/" + this.Position.X + "_" + this.Position.Y + "/Chunks/" + _Chunk.Position.X + "_" + _Chunk.Position.Y + ".sav";

            Utility.IO.IOManager.SaveISerializeAbleObjectToFile(var_Path, _Chunk);
        }
コード例 #20
0
        public void setAllNeighboursOfChunk(Chunk.Chunk _Chunk)
        {
            Chunk.Chunk var_ChunkNeighbourLeft = World.World.world.getChunkAtPosition(new Vector3(_Chunk.Position.X - Chunk.Chunk.chunkSizeX * Block.Block.BlockSize, _Chunk.Position.Y, 0));

            if (var_ChunkNeighbourLeft != null)
            {
                _Chunk.LeftNeighbour = var_ChunkNeighbourLeft;
                var_ChunkNeighbourLeft.RightNeighbour = _Chunk;
                for (int blockY = 0; blockY < Chunk.Chunk.chunkSizeY; blockY++)
                {
                    Block.Block var_BlockRight = _Chunk.getBlockAtPosition(0, blockY);
                    Block.Block var_BlockLeft  = var_ChunkNeighbourLeft.getBlockAtPosition(Chunk.Chunk.chunkSizeX - 1, blockY);

                    if (var_BlockLeft != null && var_BlockRight != null)
                    {
                        var_BlockRight.LeftNeighbour = var_BlockLeft;
                        var_BlockLeft.RightNeighbour = var_BlockRight;
                    }
                }
            }

            Chunk.Chunk var_ChunkNeighbourRight = World.World.world.getChunkAtPosition(new Vector3(_Chunk.Position.X + Chunk.Chunk.chunkSizeX * Block.Block.BlockSize, _Chunk.Position.Y, 0));

            if (var_ChunkNeighbourRight != null)
            {
                _Chunk.RightNeighbour = var_ChunkNeighbourRight;
                var_ChunkNeighbourRight.LeftNeighbour = _Chunk;
                for (int blockY = 0; blockY < Chunk.Chunk.chunkSizeY; blockY++)
                {
                    Block.Block var_BlockRight = var_ChunkNeighbourRight.getBlockAtPosition(0, blockY);
                    Block.Block var_BlockLeft  = _Chunk.getBlockAtPosition(Chunk.Chunk.chunkSizeX - 1, blockY);

                    if (var_BlockLeft != null && var_BlockRight != null)
                    {
                        var_BlockLeft.RightNeighbour = var_BlockRight;
                        var_BlockRight.LeftNeighbour = var_BlockLeft;
                    }
                }
            }

            Chunk.Chunk var_ChunkNeighbourTop = World.World.world.getChunkAtPosition(new Vector3(_Chunk.Position.X, _Chunk.Position.Y - Chunk.Chunk.chunkSizeX * Block.Block.BlockSize, 0));

            if (var_ChunkNeighbourTop != null)
            {
                _Chunk.TopNeighbour = var_ChunkNeighbourTop;
                var_ChunkNeighbourTop.BottomNeighbour = _Chunk;
                for (int blockX = 0; blockX < Chunk.Chunk.chunkSizeX; blockX++)
                {
                    Block.Block var_BlockTop    = var_ChunkNeighbourTop.getBlockAtPosition(blockX, Chunk.Chunk.chunkSizeY - 1);
                    Block.Block var_BlockBottom = _Chunk.getBlockAtPosition(blockX, 0);

                    if (var_BlockTop != null && var_BlockBottom != null)
                    {
                        var_BlockBottom.TopNeighbour = var_BlockTop;
                        var_BlockTop.BottomNeighbour = var_BlockBottom;
                    }
                }
            }

            Chunk.Chunk var_ChunkNeighbourBottom = World.World.world.getChunkAtPosition(new Vector3(_Chunk.Position.X, _Chunk.Position.Y + Chunk.Chunk.chunkSizeX * Block.Block.BlockSize, 0));

            if (var_ChunkNeighbourBottom != null)
            {
                _Chunk.BottomNeighbour = var_ChunkNeighbourBottom;
                var_ChunkNeighbourBottom.TopNeighbour = _Chunk;
                for (int blockX = 0; blockX < Chunk.Chunk.chunkSizeX; blockX++)
                {
                    Block.Block var_BlockTop    = _Chunk.getBlockAtPosition(blockX, Chunk.Chunk.chunkSizeY - 1);
                    Block.Block var_BlockBottom = var_ChunkNeighbourBottom.getBlockAtPosition(blockX, 0);

                    if (var_BlockTop != null && var_BlockBottom != null)
                    {
                        var_BlockTop.BottomNeighbour = var_BlockBottom;
                        var_BlockBottom.TopNeighbour = var_BlockTop;
                    }
                }
            }
        }
コード例 #21
0
 public bool setChunkAtPosition(Vector3 _Position, Chunk.Chunk _Chunk)
 {
     return(this.setChunkAtPosition(_Position, _Chunk, false));
 }