Exemplo n.º 1
0
 internal void RenderPass2()
 {
     p.StartSection("pass1");
     t.ResetTransformation();
     foreach (ChunkRenderer pass2ChunkRenderer in pass2ChunkRenderers)
     {
         pass2ChunkRenderer.RenderPass2();
     }
     p.EndSection();
 }
Exemplo n.º 2
0
        private void RenderCrossHair()
        {
            t.ResetTransformation();
            t.StartDrawingLines();
            Vector4 c      = new Vector4(1, 1, 1, 1);
            Vector4 center = new Vector4(TheGame.Instance.Width / 2, TheGame.Instance.Height / 2, 0, 1);
            float   size   = 15;

            t.AddVertexWithColor(new Vector4(center.X - size, center.Y, 0, 1), c);
            t.AddVertexWithColor(new Vector4(center.X + size, center.Y, 0, 1), c);
            t.AddVertexWithColor(new Vector4(center.X, center.Y - size, 0, 1), c);
            t.AddVertexWithColor(new Vector4(center.X, center.Y + size, 0, 1), c);
            t.Draw();
        }
Exemplo n.º 3
0
        internal void Initialize()
        {
            t.ResetTransformation();
            LoadAllTileTextures();

            // define blocks
            DefineBlock(BlockRepository.DirtWithGrass.Id, "grass_top", "grass_side", "dirt");
            DefineBlock(BlockRepository.Dirt.Id, "dirt");
            DefineBlock(BlockRepository.Stone.Id, "stone");
            DefineBlock(BlockRepository.Wood.Id, "log_oak_top", "log_oak", "log_oak_top");
            DefineBlock(BlockRepository.Leaf.Id, "leaves_oak_opaque");
            DefineBlock(BlockRepository.Brick.Id, "brick");
            DefineBlock(BlockRepository.Sand.Id, "sand");
            DefineBlock(BlockRepository.BedRock.Id, "bedrock");
            DefineBlock(BlockRepository.Diamond.Id, "diamond_ore");
            DefineBlock(BlockRepository.Plank.Id, "planks_oak");
            DefineBlock(BlockRepository.CobbleStone.Id, "cobblestone");
            DefineBlock(BlockRepository.TallGrass.Id, "tallgrass");
            DefineBlock(BlockRepository.FarmlandDry.Id, "farmland_dry", "dirt", "dirt");
            DefineBlock(BlockRepository.FarmlandWet.Id, "farmland_wet", "dirt", "dirt");
            DefineBlock(BlockRepository.Wheat.Id, "wheat_stage_5");
            DefineBlock(BlockRepository.CraftingTable.Id, "crafting_table_front", "crafting_table_side", "crafting_table_top", "planks_oak");
            DefineBlock(BlockRepository.FurnaceOff.Id, "furnace_front_off", "furnace_side", "furnace_top", "cobblestone");
            DefineBlock(BlockRepository.FurnaceOn.Id, "furnace_front_on", "furnace_side", "furnace_top", "cobblestone");
            DefineBlock(BlockRepository.Glass.Id, "glass");
            DefineBlock(BlockRepository.Water.Id, "water");


            // stage textures
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_0");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_1");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_2");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_3");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_4");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_5");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_6");
            DefineStage(BlockRepository.Wheat.Id, "wheat_stage_7");

            MakeWave(BlockRepository.Water.Id);
            MakeWave(BlockRepository.TallGrass.Id);
            MakeWaveForStage(BlockRepository.Wheat.Id);


            // Define destroy blocks...
            DefineDestroyAndSelectionBlocks();

            // define items
            BuildItemVertexBuffer(ItemRepository.Stick.Id, "stick");
            BuildItemVertexBuffer(ItemRepository.StoneAxe.Id, "stone_axe");
            BuildItemVertexBuffer(ItemRepository.StoneHoe.Id, "stone_hoe");
            BuildItemVertexBuffer(ItemRepository.StonePickAxe.Id, "stone_pickaxe");
            BuildItemVertexBuffer(ItemRepository.StoneShovel.Id, "stone_shovel");
            BuildItemVertexBuffer(ItemRepository.StoneSword.Id, "stone_sword");
            BuildItemVertexBuffer(ItemRepository.SeedsWheat.Id, "seeds_wheat");
            BuildItemVertexBuffer(ItemRepository.Wheat.Id, "wheat");
            BuildItemVertexBuffer(ItemRepository.Bread.Id, "bread");
            BuildItemVertexBuffer(ItemRepository.Coal.Id, "coal");
        }
