示例#1
0
        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
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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
        }