Dispose() protected method

Immediately releases the unmanaged resources used by this object.
protected Dispose ( bool disposing ) : void
disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources.
return void
Beispiel #1
0
        public static Texture2D FromText(string text, SpriteFont font, Color color, Size size, bool multiLine, int lineStart, GraphicsDevice device)
        {
            string[] drawAbleText = multiLine ? text.Split(new string[1] { "\n" }, StringSplitOptions.None) : new string[1] { text };
            RenderTarget2D target = new RenderTarget2D(device, size.Width, size.Height);
            SpriteBatch sb = new SpriteBatch(device);

            device.SetRenderTarget(target);
            device.Clear(Color.Transparent);

            sb.Begin();
            for (int i = lineStart; i < drawAbleText.Length; i++)
            {
                float y = 1 + (i - lineStart) * font.GetHeight();
                sb.DrawString(font, drawAbleText[i], new Vector2(1, y), color, 0f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0f);
            }
            sb.End();

            device.SetRenderTarget(null);

            Texture2D texture = new Texture2D(device, size.Width, size.Height);
            Color[] colorData = target.GetColorData();
            texture.SetData(colorData);

            target.Dispose();
            sb.Dispose();

            return texture;
        }
        protected override void Draw()
        {
            base.Draw();

            var spriteBatch = new SpriteBatch(GraphicsDevice);

            _rendererCollection.Render(spriteBatch, GraphicsDevice.Viewport.Bounds, _textureContent);

            spriteBatch.Dispose();
        }
Beispiel #3
0
 /// <summary>
 /// Draw the screen
 /// </summary>
 /// <param name="gameTime">GameTime for this draw</param>
 public override void Draw(GameTime gameTime)
 {
     GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer,
         Color.Red, 1.0f, 0);
     SpriteBatch batch = new SpriteBatch(GraphicsDevice);
     batch.Begin();
     {
         batch.Draw(screenImage, new Rectangle(0, 0, SnailsPace.getInstance().Window.ClientBounds.Width, SnailsPace.getInstance().Window.ClientBounds.Height), Color.White);
     }
     batch.End();
     batch.Dispose();
 }
Beispiel #4
0
 public void Dispose()
 {
     if (batch != null)
     {
         batch.Dispose();
     }
     isClose = true;
     rectLazy.Clear();
     fillRectLazy.Clear();
     lineLazy.Clear();
     circleLazy.Clear();
     polyLazy.Clear();
 }
Beispiel #5
0
 /// <summary>
 /// Draw the background image, the player's score, and a string indicating how to leave the screen.
 /// </summary>
 /// <param name="gameTime">GameTime for this update</param>
 public override void Draw(GameTime gameTime)
 {
     GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer,
         Color.Red, 1.0f, 0);
     SpriteBatch batch = new SpriteBatch(GraphicsDevice);
     batch.Begin();
     {
         batch.Draw(screenImage, new Rectangle(0, 0, SnailsPace.getInstance().Window.ClientBounds.Width, SnailsPace.getInstance().Window.ClientBounds.Height), Color.White);
         batch.DrawString(font, "Your score is...", new Vector2(100, 25), Color.White);
         batch.DrawString(font, pointsString, new Vector2(50, 60), Color.White);
         batch.DrawString(font, "Press " + SnailsPace.inputManager.getKeyBinding("MenuToggle") + " to continue...", new Vector2(250, 500), Color.White);
     }
     batch.End();
     batch.Dispose();
 }
Beispiel #6
0
 /// <summary>
 /// Draw the background image, the player's score, and a string indicating how to leave the screen.
 /// </summary>
 /// <param name="gameTime">GameTime for this update</param>
 public override void Draw(GameTime gameTime)
 {
     GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer,
         Color.Red, 1.0f, 0);
     SpriteBatch batch = new SpriteBatch(GraphicsDevice);
     batch.Begin();
     {
         batch.Draw(screenImage, new Rectangle(0, 0, SnailsPace.getInstance().Window.ClientBounds.Width, SnailsPace.getInstance().Window.ClientBounds.Height), Color.White);
         batch.DrawString(font, mapName, new Vector2(100, 25), Color.White);
         List<Score> pointsScores;
         SnailsPace.highScoreList.pointsScores.TryGetValue(mapName, out pointsScores);
         List<Score> accuracyScores;
         SnailsPace.highScoreList.pointsScores.TryGetValue(mapName, out accuracyScores);
         List<Score>.Enumerator pointEnumerator = pointsScores.GetEnumerator();
         List<Score>.Enumerator accuracyEnumerator = accuracyScores.GetEnumerator();
         for (int i = 0; i < pointsScores.Count; i++)
         {
             pointEnumerator.MoveNext();
             batch.DrawString(font, pointEnumerator.Current.score + "   " + pointEnumerator.Current.name, new Vector2(50, 50 + (25 * i)), Color.White);
         }
     }
     batch.End();
     batch.Dispose();
 }