Exemplo n.º 4
0
        internal virtual void Render(float partialStep)
        {
            t.ResetTransformation();
            Vector3 position = Interpolate.Vector(entity.PrevPosition, entity.Position, partialStep);

            if (entity != World.Instance.Player)
            {
                t.StartDrawingColoredQuads();
                Camera.Instance.World = Matrix.Multiply(Matrix.RotationYawPitchRoll(entity.Yaw, 0, 0), Matrix.Translation(position));
                t.Draw(buffer);
            }

            if (typeof(Player) == entity.GetType())
            {
                Player  p       = World.Instance.Player;
                Vector3 pos     = p.Position + p.EyePosition;
                int     blockId = World.Instance.GetBlock((int)pos.X, (int)pos.Y, (int)pos.Z);
                if (blockId == BlockRepository.Water.Id)
                {
                    t.StartDrawingColoredQuads();
                    Camera.Instance.World = Matrix.Identity;
                    Camera.Instance.World = Matrix.Multiply(Camera.Instance.World, Matrix.Translation(new Vector3(-0.5f, -0.5f, -1.2f)));
                    Camera.Instance.World = Matrix.Multiply(Camera.Instance.World, Matrix.RotationYawPitchRoll(p.Yaw - (float)Math.PI, -p.Pitch, 0));
                    Camera.Instance.World = Matrix.Multiply(Camera.Instance.World, Matrix.Translation(pos));

                    Vector3 normal = new Vector3(0, 0, 1);
                    Vector4 c1     = new Vector4(0, 0, 1, 0.5f);
                    t.AddVertexWithColor(new Vector4(0f, 0f, 1f, 1.0f), c1, normal);
                    t.AddVertexWithColor(new Vector4(0f, 1f, 1f, 1.0f), c1, normal);
                    t.AddVertexWithColor(new Vector4(1f, 1f, 1f, 1.0f), c1, normal);
                    t.AddVertexWithColor(new Vector4(1f, 0f, 1f, 1.0f), c1, normal);
                    t.Draw();
                }
            }
            if (typeof(Player) == entity.GetType() && World.Instance.Player.DestroyProgress > 0)
            {
                t.StartDrawingTiledQuads2();
                t.Translate.X = World.Instance.Player.BlockAttackPosition.X + 0.5f;
                t.Translate.Y = World.Instance.Player.BlockAttackPosition.Y + 0.5f;
                t.Translate.Z = World.Instance.Player.BlockAttackPosition.Z + 0.5f;
                float s = 1.005f;
                t.Scale = new Vector3(s, s, s);
                t.Draw(TileTextures.Instance.GetDestroyBlockVertexBuffer(World.Instance.Player.DestroyProgress));
            }
        }
Exemplo n.º 5
0
        public void Render()
        {
            GenerateHealthBuffer();
            GenerateHungerBuffer();

            t.ResetTransformation();
            float temp = (int)(TheGame.Instance.Width / (frameSize * 13f));

            t.Scale       = new Vector3(1, 1, 1) * temp;
            t.Translate   = new Vector3(1, 0, 0) * (TheGame.Instance.Width - frameSize * 9f * temp) / 2f;
            t.Translate.Y = 0;

            // Draw slot 0-8 in inventory
            int[] order = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
            order[8] = player.SelectedSlotId;
            order[player.SelectedSlotId] = 8;
            foreach (int i in order)
            {
                if (i == player.SelectedSlotId)
                {
                    continue;
                }
                DrawItem(i);
            }
            DrawItem(player.SelectedSlotId);

            // Draw hearts
            t.Scale     = new Vector3(1, 1, 1) * temp;
            t.Translate = new Vector3(
                (TheGame.Instance.Width - frameSize * 9f * temp) / 2f,
                (frameSize + 8) * temp,
                0);
            t.StartDrawingAlphaTexturedQuads("icons");
            t.Draw(healthBuffer);
            t.StartDrawingAlphaTexturedQuads("icons");
            t.Draw(hungerBuffer);
        }
