// New stuff for extra floor cell types public static void ApplyExtraFloorCellData(PrototypeDungeonRoomCellData cellData, CoreDamageTypes DamageType, FloorType FloorType, float DamageToPlayersPerTick = 0, float DamageToEnemiesPerTick = 0, float TickFrequency = 0, bool RespectsFlying = true, bool DoesDamage = false, bool IsPoison = false) { cellData.doesDamage = DoesDamage; cellData.damageDefinition = new CellDamageDefinition() { damageTypes = DamageType, damageToPlayersPerTick = DamageToPlayersPerTick, damageToEnemiesPerTick = DamageToEnemiesPerTick, tickFrequency = TickFrequency, respectsFlying = RespectsFlying, isPoison = IsPoison }; if (cellData.appearance == null) { cellData.appearance = new PrototypeDungeonRoomCellAppearance() { overrideDungeonMaterialIndex = -1, IsPhantomCarpet = false, ForceDisallowGoop = false, globalOverrideIndices = new PrototypeIndexOverrideData() { indices = new List <int>(0) } }; } if (DamageType == CoreDamageTypes.Poison) { cellData.ForceTileNonDecorated = true; // cellData.appearance.OverrideFloorType = FloorType.Stone; cellData.damageDefinition.damageTypes = CoreDamageTypes.Poison; } else if (DamageType == CoreDamageTypes.Fire) { cellData.ForceTileNonDecorated = true; // cellData.appearance.OverrideFloorType = FloorType.Stone; cellData.damageDefinition.damageTypes = CoreDamageTypes.Fire; } cellData.appearance.OverrideFloorType = FloorType; }
public static void ApplyExtraFloorCellDataFromTexture2D(PrototypeDungeonRoom room, Texture2D sourceTexture) { if (sourceTexture == null) { ETGModConsole.Log("[ExpandTheGungeon] ApplyExtraFloorCellDataFromTexture2D: WARNING! Requested Texture for extra floor data is null!", ExpandSettings.debugMode); ETGModConsole.Log("[ExpandTheGungeon] Room: " + room.name + " will not have any extra floor data!", ExpandSettings.debugMode); return; } int width = room.Width; int height = room.Height; int ArrayLength = (width * height); if (sourceTexture.GetPixels32().Length != ArrayLength) { ETGModConsole.Log("[ExpandTheGungeon] ApplyExtraFloorCellDataFromTexture2D: WARNING! Image resolution doesn't match size of room!", ExpandSettings.debugMode); ETGModConsole.Log("[ExpandTheGungeon] Room: " + room.name + " will not have any extra floor data!", ExpandSettings.debugMode); return; } Color WhitePixel = new Color32(255, 255, 255, 255); // Normal Floor Color RedPixel = new Color32(255, 0, 0, 255); // Fire damage cell Color GreenPixel = new Color32(0, 255, 0, 255); // Poison damage cell Color BlueHalfGreenPixel = new Color32(0, 127, 255, 255); // Ice Override Color HalfBluePixel = new Color32(0, 0, 127, 255); // Water Override Color HalfRedPixel = new Color32(0, 0, 127, 255); // Carpet Override Color GreenHalfRBPixel = new Color32(127, 255, 127, 255); // Grass Override Color HalfWhitePixel = new Color32(127, 127, 127, 255); // Bone Override Color OrangePixel = new Color32(255, 127, 0, 255); // Flesh Override Color RedHalfGBPixel = new Color32(255, 127, 127, 255); // ThickGoop Override for (int X = 0; X < width; X++) { for (int Y = 0; Y < height; Y++) { int ArrayPosition = (Y * width + X); Color?m_Pixel = sourceTexture.GetPixel(X, Y); PrototypeDungeonRoomCellData cellData = room.FullCellData[ArrayPosition]; float DamageToPlayersPerTick = 0; float DamageToEnemiesPerTick = 0; float TickFrequency = 0; bool RespectsFlying = true; bool IsPoison = false; bool isDamageCell = false; CoreDamageTypes DamageCellsType = CoreDamageTypes.None; FloorType floorType = FloorType.Stone; if (cellData != null && m_Pixel.HasValue && cellData.state == CellType.FLOOR) { if (m_Pixel.Value == RedPixel) { floorType = FloorType.Stone; DamageCellsType = CoreDamageTypes.Fire; } else if (m_Pixel.Value == BlueHalfGreenPixel) { floorType = FloorType.Ice; } else if (m_Pixel.Value == HalfBluePixel) { floorType = FloorType.Water; } else if (m_Pixel.Value == HalfRedPixel) { floorType = FloorType.Carpet; } else if (m_Pixel.Value == GreenHalfRBPixel) { floorType = FloorType.Grass; } else if (m_Pixel.Value == HalfWhitePixel) { floorType = FloorType.Bone; } else if (m_Pixel.Value == OrangePixel) { floorType = FloorType.Flesh; } else if (m_Pixel.Value == RedHalfGBPixel) { floorType = FloorType.ThickGoop; } if (DamageCellsType == CoreDamageTypes.Fire) { isDamageCell = true; DamageToPlayersPerTick = 0.5f; TickFrequency = 1; } else if (DamageCellsType == CoreDamageTypes.Poison) { IsPoison = true; isDamageCell = true; DamageToPlayersPerTick = 0.5f; TickFrequency = 1; } ApplyExtraFloorCellData(cellData, DamageCellsType, floorType, DamageToPlayersPerTick, DamageToEnemiesPerTick, TickFrequency, RespectsFlying, isDamageCell, IsPoison); } } } }