Files
wwdpublic/Content.Shared/Language/Components/Translators/BaseTranslatorComponent.cs
FoxxoTrystan 82edb60ac6 Languages (#43)
Resolves https://github.com/Simple-Station/Einstein-Engines/issues/37

# Description

This PR adds languages. Every entity who can speak now speaks a specific
language (or Universal, for entities that are not supposed to speak,
which is understood by everyone). Other entities who do not understand
this language will see gibberish (it's possible to learn how certain
induvidual words are spelled. But the spelling changes between rounds).
This means that certain creatures, like xenos, cats, vulps, can
communicate within their species in their own languages. Similarly, it
means that xenos, cats and other things cannot understand GalacticCommon
speakers without a translator or cognization.

An entity may be able to speak multiple languages, or understand a
language but be unable to speak it.

Thi PR was orignally made for Frontier but is now being ported and will
be maintain here.
Orignal PR:
https://github.com/new-frontiers-14/frontier-station-14/pull/671

This PR was made orignally by Mnemotechnician and FoxxoTrystan.

---

# TODO

- [x] Language System. (Check Frontier PR for all the compleated todo
list)
- [x] Port PR from Frontier.
- [x] QOL Changes.
- [x] Missing Default Languages. (Missing default langauges for some
roundstart species)
- [x] Animals Languages.

---

<details><summary><h1>Media</h1></summary>
<p>


![image](https://github.com/Simple-Station/Einstein-Engines/assets/45297731/fc43efd9-612e-4a6d-8ed6-90a26d315c6f)

![image](https://github.com/Simple-Station/Einstein-Engines/assets/45297731/b86616a3-d5fb-408d-865e-90d09096b6d7)

![image](https://github.com/Simple-Station/Einstein-Engines/assets/45297731/ab1e8581-522d-4e7e-95e8-f62575bc5039)

</p>
</details>

---

# Changelog

🆑 FoxxoTrystan / Mnemotechnician
- add: All species can now bring their own cultures and languages

---------

Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
Signed-off-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com>
Co-authored-by: fox <daytimer253@gmail.com>
Co-authored-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com>
Co-authored-by: Pspritechologist <81725545+Pspritechologist@users.noreply.github.com>
Co-authored-by: Lincoln McQueen <lincoln.mcqueen@gmail.com>
Co-authored-by: Arkyfloof <Marvinlinke08@gmail.com>
Co-authored-by: reese1243 <ber23027@byui.edu>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Eagle-0 <114363363+Eagle-0@users.noreply.github.com>
Co-authored-by: BlitzDev <145472107+Reese1243@users.noreply.github.com>
Co-authored-by: Arkyfloof <161242062+Arkyfloof@users.noreply.github.com>
Co-authored-by: Danger Revolution! <142105406+DangerRevolution@users.noreply.github.com>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
2024-06-10 16:48:48 -04:00

48 lines
2.1 KiB
C#

using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
namespace Content.Shared.Language.Components.Translators;
public abstract partial class BaseTranslatorComponent : Component
{
// TODO may need to be removed completely, it's a part of legacy code that never ended up being used.
/// <summary>
/// The language this translator changes the speaker's language to when they don't specify one.
/// If null, does not modify the default language.
/// </summary>
[DataField("defaultLanguage")]
[ViewVariables(VVAccess.ReadWrite)]
public string? DefaultLanguageOverride = null;
/// <summary>
/// The list of additional languages this translator allows the wielder to speak.
/// </summary>
[DataField("spoken", customTypeSerializer: typeof(PrototypeIdListSerializer<LanguagePrototype>))]
public List<string> SpokenLanguages = new();
/// <summary>
/// The list of additional languages this translator allows the wielder to understand.
/// </summary>
[DataField("understood", customTypeSerializer: typeof(PrototypeIdListSerializer<LanguagePrototype>))]
public List<string> UnderstoodLanguages = new();
/// <summary>
/// The languages the wielding MUST know in order for this translator to have effect.
/// The field [RequiresAllLanguages] indicates whether all of them are required, or just one.
/// </summary>
[DataField("requires", customTypeSerializer: typeof(PrototypeIdListSerializer<LanguagePrototype>))]
public List<string> RequiredLanguages = new();
/// <summary>
/// If true, the wielder must understand all languages in [RequiredLanguages] to speak [SpokenLanguages],
/// and understand all languages in [RequiredLanguages] to understand [UnderstoodLanguages].
///
/// Otherwise, at least one language must be known (or the list must be empty).
/// </summary>
[DataField("requiresAll")]
[ViewVariables(VVAccess.ReadWrite)]
public bool RequiresAllLanguages = false;
[DataField("enabled"), ViewVariables(VVAccess.ReadWrite)]
public bool Enabled = true;
}