I am having trouble with the basic logic of this solution:
Xna: Splitting one large texture into an array of smaller textures
in respect to my specific problem (specifically, I'm looking at the second answer.)
How can I use my source rectangle that I already use for drawing to create a new Texture2D?
spriteBatch.Draw(CurrentMap.CollisionSet, currentMap.CellScreenRectangle(x, y),
CurrentMap.TileSourceRectangle(currentMap.MapCells[x, y].TileDepths[4]),
Color.FromNonPremultiplied(0,0,0, 45), 0.0f, Vector2.Zero, SpriteEffects.None, 0.91f);
I know I want a method that I started so:
//In Update Method of say the player's character.
Texture2D CollisionTexture = ExtractTexture(MapManager.CurrentMap.CollisionSet, MapManager.TileWidth, MapManager.TileHeight);
// In MapManager Class who knows everything about tiles that make up a level.
public Texture2D ExtractTexture(Texture2D original, int partWidth, int partheight, MapTile mapCell)
{
var dataPerPart = partWidth * partheight;
Color[] originalPixelData = new Color[original.Width * original.Height];
original.GetData<Color>(originalPixelData);
Color[] newTextureData = new Color[dataPerPart];
original.GetData<Color>(0, CurrentMap.TileSourceRectangle(mapCell.TileDepths[4]), originalPixelData, 0, originalPixelData.Count());
Texture2D outTexture = new Texture2D(original.GraphicsDevice, partWidth, partheight);
}
I think the problem is I'm just not understanding the overload of Texture2D.GetData<
Part of my concern is creating an array of the whole texture in the first place. Can I target the original texture and create an array of colors for copying based on what I already get from the method TileSourceRecatangle(int)?