Extract unit names and descriptions

This commit is contained in:
Gustas
2023-11-11 14:06:08 +02:00
committed by Matthias Mailänder
parent a5e472dfe6
commit 0f5b78442b
10 changed files with 56 additions and 32 deletions

View File

@@ -185,8 +185,10 @@ namespace OpenRA.Mods.Common.Scripting
get get
{ {
var tooltip = tooltips.FirstEnabledConditionalTraitOrDefault(); var tooltip = tooltips.FirstEnabledConditionalTraitOrDefault();
if (tooltip == null)
return null;
return tooltip?.Info.Name; return TranslationProvider.GetString(tooltip.Info.Name);
} }
} }

View File

@@ -56,7 +56,8 @@ namespace OpenRA.Mods.Common.Traits
public readonly int BuildPaletteOrder = 9999; public readonly int BuildPaletteOrder = 9999;
[Desc("Text shown in the production tooltip.")] [Desc("Text shown in the production tooltip.")]
public readonly string Description = ""; [TranslationReference(optional: true)]
public readonly string Description;
public static string GetInitialFaction(ActorInfo ai, string defaultFaction) public static string GetInitialFaction(ActorInfo ai, string defaultFaction)
{ {

View File

@@ -16,7 +16,8 @@ namespace OpenRA.Mods.Common.Traits
public class EncyclopediaInfo : TraitInfo public class EncyclopediaInfo : TraitInfo
{ {
[Desc("Explains the purpose in the in-game encyclopedia.")] [Desc("Explains the purpose in the in-game encyclopedia.")]
public readonly string Description = null; [TranslationReference]
public readonly string Description;
[Desc("Number for ordering the list.")] [Desc("Number for ordering the list.")]
public readonly int Order; public readonly int Order;

View File

@@ -15,7 +15,8 @@ namespace OpenRA.Mods.Common.Traits
{ {
public abstract class TooltipInfoBase : ConditionalTraitInfo, Requires<IMouseBoundsInfo> public abstract class TooltipInfoBase : ConditionalTraitInfo, Requires<IMouseBoundsInfo>
{ {
public readonly string Name = ""; [TranslationReference]
public readonly string Name;
} }
[Desc("Shown in map editor.")] [Desc("Shown in map editor.")]
@@ -29,19 +30,23 @@ namespace OpenRA.Mods.Common.Traits
{ {
[Desc("An optional generic name (i.e. \"Soldier\" or \"Structure\")" + [Desc("An optional generic name (i.e. \"Soldier\" or \"Structure\")" +
"to be shown to chosen players.")] "to be shown to chosen players.")]
public readonly string GenericName = null; [TranslationReference(optional: true)]
public readonly string GenericName;
[Desc("Prefix generic tooltip name with 'Ally/Neutral/EnemyPrefix'.")] [Desc("Prefix generic tooltip name with 'Ally/Neutral/EnemyPrefix'.")]
public readonly bool GenericStancePrefix = true; public readonly bool GenericStancePrefix = true;
[Desc("Prefix to display in the tooltip for allied units.")] [Desc("Prefix to display in the tooltip for allied units.")]
public readonly string AllyPrefix = "Allied"; [TranslationReference(optional: true)]
public readonly string AllyPrefix = "label-tooltip-prefix.ally";
[Desc("Prefix to display in the tooltip for neutral units.")] [Desc("Prefix to display in the tooltip for neutral units.")]
public readonly string NeutralPrefix = null; [TranslationReference(optional: true)]
public readonly string NeutralPrefix;
[Desc("Prefix to display in the tooltip for enemy units.")] [Desc("Prefix to display in the tooltip for enemy units.")]
public readonly string EnemyPrefix = "Enemy"; [TranslationReference(optional: true)]
public readonly string EnemyPrefix = "label-tooltip-prefix.enemy";
[Desc("Player stances that the generic name should be shown to.")] [Desc("Player stances that the generic name should be shown to.")]
public readonly PlayerRelationship GenericVisibility = PlayerRelationship.None; public readonly PlayerRelationship GenericVisibility = PlayerRelationship.None;
@@ -54,18 +59,22 @@ namespace OpenRA.Mods.Common.Traits
public string TooltipForPlayerStance(PlayerRelationship relationship) public string TooltipForPlayerStance(PlayerRelationship relationship)
{ {
if (relationship == PlayerRelationship.None || !GenericVisibility.HasRelationship(relationship)) if (relationship == PlayerRelationship.None || !GenericVisibility.HasRelationship(relationship))
return Name; return TranslationProvider.GetString(Name);
if (GenericStancePrefix && !string.IsNullOrEmpty(AllyPrefix) && relationship == PlayerRelationship.Ally) var genericName = string.IsNullOrEmpty(GenericName) ? "" : TranslationProvider.GetString(GenericName);
return AllyPrefix + " " + GenericName; if (GenericStancePrefix)
{
if (!string.IsNullOrEmpty(AllyPrefix) && relationship == PlayerRelationship.Ally)
return TranslationProvider.GetString(AllyPrefix) + " " + genericName;
if (GenericStancePrefix && !string.IsNullOrEmpty(NeutralPrefix) && relationship == PlayerRelationship.Neutral) if (!string.IsNullOrEmpty(NeutralPrefix) && relationship == PlayerRelationship.Neutral)
return NeutralPrefix + " " + GenericName; return TranslationProvider.GetString(NeutralPrefix) + " " + genericName;
if (GenericStancePrefix && !string.IsNullOrEmpty(EnemyPrefix) && relationship == PlayerRelationship.Enemy) if (!string.IsNullOrEmpty(EnemyPrefix) && relationship == PlayerRelationship.Enemy)
return EnemyPrefix + " " + GenericName; return TranslationProvider.GetString(EnemyPrefix) + " " + genericName;
}
return GenericName; return genericName;
} }
public bool IsOwnerRowVisible => ShowOwnerRow; public bool IsOwnerRowVisible => ShowOwnerRow;

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Traits
public readonly SelectionBoxAnnotationRenderable SelectionBox; public readonly SelectionBoxAnnotationRenderable SelectionBox;
public string Tooltip => public string Tooltip =>
(tooltip == null ? " < " + Info.Name + " >" : tooltip.Name) + "\n" + Owner.Name + " (" + Owner.Faction + ")" (tooltip == null ? " < " + Info.Name + " >" : TranslationProvider.GetString(tooltip.Name)) + "\n" + Owner.Name + " (" + Owner.Faction + ")"
+ "\nID: " + ID + "\nType: " + Info.Name; + "\nID: " + ID + "\nType: " + Info.Name;
public string Type => reference.Type; public string Type => reference.Type;

View File

@@ -111,13 +111,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var tooltip = a.TraitInfos<EditorOnlyTooltipInfo>().FirstOrDefault(ti => ti.EnabledByDefault) as TooltipInfoBase var tooltip = a.TraitInfos<EditorOnlyTooltipInfo>().FirstOrDefault(ti => ti.EnabledByDefault) as TooltipInfoBase
?? a.TraitInfos<TooltipInfo>().FirstOrDefault(ti => ti.EnabledByDefault); ?? a.TraitInfos<TooltipInfo>().FirstOrDefault(ti => ti.EnabledByDefault);
var actorType = TranslationProvider.GetString(ActorTypeTooltip, Translation.Arguments("actorType", a.Name));
var searchTerms = new List<string>() { a.Name }; var searchTerms = new List<string>() { a.Name };
if (tooltip != null) if (tooltip != null)
searchTerms.Add(tooltip.Name); {
var actorName = TranslationProvider.GetString(tooltip.Name);
var actorType = TranslationProvider.GetString(ActorTypeTooltip, Translation.Arguments("actorType", a.Name)); searchTerms.Add(actorName);
var tooltipText = tooltip == null ? actorType : tooltip.Name + $"\n{actorType}"; allActorsTemp.Add(new ActorSelectorActor(a, editorData.Categories, searchTerms.ToArray(), actorName + $"\n{actorType}"));
allActorsTemp.Add(new ActorSelectorActor(a, editorData.Categories, searchTerms.ToArray(), tooltipText)); }
else
allActorsTemp.Add(new ActorSelectorActor(a, editorData.Categories, searchTerms.ToArray(), actorType));
} }
allActors = allActorsTemp.ToArray(); allActors = allActorsTemp.ToArray();

View File

@@ -116,7 +116,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var label = item.Get<LabelWithTooltipWidget>("TITLE"); var label = item.Get<LabelWithTooltipWidget>("TITLE");
var name = actor.TraitInfoOrDefault<TooltipInfo>()?.Name; var name = actor.TraitInfoOrDefault<TooltipInfo>()?.Name;
if (!string.IsNullOrEmpty(name)) if (!string.IsNullOrEmpty(name))
WidgetUtils.TruncateLabelToTooltip(label, name); WidgetUtils.TruncateLabelToTooltip(label, TranslationProvider.GetString(name));
if (firstItem == null) if (firstItem == null)
{ {
@@ -159,7 +159,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var info = actor.TraitInfoOrDefault<EncyclopediaInfo>(); var info = actor.TraitInfoOrDefault<EncyclopediaInfo>();
if (info != null && !string.IsNullOrEmpty(info.Description)) if (info != null && !string.IsNullOrEmpty(info.Description))
text += WidgetUtils.WrapText(info.Description.Replace("\\n", "\n") + "\n\n", descriptionLabel.Bounds.Width, descriptionFont); text += WidgetUtils.WrapText(TranslationProvider.GetString(info.Description) + "\n\n", descriptionLabel.Bounds.Width, descriptionFont);
var height = descriptionFont.Measure(text).Y; var height = descriptionFont.Measure(text).Y;
descriptionLabel.Text = text; descriptionLabel.Text = text;
@@ -175,7 +175,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
var actorTooltip = actor.TraitInfos<TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault); var actorTooltip = actor.TraitInfos<TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault);
if (actorTooltip != null) if (actorTooltip != null)
return actorTooltip.Name; return TranslationProvider.GetString(actorTooltip.Name);
} }
return name; return name;

View File

@@ -38,15 +38,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return; return;
var tooltip = armyUnit.TooltipInfo; var tooltip = armyUnit.TooltipInfo;
var name = tooltip?.Name ?? armyUnit.ActorInfo.Name; var name = tooltip != null ? TranslationProvider.GetString(tooltip.Name) : armyUnit.ActorInfo.Name;
var buildable = armyUnit.BuildableInfo; var buildable = armyUnit.BuildableInfo;
nameLabel.Text = name; nameLabel.Text = name;
var nameSize = font.Measure(name); var nameSize = font.Measure(name);
descLabel.Text = buildable.Description.Replace("\\n", "\n"); var desc = string.IsNullOrEmpty(buildable.Description) ? "" : TranslationProvider.GetString(buildable.Description);
var descSize = descFont.Measure(descLabel.Text); descLabel.Text = desc;
var descSize = descFont.Measure(desc);
descLabel.Bounds.Width = descSize.X; descLabel.Bounds.Width = descSize.X;
descLabel.Bounds.Height = descSize.Y + descLabelPadding; descLabel.Bounds.Height = descSize.Y + descLabelPadding;

View File

@@ -69,7 +69,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return; return;
var tooltip = actor.TraitInfos<TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault); var tooltip = actor.TraitInfos<TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault);
var name = tooltip?.Name ?? actor.Name; var name = tooltip != null ? TranslationProvider.GetString(tooltip.Name) : actor.Name;
var buildable = actor.TraitInfo<BuildableInfo>(); var buildable = actor.TraitInfo<BuildableInfo>();
var cost = 0; var cost = 0;
@@ -137,8 +137,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
costLabel.GetColor = () => pr.GetCashAndResources() >= cost ? Color.White : Color.Red; costLabel.GetColor = () => pr.GetCashAndResources() >= cost ? Color.White : Color.Red;
var costSize = font.Measure(costLabel.Text); var costSize = font.Measure(costLabel.Text);
descLabel.Text = buildable.Description.Replace("\\n", "\n"); var desc = string.IsNullOrEmpty(buildable.Description) ? "" : TranslationProvider.GetString(buildable.Description);
var descSize = descFont.Measure(descLabel.Text); descLabel.Text = desc;
var descSize = descFont.Measure(desc);
descLabel.Bounds.Width = descSize.X; descLabel.Bounds.Width = descSize.X;
descLabel.Bounds.Height = descSize.Y + descLabelPadding; descLabel.Bounds.Height = descSize.Y + descLabelPadding;
@@ -170,7 +171,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
var actorTooltip = ai.TraitInfos<TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault); var actorTooltip = ai.TraitInfos<TooltipInfo>().FirstOrDefault(info => info.EnabledByDefault);
if (actorTooltip != null) if (actorTooltip != null)
return actorTooltip.Name; return TranslationProvider.GetString(actorTooltip.Name);
} }
return a; return a;

View File

@@ -54,3 +54,8 @@ dropdown-starting-units =
dropdown-time-limit = dropdown-time-limit =
.label = Time Limit .label = Time Limit
.description = Player or team with the highest score after this time wins .description = Player or team with the highest score after this time wins
## Tooltip
label-tooltip-prefix =
.ally = Ally
.enemy = Enemy