7 Commits

51 changed files with 282 additions and 120 deletions

View File

@@ -1,3 +1,3 @@
using System.Reflection;
[assembly: AssemblyVersion("0.0.4")]
[assembly: AssemblyVersion("0.0.5")]

View File

@@ -1,5 +1,9 @@
using Cryville.EEW.Core;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Cryville.EEW.Unity {
@@ -8,12 +12,17 @@ namespace Cryville.EEW.Unity {
float SeverityColorMappingLuminanceMultiplier,
bool UseContinuousColor,
string ColorScheme,
string LocationNamer,
string OverrideTimeZone,
bool DoDisplayTimeZone,
bool DoSwitchBackToHistory,
string NowcastWarningDelayTolerance,
string OverrideDisplayCulture,
IReadOnlyCollection<TTSCultureConfig> TTSCultures,
bool DoIgnoreLanguageVariant,
IReadOnlyCollection<EventSourceConfig> EventSources
) {
@@ -22,12 +31,17 @@ namespace Cryville.EEW.Unity {
1f,
false,
"Default",
"FERegionLong",
null,
true,
true,
"1:00:00",
"",
new List<TTSCultureConfig> { new(SharedCultures.CurrentUICulture) },
true,
new List<EventSourceConfig> {
new JMAAtomEventSourceConfig(Array.Empty<string>()),
@@ -58,9 +72,23 @@ namespace Cryville.EEW.Unity {
record NOAAEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
record UpdateCheckerEventSourceConfig : EventSourceConfig;
record USGSQuakeMLEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
record WolfxEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig;
record WolfxEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false, bool UseRawCENCLocationName = false) : EventSourceConfig;
[JsonSerializable(typeof(Config))]
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSourceGenerationOptions(Converters = new Type[] { typeof(CultureInfoConverter) }, WriteIndented = true)]
sealed partial class ConfigSerializationContext : JsonSerializerContext { }
sealed class CultureInfoConverter : JsonConverter<CultureInfo> {
public override CultureInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
Debug.Assert(typeToConvert == typeof(CultureInfo));
var value = reader.GetString();
if (value == null) return CultureInfo.InvariantCulture;
if (value == "") return SharedCultures.CurrentUICulture;
return SharedCultures.Get(value);
}
public override void Write(Utf8JsonWriter writer, CultureInfo value, JsonSerializerOptions options) {
writer.WriteStringValue(value.Name);
}
}
}

View File

@@ -26,12 +26,12 @@ namespace Cryville.EEW.Unity {
public IColorScheme ColorScheme { get; private set; } = new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.Instance);
public ISubColorScheme BorderColorScheme { get; private set; } = new WrappedColorScheme(new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.SecondaryInstance));
public ISubColorScheme TextColorScheme { get; private set; } = new DefaultTextColorScheme(Color.White, Color.Black);
public TimeSpan NowcastWarningDelayTolerance => TimeSpan.FromMinutes(60); // TODO TTS
public TimeSpan NowcastWarningDelayTolerance { get; private set; } = TimeSpan.FromMinutes(60);
public CultureInfo RVMCulture { get; private set; } = SharedCultures.CurrentUICulture;
readonly int _infoLocationSpecificity = 3;
readonly int _ttsLocationSpecificity = 3;
readonly LocationNamer _locationNamer = new() { Namer = new FERegionLongNamer() }; // TODO TTS
readonly LocationNamer _locationNamer = new() { Namer = new FERegionLongNamer() };
public bool NameLocation(double lat, double lon, CultureInfo localCulture, ref CultureInfo targetCulture, out string name, out int specificity) {
specificity = _ttsLocationSpecificity;
return _locationNamer.Name(lat, lon, localCulture, ref targetCulture, out name, ref specificity);
@@ -41,6 +41,9 @@ namespace Cryville.EEW.Unity {
return _locationNamer.Name(lat, lon, localCulture, ref targetCulture, out name, ref specificity);
}
public IReadOnlyCollection<TTSCultureConfig> TTSCultures { get; private set; }
public bool DoIgnoreLanguageVariant { get; private set; }
public TimeZoneInfo OverrideTimeZone { get; private set; }
public bool DoDisplayTimeZone { get; private set; } = true;
public bool DoSwitchBackToHistory { get; private set; } = true;
@@ -114,12 +117,20 @@ namespace Cryville.EEW.Unity {
"SREV" => new DefaultTextColorScheme(Color.White, Color.FromArgb(28, 28, 28), 0.555f),
_ => new DefaultTextColorScheme(Color.White, Color.Black),
};
_locationNamer.Namer = config.LocationNamer switch {
"FERegionShort" => new FERegionShortNamer(),
_ => new FERegionLongNamer(),
};
if (config.NowcastWarningDelayTolerance is string nowcastWarningDelayTolerance)
NowcastWarningDelayTolerance = TimeSpan.Parse(nowcastWarningDelayTolerance, CultureInfo.InvariantCulture);
OverrideTimeZone = ParseTimeZone(config.OverrideTimeZone);
DoDisplayTimeZone = config.DoDisplayTimeZone;
DoSwitchBackToHistory = config.DoSwitchBackToHistory;
RVMCulture = config.OverrideDisplayCulture is string rvmCulture
? (string.IsNullOrEmpty(rvmCulture) ? SharedCultures.CurrentUICulture : SharedCultures.Get(rvmCulture))
: CultureInfo.InvariantCulture;
TTSCultures = config.TTSCultures ?? new List<TTSCultureConfig> { new(CultureInfo.InvariantCulture) };
DoIgnoreLanguageVariant = config.DoIgnoreLanguageVariant;
EventSources = config.EventSources;
}

