/// <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(); }
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); }