Beispiel #7
0
 public void GenerateAssets()
 {
     SpriteBatch spriteBatch = new SpriteBatch(m_GraphicsDevice);
     ClearOldData();
     GenerateCityMesh(m_GraphicsDevice); //generates the city mesh
     CreateTextureAtlas(spriteBatch); //generates the many atlases used when rendering the city.
     CreateTransparencyAtlas(spriteBatch);
     RoadAtlas = CreateRoadAtlas(m_Roads, spriteBatch);
     RoadCAtlas = CreateRoadAtlas(m_RoadCorners, spriteBatch);
     spriteBatch.Dispose();
     RegenData = false; //don't do this again next frame...
 }
Beispiel #8
0
        private void DrawSprites(float HB, float VB)
        {
            SpriteBatch spriteBatch = new SpriteBatch(m_GraphicsDevice);
            spriteBatch.Begin();

            if (!m_Zoomed && m_HandleMouse)
            {
                //draw rectangle to indicate zoom position
                DrawLine(m_WhiteLine, new Vector2(m_MouseState.X - 15, m_MouseState.Y - 11), new Vector2(m_MouseState.X - 15, m_MouseState.Y + 11), spriteBatch, 2, 1);
                DrawLine(m_WhiteLine, new Vector2(m_MouseState.X - 16, m_MouseState.Y + 10), new Vector2(m_MouseState.X + 16, m_MouseState.Y + 10), spriteBatch, 2, 1);
                DrawLine(m_WhiteLine, new Vector2(m_MouseState.X + 15, m_MouseState.Y + 11), new Vector2(m_MouseState.X + 15, m_MouseState.Y - 11), spriteBatch, 2, 1);
                DrawLine(m_WhiteLine, new Vector2(m_MouseState.X + 16, m_MouseState.Y - 10), new Vector2(m_MouseState.X - 16, m_MouseState.Y - 10), spriteBatch, 2, 1);
            }
            else if (m_Zoomed && m_HandleMouse)
            {
                if (m_LotCost != 0)
                {
                    float X = GetHoverSquare()[0];
                    float Y = GetHoverSquare()[1];
                    //TODO: Should this have opacity? Might have to change this to render only when hovering over a lot.
                    DrawTooltip(spriteBatch, m_LotCost.ToString() + "§", new Vector2(X, Y), 0f);
                }
                else
                {
                    if (m_CurrentLot != null)
                    {
                        float X = GetHoverSquare()[0];
                        float Y = GetHoverSquare()[1];
                        bool Online = ProtoHelpers.GetBit(m_CurrentLot.flags, 0);
                        string OnlineStr = (Online == true) ? "Online" : "Offline";
                        //TODO: Should this have opacity? Might have to change this to render only when hovering over a lot.
                        DrawTooltip(spriteBatch, GameFacade.Strings.GetString("215", "3", new string[]{m_CurrentLot.name}) + "\n"
                            + OnlineStr, new Vector2(X, Y), 0f);
                    }
                }
            }

            if (m_ZoomProgress < 0.5)
            {
                spriteBatch.End();
                spriteBatch.Dispose();
                return;
            }

            float iScale = (float)m_ScrWidth / (HB * 2);

            float treeWidth = (float)(Math.Sqrt(2)*(128.0/144.0));
            float treeHeight = treeWidth*(80/128);

            Vector2 mid = CalculateR(new Vector2(m_ViewOffX, -m_ViewOffY)); //determine approximate tile position at center of screen
            mid.X -= 6;
            mid.Y += 6;
            float[] bounds = new float[] { (float)Math.Round(mid.X - 19), (float)Math.Round(mid.Y - 19), (float)Math.Round(mid.X + 19), (float)Math.Round(mid.Y + 19) };

            Texture2D img = m_Forest;
            float fade = Math.Max(0, Math.Min(1, (m_ZoomProgress - 0.4f) * 2));

            DrawTileBorders(iScale, spriteBatch);

            for (short y = (short)bounds[1]; y < bounds[3]; y++) //iterate over tiles close to the approximate tile position at the center of the screen and draw any trees/houses on them
            {
                if (y < 0 || y > 511) continue;
                for(short x = (short)bounds[0]; x < bounds[2]; x++)
                {
                    if (x < 0 || x > 511) continue;

                    float elev = (m_ElevationData[(y * 512 + x) * 4] + m_ElevationData[(y * 512 + Math.Min(x + 1, 511)) * 4] +
                        m_ElevationData[(Math.Min(y + 1, 511) * 512 + Math.Min(x + 1, 511)) * 4] +
                        m_ElevationData[(Math.Min(y + 1, 511) * 512 + x) * 4]) / 4; //elevation of sprite is the average elevation of the 4 vertices of the tile

                    var xy = transformSpr(iScale, new Vector3((float)(x + 0.5), elev / 12.0f, (float)(y + 0.5)));

                    if (xy.X > -64 && xy.X < m_ScrWidth + 64 && xy.Y > -40 && xy.Y < m_ScrHeight + 40) //is inside screen
                    {

                        Vector2 loc = new Vector2( x, y );
                        LotTileEntry house;

                        if (m_CityLookup.ContainsKey(loc))
                        {
                            house = m_CityLookup[loc];
                        }
                        else
                        {
                            house = null;
                        }
                        if (house != null) //if there is a house here, draw it
                        {
                            if ((house.flags & 1) > 0) {
                                PathTile(x, y, iScale, (float)(0.3+Math.Sin(4*Math.PI*(m_SpotOsc%1))*0.15));
                            }

                            double scale = treeWidth * iScale / 128.0;
                            if (!m_HouseGraphics.ContainsKey(house.lotid)) {
                                //no house graphic found - request one!
                                m_HouseGraphics[house.lotid] = m_DefaultHouse;
                                m_CityData.RetrieveHouseGFX(house.lotid, m_HouseGraphics, m_GraphicsDevice);
                            }
                            Texture2D lotImg = m_HouseGraphics[house.lotid];
                            spriteBatch.Draw(lotImg, new Rectangle((int)(xy.X - 64.0 * scale), (int)(xy.Y - 32.0 * scale), (int)(scale * 128), (int)(scale * 64)), m_TintColor);
                        }
                        else //if there is no house, draw the forest that's meant to be here.
                        {
                            double fType = m_ForestTypes[m_ForestTypeData[(y * 512 + x)]];
                            double fDens = Math.Round((double)(m_ForestDensityData[(y * 512 + x) * 4] * 4 / 255));
                            if (!(fType == -1 || fDens == 0))
                            {
                                double scale = treeWidth * iScale / 128.0;
                                spriteBatch.Draw(m_Forest, new Rectangle((int)(xy.X - 64.0 * scale), (int)(xy.Y - 56.0 * scale), (int)(scale * 128), (int)(scale * 80)), new Rectangle((int)(128 * (fDens - 1)), (int)(80 * fType), 128, 80), m_TintColor);
                                //draw correct forest from forest atlas
                            }
                        }
                    }
                }
            }

            Draw2DPoly(); //fill the tiles below online houses BEFORE actually drawing the houses and trees!
            spriteBatch.End();
            spriteBatch.Dispose();
        }