View File

@@ -1,3 +1,4 @@
using SpeechLib;
using System;
using System.Globalization;
using System.Threading;
@@ -5,7 +6,14 @@ using System.Threading.Tasks;
namespace Cryville.EEW.Unity {
class TTSWorker : Core.Audio.TTSWorker {
public TTSWorker() : base(CreateSoundPlayer()) { }
readonly SpVoiceClass _voice;
public TTSWorker() : base(CreateSoundPlayer()) {
try {
_voice = new SpVoiceClass();
}
catch { }
}
static SoundPlayer CreateSoundPlayer() {
try {
@@ -16,10 +24,24 @@ namespace Cryville.EEW.Unity {
}
}
protected override bool IsSpeaking() => false;
protected override bool IsSpeaking() {
if (_voice == null) return false;
_voice.GetStatus(out var status, out _);
return (status.dwRunningState & (uint)SpeechRunState.SRSEIsSpeaking) != 0;
}
protected override Task Speak(CultureInfo culture, string content, CancellationToken cancellationToken) => Task.CompletedTask;
protected override Task Speak(CultureInfo culture, string content, CancellationToken cancellationToken) {
if (_voice == null) return Task.CompletedTask;
_voice.Speak(
string.Format(CultureInfo.InvariantCulture, "<LANG LANGID=\"{0:x}\">{1}</LANG>", culture.LCID, content),
SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak
);
return Task.CompletedTask;
}
protected override void StopCurrent() { }
protected override void StopCurrent() {
if (_voice == null) return;
_voice.Skip("SENTENCE", int.MaxValue);
}
}
}

View File

@@ -23,6 +23,7 @@ namespace Cryville.EEW.Unity.UI {
child.SetViewModel(e);
child.transform.SetParent(m_listView, false);
_displayingViews.Add(child);
OnDisplayingViewsChanged();
SwitchTo(_displayingReports.Count - 1);
@@ -37,6 +38,7 @@ namespace Cryville.EEW.Unity.UI {
child.SetParent(null, false);
Destroy(child.gameObject);
_displayingViews.RemoveAt(index);
OnDisplayingViewsChanged();
if (_displayingReports.Count == 0) {
m_currentView.gameObject.SetActive(false);
@@ -49,6 +51,14 @@ namespace Cryville.EEW.Unity.UI {
if (_displayingReports.Count <= 1) m_listView.gameObject.SetActive(false);
}
void OnDisplayingViewsChanged() {
_maxBaseDuration = 1;
foreach (var e in _displayingReports) {
float duration = GetBaseDuration(e);
if (duration > _maxBaseDuration)
_maxBaseDuration = duration;
}
}
void Awake() {
if (Instance != null) {
@@ -63,6 +73,7 @@ namespace Cryville.EEW.Unity.UI {
int _index = -1;
float _tickDown;
float _maxBaseDuration;
void Update() {
if (_displayingReports.Count == 0) return;
_tickDown -= Time.deltaTime;
@@ -77,12 +88,15 @@ namespace Cryville.EEW.Unity.UI {
_index = index;
var e = _displayingReports[index];
m_currentView.SetViewModel(e, true);
var keyProp = e.Properties.FirstOrDefault();
_displayingViews[_index].SetCurrent(true);
_tickDown = MathF.Exp(Math.Max(-1f, keyProp?.Severity ?? -1f) + 1);
_tickDown = GetBaseDuration(e) / Math.Min(_maxBaseDuration, 4) * 4;
m_currentView.gameObject.SetActive(true);
Worker.Instance.SetCurrent(e);
}
static float GetBaseDuration(ReportViewModel e) {
return MathF.Exp(Math.Max(-1f, e.Properties.FirstOrDefault()?.Severity ?? -1f) + 1);
}
public void OnItemClicked(ReportViewModel viewModel) {
int index = _displayingReports.IndexOf(viewModel);
if (index == -1) return;

View File

@@ -65,6 +65,8 @@ namespace Cryville.EEW.Unity {
_worker.RVMGeneratorContext = SharedSettings.Instance;
_worker.TTSMessageGeneratorContext = SharedSettings.Instance;
_worker.RVMCulture = SharedSettings.Instance.RVMCulture;
_worker.SetTTSCultures(SharedSettings.Instance.TTSCultures ?? new TTSCultureConfig[0]);
_worker.IgnoreLanguageVariant = SharedSettings.Instance.DoIgnoreLanguageVariant;
_ongoingReportManager.Changed += OnOngoingReported;
_worker.Reported += OnReported;
_grouper.GroupUpdated += OnGroupUpdated;
@@ -88,9 +90,10 @@ namespace Cryville.EEW.Unity {
_ongoingReportManager.Dispose();
}
static void RegisterViewModelGenerators(CoreWorker worker) {
CENCEarthquakeRVMGenerator _cencEarthquakeRVMGenerator;
void RegisterViewModelGenerators(CoreWorker worker) {
worker.RegisterViewModelGenerator(new BMKGEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(new CENCEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(_cencEarthquakeRVMGenerator = new CENCEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator());
worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator());
worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator());
@@ -105,9 +108,10 @@ namespace Cryville.EEW.Unity {
worker.RegisterViewModelGenerator(new SichuanEEWRVMGenerator());
worker.RegisterViewModelGenerator(new VersionRVMGenerator());
}
static void RegisterTTSMessageGenerators(CoreWorker worker) {
CENCEarthquakeTTSMessageGenerator _cencEarthquakeTTSMessageGenerator;
void RegisterTTSMessageGenerators(CoreWorker worker) {
worker.RegisterTTSMessageGenerator(new BMKGEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CENCEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(_cencEarthquakeTTSMessageGenerator = new CENCEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator());
worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator());
@@ -130,7 +134,7 @@ namespace Cryville.EEW.Unity {
BMKGOpenDataWorker bmkgWorker = new(new Uri("http://localhost:9095/autogempa.json"));
bmkgWorker.SetDataUris(new Uri[] { new("http://localhost:9095/gempadirasakan.json") });
_worker.AddWorker(bmkgWorker);
_worker.AddWorker(new NOAAAtomWorker(new("http://localhost:9095/PAAQAtom.xml")));
_worker.AddWorker(new NOAAAtomWorker(new("http://localhost:9095/PAAQAtom.xml"), forceHttps: false));
_worker.AddWorker(new UpdateCheckerWorker(typeof(Worker).Assembly.GetName().Version?.ToString(3) ?? "", "unity"));
#else
foreach (var source in SharedSettings.Instance.EventSources) {
@@ -164,7 +168,7 @@ namespace Cryville.EEW.Unity {
worker.IsFilterWhitelist = config.IsFilterWhitelist;
return worker;
}
static WolfxWorker BuildWolfxWorkerFilter(WolfxWorker worker, WolfxEventSourceConfig config) {
WolfxWorker BuildWolfxWorkerFilter(WolfxWorker worker, WolfxEventSourceConfig config) {
if (config.Filter != null) worker.SetFilter(config.Filter.Select(i => i switch {
"cenc_eew" => typeof(CENCEEW),
"cenc_eqlist" => typeof(WolfxEarthquakeList<CENCEarthquake>),
@@ -175,6 +179,11 @@ namespace Cryville.EEW.Unity {
_ => throw new InvalidOperationException("Unknown Wolfx event type."),
}));
worker.IsFilterWhitelist = config.IsFilterWhitelist;
_cencEarthquakeRVMGenerator.UseRawLocationName
= _cencEarthquakeTTSMessageGenerator.UseRawLocationName
= config.UseRawCENCLocationName;
return worker;
}
static BMKGOpenDataWorker BuildBMKGOpenDataWorkerUris(BMKGOpenDataWorker worker, BMKGOpenDataEventSourceConfig config) {

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -107,7 +107,7 @@
</member>
<member name="P:Cryville.EEW.TTS.TTSEntry.IssueTime">
<summary>
The time when the entry is created.
The time when the entry is created in UTC.
</summary>
</member>
</members>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,76 @@
fileFormatVersion: 2
guid: 17df7db50754b8f459aa29934b507000
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
: Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux64: 1
Exclude OSXUniversal: 1
Exclude Win: 0
Exclude Win64: 0
- first:
Android: Android
second:
enabled: 0
settings:
CPU: ARMv7
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
- first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: Win
second:
enabled: 1
settings:
CPU: x86
- first:
Standalone: Win64
second:
enabled: 1
settings:
CPU: x86_64
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -52,7 +52,7 @@
"142": "ウルグアイ",
"143": "チリ南部沖",
"144": "チリ南部",
"145": "チリ南部/アルゼンチン国境",
"145": "チリ/アルゼンチン国境南部",
"146": "アルゼンチン南部",
"147": "ティエラデルフエゴ",
"148": "フォークランド諸島",
@@ -232,7 +232,7 @@
"304": "カシミール/チベット自治区(中国)境界",
"305": "チベット自治区西部(中国)/インド国境",
"306": "チベット自治区(中国)",
"307": "中国、スーチョワン(四川)省",
"307": "中国、スーチョワン(四川)省/チョンチン(重慶)市",
"308": "インド北部",
"309": "ネパール/インド国境",
"31": "オレゴン州沿岸",
@@ -250,7 +250,7 @@
"320": "キルギス/シンチアンウイグル自治区(中国)国境",
"321": "中国、シンチアンウイグル自治区南部",
"322": "中国、カンスー(甘粛)省",
"323": "中国、ネイモンクー(内蒙古)自治区西部",
"323": "中国、ネイモンクー(内蒙古)自治区西部/ニンシャー(寧夏)回族自治区",
"324": "カシミール/シンチアンウイグル自治区(中国)境界",
"325": "中国、チンハイ(青海)省",
"326": "シベリア南西部",
@@ -283,7 +283,7 @@
"350": "アフガニスタン南西部",
"351": "アラビア半島東部",
"352": "ペルシャ湾",
"353": "イラン",
"353": "イラン南部",
"354": "パキスタン南西部",
"355": "オマーン湾",
"356": "パキスタン沖",
@@ -429,7 +429,7 @@
"482": "ミズーリ/カンザス州境",
"483": "ミズーリ州",
"484": "ミズーリ/アーカンソー州境",
"485": "ミズーリ/イリノイ州境",
"485": "ミズーリ州東部",
"486": "ミズーリ州南東部",
"487": "ミズーリ州、ケープジラード",
"488": "イリノイ州南部",
@@ -442,7 +442,7 @@
"494": "ニュージャージー州",
"495": "アリゾナ州東部",
"496": "ニューメキシコ州",
"497": "テキサス州北西部/オクラホマ州境",
"497": "テキサス州回廊地帯",
"498": "テキサス州西部",
"499": "オクラホマ州",
"5": "アリューシャン列島ニア諸島",
@@ -558,7 +558,7 @@
"599": "オーストラリア南方沖",
"6": "アリューシャン列島ラット諸島",
"60": "オアハカ州",
"600": "オーストラリア岸",
"600": "サウスオーストラリア沿岸",
"601": "ニューサウスウェールズ",
"602": "オーストラリア、ビクトリア",
"603": "オーストラリア南東岸",
@@ -630,7 +630,7 @@
"663": "オホーツク海",
"664": "中国南東部",
"665": "黄海",
"666": "中国東部東方沖",
"666": "中国東部東方沖",
"667": "ノボシビルスク(ニューシベリアン)諸島北方",
"668": "ノボシビルスク(ニューシベリアン)諸島",
"669": "東シベリア海",
@@ -678,7 +678,7 @@
"706": "スマトラ北部",
"707": "マレー半島",
"708": "タイ湾",
"709": "アフガニスタン",
"709": "アフガニスタン南東部",
"71": "グアテマラ沿岸",
"710": "パキスタン",
"711": "カシミール南西部",
@@ -756,7 +756,7 @@
"95": "ウィンドワード諸島",
"96": "コロンビア北岸",
"97": "ベネズエラ沿岸",
"98": "トリニダード・トバゴ",
"98": "トリニダード",
"99": "コロンビア北部",
"AU": "オーストラリア",
"CA": "カナダ",
@@ -769,8 +769,10 @@
"KI": "キリバス",
"MacroregionFormat": "{0}、{1}",
"MX": "メキシコ",
"NC": "ニューカレドニア",
"NO": "ノルウェー",
"NZ": "ニュージーランド",
"PF": "フランス領ポリネシア",
"PG": "パプアニューギニア",
"PT": "ポルトガル",
"RU": "ロシア",

View File

@@ -18,8 +18,8 @@
"111": "northern Peru",
"112": "Peru-Brazil border",
"113": "Amazonas, Brazil",
"114": "off the coast of central Peru",
"115": "near the coast of central Peru",
"114": "off the coast of Peru",
"115": "near the coast of Peru",
"116": "central Peru",
"117": "southern Peru",
"118": "Peru-Bolivia border",
@@ -99,7 +99,7 @@
"185": "Vanuatu vicinity",
"186": "Vanuatu",
"187": "New Caledonia",
"188": "Loyalty Islands, New Caledonia",
"188": "Loyalty Islands",
"189": "southeast of the Loyalty Islands",
"19": "southeastern Alaska",
"190": "New Ireland",
@@ -232,7 +232,7 @@
"304": "Kashmir-Xizang border",
"305": "western Xizang-India border",
"306": "Xizang, China",
"307": "Sichuan, China",
"307": "Sichuan-Chongqing, China",
"308": "northern India",
"309": "Nepal-India border",
"31": "near the coast of Oregon",
@@ -250,7 +250,7 @@
"320": "Kyrgyzstan-Xinjiang border",
"321": "southern Xinjiang, China",
"322": "Gansu, China",
"323": "western Nei Mongol, China",
"323": "western Nei Mongol-Ningxia, China",
"324": "Kashmir-Xinjiang border",
"325": "Qinghai, China",
"326": "southwestern Siberia",
@@ -272,7 +272,7 @@
"340": "Turkmenistan",
"341": "Turkmenistan-Iran border",
"342": "Turkmenistan-Afghanistan border",
"343": "Turkey-Iran border",
"343": "Türkiye-Iran border",
"344": "Armenia-Azerbaijan-Iran border",
"345": "northwestern Iran",
"346": "Iran-Iraq border",
@@ -297,8 +297,8 @@
"363": "Greece-Bulgaria border",
"364": "Greece",
"365": "Aegean Sea",
"366": "eastern Turkey",
"367": "Georgia-Armenia-Turkey border",
"366": "Türkiye",
"367": "Georgia-Armenia-Türkiye border",
"368": "southern Greece",
"369": "Dodecanese Islands, Greece",
"37": "Nevada",
@@ -306,7 +306,7 @@
"371": "eastern Mediterranean Sea",
"372": "Cyprus",
"373": "Dead Sea",
"374": "Syria",
"374": "Jordan-Syria",
"375": "Iraq",
"376": "Portugal",
"377": "Spain",
@@ -385,18 +385,18 @@
"442": "Hudson Strait",
"443": "northern Quebec",
"444": "Davis Strait",
"445": "Labrador, Newfoundland and Labrador",
"445": "Labrador",
"446": "Labrador Sea",
"447": "southern Quebec",
"448": "Gaspe Peninsula, Quebec",
"448": "Gaspe Peninsula",
"449": "eastern Quebec",
"45": "California-Baja California border",
"450": "Anticosti Island, Quebec",
"450": "Anticosti Island",
"451": "New Brunswick",
"452": "Nova Scotia",
"453": "Prince Edward Island",
"454": "Gulf of St. Lawrence",
"455": "Newfoundland, Newfoundland and Labrador",
"455": "Newfoundland",
"456": "Montana",
"457": "eastern Idaho",
"458": "Hebgen Lake",
@@ -507,7 +507,7 @@
"552": "Libya",
"553": "Egypt",
"554": "Red Sea",
"555": "western Saudi Arabia",
"555": "western Arabian Peninsula",
"556": "Chad",
"557": "Sudan",
"558": "Ethiopia",
@@ -588,11 +588,11 @@
"625": "Tokelau",
"626": "northern Cook Islands",
"627": "Cook Islands",
"628": "Society Islands, French Polynesia",
"629": "Tubuai Islands, French Polynesia",
"628": "Society Islands",
"629": "Tubuai Islands",
"63": "off the coast of Mexico",
"630": "Marquesas Islands, French Polynesia",
"631": "Tuamotu Archipelago, French Polynesia",
"630": "Marquesas Islands",
"631": "Tuamotu Archipelago",
"632": "South Pacific Ocean",
"633": "Lomonosov Ridge",
"634": "Arctic Ocean",
@@ -648,7 +648,7 @@
"68": "off the coast of Chiapas",
"680": "western Greenland",
"681": "Baffin Bay",
"682": "Baffin Island, Nunavut",
"682": "Baffin Island",
"683": "southeast central Pacific Ocean",
"684": "southern East Pacific Rise",
"685": "Easter Island",
@@ -678,7 +678,7 @@
"706": "northern Sumatra",
"707": "Malay Peninsula, Malaysia",
"708": "Gulf of Thailand",
"709": "central Afghanistan",
"709": "southeastern Afghanistan",
"71": "near the coast of Guatemala",
"710": "Pakistan",
"711": "southwestern Kashmir",
@@ -769,8 +769,10 @@
"KI": "Kiribati",
"MacroregionFormat": "{1}, {0}",
"MX": "Mexico",
"NC": "New Caledonia",
"NO": "Norway",
"NZ": "New Zealand",
"PF": "French Polynesia",
"PG": "Papua New Guinea",
"PT": "Portugal",
"RU": "Russia",

View File

@@ -11,15 +11,15 @@
"105": "厄瓜多爾沿岸",
"106": "哥倫比亞—厄瓜多爾邊境",
"107": "厄瓜多爾",
"108": "秘魯近海",
"109": "秘魯沿岸",
"108": "秘魯北部近海",
"109": "秘魯北部沿岸",
"11": "布里斯托爾灣",
"110": "秘魯—厄瓜多爾邊境",
"111": "秘魯北部",
"112": "秘魯—巴西邊境",
"113": "巴西亞馬遜",
"114": "秘魯中部近海",
"115": "秘魯中部沿岸",
"114": "秘魯近海",
"115": "秘魯沿岸",
"116": "秘魯中部",
"117": "秘魯南部",
"118": "秘魯—玻利維亞邊境",
@@ -99,7 +99,7 @@
"185": "溫納圖附近",
"186": "溫納圖",
"187": "新喀里多尼亞",
"188": "新喀里多尼亞洛亞蒂群島",
"188": "洛亞蒂群島",
"189": "洛亞蒂群島東南",
"19": "阿拉斯加東南部",
"190": "新愛爾蘭",
@@ -232,7 +232,7 @@
"304": "克什米爾—西藏邊境",
"305": "西藏西部—印度邊境",
"306": "中國西藏",
"307": "中國四川",
"307": "中國四川、重慶",
"308": "印度北部",
"309": "尼泊爾—印度邊境",
"31": "俄勒岡沿岸",
@@ -250,7 +250,7 @@
"320": "吉爾吉斯—新疆邊境",
"321": "中國新疆南部",
"322": "中國甘肅",
"323": "中國內蒙古西部",
"323": "中國內蒙古西部、寧夏",
"324": "克什米爾—新疆邊境",
"325": "中國青海",
"326": "西伯利亞西南部",
@@ -297,7 +297,7 @@
"363": "希臘—保加利亞邊境",
"364": "希臘",
"365": "愛琴海",
"366": "土耳其東部",
"366": "土耳其",
"367": "格魯吉亞—亞美尼亞—土耳其邊境",
"368": "希臘南部",
"369": "希臘佐澤卡尼索斯群島",
@@ -306,7 +306,7 @@
"371": "地中海東部",
"372": "塞浦路斯",
"373": "死海",
"374": "敘利亞",
"374": "約旦—敘利亞",
"375": "伊拉克",
"376": "葡萄牙",
"377": "西班牙",
@@ -374,7 +374,7 @@
"432": "克羅澤群島",
"433": "凱爾蓋朗群島",
"434": "斷裂海嶺",
"435": "印度洋洋中脊東南部",
"435": "印度洋東南海嶺",
"436": "凱爾蓋朗海台南部",
"437": "澳大利亞以南",
"438": "沙斯卡寸旺省",
@@ -385,18 +385,18 @@
"442": "哈得遜海峽",
"443": "魁北克省北部",
"444": "戴維斯海峽",
"445": "紐芬蘭與拉布拉多省拉布拉多",
"445": "拉布拉多",
"446": "拉布拉多海",
"447": "魁北克省南部",
"448": "魁北克省加斯佩半島",
"448": "加斯佩半島",
"449": "魁北克省東部",
"45": "加利福尼亞—下加利福尼亞邊境",
"450": "魁北克省安蒂科斯蒂島",
"450": "安蒂科斯蒂島",
"451": "新不倫瑞克省",
"452": "新斯科舍省",
"453": "愛德華王子島省",
"454": "聖勞倫斯灣",
"455": "紐芬蘭與拉布拉多省紐芬蘭",
"455": "紐芬蘭",
"456": "蒙大拿",
"457": "愛達荷東部",
"458": "希伯根湖",
@@ -507,7 +507,7 @@
"552": "利比亞",
"553": "埃及",
"554": "紅海",
"555": "沙特阿拉伯西部",
"555": "阿拉伯半島西部",
"556": "乍得",
"557": "蘇丹",
"558": "埃塞俄比亞",
@@ -588,11 +588,11 @@
"625": "托克勞",
"626": "庫克群島北部",
"627": "庫克群島",
"628": "法屬波利尼西亞社會群島",
"629": "法屬波利尼西亞土布艾群島",
"628": "社會群島",
"629": "土布艾群島",
"63": "墨西哥近海",
"630": "法屬波利尼西亞馬克薩斯群島",
"631": "法屬波利尼西亞土阿莫土群島",
"630": "馬克薩斯群島",
"631": "土阿莫土群島",
"632": "南太平洋",
"633": "羅蒙諾索夫海嶺",
"634": "北冰洋",
@@ -648,7 +648,7 @@
"68": "恰帕斯近海",
"680": "格陵蘭島西部",
"681": "巴芬灣",
"682": "努納武特巴芬島",
"682": "巴芬島",
"683": "太平洋中部東南部",
"684": "東太平洋海隆南部",
"685": "復活節島",
@@ -678,7 +678,7 @@
"706": "蘇門答臘北部",
"707": "馬來西亞馬來半島",
"708": "泰國灣",
"709": "阿富汗部",
"709": "阿富汗東南部",
"71": "危地馬拉沿岸",
"710": "巴基斯坦",
"711": "克什米爾西南部",
@@ -769,8 +769,10 @@
"KI": "基里巴斯",
"MacroregionFormat": "{0}{1}",
"MX": "墨西哥",
"NC": "新喀里多尼亞",
"NO": "挪威",
"NZ": "新西蘭",
"PF": "法屬玻里尼西亞",
"PG": "巴布亞新畿內亞",
"PT": "葡萄牙",
"RU": "俄羅斯",

View File

@@ -11,15 +11,15 @@
"105": "厄瓜多沿岸",
"106": "哥倫比亞—厄瓜多邊境",
"107": "厄瓜多",
"108": "秘魯近海",
"109": "秘魯沿岸",
"108": "秘魯北部近海",
"109": "秘魯北部沿岸",
"11": "布里斯托爾灣",
"110": "秘魯—厄瓜多邊境",
"111": "秘魯北部",
"112": "秘魯—巴西邊境",
"113": "巴西亞馬遜",
"114": "秘魯中部近海",
"115": "秘魯中部沿岸",
"114": "秘魯近海",
"115": "秘魯沿岸",
"116": "秘魯中部",
"117": "秘魯南部",
"118": "秘魯—玻利維亞邊境",
@@ -99,7 +99,7 @@
"185": "萬那杜附近",
"186": "萬那杜",
"187": "新喀里多尼亞",
"188": "新喀里多尼亞羅雅提群島",
"188": "羅雅提群島",
"189": "羅雅提群島東南",
"19": "阿拉斯加東南部",
"190": "新愛爾蘭",
@@ -232,7 +232,7 @@
"304": "喀什米爾—西藏邊境",
"305": "西藏西部—印度邊境",
"306": "中國西藏",
"307": "中國四川",
"307": "中國四川、重慶",
"308": "印度北部",
"309": "尼泊爾—印度邊境",
"31": "奧勒岡沿岸",
@@ -250,7 +250,7 @@
"320": "吉爾吉斯—新疆邊境",
"321": "中國新疆南部",
"322": "中國甘肅",
"323": "中國內蒙古西部",
"323": "中國內蒙古西部、寧夏",
"324": "喀什米爾—新疆邊境",
"325": "中國青海",
"326": "西伯利亞西南部",
@@ -297,7 +297,7 @@
"363": "希臘—保加利亞邊境",
"364": "希臘",
"365": "愛琴海",
"366": "土耳其東部",
"366": "土耳其",
"367": "喬治亞—亞美尼亞—土耳其邊境",
"368": "希臘南部",
"369": "希臘佐澤卡尼索斯群島",
@@ -306,7 +306,7 @@
"371": "地中海東部",
"372": "賽普勒斯",
"373": "死海",
"374": "敘利亞",
"374": "約旦—敘利亞",
"375": "伊拉克",
"376": "葡萄牙",
"377": "西班牙",
@@ -374,7 +374,7 @@
"432": "克羅澤群島",
"433": "凱爾蓋朗群島",
"434": "斷裂海嶺",
"435": "印度洋洋中脊東南部",
"435": "印度洋東南海嶺",
"436": "凱爾蓋朗海台南部",
"437": "澳大利亞以南",
"438": "薩克其萬省",
@@ -385,18 +385,18 @@
"442": "哈得遜海峽",
"443": "魁北克省北部",
"444": "戴維斯海峽",
"445": "紐芬蘭與拉布拉多省拉布拉多",
"445": "拉布拉多",
"446": "拉布拉多海",
"447": "魁北克省南部",
"448": "魁北克省加斯佩半島",
"448": "加斯佩半島",
"449": "魁北克省東部",
"45": "加利福尼亞—下加利福尼亞邊境",
"450": "魁北克省安蒂科斯蒂島",
"450": "安蒂科斯蒂島",
"451": "新不倫瑞克省",
"452": "新斯科舍省",
"453": "愛德華王子島省",
"454": "聖勞倫斯灣",
"455": "紐芬蘭與拉布拉多省紐芬蘭",
"455": "紐芬蘭",
"456": "蒙大拿",
"457": "愛達荷東部",
"458": "希伯根湖",
@@ -507,7 +507,7 @@
"552": "利比亞",
"553": "埃及",
"554": "紅海",
"555": "沙烏地阿拉伯西部",
"555": "阿拉伯半島西部",
"556": "查德",
"557": "蘇丹",
"558": "衣索比亞",
@@ -588,11 +588,11 @@
"625": "托克勞",
"626": "庫克群島北部",
"627": "庫克群島",
"628": "法屬玻里尼西亞社會群島",
"629": "法屬玻里尼西亞土布艾群島",
"628": "社會群島",
"629": "土布艾群島",
"63": "墨西哥近海",
"630": "法屬玻里尼西亞馬克薩斯群島",
"631": "法屬玻里尼西亞土阿莫土群島",
"630": "馬克薩斯群島",
"631": "土阿莫土群島",
"632": "南太平洋",
"633": "羅蒙諾索夫海嶺",
"634": "北冰洋",
@@ -648,7 +648,7 @@
"68": "恰帕斯近海",
"680": "格陵蘭島西部",
"681": "巴芬灣",
"682": "努納武特巴芬島",
"682": "巴芬島",
"683": "太平洋中部東南部",
"684": "東太平洋海隆南部",
"685": "復活節島",
@@ -678,7 +678,7 @@
"706": "蘇門答臘北部",
"707": "馬來西亞馬來半島",
"708": "泰國灣",
"709": "阿富汗部",
"709": "阿富汗東南部",
"71": "瓜地馬拉沿岸",
"710": "巴基斯坦",
"711": "喀什米爾西南部",
@@ -769,8 +769,10 @@
"KI": "吉里巴斯",
"MacroregionFormat": "{0}{1}",
"MX": "墨西哥",
"NC": "新喀里多尼亞",
"NO": "挪威",
"NZ": "紐西蘭",
"PF": "法屬玻里尼西亞",
"PG": "巴布亞紐幾內亞",
"PT": "葡萄牙",
"RU": "俄羅斯",

View File

@@ -11,15 +11,15 @@
"105": "厄瓜多尔沿岸",
"106": "哥伦比亚—厄瓜多尔边境",
"107": "厄瓜多尔",
"108": "秘鲁近海",
"109": "秘鲁沿岸",
"108": "秘鲁北部近海",
"109": "秘鲁北部沿岸",
"11": "布里斯托尔湾",
"110": "秘鲁—厄瓜多尔边境",
"111": "秘鲁北部",
"112": "秘鲁—巴西边境",
"113": "巴西亚马孙",
"114": "秘鲁中部近海",
"115": "秘鲁中部沿岸",
"114": "秘鲁近海",
"115": "秘鲁沿岸",
"116": "秘鲁中部",
"117": "秘鲁南部",
"118": "秘鲁—玻利维亚边境",
@@ -99,7 +99,7 @@
"185": "瓦努阿图附近",
"186": "瓦努阿图",
"187": "新喀里多尼亚",
"188": "新喀里多尼亚洛亚蒂群岛",
"188": "洛亚蒂群岛",
"189": "洛亚蒂群岛东南",
"19": "阿拉斯加东南部",
"190": "新爱尔兰",
@@ -232,7 +232,7 @@
"304": "克什米尔—西藏边境",
"305": "西藏西部—印度边境",
"306": "中国西藏",
"307": "中国四川",
"307": "中国四川、重庆",
"308": "印度北部",
"309": "尼泊尔—印度边境",
"31": "俄勒冈沿岸",
@@ -250,7 +250,7 @@
"320": "吉尔吉斯斯坦—新疆边境",
"321": "中国新疆南部",
"322": "中国甘肃",
"323": "中国内蒙古西部",
"323": "中国内蒙古西部、宁夏",
"324": "克什米尔—新疆边境",
"325": "中国青海",
"326": "西伯利亚西南部",
@@ -297,7 +297,7 @@
"363": "希腊—保加利亚边境",
"364": "希腊",
"365": "爱琴海",
"366": "土耳其东部",
"366": "土耳其",
"367": "格鲁吉亚—亚美尼亚—土耳其边境",
"368": "希腊南部",
"369": "希腊佐泽卡尼索斯群岛",
@@ -306,7 +306,7 @@
"371": "地中海东部",
"372": "塞浦路斯",
"373": "死海",
"374": "叙利亚",
"374": "约旦—叙利亚",
"375": "伊拉克",
"376": "葡萄牙",
"377": "西班牙",
@@ -374,7 +374,7 @@
"432": "克罗泽群岛",
"433": "凯尔盖朗群岛",
"434": "断裂海岭",
"435": "印度洋洋中脊东南部",
"435": "印度洋东南海岭",
"436": "凯尔盖朗海台南部",
"437": "澳大利亚以南",
"438": "萨斯喀彻温省",
@@ -385,18 +385,18 @@
"442": "哈得孙海峡",
"443": "魁北克省北部",
"444": "戴维斯海峡",
"445": "纽芬兰与拉布拉多省拉布拉多",
"445": "拉布拉多",
"446": "拉布拉多海",
"447": "魁北克省南部",
"448": "魁北克省加斯佩半岛",
"448": "加斯佩半岛",
"449": "魁北克省东部",
"45": "加利福尼亚—下加利福尼亚边境",
"450": "魁北克省安蒂科斯蒂岛",
"450": "安蒂科斯蒂岛",
"451": "新不伦瑞克省",
"452": "新斯科舍省",
"453": "爱德华王子岛省",
"454": "圣劳伦斯湾",
"455": "纽芬兰与拉布拉多省纽芬兰",
"455": "纽芬兰",
"456": "蒙大拿",
"457": "爱达荷东部",
"458": "希伯根湖",
@@ -507,7 +507,7 @@
"552": "利比亚",
"553": "埃及",
"554": "红海",
"555": "沙特阿拉伯西部",
"555": "阿拉伯半岛西部",
"556": "乍得",
"557": "苏丹",
"558": "埃塞俄比亚",
@@ -588,11 +588,11 @@
"625": "托克劳",
"626": "库克群岛北部",
"627": "库克群岛",
"628": "法属波利尼西亚社会群岛",
"629": "法属波利尼西亚土布艾群岛",
"628": "社会群岛",
"629": "土布艾群岛",
"63": "墨西哥近海",
"630": "法属波利尼西亚马克萨斯群岛",
"631": "法属波利尼西亚土阿莫土群岛",
"630": "马克萨斯群岛",
"631": "土阿莫土群岛",
"632": "南太平洋",
"633": "罗蒙诺索夫海岭",
"634": "北冰洋",
@@ -648,7 +648,7 @@
"68": "恰帕斯近海",
"680": "格陵兰岛西部",
"681": "巴芬湾",
"682": "努纳武特巴芬岛",
"682": "巴芬岛",
"683": "太平洋中部东南部",
"684": "东太平洋海隆南部",
"685": "复活节岛",
@@ -678,7 +678,7 @@
"706": "苏门答腊北部",
"707": "马来西亚马来半岛",
"708": "泰国湾",
"709": "阿富汗部",
"709": "阿富汗东南部",
"71": "危地马拉沿岸",
"710": "巴基斯坦",
"711": "克什米尔西南部",
@@ -769,8 +769,10 @@
"KI": "基里巴斯",
"MacroregionFormat": "{0}{1}",
"MX": "墨西哥",
"NC": "新喀里多尼亚",
"NO": "挪威",
"NZ": "新西兰",
"PF": "法属波利尼西亚",
"PG": "巴布亚新几内亚",
"PT": "葡萄牙",
"RU": "俄罗斯",

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 04c265355b02a924eb0c82f0d1be0676
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -134,7 +134,7 @@ PlayerSettings:
16:10: 1
16:9: 1
Others: 1
bundleVersion: 0.0.4
bundleVersion: 0.0.5
preloadedAssets: []
metroInputSource: 0
wsaTransparentSwapchain: 0