static void WriteExternalMapEvents(string fnMap) { TMX tmx=new TMX(fnMap, false); bool ExistDef=false; string fnLuaScript=String.Format("scripts/maps/{0}.lua", FileSystem.GetFilenameWithoutExt(fnMap)); foreach(Objectgroup og in tmx.ObjectLayers) { foreach(CSCL.FileFormats.TMX.Object objk in og.Objects) { if(objk.Name.ToLower()=="external map events") { //name der Skriptdatei korrekt setzen foreach(Property prop in objk.Properties) { if(prop.Name.ToLower()=="filename") { prop.Value=fnLuaScript; } } ExistDef=true; break; } } } if(ExistDef==false) { Objectgroup objectGroup=null; if(tmx.ObjectLayers.Count==0) { tmx.ObjectLayers.Add(new Objectgroup("Object", 0, 0, 0, 0)); } objectGroup=tmx.ObjectLayers[0]; CSCL.FileFormats.TMX.Object mapObject=new CSCL.FileFormats.TMX.Object("External Map Events", "SCRIPT", 0, 0, 0, 0); mapObject.Properties.Add(new Property("FILENAME", fnLuaScript)); objectGroup.Objects.Add(mapObject); } tmx.Save(fnMap); }
static void RenameTilesetNameInMapsToTilesetFilename() { //Maps laden List<string> mapfiles=FileSystem.GetFiles(Globals.folder_data, true, "*.tmx"); foreach(string i in mapfiles) { bool changed=false; TMX maptmx=new TMX(i); //Tiles transformieren foreach(TMX.TilesetData ld in maptmx.Tilesets) { string fnForTilesetName=FileSystem.GetFilenameWithoutExt(ld.imgsource); if(ld.name!=fnForTilesetName) { changed=true; ld.name=fnForTilesetName; } } if(changed) { //Map speichern maptmx.Save(i); } } }
//public partial class FormTileReplacer : Form //{ // public string Filename { get; set; } // public int TileID { get; private set; } // private void pbImage_MouseDoubleClick(object sender, MouseEventArgs e) // { // int xInTiles=e.X/32; // int yInTiles=e.Y/32; // int tileID=yInTiles*32+xInTiles; // TileID=tileID; // DialogResult=DialogResult.OK; // } //} static void TransformTileInMaps(string srcTileset, string dstTileset, int src, int dst) { //Maps laden List<string> mapfiles=FileSystem.GetFiles(Globals.folder_data, true, "*.tmx"); foreach(string i in mapfiles) { bool changed=false; TMX maptmx=new TMX(i); //schauen ob zieltileset vorhanden bool TargetTilesetExists=false; TMX.TilesetData destTileset=null; foreach(TMX.TilesetData td in maptmx.Tilesets) { if(td.imgsource.IndexOf(FileSystem.GetFilename(dstTileset))!=-1) { TargetTilesetExists=true; destTileset=td; break; } } //Tiles transformieren maptmx.RemoveGidsFromLayerData(); //RemoveGidFrom Tiles if(TargetTilesetExists==false) { //Tileset eintragen TMX.TilesetData tsData=new TMX.TilesetData(); tsData.name=FileSystem.GetFilenameWithoutExt(dstTileset); tsData.imgsource="../graphics/tiles/"+FileSystem.GetFilename(dstTileset); tsData.tileheight=32; tsData.tilewidth=32; maptmx.Tilesets.Add(tsData); destTileset=tsData; } foreach(TMX.LayerData ld in maptmx.Layers) { for(int y=0;y<ld.height;y++) { for(int x=0;x<ld.width;x++) { TMX.TilesetData ts=ld.tilesetmap[x, y]; int TileNumber=ld.data[x, y]; if(ts.imgsource!=null) { if(ts.imgsource.IndexOf(FileSystem.GetFilename(srcTileset))!=-1) { if(TileNumber==src) { changed=true; ld.data[x, y]=dst; ld.tilesetmap[x, y]=destTileset; } } } } } } if(changed) { //FirstGids neu vergeben maptmx.Tilesets.Sort(); int firstgit=1; foreach(TMX.TilesetData gidChange in maptmx.Tilesets) { gidChange.firstgid=firstgit; firstgit+=2000; //Sicherheitsabstand } //AddGidToTiles maptmx.AddsGidsToLayerData(); //Map speichern maptmx.Save(i); } } Console.WriteLine("Tile wurde transformiert."); }
static void RenameTileset(string oldName, string newName) { //Maps laden List<string> mapfiles=FileSystem.GetFiles(Globals.folder_data, true, "*.tmx"); foreach(string i in mapfiles) { bool changed=false; TMX maptmx=new TMX(i); //Tiles transformieren foreach(TMX.TilesetData ld in maptmx.Tilesets) { string newSource=ld.imgsource.Replace(oldName, newName); if(ld.imgsource!=newSource) { ld.imgsource=newSource; changed=true; } } if(changed) { Console.WriteLine("Bennene Tileset in Map {0} um.", FileSystem.GetFilename(i)); //Map speichern maptmx.Save(i); } } //Tileset umbennen string oldFn=Globals.folder_data_graphics_tiles+oldName; string newFn=Globals.folder_data_graphics_tiles+newName; FileSystem.RenameFile(oldFn, newFn); }
static void RemoveNonExistingTilesetsFromMaps() { if(Globals.folder_root=="") { Console.WriteLine("Bitte geben sie in den Optionen den Pfad zum Invertika Repository an."); return; } List<string> maps=FileSystem.GetFiles(Globals.folder_data, true, "*.tmx"); int removedTilesets=0; foreach(string fnCurrent in maps) { TMX map=new TMX(fnCurrent, false); for(int i=0;i<map.Tilesets.Count;i++) { CSCL.FileFormats.TMX.TMX.TilesetData fnTileset=map.Tilesets[i]; string cleanTileset=Globals.folder_data+fnTileset.imgsource.Replace("../graphics", "graphics"); if(!FileSystem.ExistsFile(cleanTileset)) { map.Tilesets.Remove(fnTileset); removedTilesets++; } } map.Save(fnCurrent); } Console.WriteLine("Es wurden "+removedTilesets+" fehlerhafte Tilesets korrigiert."); }
static void RemoveBlankTilesFromMaps() { //Maps laden List<string> mapfiles=FileSystem.GetFiles(Globals.folder_data, true, "*.tmx"); foreach(string i in mapfiles) { bool changed=false; TMX maptmx=new TMX(i); //für jeden Layer foreach(TMX.LayerData ld in maptmx.Layers) { for(int y=0;y<ld.height;y++) { for(int x=0;x<ld.width;x++) { int TileNumber=ld.data[x, y]; if(TileNumber==0) continue; //leeres Tile Graphic tile=maptmx.GetTile(TileNumber); Color median=tile.GetMedianColor(); int summe=median.A+median.R+median.G+median.R; if(summe==0) { ld.data[x, y]=0; changed=true; } } } } if(changed) { //Map speichern maptmx.Save(i); } } Console.WriteLine("Leere Tiles wurden entfernt."); }
static void DecompressMaps() { List<string> files=FileSystem.GetFiles(Globals.folder_data_maps, true, "*.tmx"); if(files==null) { Console.WriteLine("Es wurden keine Maps gefunden."); Console.WriteLine("Eventuell ist der Pfad des Repositories in der Konfigurationdatei falsch."); return; } #region Bilder berechnen foreach(string i in files) { //Karte berechnen Console.WriteLine("Dekpmprimiere Map {0}", FileSystem.GetFilename(i)); TMX file=new TMX(i); file.Save(i, false); } #endregion Globals.Options.Save(); }
static void CreateCollisionsOnMaps() { //Maps laden List<string> mapfiles=FileSystem.GetFiles(Globals.folder_data, true, "*.tmx"); foreach(string filename in mapfiles) { TMX TestTMX=new TMX(filename); TMX.LayerData fringe=null; TMX.LayerData coll=null; foreach(TMX.LayerData layer in TestTMX.Layers) { switch(layer.name) { case "Fringe": { fringe=layer; break; } case "Collision": { coll=layer; break; } } } if(fringe==null||coll==null) { Console.WriteLine("Überspringe Map {0}", FileSystem.GetFilename(filename)); continue; } //CollID = int CollID=coll.data[0, 0]; bool FileChanged=false; for(int y=0;y<fringe.height;y++) { for(int x=0;x<fringe.width;x++) { int fieldData=fringe.data[x, y]; if(fieldData==0) continue; TMX.TilesetData tInfo=TestTMX.GetTileset(fieldData); if(CollID==coll.data[x, y]) continue; switch(FileSystem.GetFilename(tInfo.imgsource)) { case "wood1_32_64.png": { int realID=fieldData-tInfo.firstgid; switch(realID) { case 0: //Stein case 1: //Stein case 2: //Pfeil Links case 3: //Pfeil Rechts case 4: //Baum case 5: //Holzteil case 6: //Pflanze case 7: //Pflanze case 10: //Pflanze case 11: //Pflanze case 14: //Pflanze case 15: //Pflanze case 22: //Heu case 23: //Heu case 25: //Schild case 26: //Schild case 27: //Schild case 28: //Schild case 29: //Schild case 30: //Schild case 31: //Schild case 32: //Pflanze case 33: //Pflanze case 34: //Pflanze case 35: //Pflanze case 36: //Pflanze case 37: //Pflanze case 38: //Pflanze { FileChanged=true; coll.data[x, y]=CollID; break; } } break; } case "wood1_32_96.png": { int realID=fieldData-tInfo.firstgid; switch(realID) { case 0: //Baum case 1: //Baum case 2: //Baum case 3: //Baum case 4: //Baum case 5: //Baum case 14: //Baum case 15: //Baum case 32: //Pflanze case 33: //Pflanze case 34: //Pflanze case 35: //Pflanze case 36: //Pflanze case 37: //Pflanze case 46: //Baum case 47: //Baum { FileChanged=true; coll.data[x, y]=CollID; break; } } break; } case "wood1_32_128.png": { int realID=fieldData-tInfo.firstgid; switch(realID) { case 0: //Baum case 1: //Baum case 2: //Baum case 3: //Baum { FileChanged=true; coll.data[x, y]=CollID; break; } case 4: case 7: { FileChanged=true; coll.data[x, y--]=CollID; break; } case 5: case 6: { FileChanged=true; coll.data[x, y]=CollID; coll.data[x, y--]=CollID; break; } } break; } case "wood1_32_160.png": { int realID=fieldData-tInfo.firstgid; switch(realID) { case 1: //Baum case 4: //Baum case 7: //Baum { FileChanged=true; coll.data[x, y]=CollID; break; } } break; } } } } if(FileChanged) TestTMX.Save(filename); } Console.WriteLine("Vorgang beendet."); }