public void Update_Render() { #region Update Add And Destroy if (!Globals.Splash_Screen && !Globals.Splash_GameOver) { this.origin = Raycast.Raycast_destroyBlockOrigin(this.player); if (this.origin != this.previousOrigin) { this.Update_BlockPointedVertices(); } if (GameDictionaries.blocksDictionary.ContainsKey(this.origin)) { this.Render(); if (Globals.mouseLock) { if (Mouse.GetState().LeftButton == ButtonState.Pressed && !player.baseMouseKeyboard.isHolding_MouseLeftButton && !this.player.isInWater) { DestroyBlock(); player.baseMouseKeyboard.isHolding_MouseLeftButton = true; } if (Mouse.GetState().RightButton == ButtonState.Pressed && !player.baseMouseKeyboard.isHolding_MouseRightButton && !this.player.isInWater) { AddBlock(); player.baseMouseKeyboard.isHolding_MouseRightButton = true; } } } this.previousOrigin = this.origin; } #endregion Update Add And Destroy }
public static Vector3 Raycast_addBlockOrigin(Player player, int interactions = 20) { // Initialize variables Vector3 destroyBlockOrigin = new Vector3(0, -1, 0); Vector3 directionRay = Raycast.Ray_Direction(player); // Checking for interaction with blocks and direction vector int i; Vector3 calculatedOrigin; for (i = 0; i < interactions; i++) { calculatedOrigin = Chunk.getBlockOffset(player.camera.Position + directionRay * i); if (GameDictionaries.blocksDictionary.ContainsKey(calculatedOrigin)) { if (GameDictionaries.blocksDictionary[calculatedOrigin] != BlockType.Water) { destroyBlockOrigin = calculatedOrigin; break; } } } if (destroyBlockOrigin != new Vector3(0, -1, 0) && i != 0) { return(Chunk.getBlockOffset(player.camera.Position + directionRay * (i - 1))); } else { return(destroyBlockOrigin); } }
private void AddBlock() { Vector3 addBlockOrigin = Raycast.Raycast_addBlockOrigin(player); #region Add The Block // Check for valid collision with the player and valid placement if (addBlockOrigin != new Vector3(0, -1, 0) && !GameDictionaries.blocksAddedDictionary.ContainsKey(addBlockOrigin) && !(GameDictionaries.blocksDictionary.TryGetValue(new Vector3(addBlockOrigin.X, addBlockOrigin.Y - Globals.block_Yoffset, addBlockOrigin.Z), out BlockType value1) && value1 == BlockType.Water) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X + Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y), (int)(player.camera.Position.Z + Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X + Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y), (int)(player.camera.Position.Z - Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X - Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y), (int)(player.camera.Position.Z + Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X - Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y), (int)(player.camera.Position.Z - Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X + Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y - Settings.playerHeight), (int)(player.camera.Position.Z + Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X + Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y - Settings.playerHeight), (int)(player.camera.Position.Z - Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X - Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y - Settings.playerHeight), (int)(player.camera.Position.Z + Globals.saftyDistanceFromBlock))) && addBlockOrigin != Chunk.getBlockOffset(new Vector3((int)(player.camera.Position.X - Globals.saftyDistanceFromBlock), (int)(player.camera.Position.Y - Settings.playerHeight), (int)(player.camera.Position.Z - Globals.saftyDistanceFromBlock)))) { // Add block to the dictionaries GameDictionaries.blocksDictionary[addBlockOrigin] = Globals.addableBlockTypes[player.baseMouseKeyboard.mouseWheel_Value]; GameDictionaries.blocksAddedDictionary[addBlockOrigin] = Globals.addableBlockTypes[player.baseMouseKeyboard.mouseWheel_Value]; // Update the max chunk height if the block is above the current max height Vector3 chunk_offset = RayBlock.getChunkOrigin_OffSet(new Vector3(addBlockOrigin.X, 0, addBlockOrigin.Z), 0, 0, 0); if ((int)addBlockOrigin.Y > World.maxHeightInChunk((int)chunk_offset.X, (int)chunk_offset.Z)) { GameDictionaries.chunksHeightDictionary[chunk_offset] = (int)addBlockOrigin.Y; } // Build chunks mesh BuildChunksAroundMesh(addBlockOrigin); } #endregion Add The Block }