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); }
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); }
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()); }
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); }
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); }
public Block.Block getBlockAtCoordinate(Vector3 _Position) { Chunk.Chunk var_Chunk = this.getChunkAtPosition(_Position); if (var_Chunk != null) { return(var_Chunk.getBlockAtCoordinate(_Position)); } return(null); }
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); } }
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); }
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); }
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); }
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); } }
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); }
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); }
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; //} } } }
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); } }
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); } } }
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); }
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; } } } }
public bool setChunkAtPosition(Vector3 _Position, Chunk.Chunk _Chunk) { return(this.setChunkAtPosition(_Position, _Chunk, false)); }