1 using Microsoft.Xna.Framework;
3 using System.Collections.Generic;
4 using System.Collections.Immutable;
33 public static IEnumerable<MapEntityPrefab>
List
89 [Obsolete(
"Prefer MapEntityPrefab.FindByIdentifier or MapEntityPrefab.FindByName")]
90 public static MapEntityPrefab Find(
string name,
string identifier =
null,
bool showErrorMessages =
true)
92 return Find(name, (identifier ??
"").ToIdentifier(), showErrorMessages);
95 [Obsolete(
"Prefer MapEntityPrefab.FindByIdentifier or MapEntityPrefab.FindByName")]
99 if (
string.IsNullOrEmpty(name) && !identifier.IsEmpty)
109 if (!identifier.IsEmpty)
113 if (prefab.
Aliases !=
null && prefab.
Aliases.Any(a => a == identifier))
121 if (
string.IsNullOrEmpty(name)) {
return prefab; }
124 if (!
string.IsNullOrEmpty(name))
126 if (prefab.
Name.
Equals(name, StringComparison.OrdinalIgnoreCase) ||
127 prefab.
OriginalName.Equals(name, StringComparison.OrdinalIgnoreCase) ||
128 (prefab.
Aliases !=
null && prefab.
Aliases.Any(a => a.Equals(name, StringComparison.OrdinalIgnoreCase))))
135 if (showErrorMessages)
137 DebugConsole.ThrowError(
"Failed to find a matching MapEntityPrefab (name: \"" + name +
"\", identifier: \"" + identifier +
"\").\n" + Environment.StackTrace.CleanupStackTrace());
144 return List.GetRandom(p => predicate(p), sync);
153 return List.FirstOrDefault(p => predicate(p));
159 if (name.IsNullOrEmpty()) {
throw new ArgumentException($
"{nameof(name)} must not be null or empty"); }
163 prefab.
Name.
Equals(name, StringComparison.OrdinalIgnoreCase) ||
164 prefab.
OriginalName.Equals(name, StringComparison.OrdinalIgnoreCase) ||
166 prefab.
Aliases.Any(a => a.Equals(name, StringComparison.OrdinalIgnoreCase))));
169 if (matches.Count() > 1)
172 matches.FirstOrDefault(prefab => !prefab.
HideInMenus) ??
174 if (bestMatch !=
null) {
return bestMatch; }
176 return matches.FirstOrDefault();
195 public abstract ImmutableHashSet<Identifier>
Tags {
get; }
206 public abstract ImmutableHashSet<string>
Aliases {
get; }
237 public float Scale {
get;
protected set; }
245 var textId = $
"entityname.{Identifier}";
246 return TextManager.ContainsTag(textId) ? textId :
null;
251 var textId = $
"roomname.{Identifier}";
252 return TextManager.ContainsTag(textId) ? textId :
null;
255 private string cachedAllowedUpgrades =
"";
256 private ImmutableHashSet<Identifier> allowedUpgradeSet;
260 if (allowedUpgradeSet is
null || cachedAllowedUpgrades !=
AllowedUpgrades)
262 allowedUpgradeSet =
AllowedUpgrades.ToIdentifiers().ToImmutableHashSet();
266 return allowedUpgradeSet;
271 return subcategory?.Equals(this.
Subcategory, StringComparison.OrdinalIgnoreCase) ??
false;
277 public void DebugCreateInstance()
289 public bool NameMatches(IEnumerable<string> allowedNames, StringComparison comparisonType) => allowedNames.Any(n =>
NameMatches(n, comparisonType));
293 if (target ==
null) {
return false; }
308 if (descriptionIdentifier !=
Identifier.Empty)
310 Description = TextManager.Get($
"EntityDescription.{descriptionIdentifier}");
314 Description = TextManager.Get($
"EntityDescription.{Identifier}");
318 Description = TextManager.Get($
"EntityDescription.{nameIdentifier}");
320 if (!originalDescription.IsNullOrEmpty())
Base class for content file types, which are loaded from filelist.xml via reflection....
Identifier GetAttributeIdentifier(string key, string def)
static readonly PrefabCollection< CoreEntityPrefab > Prefabs
static readonly PrefabCollection< ItemAssemblyPrefab > Prefabs
static readonly PrefabCollection< ItemPrefab > Prefabs
LocalizedString Fallback(LocalizedString fallback, bool useDefaultLanguageIfFound=true)
Use this text instead if the original text cannot be found.
override bool Equals(object? obj)
MapEntityPrefab(ContentXElement element, ContentFile file)
abstract ImmutableHashSet< string > Aliases
abstract string OriginalName
string GetItemNameTextId()
string GetHullNameTextId()
virtual bool CanSpriteFlipY
bool NameMatches(IEnumerable< string > allowedNames, StringComparison comparisonType)
static object GetSelected()
abstract ImmutableHashSet< Identifier > AllowedLinks
Links defined to identifiers.
static MapEntityPrefab GetRandom(Predicate< MapEntityPrefab > predicate, Rand.RandSync sync)
bool NameMatches(string name, StringComparison comparisonType)
Check if the name or any of the aliases of this prefab match the given name.
virtual bool CanSpriteFlipX
bool IsLinkAllowed(MapEntityPrefab target)
LocalizedString Description
static MapEntityPrefab FindByName(string name)
static IEnumerable< MapEntityPrefab > List
abstract ImmutableHashSet< Identifier > Tags
static MapEntityPrefab FindByIdentifier(Identifier identifier)
static bool SelectPrefab(object selection)
static Vector2 placePosition
IEnumerable< Identifier > GetAllowedUpgrades()
static MapEntityPrefab Find(Predicate< MapEntityPrefab > predicate)
Find a matching map entity prefab
static MapEntityPrefab Selected
MapEntityPrefab(Identifier identifier)
void LoadDescription(ContentXElement element)
abstract LocalizedString Name
abstract MapEntityCategory Category
abstract void CreateInstance(Rectangle rect)
static MapEntityPrefab Find(string name, Identifier identifier, bool showErrorMessages=true)
static MapEntityPrefab Find(string name, string identifier=null, bool showErrorMessages=true)
Find a matching map entity prefab
bool HasSubCategory(string subcategory)
readonly Identifier Identifier
Prefab that has a property serves as a deterministic hash of a prefab's identifier....
static readonly PrefabCollection< StructurePrefab > Prefabs
static readonly Vector2 GridSize