Exemplo n.º 1
0
        /// <summary>
        /// Draw all in-game elements for this map
        /// </summary>
        public override void Draw()
        {
            if (isInMapEditMode)
            {
                mapEditor.Draw();
            }
            else
            {
                for (int layer = minLandscapeLayerIndex; layer <= maxLandscapeLayerIndex; layer++)
                {
                    var layerTransform = Matrix.Identity;
                    var offsetX        = 1.0f;
                    var offsetY        = 1.0f;

                    if (Landscape != null && Landscape.Layers.ContainsKey(layer))
                    {
                        offsetX = Landscape.Layers[layer].TransformOffset.X / 100;
                        offsetY = Landscape.Layers[layer].TransformOffset.Y / 100;
                    }

                    layerTransform.Translation = new Vector3(
                        Camera.Transform.Translation.X * offsetX,
                        Camera.Transform.Translation.Y * offsetY,
                        0
                        );

                    if (Landscape != null && Landscape.Layers.ContainsKey(layer))
                    {
                        Landscape.Draw(layer, layerTransform);
                    }

                    if (layer == 0)
                    {
                        foreach (KeyValuePair <int, MapSection> section in sections)
                        {
                            section.Value.DrawBackground(layerTransform);
                        }

                        Player?.Draw(layerTransform);

                        foreach (KeyValuePair <int, MapSection> section in sections)
                        {
                            section.Value.DrawForeground(layerTransform);
                        }
                    }
                }
            }

            if (!isInMapEditMode && isInSectionEditMode)
            {
                sectionEditor.Draw();
            }

            base.Draw();
        }
Exemplo n.º 2
0
        protected override void Draw(GameTime gameTime)
        {
            float width      = (screenWidth / camera.Zoom);
            float height     = (int)(screenHeight / camera.Zoom);
            var   viewMatrix = camera.TranslationMatrix;
            float frameRate  = 1 / (float)gameTime.ElapsedGameTime.TotalSeconds; //FPS
            var   deltaTime  = (float)gameTime.ElapsedGameTime.TotalSeconds;

            frameCounter.Update(deltaTime);
#if true
            //RENDER TARGET MAIN
            GraphicsDevice.SetRenderTarget(mainTarget);
            GraphicsDevice.Clear(Color.Transparent);
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, viewMatrix);
            level.Draw(spriteBatch);
            if (!menu.Open && !chat.Open)
            {
                inv.DrawPreview(spriteBatch);
            }
            spriteBatch.End();
            //MAIN END

            //RENDER TARGET LIGHT
            GraphicsDevice.SetRenderTarget(lightsTarget);
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, SamplerState.PointClamp, null, null, null, viewMatrix);
            level.DrawLight(spriteBatch);
            spriteBatch.End();
            //LIGHT END

            //SPLICE RENDER TARGETS TOGETHER
            GraphicsDevice.SetRenderTarget(null);
            GraphicsDevice.Clear(Color.Black);
            spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);

            basiclight.Parameters["lightMask"].SetValue(lightsTarget);
            basiclight.Parameters["AmbientIntensity"].SetValue(time.CurrentTime);
            basiclight.CurrentTechnique.Passes[0].Apply();

            spriteBatch.Draw(mainTarget, Vector2.Zero, Color.White);
            //spriteBatch.Draw(shadowTarget, Vector2.Zero, Color.White);
            spriteBatch.End();
            //

            //MAPEDITOR & INTERFACE
            int xStart = 10; //UI START X
            switch (currentGamestate)
            {
            case GameState.Running:
                spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp);     //UI
                inv.Draw(spriteBatch);
                hb.Draw(spriteBatch);
                spriteBatch.End();
                if (Global.showHitboxes)
                {
                    spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, camera.TranslationMatrix);
                    editor.DrawPreview(spriteBatch);
                    spriteBatch.End();
                }
                break;

            case GameState.Editor:
                xStart += editor.TileSelectorBackground.Width;
                spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, camera.TranslationMatrix);
                editor.DrawPreview(spriteBatch);
                spriteBatch.End();

                spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp);
                editor.Draw(spriteBatch);
                if (editor.currentEditorMode == MapEditor.EditorMode.EntityAdd)
                {
                    inv.Draw(spriteBatch);
                }
                spriteBatch.End();

                spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp, null, null, null, editor.TilesetView.TranslationMatrix);
                editor.DrawTileset(spriteBatch);
                spriteBatch.End();
                break;

            case GameState.Pause:
                break;
            }

            spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp); //UI

            foreach (var mob in (level.mobs))
            {
                mob.DrawChatBubble(spriteBatch);
            }

#if true
            spriteBatch.DrawString(font, "X: " + level.getClientPlayer().Position.X.ToString(), new Vector2(xStart, 10), Color.Black);
            spriteBatch.DrawString(font, "Y: " + level.getClientPlayer().Position.Y.ToString(), new Vector2(xStart + 120, 10), Color.Black);
            spriteBatch.DrawString(font, "Map: " + level.currentMapName, new Vector2(xStart, 40), Color.Black);
            spriteBatch.DrawString(font, "FPS: " + Math.Round(frameCounter.CurrentFramesPerSecond), new Vector2(xStart, 70), Color.Black);
            spriteBatch.DrawString(font, "RenderedTiles: " + Level.RenderedTiles + " at Zoom: " + Math.Round(Global.camera.Zoom * 10) / 10, new Vector2(xStart, 100), Color.Black);
            spriteBatch.DrawString(font, "TileID: " + level.CurrentMap.getTile(0, level.getClientPlayer().CenterPosition + new Vector2(0, level.getClientPlayer().height / 2)), new Vector2(xStart, 130), Color.Black);
            if (Game1.online)
            {
                spriteBatch.DrawString(font, "Receiving: " + Math.Round((float)NetCode.RecievingBytesPerSecond / 100f) / 10 + "kb/s", new Vector2(xStart, 160), Color.Black);
                spriteBatch.DrawString(font, "Sending: " + Math.Round((float)NetCode.SendingBytesPerSecond / 100f) / 10 + "kb/s", new Vector2(xStart, 190), Color.Black);
            }
#endif
            chat.render(spriteBatch);
            menu.render(spriteBatch);

            spriteBatch.Draw(pointer, new Rectangle(mouseX, mouseY, pointer.Width, pointer.Height), Color.MonoGameOrange);
            spriteBatch.End();
            //
#endif

            base.Draw(gameTime);
        }