Beispiel #9
0
 /// <summary>
 /// Dispose
 /// </summary>
 /// <param name="someObject">Some object</param>
 public static void Dispose(ref SpriteBatch someObject)
 {
     if (someObject != null)
         someObject.Dispose();
     someObject = null;
 }
Beispiel #10
0
        /// <summary>
        /// Render the scene.
        /// </summary>
        /// <param name="objects">All GameObjects to be rendered.</param>
        /// <param name="strings">Strings of text to render.</param>
        /// <param name="gameTime">The current time.</param>
        public void render(List<Objects.GameObject> objects, List<Objects.Text> strings, GameTime gameTime)
        {
            SnailsPace.getInstance().GraphicsDevice.RenderState.CullMode = CullMode.None;
            SnailsPace.getInstance().GraphicsDevice.RenderState.DepthBufferEnable = true;
            SnailsPace.getInstance().GraphicsDevice.RenderState.DepthBufferWriteEnable = true;
            SnailsPace.getInstance().GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.CornflowerBlue, 1.0f, 0);
            Vector3 cameraTargetPosition = getCameraTargetPosition();
            cameraTargetPosition.Z = cameraTargetPosition.Z * debugZoom;
            if (!cameraPosition.Equals(cameraTargetPosition))
            {
                // If the camera is not at it's target position, move the camera toward the target.
                float elapsedTime = (float)Math.Min(gameTime.ElapsedRealTime.TotalSeconds, 1);
                Vector3 cameraDifference = cameraTargetPosition - cameraPosition;
                Vector3 cameraPositionMovement = Vector3.Zero;
                cameraPositionMovement.X = calculateCameraMovement(cameraDifference.X, elapsedTime);
                cameraPositionMovement.Y = calculateCameraMovement(cameraDifference.Y, elapsedTime);
                cameraPositionMovement.Z = calculateCameraMovement(cameraDifference.Z, elapsedTime);
                cameraPosition = cameraPosition + cameraPositionMovement;

                // Keep the camera inside the level's specified bounds.
                float cameraStopXDistance = (float)(1000 * Math.Tan(45 / 2.0));
                float cameraStopYDistance = (float)(1000 * Math.Tan(MathHelper.PiOver4 / 2.0));
                for (int i = 1; i < cameraBounds.Length; i++)
                {
                    if (cameraBounds[i].X == cameraBounds[i - 1].X)
                    {
                        // This is a vertical bounding line, check the camera position to the left and right.
                        if ((cameraBounds[i].X < 0) && (cameraPosition.X - cameraStopXDistance < cameraBounds[i].X))
                            cameraPosition.X = cameraBounds[i].X + cameraStopXDistance;
                        else if ((cameraBounds[i].X > 0) && (cameraPosition.X + cameraStopXDistance > cameraBounds[i].X))
                            cameraPosition.X = cameraBounds[i].X - cameraStopXDistance;
                    }
                    else if (cameraBounds[i].Y == cameraBounds[i - 1].Y)
                    {
                        // This is a horizontal bounding line, check the camera position on top and bottom.
                        if ((cameraBounds[i].Y > 0) && (cameraPosition.Y + cameraStopYDistance > cameraBounds[i].Y))
                            cameraPosition.Y = cameraBounds[i].Y - cameraStopYDistance;
                        else if ((cameraBounds[i].Y < 0) && (cameraPosition.Y - cameraStopYDistance < cameraBounds[i].Y))
                            cameraPosition.Y = cameraBounds[i].Y + cameraStopYDistance;
                    }
                }
            }

            Viewport viewport = SnailsPace.getInstance().GraphicsDevice.Viewport;
            float aspectRatio = (float)viewport.Width / (float)viewport.Height;
            cameraProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, nearClip, farClip);
            cameraView = Matrix.CreateLookAt(cameraPosition, cameraPosition + Vector3.Forward, Vector3.Up);
            BoundingFrustum viewFrustum = new BoundingFrustum(cameraView * cameraProjection);

            #if DEBUG
            // If debugging bounding boxes, make sure the list exists.
            if (boundingBoxVertices == null)
            {
                boundingBoxVertices = new List<VertexPositionColorTexture[]>();
            }
            else
            {
                boundingBoxVertices.Clear();
            }
            #endif
            if (objects != null)
            {
                List<Objects.GameObject>.Enumerator objectEnumerator = objects.GetEnumerator();

                SnailsPace.getInstance().GraphicsDevice.VertexDeclaration = new VertexDeclaration(SnailsPace.getInstance().GraphicsDevice, VertexPositionColorTexture.VertexElements);
                while (objectEnumerator.MoveNext())
                {
                    // Iterate over each GameObject and draw it.
                    drawObject(objectEnumerator.Current, viewFrustum);
            #if DEBUG
                    if (SnailsPace.debugBoundingBoxes && objectEnumerator.Current.collidable)
                    {
                        // Draw a bounding box if we are debugging bounding boxes and this object has one.
                        Objects.GameObjectBounds boundingBox = objectEnumerator.Current.bounds;
                        Vector2[] boxVertices = boundingBox.Points;
                        VertexPositionColorTexture[] visualBoxVertices = new VertexPositionColorTexture[boxVertices.Length + 2];
                        visualBoxVertices[0].Color = boundingBoxCenterColor;
                        visualBoxVertices[0].Position = new Vector3(objectEnumerator.Current.position, 1);
                        visualBoxVertices[visualBoxVertices.Length - 1].Position = new Vector3(boxVertices[0], 1);
                        visualBoxVertices[visualBoxVertices.Length - 1].Color = boundingBoxColor;
                        for (int boxVertexIndex = 0; boxVertexIndex < boxVertices.Length; boxVertexIndex++)
                        {
                            visualBoxVertices[boxVertexIndex + 1].Position = new Vector3(boxVertices[boxVertexIndex], 1);
                            visualBoxVertices[boxVertexIndex + 1].Color = boundingBoxColor;
                        }
                        boundingBoxVertices.Add(visualBoxVertices);
                    }
            #endif
                }
                objectEnumerator.Dispose();
            #if DEBUG
                if (SnailsPace.debugTriggers)
                {
                    // Draw a trigger box if we are debugging triggers.
                    List<Objects.Trigger>.Enumerator triggers = Engine.map.triggers.GetEnumerator();

                    while (triggers.MoveNext())
                    {
                        // For each trigger, draw a box and add it to the list with the bounding boxes.
                        Objects.GameObjectBounds boundingBox = triggers.Current.bounds;
                        Vector2[] boxVertices = boundingBox.Points;
                        VertexPositionColorTexture[] visualBoxVertices = new VertexPositionColorTexture[boxVertices.Length + 2];
                        visualBoxVertices[0].Color = triggerBoxCenterColor;
                        visualBoxVertices[0].Position = new Vector3(triggers.Current.position, 1);
                        visualBoxVertices[visualBoxVertices.Length - 1].Position = new Vector3(boxVertices[0], 10);
                        visualBoxVertices[visualBoxVertices.Length - 1].Color = triggerBoxColor;
                        for (int boxVertexIndex = 0; boxVertexIndex < boxVertices.Length; boxVertexIndex++)
                        {
                            visualBoxVertices[boxVertexIndex + 1].Position = new Vector3(boxVertices[boxVertexIndex], 1);
                            visualBoxVertices[boxVertexIndex + 1].Color = triggerBoxColor;
                        }
                        boundingBoxVertices.Add(visualBoxVertices);
                    }
                    triggers.Dispose();
                }

                // TODO: this probably isn't how we want to do this if we end up using more than one effect
                Effect effect = getOrCreateEffect("Resources/Effects/effects");
                effect.CurrentTechnique = effect.Techniques["Colored"];
                effect.Parameters["xView"].SetValue(cameraView);
                effect.Parameters["xProjection"].SetValue(cameraProjection);
                effect.Parameters["xWorld"].SetValue(Matrix.Identity);
                effect.Begin();

                // Draw all the bounding and trigger boxes.
                List<VertexPositionColorTexture[]>.Enumerator boundingBoxEnumerator = boundingBoxVertices.GetEnumerator();
                while (boundingBoxEnumerator.MoveNext())
                {
                    IEnumerator<EffectPass> effectPassEnumerator = effect.CurrentTechnique.Passes.GetEnumerator();
                    while (effectPassEnumerator.MoveNext())
                    {
                        effectPassEnumerator.Current.Begin();
                        // The vertex declaration needs to be set before it gets here or it will fail.
                        SnailsPace.getInstance().GraphicsDevice.DrawUserPrimitives<VertexPositionColorTexture>(PrimitiveType.TriangleFan, boundingBoxEnumerator.Current, 0, boundingBoxEnumerator.Current.Length - 2);
                        effectPassEnumerator.Current.End();
                    }
                    effectPassEnumerator.Dispose();
                }
                boundingBoxEnumerator.Dispose();
                effect.End();
            #endif
            }

            if (strings == null)
            {
                strings = new List<Objects.Text>();
            }

            SpriteBatch batch = new SpriteBatch(SnailsPace.getInstance().GraphicsDevice);
            batch.Begin();

            // Draw HUD
            {
                batch.Draw(Engine.healthIcon, new Rectangle(0, 0, 32, 32), Color.White);
                batch.Draw(Engine.healthBar, new Rectangle(32, 8, (int)((Player.helix.health / (float)Player.helix.maxHealth) * 300), 16), Color.White);
                batch.Draw(Engine.fuelIcon, new Rectangle(0, 24, 32, 32), Color.White);
                batch.Draw(Engine.fuelBar, new Rectangle(32, 32, (int)((Player.helix.fuel / Player.helix.maxFuel) * 300), 16), Color.White);

                // If we're fighting a boss, draw them a health bar.
                if (Engine.boss != null)
                {
                    int screenWidth = SnailsPace.videoConfig.getInt("width");
                    int screenHeight = SnailsPace.videoConfig.getInt("height");

                    int barWidth = 600, barHeight = 60, barMarginX = 18, barMarginY = 20;
                    int barx = (screenWidth - barWidth) / 2;
                    int bary = (screenHeight - barHeight) - 14;
                    batch.Draw(Engine.bossHealthShadow, new Rectangle(barx, bary, barWidth, barHeight), Color.White);
                    batch.Draw(Engine.bossHealthBar, new Rectangle(barx + barMarginX, bary + barMarginY, (int)((Engine.boss.health / (float)Engine.boss.maxHealth) * barWidth - 2 * barMarginX), barMarginY), Color.White);
                }
            }

            // Draw the Inventory
            {
                Texture2D weaponTable = SnailsPace.getInstance().Content.Load<Texture2D>("Resources/Textures/WeaponTable");
                Texture2D separator = SnailsPace.getInstance().Content.Load<Texture2D>("Resources/Textures/PauseScreen");
                SpriteFont font = SnailsPace.getInstance().Content.Load<SpriteFont>("Resources/Fonts/Score");

                int y = 64;
                int bigSize = 32;
                int smallSize = 24;
                Objects.Weapon currentWeapon = Player.helix.weapon;
                for(int i = 0; i < Player.helix.inventory.Length; i++)
                {
                    // Draw each item in the player's inventory.
                    batch.Draw(separator, new Rectangle(8, y++, 32, 1), new Rectangle(1, 0, 1, 1), Color.White);

                    Objects.Weapon weapon = Player.helix.inventory[i];
                    if (weapon == null)
                    {
                        y += 8;
                        continue;
                    }

                    int tx = weapon.sprite.animationStart % 4, ty = weapon.sprite.animationStart / 4;
                    Rectangle spot, source;

                    if (currentWeapon == weapon)
                    {
                        // If this is the weapon we're using, make it pop out by displaying it bigger and with white text.
                        Color textColor = Color.White;
                        spot = new Rectangle(0, y, bigSize * 2, bigSize);
                        strings.Add(new Objects.Text(weapon.name, font, new Vector2(bigSize * 2, y), new Vector2(0.5f, 0.5f), textColor));
                        strings.Add(new Objects.Text((weapon.ammunition != -1 ? weapon.ammunition.ToString() : "Inf"), font, new Vector2(bigSize * 2, y + bigSize / 2.25f), new Vector2(0.5f, 0.5f), textColor));
                        y += bigSize;
                    }
                    else
                    {
                        // This isn't the weapon we're using, give it a smaller icon and gray text.
                        Color textColor = Color.LightGray;
                        spot = new Rectangle(0, y, smallSize * 2, smallSize);
                        strings.Add(new Objects.Text(weapon.name, font, new Vector2(smallSize * 2, y), new Vector2(0.4f, 0.4f), textColor));
                        strings.Add(new Objects.Text((weapon.ammunition != -1 ? weapon.ammunition.ToString() : "Inf"), font, new Vector2(smallSize * 2, y + smallSize / 2.25f), new Vector2(0.4f, 0.4f), textColor));
                        y += smallSize;
                    }

                    source = new Rectangle(tx * 128, ty * 64, 128, 64);
                    batch.Draw(weaponTable, spot, source, Color.White);
                }

                batch.Draw(separator, new Rectangle(8, y++, 32, 1), new Rectangle(0, 0, 1, 1), Color.White);
            }

            // Draw text strings
            List<Objects.Text>.Enumerator textEnumerator = strings.GetEnumerator();
            while (textEnumerator.MoveNext())
            {
                batch.DrawString(textEnumerator.Current.font, textEnumerator.Current.content, textEnumerator.Current.position, textEnumerator.Current.color, textEnumerator.Current.rotation, Vector2.Zero, textEnumerator.Current.scale, SpriteEffects.None, 0);
            }
            textEnumerator.Dispose();

            batch.End();
            batch.Dispose();
        }
        protected override void Draw(IXnaGameTime gameTime)
        {
            gameTime.ThrowIfNull("gameTime");

            var spriteBatch = new SpriteBatch(GraphicsDevice);

            _rendererCollection.Render(spriteBatch, gameTime, _fontContent, _textureContent);

            spriteBatch.Dispose();
        }