Exemplo n.º 6
0
        internal bool Render(bool forceCachedRendering)
        {
            // check if this is inside frustum
            RenewLease();
            bool rebuildOccured = false;


            if ((pass1VertexBuffer.Disposed || chunk.IsDirty) && !forceCachedRendering)
            {
                // pass1
                VertexBuffer.Dispose(ref pass1VertexBuffer);
                VertexBuffer.Dispose(ref pass2VertexBuffer);
                chunk.IsDirty = true;

                // rebuild vertices for cunk
                BlockRenderer blockRenderer = new BlockRenderer();
                PositionBlock startCorner;
                chunk.Position.GetMinCornerBlock(out startCorner);
                int                  minX        = startCorner.X;
                int                  minY        = startCorner.Y;
                int                  minZ        = startCorner.Z;
                int                  maxX        = startCorner.X + 16;
                int                  maxY        = startCorner.Y + 16;
                int                  maxZ        = startCorner.Z + 16;
                PositionBlock        blockPos    = new PositionBlock(0, 0, 0);
                List <PositionBlock> pass2Blocks = new List <PositionBlock>();
                t.StartDrawingTiledQuads();
                for (int x = 0; x < 16; x++)
                {
                    for (int y = 0; y < 16; y++)
                    {
                        for (int z = 0; z < 16; z++)
                        {
                            blockPos.X = x;
                            blockPos.Y = y;
                            blockPos.Z = z;
                            Block block = Block.FromId(chunk.SafeGetLocalBlock(x, y, z));
                            if (!block.IsTransparent)
                            {
                                blockRenderer.RenderBlock(blockPos, chunk);
                            }
                            else if (block.Id != BlockRepository.Air.Id)
                            {
                                pass2Blocks.Add(blockPos);
                            }
                        }
                    }
                }
                pass1VertexBuffer = t.GetVertexBuffer();

                // generate vertex buffer for pass2
                t.StartDrawingTiledQuadsPass2();
                foreach (PositionBlock pass2BlockPos in pass2Blocks)
                {
                    blockRenderer.RenderBlock(pass2BlockPos, chunk);
                }
                pass2VertexBuffer = t.GetVertexBuffer();

                chunk.IsDirty  = false;
                rebuildOccured = true;
            }

            // draw chunk if drawbuffer has been calculated
            t.ResetTransformation();
            if (pass1VertexBuffer.Vertices != null)
            {
                t.StartDrawingTiledQuads();
                t.Draw(pass1VertexBuffer);
            }
            // draw entities in chunk
            foreach (EntityStack stack in chunk.StackEntities)
            {
                int entitiesToDraw = stack.Count > 2 ? 2 : stack.Count;
                if (stack.AsBlock != null)
                {
                    t.Translate = stack.Position;
                    t.Scale     = new Vector3(0.5f, 0.5f, 0.5f);
                    t.Rotate    = new Vector3(stack.Pitch, stack.Yaw, 0);
                    for (int i = 0; i < entitiesToDraw; i++)
                    {
                        t.StartDrawingTiledQuads();
                        t.Draw(TileTextures.Instance.GetBlockVertexBuffer(stack.Id));
                        t.Translate += new Vector3(0.05f, 0.05f, 0.05f);
                    }
                }
                else if (stack.AsItem != null)
                {
                    t.Translate = stack.Position;
                    t.Scale     = new Vector3(0.5f, 0.5f, 0.5f);
                    for (int i = 0; i < entitiesToDraw; i++)
                    {
                        Player p = World.Instance.Player;
                        t.Rotate = new Vector3(-p.Pitch, p.Yaw + (float)Math.PI, 0);
                        t.StartDrawingTiledQuadsPass2();
                        t.Draw(TileTextures.Instance.GetItemVertexBuffer(stack.Id));
                        t.Translate += new Vector3(0.2f, 0.2f, 0.2f);
                    }
                }
            }
            return(rebuildOccured);
        }