private void DrawRaceEntry(RaceMaterialEntry rme) { for (int var = 1; var <= rme.VariantCount; var++) { ImGui.Text(rme.VariantCount > 1 ? $"{rme.Race} {rme.Sex} (v{var:D4})" : $"{rme.Race} {rme.Sex}"); ImGui.NextColumn(); switch (rme.Type) { case MaterialSkinType.GameOverride: DrawClanEntry(rme.FirstClan.ToString(), $"Game Override to {(RaceSexId)rme.OverrideRaceSexID}", MaterialPathHandler.BuildBodyMaterialPath(rme.OverrideRaceSexID, 1, var, "_a.mtrl")); ImGui.NextColumn(); DrawClanEntry(rme.SecondClan.ToString(), $"Game Override to {(RaceSexId)rme.OverrideRaceSexID}", MaterialPathHandler.BuildBodyMaterialPath(rme.OverrideRaceSexID, 1, var, "_a.mtrl")); break; case MaterialSkinType.GameRaceVariant: DrawClanEntry(rme.FirstClan.ToString(), $"Game Race Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.FirstClanRaceSexID, 1, var, "_a.mtrl")); ImGui.NextColumn(); DrawClanEntry(rme.SecondClan.ToString(), $"Game Race Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.FirstClanRaceSexID, 1, var, "_a.mtrl")); break; case MaterialSkinType.GameRaceClanVariant: DrawClanEntry(rme.FirstClan.ToString(), $"Game Race+Clan Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.FirstClanRaceSexID, 1, var, "_a.mtrl")); ImGui.NextColumn(); DrawClanEntry(rme.SecondClan.ToString(), $"Game Race+Clan Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.SecondClanRaceSexID, rme.FirstClanRaceSexID == rme.SecondClanRaceSexID ? 101 : 1, var, "_a.mtrl")); break; case MaterialSkinType.RaceVariant: DrawClanEntry(rme.FirstClan.ToString(), $"New Race Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.FirstClanRaceSexID, 1, var, "_a.mtrl")); ImGui.NextColumn(); DrawClanEntry(rme.SecondClan.ToString(), $"New Race Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.FirstClanRaceSexID, 1, var, "_a.mtrl")); break; case MaterialSkinType.RaceClanVariant: DrawClanEntry(rme.FirstClan.ToString(), $"New Race+Clan Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.FirstClanRaceSexID, 1, var, "_a.mtrl")); ImGui.NextColumn(); DrawClanEntry(rme.SecondClan.ToString(), $"New Race+Clan Variant", MaterialPathHandler.BuildBodyMaterialPath(rme.SecondClanRaceSexID, rme.FirstClanRaceSexID == rme.SecondClanRaceSexID ? 101 : 1, var, "_a.mtrl")); break; } ImGui.Separator(); } }
public RaceMaterialEntry CreateRaceMaterialEntry(ushort firstClanRaceSexID, ushort secondClanRaceSexID, bool hasGameRaceClanVariant, Race race, Sex sex, Clan firstClan, Clan secondClan, byte variantCount) { var rme = new RaceMaterialEntry(); rme.FirstClanRaceSexID = firstClanRaceSexID; rme.SecondClanRaceSexID = secondClanRaceSexID; rme.OverrideRaceSexID = GetMaterialRaceSexIdOverride(firstClanRaceSexID); rme.Race = race; rme.Sex = sex; rme.FirstClan = firstClan; rme.SecondClan = secondClan; rme.VariantCount = variantCount; string firstClanVariant = BuildBodyMaterialPath(firstClanRaceSexID, 1, 1, "_a.mtrl"); string secondClanVariant = BuildBodyMaterialPath(secondClanRaceSexID, firstClanRaceSexID == secondClanRaceSexID ? 101 : 1, 1, "_a.mtrl"); bool hasRaceVariant = _plugin.PluginInterface.Data.FileExists(firstClanVariant); bool hasRaceClanVariant = _plugin.PluginInterface.Data.FileExists(secondClanVariant) && hasRaceVariant; bool hasGameRaceVariant = (firstClanRaceSexID == rme.OverrideRaceSexID); if (hasGameRaceClanVariant) { rme.Type = MaterialSkinType.GameRaceClanVariant; // aura, highlander/midlander } else if (hasRaceClanVariant) { rme.Type = MaterialSkinType.RaceClanVariant; // player added } else if (hasGameRaceVariant) { rme.Type = MaterialSkinType.GameRaceVariant; // lalafell, hrothgar, viera } else if (hasRaceVariant) { rme.Type = MaterialSkinType.RaceVariant; // player added } else { rme.Type = MaterialSkinType.GameOverride; // elezen, miqo'te } return(rme); }