Beispiel #12
0
        /// <summary>
        /// loads map for use in game
        /// </summary>
        public void LoadAndInitialize()
        {
            try
            {
                #region load map data

                XDocument doc = XDocument.Load(Parameters.FileName);

                XElement root = doc.Element("MapFile");
                if (root == null)
                    return;

                //sectors
                XElement sectors = root.Element("Sectors");
                if (sectors == null)
                    return;
                foreach (XElement sector in sectors.Elements("Sector"))
                {
                    try
                    {
                        Sectors.Add(new MapSector(sector.Attribute("name").Value,
                                                  new Vector2(float.Parse(sector.Attribute("x").Value.Replace('.', ',')), float.Parse(sector.Attribute("y").Value.Replace('.', ','))),
                                                  float.Parse(sector.Attribute("range").Value.Replace('.', ','))));
                        foreach (XElement item in sector.Elements())
                        {
                            try
                            {
                                switch (item.Name.LocalName)
                                {
                                    case "Edge": Sectors[Sectors.Count - 1].Edges.Add(item.Attribute("name").Value); break;
                                    case "Neighbour": Sectors[Sectors.Count - 1].Neighbours.Add(item.Attribute("name").Value); break;
                                    case "Spawn": Sectors[Sectors.Count - 1].SpawnPoints.Add(item.Attribute("name").Value); break;
                                }
                            }
                            catch { }
                        }
                    }
                    catch { }
                }

                //points
                XElement points = root.Element("Points");
                if (points == null)
                    return;
                foreach (XElement point in points.Elements("Point"))
                {
                    try
                    {
                        Points.Add(new MapPoint(point.Attribute("name").Value, new Vector2(float.Parse(point.Attribute("x").Value.Replace('.', ',')), float.Parse(point.Attribute("y").Value.Replace('.', ',')))));
                    }
                    catch { }
                }

                //edges
                XElement edges = root.Element("Edges");
                if (edges == null)
                    return;
                foreach (XElement edge in edges.Elements("Edge"))
                {
                    try
                    {
                        Edges.Add(new MapEdge(edge.Attribute("name").Value, Points.Find(p => p.Name == edge.Attribute("start").Value), Points.Find(p => p.Name == edge.Attribute("end").Value)));
                    }
                    catch { }
                }

                //spawn points
                XElement spawns = root.Element("Spawns");
                if (spawns == null)
                    return;
                foreach (XElement spawn in spawns.Elements("Spawn"))
                {
                    try
                    {
                        SpawnPoints.Add(new MapSpawnPoint(spawn.Attribute("name").Value,
                                        new Vector2(float.Parse(spawn.Attribute("x").Value.Replace('.', ',')), float.Parse(spawn.Attribute("y").Value.Replace('.', ','))),
                                        float.Parse(spawn.Attribute("rot").Value.Replace('.', ',')),
                                        int.Parse(spawn.Attribute("team").Value)));
                        SpawnInUse.Add(false);
                    }
                    catch { }
                }

                //rectangles
                XElement rects = root.Element("Rects");
                if (rects == null)
                    return;
                foreach (XElement rect in rects.Elements("Rect"))
                {
                    try
                    {
                        Rects.Add(new MapRect(rect.Attribute("name").Value,
                                  new Rectangle(int.Parse(rect.Attribute("x").Value), int.Parse(rect.Attribute("y").Value), int.Parse(rect.Attribute("w").Value), int.Parse(rect.Attribute("h").Value)),
                                  float.Parse(rect.Attribute("rot").Value.Replace('.', ',')),
                                  int.Parse(rect.Attribute("originX").Value), int.Parse(rect.Attribute("originY").Value)));
                    }
                    catch { }
                }

                //clean up
                //erase edges not assigned to any sector
                for (int i = 0; i < Edges.Count; )
                {
                    if (Sectors.FindIndex(s => s.Edges.FindIndex(e => Edges[i].Name == e) != -1) == -1)
                        Edges.RemoveAt(i);
                    else
                        i++;
                }
                //erase spawns outside of every sector (spawn need to be inside of some sector for motor initialization)
                for (int i = 0; i < SpawnPoints.Count; )
                {
                    if (Sectors.FindIndex(s => s.IsInSector(SpawnPoints[i].Coords)) == -1)
                        SpawnPoints.RemoveAt(i);
                    else
                        i++;
                }

                #endregion

                #region draw map and slice it

                //draw to memory
                Texture = UIParent.defaultTextures;

                RenderTarget2D mappicture = new RenderTarget2D(game.GraphicsDevice, (int)Parameters.Size.X, (int)Parameters.Size.Y, false, SurfaceFormat.Color, DepthFormat.None, 1, RenderTargetUsage.PreserveContents);
                SpriteBatch sb = new SpriteBatch(game.GraphicsDevice);
                game.GraphicsDevice.SetRenderTarget(mappicture);
                game.GraphicsDevice.Clear(Parameters.BackColor);
                sb.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
                for (int x = 0; x < (int)(Parameters.Size.X / BackCrateTexture.Width + (Parameters.Size.X % BackCrateTexture.Width != 0 ? 1 : 0)); x++)
                    for (int y = 0; y < (int)(Parameters.Size.Y / BackCrateTexture.Height + (Parameters.Size.Y % BackCrateTexture.Height != 0 ? 1 : 0)); y++)
                        sb.Draw(Texture, new Vector2(x * BackCrateTexture.Width, y * BackCrateTexture.Height), BackCrateTexture, Parameters.BackCrateColor);
                for (int i = 0; i < Rects.Count; i++)
                    Rects[i].Draw(ref sb, Parameters.BlockingColor);
                sb.End();

                //slice map
                for (int x = 0; x < Slices.GetLength(0); x++)
                    for (int y = 0; y < Slices.GetLength(1); y++)
                    {
                        Slices[x, y] = new MapSlice(game, new Rectangle((int)(x * Parameters.Slicing.X), (int)(y * Parameters.Slicing.Y), (int)Parameters.Slicing.X, (int)Parameters.Slicing.Y));
                        game.GraphicsDevice.SetRenderTarget(Slices[x, y].picture);
                        game.GraphicsDevice.Clear(Color.Transparent);
                        sb.Begin(SpriteSortMode.Immediate, BlendState.Opaque);
                        sb.Draw(mappicture, Vector2.Zero, Slices[x, y].PositionAndSize, Color.White);
                        sb.End();
                    }

                game.GraphicsDevice.SetRenderTarget(null);

                mappicture.Dispose();
                sb.Dispose();
                Rects.Clear();

                #endregion
            }
            catch { }
        }
