예제 #1
0
        public override void Render(TgcFrustum tgcFrustum)
        {
            ClearScreen();

            ShaderRepository.ShipAmbientShader.SetValue("cameraPosition", new float[4] {
                Camera.Position.X, Camera.Position.Y, Camera.Position.Z, 1
            });

            GameState.character.Render();

            ship.Render();

            var   lookedThings   = selectableThings.Where(t => t.Looked).ToList();
            Thing newLookedThing = null;

            if (lookedThings.Count() == 0)
            {
                lookedThing = null;
            }
            else
            {
                newLookedThing = lookedThings[0];
                if (newLookedThing != lookedThing)
                {
                    dialogBox.Open();
                    lookedThing = newLookedThing;
                }
                dialogBox.Clear();
                if (cursor != null)
                {
                    newLookedThing.BoundingBox.Render();
                    dialogBox.AddLineSmall(newLookedThing.name);
                    dialogBox.AddLineSmall("------------");
                    dialogBox.AddLineSmall(newLookedThing.actionDescription);
                    dialogBox.Render();
                    cursor = hand;
                }
            }

            foreach (var thing in selectableThings)
            {
                thing.Render();
            }

            lifeBelt.Position = new TGCVector3(285, 1000, 250);
            lifeBelt.Render();
            lifeBelt.Position = new TGCVector3(330, 1000, 100);
            lifeBelt.Render();
            lifeBelt.Position = new TGCVector3(375, 1000, -50);
            lifeBelt.Render();

            seat.Render();

            if (cursor != null)
            {
                drawer2D.BeginDrawSprite();
                drawer2D.DrawSprite(cursor);
                drawer2D.EndDrawSprite();

                cursor = aim;
            }

            inventoryScene.Render();
            craftingScene.Render();


            //this.drawText.drawText("Pause: P\nInventory: TAB\nExit ship: click the hatch in the floor\nCraft: click the crafter, press ESC to exit crafting",
            //    300, 300, Color.NavajoWhite);

            //this.drawText.drawText("Camera:", 800, 100, Color.Red);
            //this.drawText.drawText("X: " + Camera.Position.X, 800, 130, Color.White);
            //this.drawText.drawText("Y: " + Camera.Position.Y, 800, 160, Color.White);
            //this.drawText.drawText("Z: " + Camera.Position.Z, 800, 190, Color.White);

            //crafter.Render();
            //s.Render();

            statsIndicators.Render(this.GameState.character);
        }
        //private readonly NumberIndicator loadIndicator = new NumberIndicator(100, (Screen.Width-100)/2, (Screen.Height-100)/2);

        public override void Render(TgcFrustum frustum)
        {
            ClearScreen();
            ShaderRepository.WorldWaterFog.SetValue("cameraPosition", new Vector4(Camera.Position.X, Camera.Position.Y, Camera.Position.Z, 1));
            GameState.character.Render();
            if (GameState.character.Weapon != null && GameState.character.Weapon.Mesh != null)
            {
                GameState.character.Weapon.Mesh.Effect    = ShaderRepository.WorldWaterFog;
                GameState.character.Weapon.Mesh.Technique = "WorldWaterFog";
            }

            if (!this.loaded)
            {
                var oldColor = this.backgroundColor;
                this.backgroundColor = Color.Black;
                ClearScreen();
                //TODO loading screen

                /* indicator
                 * var max = this.World.generating;
                 * var progress = this.World.chunks.Count * 100 / (max != 0 ? max : 1);
                 *
                 * loadIndicator.Render(progress , 100);
                 * loadIndicator.RenderText(progress);
                 */

                var color = Color.DeepSkyBlue;

                this.DrawText.drawText("Loading...", 600, 300, color);
                this.DrawText.drawText("Chunnks: " + this.World.chunks.Count + "/" + this.World.generating, 600, 330, color);
                this.DrawText.drawText("Floors: " + FloorRepository.Floors.Count + "/" + FloorRepository.generating, 600, 360, color);
                this.backgroundColor = Color.Green;

                return;
            }

            //if (Camera.Position.Y < 0)
            //{
            //    foreach (var mesh in skyBoxUnderwater.Faces)
            //    {
            //        mesh.Effect = ShaderRepository.WorldWaterFog;
            //        mesh.Technique = "WorldWaterFog";
            //    }
            //    skyBoxUnderwater.Render();
            //}
            //else
            //{
            //    foreach (var mesh in skyBoxOutside.Faces)
            //    {
            //        mesh.Effect = ShaderRepository.WorldWaterFog;
            //        mesh.Technique = "WorldWaterFog";
            //    }
            //   skyBoxOutside.Render();
            //}

            if (Camera.Position.Y < 0)
            {
                theSkybox.Render(new Vector4(Camera.Position.X, Camera.Position.Y, Camera.Position.Z, 1));
            }
            else
            {
                theSkybox.Render();
            }

            var camPos = new Vector4(Camera.Position.X, Camera.Position.Y, Camera.Position.Z, 1);

            waterSurface.Render(camPos);
            ShaderRepository.WorldWaterFog.SetValue("cameraPosition", camPos);
            World.Render(Camera, frustum);

            if (BoundingBox)
            {
                World.RenderBoundingBox(Camera);
            }
            orientationArrow.Render();

            drawer.BeginDrawSprite();
            //drawer.DrawSprite(waterVision);
            drawer.DrawSprite(cursor);
            drawer.EndDrawSprite();

            inventoryScene.Render();

            if (dialogName != "")
            {
                dialogBox.Clear();
                dialogBox.AddLineBig(dialogName, Color.FromArgb(255, 204, 234, 255));
                dialogBox.AddLineSmall(dialogDescription, Color.FromArgb(255, 204, 234, 255));
                dialogBox.Render();
            }

            drawer.BeginDrawSprite();
            drawer.DrawSprite(mask);
            drawer.EndDrawSprite();
            statsIndicators.Render(GameState.character);

            /*
             * this.DrawText.drawText("Camera:", 800, 100, Color.Red);
             * this.DrawText.drawText("X: " + Camera.Position.X, 800, 130, Color.White);
             * this.DrawText.drawText("Y: " + Camera.Position.Y, 800, 160, Color.White);
             * this.DrawText.drawText("Z: " + Camera.Position.Z, 800, 190, Color.White);
             */
        }