CnC_Remastered_Collection/CnCTDRAMapEditor/Utility/TilesetManager.cs
PG-SteveT e37e174be1 C&C Remastered Map Editor
Initial commit of C&C Remastered Map Editor code
2020-09-10 11:12:58 -07:00

117 lines
4.6 KiB
C#

//
// Copyright 2020 Electronic Arts Inc.
//
// The Command & Conquer Map Editor and corresponding source code is free
// software: you can redistribute it and/or modify it under the terms of
// the GNU General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
// The Command & Conquer Map Editor and corresponding source code is distributed
// in the hope that it will be useful, but with permitted additional restrictions
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
// distributed with this program. You should have received a copy of the
// GNU General Public License along with permitted additional restrictions
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
namespace MobiusEditor.Utility
{
public class TilesetManager
{
private readonly Dictionary<string, Tileset> tilesets = new Dictionary<string, Tileset>();
private readonly MegafileManager megafileManager;
public TilesetManager(MegafileManager megafileManager, TextureManager textureManager, string xmlPath, string texturesPath)
{
this.megafileManager = megafileManager;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(megafileManager.Open(xmlPath));
foreach (XmlNode fileNode in xmlDoc.SelectNodes("TilesetFiles/File"))
{
var xmlFile = Path.Combine(Path.GetDirectoryName(xmlPath), fileNode.InnerText);
XmlDocument fileXmlDoc = new XmlDocument();
fileXmlDoc.Load(megafileManager.Open(xmlFile));
foreach (XmlNode tilesetNode in fileXmlDoc.SelectNodes("Tilesets/TilesetTypeClass"))
{
var tileset = new Tileset(textureManager);
tileset.Load(tilesetNode.OuterXml, texturesPath);
tilesets[tilesetNode.Attributes["name"].Value] = tileset;
}
}
}
public void Reset()
{
foreach (var item in tilesets)
{
item.Value.Reset();
}
}
public bool GetTeamColorTileData(IEnumerable<string> searchTilesets, string name, int shape, TeamColor teamColor, out int fps, out Tile[] tiles)
{
fps = 0;
tiles = null;
foreach (var tileset in tilesets.Join(searchTilesets, x => x.Key, y => y, (x, y) => x.Value))
{
if (tileset.GetTileData(name, shape, teamColor, out fps, out tiles))
{
return true;
}
}
return false;
}
public bool GetTeamColorTileData(IEnumerable<string> searchTilesets, string name, int shape, TeamColor teamColor, out int fps, out Tile tile)
{
tile = null;
if (!GetTeamColorTileData(searchTilesets, name, shape, teamColor, out fps, out Tile[] tiles))
{
return false;
}
tile = tiles[0];
return true;
}
public bool GetTeamColorTileData(IEnumerable<string> searchTilesets, string name, int shape, TeamColor teamColor, out Tile[] tiles)
{
return GetTeamColorTileData(searchTilesets, name, shape, teamColor, out int fps, out tiles);
}
public bool GetTeamColorTileData(IEnumerable<string> searchTilesets, string name, int shape, TeamColor teamColor, out Tile tile)
{
return GetTeamColorTileData(searchTilesets, name, shape, teamColor, out int fps, out tile);
}
public bool GetTileData(IEnumerable<string> searchTilesets, string name, int shape, out int fps, out Tile[] tiles)
{
return GetTeamColorTileData(searchTilesets, name, shape, null, out fps, out tiles);
}
public bool GetTileData(IEnumerable<string> searchTilesets, string name, int shape, out int fps, out Tile tile)
{
return GetTeamColorTileData(searchTilesets, name, shape, null, out fps, out tile);
}
public bool GetTileData(IEnumerable<string> searchTilesets, string name, int shape, out Tile[] tiles)
{
return GetTeamColorTileData(searchTilesets, name, shape, null, out tiles);
}
public bool GetTileData(IEnumerable<string> searchTilesets, string name, int shape, out Tile tile)
{
return GetTeamColorTileData(searchTilesets, name, shape, null, out tile);
}
}
}