Beispiel #13
0
        public static Texture2D Stretch(this Texture2D texture, Size size)
        {
            RenderTarget2D target = new RenderTarget2D(texture.GraphicsDevice, size.Width, size.Height);
            SpriteBatch sb = new SpriteBatch(texture.GraphicsDevice);

            texture.GraphicsDevice.SetRenderTarget(target);
            texture.GraphicsDevice.Clear(Color.Transparent);
            sb.Begin();
            sb.Draw(texture, new Rectangle(0, 0, size.Width, size.Height), Color.White);
            sb.End();

            texture.GraphicsDevice.SetRenderTarget(null);
            Texture2D result = new Texture2D(texture.GraphicsDevice, size.Width, size.Height);
            result.SetData(target.GetColorData());

            target.Dispose();
            sb.Dispose();

            return result;
        }
Beispiel #14
0
        public static Texture2D RenderOnto(this Texture2D texture, Size size, Vector2 position = default(Vector2), float rotation = 0, Vector2 scale = default(Vector2))
        {
            RenderTarget2D target = new RenderTarget2D(texture.GraphicsDevice, size.Width, size.Height);
            SpriteBatch sb = new SpriteBatch(texture.GraphicsDevice);

            texture.GraphicsDevice.SetRenderTarget(target);
            texture.GraphicsDevice.Clear(Color.Transparent);
            sb.Begin();
            sb.Draw(texture, position, null, Color.White, rotation, Vector2.Zero, scale == default(Vector2) ? Vector2.One : scale, SpriteEffects.None, 1f);
            sb.End();

            texture.GraphicsDevice.SetRenderTarget(null);
            Texture2D result = new Texture2D(texture.GraphicsDevice, size.Width, size.Height);
            result.SetData(target.GetColorData());

            target.Dispose();
            sb.Dispose();


            return result;
        }
