private void OnSaving(object sender, SavingEventArgs args) { int counter = 0; GameLocation choosenLocation = null;//locationsList[0]; for (int i = 0; i < Game1.locations.Count; i++) { if (Game1.locations[i] != null && Game1.locations[i].name.Equals("YourLocationName")) { this.Monitor.Log($"{Game1.locations[i].name} es wurde eine Location in Game1.Locations gefunden mit dem Passenden Namen!", LogLevel.Warn); choosenLocation = Game1.locations[i]; counter++; } } this.Monitor.Log($"{counter} mal wurde die Location in Locations gefunden!", LogLevel.Warn); GameLocationStruct locationStruct = saveDataPrepare(choosenLocation); this.Monitor.Log($"{Game1.player.Name} JSON wird gesaved!", LogLevel.Warn); string dataString; using (StringWriter textWriter = new StringWriter()) { locationSerializer.Serialize(textWriter, locationStruct); dataString = textWriter.ToString(); } Helper.Data.WriteSaveData("MeineLocation", dataString); for (int i = 0; i < Game1.locations.Count; i++) { if (Game1.locations[i] != null && Game1.locations[i].name.Equals("YourLocationName")) { Game1.locations.RemoveAt(i); } } }
private GameLocationStruct saveDataPrepare(GameLocation gameLocation) { GameLocationStruct gameLocationStruct = new GameLocationStruct(); gameLocationStruct.terrainFeatures = new SerializableDictionary <Vector2, TerrainFeature>(); gameLocationStruct.largeTerrainFeatures = new SerializableDictionary <Vector2, LargeTerrainFeature>(); gameLocationStruct.name = gameLocation.name; String[] layersName = { "Back", "Buildings", "Paths", "Front", "AlwaysFront" }; for (int i = 0; i < layersName.Length; i++) { Layer currentLayer = gameLocation.map.GetLayer(layersName[i]); if (currentLayer == null) { continue; } gameLocationStruct.width = currentLayer.LayerWidth < gameLocationStruct.width ? gameLocationStruct.width : currentLayer.LayerWidth; gameLocationStruct.height = currentLayer.LayerHeight < gameLocationStruct.height ? gameLocationStruct.height : currentLayer.LayerHeight; for (int x = 0; x < currentLayer.LayerWidth; x++) { for (int y = 0; y < currentLayer.LayerHeight; y++) { if (currentLayer.Tiles[x, y] != null) { Tile currentTile = new Tile(Tile.TileLayerFormString(layersName[i]), x, y, currentLayer.Tiles[x, y].TileIndex, currentLayer.Tiles[x, y].TileSheet.Id); gameLocationStruct.Tiles.Add(currentTile); //das koennte eine Moeglichkeit sein, an die noetigen Daten ranzukommen: Aber welche Daten genau werden damit abgerufen?? //String string1 = currentLayer.Properties.ToList()[0].Key; //das ist der Neue Teil for (int j = 0; j < currentLayer.Tiles[x, y].Properties.ToList().Count; j++) { //this.Monitor.Log($"{currentLayer.Tiles[x,y].Properties.ToList()[j].Key} - KEY : {currentLayer.Tiles[x, y].Properties.ToList()[j].Value} VALUE", LogLevel.Warn); currentTile.tileProperties.Add(new TilePropertie(currentLayer.ToString(), currentLayer.Tiles[x, y].Properties.ToList()[j].Key, currentLayer.Tiles[x, y].Properties.ToList()[j].Value)); } } } } } for (int i = 0; i < TerrainFeatureLocation.Count(); i++) { if (TerrainFeatureLocation.Keys != null && TerrainFeatureLocation.Keys.ToArray()[i].Equals(gameLocation.name)) { // TerrainFeatureLocation.Values.ToArray()[j].terrainFeature.Add(args.Added.ToArray()[0].Value); for (int j = 0; j < TerrainFeatureLocation.Values.ToList()[i].terrainFeaturePairs.Count(); j++) { if (!gameLocationStruct.terrainFeatures.ContainsKey(TerrainFeatureLocation.Values.ToList()[i].terrainFeaturePairs[j].vector2)) { gameLocationStruct.terrainFeatures.Add(TerrainFeatureLocation.Values.ToList()[i].terrainFeaturePairs[j].vector2, TerrainFeatureLocation.Values.ToList()[i].terrainFeaturePairs[j].terrainFeature); } } } } this.Monitor.Log($"{gameLocation.terrainFeatures.Keys.ToList().Count} ist die Anzahl der TerrainFeatures beim saven!!", LogLevel.Warn); for (int i = 0; i < gameLocation.terrainFeatures.Keys.ToList().Count; i++) //(SerializableDictionary<Vector2, TerrainFeature>.KeyCollection terrainFeature in gameLocation.terrainFeatures) { if (!gameLocationStruct.terrainFeatures.ContainsKey(gameLocation.terrainFeatures.Keys.ToList()[i])) { gameLocationStruct.terrainFeatures.Add(gameLocation.terrainFeatures.Keys.ToList()[i], gameLocation.terrainFeatures.Values.ToList()[i]); } } for (int i = 0; i < LargeTerrainFeatureLocation.Count(); i++) { if (LargeTerrainFeatureLocation.Keys != null && LargeTerrainFeatureLocation.Keys.ToArray()[i].Equals(gameLocation.name)) { // TerrainFeatureLocation.Values.ToArray()[j].terrainFeature.Add(args.Added.ToArray()[0].Value); for (int j = 0; j < LargeTerrainFeatureLocation.Values.ToList()[i].LargeterrainFeaturePairs.Count(); j++) { if (!gameLocationStruct.largeTerrainFeatures.ContainsKey(LargeTerrainFeatureLocation.Values.ToList()[i].LargeterrainFeaturePairs[j].vector2)) { gameLocationStruct.largeTerrainFeatures.Add(LargeTerrainFeatureLocation.Values.ToList()[i].LargeterrainFeaturePairs[j].vector2, LargeTerrainFeatureLocation.Values.ToList()[i].LargeterrainFeaturePairs[j].largeterrainFeature); } } } } this.Monitor.Log($"{gameLocation.largeTerrainFeatures.ToList().Count} ist die Anzahl der LargeTerrainFeatures beim saven!!", LogLevel.Warn); for (int i = 0; i < gameLocation.largeTerrainFeatures.ToList().Count; i++) //(SerializableDictionary<Vector2, TerrainFeature>.KeyCollection terrainFeature in gameLocation.terrainFeatures) { //WTF?! My brain is f****d! LOL if (!gameLocationStruct.largeTerrainFeatures.ContainsKey(gameLocation.largeTerrainFeatures[i].currentTileLocation)) { gameLocationStruct.largeTerrainFeatures.Add(gameLocation.largeTerrainFeatures[i].currentTileLocation, gameLocation.largeTerrainFeatures[i]); } } return(gameLocationStruct); }
private void load(GameLocation gameLocation, GameLocationStruct gameLocationStruct) { string tilesheetPath = this.Helper.Content.GetActualAssetKey("assets/spring_outdoorsTileSheet.png", ContentSource.ModFolder); //gameLocation.map = new Map(); TileSheet tilesheet = new TileSheet( id: "z_your-custom-spritesheet", // a unique ID for the tilesheet map: gameLocation.map, imageSource: tilesheetPath, sheetSize: new xTile.Dimensions.Size(25, 79), // the tile size of your tilesheet image. tileSize: new xTile.Dimensions.Size(16, 16) // should always be 16x16 for maps ); gameLocation.map.AddTileSheet(tilesheet); gameLocation.map.LoadTileSheets(Game1.mapDisplayDevice); for (int i = 0; i < gameLocationStruct.Tiles.Count; i++) { Tile currentTile = gameLocationStruct.Tiles[i]; String currentLayerString = currentTile.LayerName; if (currentLayerString == null) { continue; } Layer layer1 = gameLocation.map.GetLayer(currentLayerString); if (layer1 == null) { continue; } layer1.Tiles[currentTile.X, currentTile.Y] = new StaticTile(layer1, tilesheet, BlendMode.Alpha, tileIndex: currentTile.TileID); // change tile index } if (gameLocationStruct.terrainFeatures != null) { this.Monitor.Log($"{gameLocationStruct.terrainFeatures.Keys.ToList().Count} ist die Anzahl der TerrainFeatures!!", LogLevel.Warn); foreach (KeyValuePair <Vector2, TerrainFeature> terrainFeature in gameLocationStruct.terrainFeatures) { gameLocation.terrainFeatures.Add(terrainFeature.Key, terrainFeature.Value); if (!TerrainFeatureLocation.ContainsKey(gameLocationStruct.name)) { TerrainFeatureLocation.Add(gameLocationStruct.name, new TerrainFeaturePairList()); } for (int j = 0; j < TerrainFeatureLocation.Count(); j++) { if (TerrainFeatureLocation.Keys != null && TerrainFeatureLocation.Keys.ToArray()[j].Equals(gameLocationStruct.name)) { TerrainFeatureLocation.Values.ToArray()[j].terrainFeaturePairs.Add(new TerrainFeaturePair(terrainFeature.Key, terrainFeature.Value)); } } } } if (gameLocationStruct.largeTerrainFeatures != null) { foreach (LargeTerrainFeature largeTerrainFeature in gameLocationStruct.largeTerrainFeatures.Values) { largeTerrainFeature.currentLocation = gameLocation; } this.Monitor.Log($"{gameLocationStruct.largeTerrainFeatures.Keys.ToList().Count} ist die Anzahl der LargeTerrainFeatures!!", LogLevel.Warn); foreach (KeyValuePair <Vector2, LargeTerrainFeature> largeTerrainFeature in gameLocationStruct.largeTerrainFeatures) { //gameLocation.largeTerrainFeatures.Add(largeTerrainFeature.Value); //TODO: ueberdenken? try { gameLocation.largeTerrainFeatures.Add(new Bush(largeTerrainFeature.Value.tilePosition, ((Bush)largeTerrainFeature.Value).size, gameLocation)); } catch (Exception e) { gameLocation.largeTerrainFeatures.Add(largeTerrainFeature.Value); } if (!LargeTerrainFeatureLocation.ContainsKey(gameLocationStruct.name)) { LargeTerrainFeatureLocation.Add(gameLocationStruct.name, new LargeTerrainFeaturePairList()); } for (int j = 0; j < LargeTerrainFeatureLocation.Count(); j++) { if (LargeTerrainFeatureLocation.Keys != null && LargeTerrainFeatureLocation.Keys.ToArray()[j].Equals(gameLocationStruct.name)) { LargeTerrainFeatureLocation.Values.ToArray()[j].LargeterrainFeaturePairs.Add(new LargeTerrainFeaturePair(largeTerrainFeature.Key, largeTerrainFeature.Value)); } } } } for (int i = 0; i < gameLocationStruct.Tiles.Count; i++) { for (int j = 0; j < gameLocationStruct.Tiles[i].tileProperties.Count; j++) { gameLocation.setTileProperty(gameLocationStruct.Tiles[i].X, gameLocationStruct.Tiles[i].Y, gameLocationStruct.Tiles[i].tileProperties[j].layer, gameLocationStruct.Tiles[i].tileProperties[j].key, gameLocationStruct.Tiles[i].tileProperties[j].value); //gameLocationStruct.Tiles[i].tileProperties } } }