public static void SwitchToLandTiles(GameLocation location) { string mapName = location.Name; Map map = location.Map; for (int x = 0; x < map.Layers[0].LayerWidth; x++) { for (int y = 0; y < map.Layers[0].LayerHeight; y++) { if (SwimUtils.doesTileHaveProperty(map, x, y, "Water", "Back") != null) { Tile tile = map.GetLayer("Back").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null) { if (tile.TileIndexProperties.ContainsKey("Passable")) { tile.TileIndexProperties["Passable"] = "F"; } } tile = map.GetLayer("Buildings").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null) { if (tile.TileIndexProperties.ContainsKey("Passable")) { tile.TileIndexProperties["Passable"] = "F"; } else { tile.TileIndexProperties.Add("Passable", "F"); } } } } } }
public static void RemoveWaterTiles(GameLocation l) { if (l == null || l.map == null) { return; } Map map = l.map; string mapName = l.Name; for (int x = 0; x < map.Layers[0].LayerWidth; x++) { for (int y = 0; y < map.Layers[0].LayerHeight; y++) { if (SwimUtils.doesTileHaveProperty(map, x, y, "Water", "Back") != null) { Tile tile = map.GetLayer("Back").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null) { tile.TileIndexProperties.Remove("Water"); } } } } }
public static void GameLocation_isCollidingPosition_Postfix(GameLocation __instance, ref bool __result, Microsoft.Xna.Framework.Rectangle position, xTile.Dimensions.Rectangle viewport, bool isFarmer, int damagesFarmer, bool glider, Character character, bool pathfinding, bool projectile = false, bool ignoreCharacterRequirement = false) { try { if (__result == false || !isFarmer || !character.Equals(Game1.player) || !Game1.player.swimming || ModEntry.isUnderwater) { return; } Vector2 next = SwimUtils.GetNextTile(); //Monitor.Log($"Checking collide {SwimUtils.doesTileHaveProperty(__instance.map, (int)next.X, (int)next.Y, "Water", "Back") != null}"); if ((int)next.X <= 0 || (int)next.Y <= 0 || __instance.Map.Layers[0].LayerWidth <= (int)next.X || __instance.Map.Layers[0].LayerHeight <= (int)next.Y || SwimUtils.doesTileHaveProperty(__instance.map, (int)next.X, (int)next.Y, "Water", "Back") != null) { __result = false; } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(GameLocation_isCollidingPosition_Postfix)}:\n{ex}", LogLevel.Error); } }
/// <summary>Edit a matched asset.</summary> /// <param name="asset">A helper which encapsulates metadata about an asset and enables changes to it.</param> public void Edit <T>(IAssetData asset) { Monitor.Log("Editing asset: " + asset.AssetName); string mapName = asset.AssetName.Replace("Maps/", "").Replace("Maps\\", ""); if (false && changeLocations.ContainsKey(mapName)) { IAssetDataForMap map = asset.AsMap(); for (int x = 0; x < map.Data.Layers[0].LayerWidth; x++) { for (int y = 0; y < map.Data.Layers[0].LayerHeight; y++) { if (SwimUtils.doesTileHaveProperty(map.Data, x, y, "Water", "Back") != null) { Tile tile = map.Data.GetLayer("Back").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null && (((mapName == "Beach" || mapName == "UnderwaterBeach") && x > 58 && x < 61 && y > 11 && y < 15) || mapName != "Beach")) { if (tile.TileIndexProperties.ContainsKey("Passable")) { tile.TileIndexProperties.Remove("Passable"); } } tile = map.Data.GetLayer("Front").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null) { if (tile.TileIndexProperties.ContainsKey("Passable")) { //tile.TileIndexProperties.Remove("Passable"); } } if (map.Data.GetLayer("AlwaysFront") != null) { tile = map.Data.GetLayer("AlwaysFront").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null) { if (tile.TileIndexProperties.ContainsKey("Passable")) { //tile.TileIndexProperties.Remove("Passable"); } } } tile = map.Data.GetLayer("Buildings").PickTile(new Location(x, y) * Game1.tileSize, Game1.viewport.Size); if (tile != null) { if ( ((mapName == "Beach" || mapName == "UnderwaterBeach") && x > 58 && x < 61 && y > 11 && y < 15) || (mapName != "Beach" && mapName != "UnderwaterBeach" && ((tile.TileIndex > 1292 && tile.TileIndex < 1297) || (tile.TileIndex > 1317 && tile.TileIndex < 1322) || (tile.TileIndex % 25 > 17 && tile.TileIndex / 25 < 53 && tile.TileIndex / 25 > 48) || (tile.TileIndex % 25 > 1 && tile.TileIndex % 25 < 7 && tile.TileIndex / 25 < 53 && tile.TileIndex / 25 > 48) || (tile.TileIndex % 25 > 11 && tile.TileIndex / 25 < 51 && tile.TileIndex / 25 > 48) || (tile.TileIndex % 25 > 10 && tile.TileIndex % 25 < 14 && tile.TileIndex / 25 < 49 && tile.TileIndex / 25 > 46) || tile.TileIndex == 734 || tile.TileIndex == 759 || tile.TileIndex == 628 || tile.TileIndex == 629 || (mapName == "Forest" && x == 119 && ((y > 42 && y < 48) || (y > 104 && y < 119))) ) ) ) { if (tile.TileIndexProperties.ContainsKey("Passable")) { tile.TileIndexProperties["Passable"] = "T"; } else { tile.TileIndexProperties.Add("Passable", "T"); } } else if (mapName == "Beach" && tile.TileIndex == 76) { if (x > 58 && x < 61 && y > 11 && y < 15) { Game1.getLocationFromName(mapName).removeTile(x, y, "Buildings"); } if (tile.TileIndexProperties.ContainsKey("Passable")) { tile.TileIndexProperties.Remove("Passable"); } } } } } } } }
public static void GameLocation_isCollidingPosition_Postfix(GameLocation __instance, ref bool __result, Microsoft.Xna.Framework.Rectangle position, xTile.Dimensions.Rectangle viewport, bool isFarmer, int damagesFarmer, bool glider, Character character, bool pathfinding, bool projectile = false, bool ignoreCharacterRequirement = false) { try { IEnumerable <Farmer> farmers = Game1.getAllFarmers(); if (!farmers.Any()) { return; } foreach (Farmer farmer in farmers) { if (farmer.currentLocation == null || farmer == null || !Game1.displayFarmer || farmer.position == null) { return; } if (!__result || !isFarmer || !character.Equals(farmer) || !farmer.swimming || ModEntry.swimmerData[farmer.uniqueMultiplayerID].isUnderwater) { return; } Vector2 next = SwimUtils.GetNextTile(farmer); //Monitor.Log($"Checking collide {SwimUtils.doesTileHaveProperty(__instance.map, (int)next.X, (int)next.Y, "Water", "Back") != null}"); if ((int)next.X <= 0 || (int)next.Y <= 0 || __instance.Map.Layers[0].LayerWidth <= (int)next.X || __instance.Map.Layers[0].LayerHeight <= (int)next.Y || SwimUtils.doesTileHaveProperty(__instance.map, (int)next.X, (int)next.Y, "Water", "Back") != null) { __result = false; } } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(GameLocation_isCollidingPosition_Postfix)}:\n{ex}", LogLevel.Error); } }