Beispiel #15
0
		static public Texture2D LoadTexture (GraphicsDevice device, Stream input) {
			Texture2D file = Texture2D.FromStream(device, input);

			// Setup a render target to hold our final texture which will have premulitplied alpha values
			RenderTarget2D result = new RenderTarget2D(device, file.Width, file.Height);
			device.SetRenderTarget(result);
			device.Clear(Color.Black);

			// Multiply each color by the source alpha, and write in just the color values into the final texture
			BlendState blendColor = new BlendState();
			blendColor.ColorWriteChannels = ColorWriteChannels.Red | ColorWriteChannels.Green | ColorWriteChannels.Blue;
			blendColor.AlphaDestinationBlend = Blend.Zero;
			blendColor.ColorDestinationBlend = Blend.Zero;
			blendColor.AlphaSourceBlend = Blend.SourceAlpha;
			blendColor.ColorSourceBlend = Blend.SourceAlpha;

			SpriteBatch spriteBatch = new SpriteBatch(device);
			spriteBatch.Begin(SpriteSortMode.Immediate, blendColor);
			spriteBatch.Draw(file, file.Bounds, Color.White);
			spriteBatch.End();

			// Now copy over the alpha values from the PNG source texture to the final one, without multiplying them
			BlendState blendAlpha = new BlendState();
			blendAlpha.ColorWriteChannels = ColorWriteChannels.Alpha;
			blendAlpha.AlphaDestinationBlend = Blend.Zero;
			blendAlpha.ColorDestinationBlend = Blend.Zero;
			blendAlpha.AlphaSourceBlend = Blend.One;
			blendAlpha.ColorSourceBlend = Blend.One;

			spriteBatch.Begin(SpriteSortMode.Immediate, blendAlpha);
			spriteBatch.Draw(file, file.Bounds, Color.White);
			spriteBatch.End();

			// Release the GPU back to drawing to the screen.
			device.SetRenderTarget(null);
			spriteBatch.Dispose();
			file.Dispose();

#if IOS
			return result as Texture2D;
#else
			// RenderTarget2D are volatile and will be lost on screen resolution changes.
			// So instead of using this directly, we create a non-voliate Texture2D.
			// This is computationally slower, but should be safe as long as it is done on load.
			Texture2D resultTexture = new Texture2D(device, file.Width, file.Height);
			Color[] resultContent = new Color[Convert.ToInt32(file.Width * file.Height)];
			result.GetData(resultContent);
			resultTexture.SetData(resultContent);
			result.Dispose(); // Dispose of the RenderTarget2D immediately.
			return resultTexture;
#endif
		}