Compare commits
5 Commits
0.0.6
...
a8f46113d4
| Author | SHA1 | Date | |
|---|---|---|---|
| a8f46113d4 | |||
| 99736f114d | |||
| 4d1a008106 | |||
| 9318cbca4e | |||
| a162f345c4 |
@@ -1,19 +1,60 @@
|
|||||||
using Cryville.Common.Font;
|
using Cryville.Common.Font;
|
||||||
|
using Cryville.Common.Logging;
|
||||||
using Cryville.Common.Unity.UI;
|
using Cryville.Common.Unity.UI;
|
||||||
using Cryville.Culture;
|
using Cryville.Culture;
|
||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using Logger = Cryville.Common.Logging.Logger;
|
||||||
|
|
||||||
namespace Cryville.EEW.Unity {
|
namespace Cryville.EEW.Unity {
|
||||||
class App {
|
class App {
|
||||||
|
public static string AppDataPath { get; private set; }
|
||||||
|
|
||||||
|
public static Logger MainLogger { get; private set; }
|
||||||
|
static FileStream _logFileStream;
|
||||||
|
static StreamLoggerListener _logWriter;
|
||||||
|
|
||||||
static bool _init;
|
static bool _init;
|
||||||
public static void Init() {
|
public static void Init() {
|
||||||
if (_init) return;
|
if (_init) return;
|
||||||
_init = true;
|
_init = true;
|
||||||
|
|
||||||
|
AppDataPath = Application.persistentDataPath;
|
||||||
|
|
||||||
|
var logPath = Directory.CreateDirectory(Path.Combine(AppDataPath, "logs"));
|
||||||
|
_logFileStream = new FileStream(
|
||||||
|
Path.Combine(
|
||||||
|
logPath.FullName,
|
||||||
|
string.Format(
|
||||||
|
CultureInfo.InvariantCulture,
|
||||||
|
"{0}.log",
|
||||||
|
DateTimeOffset.UtcNow.ToString("yyyyMMddHHmmssfff", CultureInfo.InvariantCulture)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
FileMode.Create, FileAccess.Write, FileShare.Read
|
||||||
|
);
|
||||||
|
_logWriter = new StreamLoggerListener(_logFileStream) { AutoFlush = true };
|
||||||
|
MainLogger = new Logger();
|
||||||
|
var listener = new InstantLoggerListener();
|
||||||
|
listener.Log += MainLogger.Log;
|
||||||
|
MainLogger.AddListener(_logWriter);
|
||||||
|
Application.logMessageReceivedThreaded += OnInternalLog;
|
||||||
|
|
||||||
|
MainLogger.Log(1, "App", null, "App Version: {0}", Application.version);
|
||||||
|
MainLogger.Log(1, "App", null, "Unity Version: {0}", Application.unityVersion);
|
||||||
|
MainLogger.Log(1, "App", null, "Operating System: {0}, Unity = {1}, Family = {2}", Environment.OSVersion, SystemInfo.operatingSystem, SystemInfo.operatingSystemFamily);
|
||||||
|
MainLogger.Log(1, "App", null, "Platform: Build = {0}, Unity = {1}", PlatformConfig.Name, Application.platform);
|
||||||
|
MainLogger.Log(1, "App", null, "Culture: {0}, UI = {1}, Unity = {2}", SharedCultures.CurrentCulture, SharedCultures.CurrentUICulture, Application.systemLanguage);
|
||||||
|
MainLogger.Log(1, "App", null, "Device: Model = {0}, Type = {1}", SystemInfo.deviceModel, SystemInfo.deviceType);
|
||||||
|
MainLogger.Log(1, "App", null, "Graphics: Name = {0}, Type = {1}, Vendor = {2}, Version = {3}", SystemInfo.graphicsDeviceName, SystemInfo.graphicsDeviceType, SystemInfo.graphicsDeviceVendor, SystemInfo.graphicsDeviceVersion);
|
||||||
|
MainLogger.Log(1, "App", null, "Processor: Count = {0}, Frequency = {1}MHz, Type = {2}", SystemInfo.processorCount, SystemInfo.processorFrequency, SystemInfo.processorType);
|
||||||
|
|
||||||
|
MainLogger.Log(1, "App", null, "Initializing font manager");
|
||||||
foreach (var res in Resources.LoadAll<TextAsset>("cldr/common/validity")) {
|
foreach (var res in Resources.LoadAll<TextAsset>("cldr/common/validity")) {
|
||||||
IdValidity.Load(LoadXmlDocument(res));
|
IdValidity.Load(LoadXmlDocument(res));
|
||||||
}
|
}
|
||||||
@@ -25,7 +66,10 @@ namespace Cryville.EEW.Unity {
|
|||||||
};
|
};
|
||||||
TMPLocalizedText.DefaultShader = Resources.Load<Shader>(PlatformConfig.TextShader);
|
TMPLocalizedText.DefaultShader = Resources.Load<Shader>(PlatformConfig.TextShader);
|
||||||
|
|
||||||
|
MainLogger.Log(1, "App", null, "Loading config");
|
||||||
SharedSettings.Instance.Init();
|
SharedSettings.Instance.Init();
|
||||||
|
|
||||||
|
MainLogger.Log(1, "App", null, "Initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
static readonly Encoding _encoding = new UTF8Encoding(false, true);
|
static readonly Encoding _encoding = new UTF8Encoding(false, true);
|
||||||
@@ -40,5 +84,16 @@ namespace Cryville.EEW.Unity {
|
|||||||
using var reader = XmlReader.Create(stream, _xmlSettings);
|
using var reader = XmlReader.Create(stream, _xmlSettings);
|
||||||
return XDocument.Load(reader);
|
return XDocument.Load(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void OnInternalLog(string condition, string stackTrace, LogType type) {
|
||||||
|
var l = type switch {
|
||||||
|
LogType.Log => 1,
|
||||||
|
LogType.Assert => 2,
|
||||||
|
LogType.Warning => 3,
|
||||||
|
LogType.Error or LogType.Exception => 4,
|
||||||
|
_ => 1,
|
||||||
|
};
|
||||||
|
MainLogger.Log(l, "Internal", null, "{0}\n{1}", condition, stackTrace);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("0.0.6")]
|
[assembly: AssemblyVersion("0.0.7")]
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
[JsonDerivedType(typeof(BMKGOpenDataEventSourceConfig), "BMKGOpenData")]
|
[JsonDerivedType(typeof(BMKGOpenDataEventSourceConfig), "BMKGOpenData")]
|
||||||
[JsonDerivedType(typeof(CWAOpenDataEventSourceConfig), "CWAOpenData")]
|
[JsonDerivedType(typeof(CWAOpenDataEventSourceConfig), "CWAOpenData")]
|
||||||
[JsonDerivedType(typeof(EMSCRealTimeEventSourceConfig), "EMSCRealTime")]
|
[JsonDerivedType(typeof(EMSCRealTimeEventSourceConfig), "EMSCRealTime")]
|
||||||
|
[JsonDerivedType(typeof(GeoNetEventSourceConfig), "GeoNet")]
|
||||||
[JsonDerivedType(typeof(GlobalQuakeServerEventSourceConfig), "GlobalQuakeServer")]
|
[JsonDerivedType(typeof(GlobalQuakeServerEventSourceConfig), "GlobalQuakeServer")]
|
||||||
[JsonDerivedType(typeof(GlobalQuakeServer15EventSourceConfig), "GlobalQuakeServer15")]
|
[JsonDerivedType(typeof(GlobalQuakeServer15EventSourceConfig), "GlobalQuakeServer15")]
|
||||||
[JsonDerivedType(typeof(JMAAtomEventSourceConfig), "JMAAtom")]
|
[JsonDerivedType(typeof(JMAAtomEventSourceConfig), "JMAAtom")]
|
||||||
@@ -66,6 +67,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
record BMKGOpenDataEventSourceConfig([property: JsonRequired] string[] Subtypes) : EventSourceConfig;
|
record BMKGOpenDataEventSourceConfig([property: JsonRequired] string[] Subtypes) : EventSourceConfig;
|
||||||
record CWAOpenDataEventSourceConfig([property: JsonRequired] string Subtype, [property: JsonRequired] string Token) : EventSourceConfig;
|
record CWAOpenDataEventSourceConfig([property: JsonRequired] string Subtype, [property: JsonRequired] string Token) : EventSourceConfig;
|
||||||
record EMSCRealTimeEventSourceConfig() : EventSourceConfig;
|
record EMSCRealTimeEventSourceConfig() : EventSourceConfig;
|
||||||
|
record GeoNetEventSourceConfig(int MinimumMMI = 3, bool DoGetFullHistory = false, bool DoGetStrongMotionInfo = true) : EventSourceConfig;
|
||||||
record GlobalQuakeServerEventSourceConfig([property: JsonRequired] string Host, int Port = 38000) : EventSourceConfig;
|
record GlobalQuakeServerEventSourceConfig([property: JsonRequired] string Host, int Port = 38000) : EventSourceConfig;
|
||||||
record GlobalQuakeServer15EventSourceConfig(string Host, int Port = 38000) : GlobalQuakeServerEventSourceConfig(Host, Port);
|
record GlobalQuakeServer15EventSourceConfig(string Host, int Port = 38000) : GlobalQuakeServerEventSourceConfig(Host, Port);
|
||||||
record JMAAtomEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig;
|
record JMAAtomEventSourceConfig(IReadOnlyCollection<string> Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using Cryville.EEW.BMKGOpenData.Map;
|
|||||||
using Cryville.EEW.Core;
|
using Cryville.EEW.Core;
|
||||||
using Cryville.EEW.CWAOpenData.Map;
|
using Cryville.EEW.CWAOpenData.Map;
|
||||||
using Cryville.EEW.EMSC.Map;
|
using Cryville.EEW.EMSC.Map;
|
||||||
|
using Cryville.EEW.GeoNet.Map;
|
||||||
using Cryville.EEW.GlobalQuake.Map;
|
using Cryville.EEW.GlobalQuake.Map;
|
||||||
using Cryville.EEW.JMAAtom.Map;
|
using Cryville.EEW.JMAAtom.Map;
|
||||||
using Cryville.EEW.Map;
|
using Cryville.EEW.Map;
|
||||||
@@ -135,6 +136,9 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
new CWATsunamiMapGenerator(),
|
new CWATsunamiMapGenerator(),
|
||||||
new EMSCRealTimeEventMapGenerator(),
|
new EMSCRealTimeEventMapGenerator(),
|
||||||
new FujianEEWMapGenerator(),
|
new FujianEEWMapGenerator(),
|
||||||
|
new GeoNetQuakeHistoryMapGenerator(),
|
||||||
|
new GeoNetQuakeMapGenerator(),
|
||||||
|
new GeoNetStrongMapGenerator(),
|
||||||
new GlobalQuakeMapViewGenerator(),
|
new GlobalQuakeMapViewGenerator(),
|
||||||
new JMAAtomMapGenerator(),
|
new JMAAtomMapGenerator(),
|
||||||
new JMAEEWMapGenerator(),
|
new JMAEEWMapGenerator(),
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
_req.SendWebRequest();
|
_req.SendWebRequest();
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
Debug.LogException(ex);
|
App.MainLogger.Log(4, "Map", null, "An error occurred when loading map tile {0}: {1}", _localFile, ex);
|
||||||
}
|
}
|
||||||
_isReady = false;
|
_isReady = false;
|
||||||
}
|
}
|
||||||
@@ -51,7 +51,7 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
_sprite = Sprite.Create(_tex, new Rect(0, 0, _tex.width, _tex.height), Vector2.zero, _tex.height, 0, SpriteMeshType.FullRect, Vector4.zero, false);
|
_sprite = Sprite.Create(_tex, new Rect(0, 0, _tex.width, _tex.height), Vector2.zero, _tex.height, 0, SpriteMeshType.FullRect, Vector4.zero, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Debug.LogError(_texHandler.error);
|
App.MainLogger.Log(4, "Map", null, "An error occurred when loading map tile {0}: {1}", _localFile, _texHandler.error);
|
||||||
_localFile.Delete();
|
_localFile.Delete();
|
||||||
}
|
}
|
||||||
_req.Dispose();
|
_req.Dispose();
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
};
|
};
|
||||||
|
|
||||||
protected override Stream Open(string path) {
|
protected override Stream Open(string path) {
|
||||||
|
App.MainLogger.Log(0, "Audio", null, "Opening audio file {0}", path);
|
||||||
path = Path.Combine(Application.streamingAssetsPath, "Sounds", path + ".ogg");
|
path = Path.Combine(Application.streamingAssetsPath, "Sounds", path + ".ogg");
|
||||||
if (!File.Exists(path)) return null;
|
if (!File.Exists(path)) return null;
|
||||||
return new FileStream(path, FileMode.Open, FileAccess.Read);
|
return new FileStream(path, FileMode.Open, FileAccess.Read);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
readonly ISpVoice _voice;
|
readonly ISpVoice _voice;
|
||||||
|
|
||||||
public TTSWorker() : base(CreateSoundPlayer()) {
|
public TTSWorker() : base(CreateSoundPlayer()) {
|
||||||
|
App.MainLogger.Log(1, "Audio", null, "Initializing TTS worker");
|
||||||
try {
|
try {
|
||||||
_voice = new SpVoiceClass();
|
_voice = new SpVoiceClass();
|
||||||
}
|
}
|
||||||
@@ -16,10 +17,12 @@ namespace Cryville.EEW.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static SoundPlayer CreateSoundPlayer() {
|
static SoundPlayer CreateSoundPlayer() {
|
||||||
|
App.MainLogger.Log(1, "Audio", null, "Creating sound player");
|
||||||
try {
|
try {
|
||||||
return new SoundPlayer();
|
return new SoundPlayer();
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException) {
|
catch (InvalidOperationException ex) {
|
||||||
|
App.MainLogger.Log(3, "Audio", null, "An error occurred when creating sound player: {0}", ex);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,11 +40,13 @@ namespace Cryville.EEW.Unity {
|
|||||||
(uint)(SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak),
|
(uint)(SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak),
|
||||||
out _
|
out _
|
||||||
);
|
);
|
||||||
|
App.MainLogger.Log(0, "Audio", null, "TTS ({0}): {1}", culture, content);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void StopCurrent() {
|
protected override void StopCurrent() {
|
||||||
if (_voice == null) return;
|
if (_voice == null) return;
|
||||||
|
App.MainLogger.Log(0, "Audio", null, "TTS stopping current");
|
||||||
_voice.Skip("SENTENCE", int.MaxValue, out _);
|
_voice.Skip("SENTENCE", int.MaxValue, out _);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ using Cryville.EEW.CWAOpenData;
|
|||||||
using Cryville.EEW.CWAOpenData.Model;
|
using Cryville.EEW.CWAOpenData.Model;
|
||||||
using Cryville.EEW.CWAOpenData.TTS;
|
using Cryville.EEW.CWAOpenData.TTS;
|
||||||
using Cryville.EEW.EMSC;
|
using Cryville.EEW.EMSC;
|
||||||
|
using Cryville.EEW.GeoNet;
|
||||||
|
using Cryville.EEW.GeoNet.TTS;
|
||||||
using Cryville.EEW.GlobalQuake;
|
using Cryville.EEW.GlobalQuake;
|
||||||
using Cryville.EEW.JMAAtom;
|
using Cryville.EEW.JMAAtom;
|
||||||
using Cryville.EEW.JMAAtom.TTS;
|
using Cryville.EEW.JMAAtom.TTS;
|
||||||
@@ -58,6 +60,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Start() {
|
void Start() {
|
||||||
|
App.MainLogger.Log(1, "App", null, "Initializing localized resources manager");
|
||||||
LocalizedResources.Init(new LocalizedResourcesManager());
|
LocalizedResources.Init(new LocalizedResourcesManager());
|
||||||
RegisterViewModelGenerators(_worker);
|
RegisterViewModelGenerators(_worker);
|
||||||
RegisterTTSMessageGenerators(_worker);
|
RegisterTTSMessageGenerators(_worker);
|
||||||
@@ -71,6 +74,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
_worker.Reported += OnReported;
|
_worker.Reported += OnReported;
|
||||||
_grouper.GroupUpdated += OnGroupUpdated;
|
_grouper.GroupUpdated += OnGroupUpdated;
|
||||||
_grouper.GroupRemoved += OnGroupRemoved;
|
_grouper.GroupRemoved += OnGroupRemoved;
|
||||||
|
App.MainLogger.Log(1, "App", null, "Worker ready");
|
||||||
Task.Run(() => GatewayVerify(_cancellationTokenSource.Token)).ContinueWith(task => {
|
Task.Run(() => GatewayVerify(_cancellationTokenSource.Token)).ContinueWith(task => {
|
||||||
if (task.IsFaulted) {
|
if (task.IsFaulted) {
|
||||||
OnReported(this, new() { Title = task.Exception.Message });
|
OnReported(this, new() { Title = task.Exception.Message });
|
||||||
@@ -100,6 +104,9 @@ namespace Cryville.EEW.Unity {
|
|||||||
worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator());
|
worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new EMSCRealTimeEventRVMGenerator());
|
worker.RegisterViewModelGenerator(new EMSCRealTimeEventRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new FujianEEWRVMGenerator());
|
worker.RegisterViewModelGenerator(new FujianEEWRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new GeoNetQuakeHistoryRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new GeoNetQuakeRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new GeoNetStrongRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator());
|
worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator());
|
worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator());
|
worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator());
|
||||||
@@ -117,6 +124,9 @@ namespace Cryville.EEW.Unity {
|
|||||||
worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new FujianEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new FujianEEWTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new GeoNetQuakeHistoryTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new GeoNetQuakeTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new GeoNetStrongTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator());
|
||||||
@@ -125,6 +135,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
|
|
||||||
bool _verified;
|
bool _verified;
|
||||||
void BuildWorkers() {
|
void BuildWorkers() {
|
||||||
|
App.MainLogger.Log(1, "App", null, "Building workers");
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
_worker.AddWorker(new WolfxWorker(new Uri("ws://localhost:9995/wolfx")));
|
_worker.AddWorker(new WolfxWorker(new Uri("ws://localhost:9995/wolfx")));
|
||||||
_worker.AddWorker(new JMAAtomWorker(new Uri("http://localhost:9095/eqvol.xml")));
|
_worker.AddWorker(new JMAAtomWorker(new Uri("http://localhost:9095/eqvol.xml")));
|
||||||
@@ -139,25 +150,26 @@ namespace Cryville.EEW.Unity {
|
|||||||
#else
|
#else
|
||||||
foreach (var source in SharedSettings.Instance.EventSources) {
|
foreach (var source in SharedSettings.Instance.EventSources) {
|
||||||
_worker.AddWorker(source switch {
|
_worker.AddWorker(source switch {
|
||||||
BMKGOpenDataEventSourceConfig bmkgOpenData => BuildBMKGOpenDataWorkerUris(new BMKGOpenDataWorker(new("https://data.bmkg.go.id/DataMKG/TEWS/autogempa.json")), bmkgOpenData),
|
BMKGOpenDataEventSourceConfig bmkgOpenData => BuildBMKGOpenDataWorkerUris(new(new("https://data.bmkg.go.id/DataMKG/TEWS/autogempa.json")), bmkgOpenData),
|
||||||
CWAOpenDataEventSourceConfig cwaOpenData => cwaOpenData.Subtype switch {
|
CWAOpenDataEventSourceConfig cwaOpenData => cwaOpenData.Subtype switch {
|
||||||
"E-A0014-001" => new CWAReportWorker<Tsunami>(new Uri("https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0014-001"), cwaOpenData.Token, 1440, 17280),
|
"E-A0014-001" => new CWAReportWorker<Tsunami>(new("https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0014-001"), cwaOpenData.Token, 1440, 17280),
|
||||||
"E-A0015-001" => new CWAReportWorker<Earthquake>(new Uri("https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0015-001"), cwaOpenData.Token),
|
"E-A0015-001" => new CWAReportWorker<Earthquake>(new("https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0015-001"), cwaOpenData.Token),
|
||||||
"E-A0016-001" => new CWAReportWorker<Earthquake>(new Uri("https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0016-001"), cwaOpenData.Token),
|
"E-A0016-001" => new CWAReportWorker<Earthquake>(new("https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0016-001"), cwaOpenData.Token),
|
||||||
_ => throw new InvalidOperationException("Unknown CWA open data sub-type."),
|
_ => throw new InvalidOperationException("Unknown CWA open data sub-type."),
|
||||||
},
|
},
|
||||||
EMSCRealTimeEventSourceConfig => new EMSCRealTimeWorker(new("wss://www.seismicportal.eu/standing_order/websocket")),
|
EMSCRealTimeEventSourceConfig => new EMSCRealTimeWorker(new("wss://www.seismicportal.eu/standing_order/websocket")),
|
||||||
|
GeoNetEventSourceConfig geoNet => BuildGeoNetWorker(new(new("https://api.geonet.org.nz/quake"), new("https://api.geonet.org.nz/quake/history/index"), new("https://api.geonet.org.nz/intensity/strong/processed/index")), geoNet),
|
||||||
GlobalQuakeServer15EventSourceConfig gq => new GlobalQuakeWorker15(gq.Host, gq.Port),
|
GlobalQuakeServer15EventSourceConfig gq => new GlobalQuakeWorker15(gq.Host, gq.Port),
|
||||||
GlobalQuakeServerEventSourceConfig gq => new GlobalQuakeWorker(gq.Host, gq.Port),
|
GlobalQuakeServerEventSourceConfig gq => new GlobalQuakeWorker(gq.Host, gq.Port),
|
||||||
JMAAtomEventSourceConfig jmaAtom => BuildJMAAtomWorkerFilter(new JMAAtomWorker(new("https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml")), jmaAtom),
|
JMAAtomEventSourceConfig jmaAtom => BuildJMAAtomWorkerFilter(new(new("https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml")), jmaAtom),
|
||||||
NOAAEventSourceConfig noaaAtom => noaaAtom.Subtype switch {
|
NOAAEventSourceConfig noaaAtom => noaaAtom.Subtype switch {
|
||||||
"PAAQ" => new NOAAAtomWorker(new("https://www.tsunami.gov/events/xml/PAAQAtom.xml"), new("https://www.tsunami.gov/"), new("/php/esri.php?e=t", UriKind.Relative), "PAAQ"),
|
"PAAQ" => new NOAAAtomWorker(new("https://www.tsunami.gov/events/xml/PAAQAtom.xml"), new("https://www.tsunami.gov/"), new("/php/esri.php?e=t", UriKind.Relative), "PAAQ"),
|
||||||
"PHEB" => new NOAAAtomWorker(new("https://www.tsunami.gov/events/xml/PHEBAtom.xml"), new("https://www.tsunami.gov/"), new("/php/esri.php?e=t", UriKind.Relative), "PHEB"),
|
"PHEB" => new NOAAAtomWorker(new("https://www.tsunami.gov/events/xml/PHEBAtom.xml"), new("https://www.tsunami.gov/"), new("/php/esri.php?e=t", UriKind.Relative), "PHEB"),
|
||||||
_ => throw new InvalidOperationException("Unknown NOAA sub-type."),
|
_ => throw new InvalidOperationException("Unknown NOAA sub-type."),
|
||||||
},
|
},
|
||||||
UpdateCheckerEventSourceConfig => new UpdateCheckerWorker(typeof(Worker).Assembly.GetName().Version?.ToString(3) ?? "", "unity"),
|
UpdateCheckerEventSourceConfig => new UpdateCheckerWorker(typeof(Worker).Assembly.GetName().Version?.ToString(3) ?? "", "unity"),
|
||||||
USGSQuakeMLEventSourceConfig usgsQuakeML => BuildUSGSQuakeMLWorkerUri(new USGSQuakeMLWorker(new Uri("https://earthquake.usgs.gov/earthquakes/feed/v1.0/quakeml.php")), usgsQuakeML),
|
USGSQuakeMLEventSourceConfig usgsQuakeML => BuildUSGSQuakeMLWorkerUri(new USGSQuakeMLWorker(new("https://earthquake.usgs.gov/earthquakes/feed/v1.0/quakeml.php")), usgsQuakeML),
|
||||||
WolfxEventSourceConfig wolfx => BuildWolfxWorkerFilter(new WolfxWorker(new Uri("wss://ws-api.wolfx.jp/all_eew")), wolfx),
|
WolfxEventSourceConfig wolfx => BuildWolfxWorkerFilter(new WolfxWorker(new("wss://ws-api.wolfx.jp/all_eew")), wolfx),
|
||||||
_ => throw new InvalidOperationException("Unknown event source type."),
|
_ => throw new InvalidOperationException("Unknown event source type."),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -190,6 +202,12 @@ namespace Cryville.EEW.Unity {
|
|||||||
worker.SetDataUris(config.Subtypes.Select(i => new Uri(string.Format(CultureInfo.InvariantCulture, "https://data.bmkg.go.id/DataMKG/TEWS/{0}.json", i))));
|
worker.SetDataUris(config.Subtypes.Select(i => new Uri(string.Format(CultureInfo.InvariantCulture, "https://data.bmkg.go.id/DataMKG/TEWS/{0}.json", i))));
|
||||||
return worker;
|
return worker;
|
||||||
}
|
}
|
||||||
|
static GeoNetWorker BuildGeoNetWorker(GeoNetWorker worker, GeoNetEventSourceConfig pref) {
|
||||||
|
worker.MinimumMMI = pref.MinimumMMI;
|
||||||
|
worker.DoGetFullHistory = pref.DoGetFullHistory;
|
||||||
|
worker.DoGetStrongMotionInfo = pref.DoGetStrongMotionInfo;
|
||||||
|
return worker;
|
||||||
|
}
|
||||||
static USGSQuakeMLWorker BuildUSGSQuakeMLWorkerUri(USGSQuakeMLWorker worker, USGSQuakeMLEventSourceConfig config) {
|
static USGSQuakeMLWorker BuildUSGSQuakeMLWorkerUri(USGSQuakeMLWorker worker, USGSQuakeMLEventSourceConfig config) {
|
||||||
worker.SetFeedRelativeUri(new(string.Format(CultureInfo.InvariantCulture, "/earthquakes/feed/v1.0/summary/{0}.quakeml", config.Subtype), UriKind.Relative));
|
worker.SetFeedRelativeUri(new(string.Format(CultureInfo.InvariantCulture, "/earthquakes/feed/v1.0/summary/{0}.quakeml", config.Subtype), UriKind.Relative));
|
||||||
return worker;
|
return worker;
|
||||||
@@ -200,7 +218,7 @@ namespace Cryville.EEW.Unity {
|
|||||||
ReportViewModel _latestHistoryReport;
|
ReportViewModel _latestHistoryReport;
|
||||||
void OnReported(object sender, ReportViewModel e) {
|
void OnReported(object sender, ReportViewModel e) {
|
||||||
if (e.Model is Exception && e.Model is not SourceWorkerNetworkException)
|
if (e.Model is Exception && e.Model is not SourceWorkerNetworkException)
|
||||||
Debug.LogError(e);
|
App.MainLogger.Log(4, "Map", null, "Received an error from {0}: {1}", sender.GetType(), e.Model);
|
||||||
_grouper.Report(e);
|
_grouper.Report(e);
|
||||||
_ongoingReportManager.Report(e);
|
_ongoingReportManager.Report(e);
|
||||||
_uiActionQueue.Enqueue(() => {
|
_uiActionQueue.Enqueue(() => {
|
||||||
|
|||||||
BIN
Assets/Plugins/Cryville.Common.Logging.dll
Normal file
BIN
Assets/Plugins/Cryville.Common.Logging.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.Common.Logging.dll.meta
Normal file
33
Assets/Plugins/Cryville.Common.Logging.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7aa0c56ccfdaf9443b58f26bf40eed01
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
- first:
|
||||||
|
Windows Store Apps: WindowsStoreApps
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
185
Assets/Plugins/Cryville.Common.Logging.xml
Normal file
185
Assets/Plugins/Cryville.Common.Logging.xml
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<doc>
|
||||||
|
<assembly>
|
||||||
|
<name>Cryville.Common.Logging</name>
|
||||||
|
</assembly>
|
||||||
|
<members>
|
||||||
|
<member name="T:Cryville.Common.Logging.Logger">
|
||||||
|
<summary>
|
||||||
|
A logger.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.AddListener(Cryville.Common.Logging.LoggerListener)">
|
||||||
|
<summary>
|
||||||
|
Attaches a listener to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="listener">The logger listener.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.RemoveListener(Cryville.Common.Logging.LoggerListener)">
|
||||||
|
<summary>
|
||||||
|
Detaches a listener from the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="listener">The logger listener.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.Log(System.Int32,System.String,System.String,System.Object[])">
|
||||||
|
<summary>
|
||||||
|
Logs to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="format">The format string.</param>
|
||||||
|
<param name="args">The arguments for formatting.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.Log(System.Int32,System.String,System.IFormatProvider,System.String,System.Object[])">
|
||||||
|
<summary>
|
||||||
|
Logs to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="provider">The format provider.</param>
|
||||||
|
<param name="format">The format string.</param>
|
||||||
|
<param name="args">The arguments for formatting.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.Log(System.Int32,System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
Logs to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">The message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.Log(System.Int32,System.String,System.Char[])">
|
||||||
|
<summary>
|
||||||
|
Logs to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">An array of <see cref="T:System.Char" /> containing the message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.Log(System.Int32,System.String,System.Char[],System.Int32,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
Logs to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">An array of <see cref="T:System.Char" /> containing the message.</param>
|
||||||
|
<param name="index">A zero-based index of the first character of the message within <paramref name="message" />.</param>
|
||||||
|
<param name="length">The length of the message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.Logger.Log(System.Int32,System.String,System.Char*,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
Logs to the logger.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">A pointer to the first character of the message.</param>
|
||||||
|
<param name="length">The length of the message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.Common.Logging.LoggerListener">
|
||||||
|
<summary>
|
||||||
|
A logger listener.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.LoggerListener.Dispose(System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
Closes the logger listener and cleans up all the resources.
|
||||||
|
</summary>
|
||||||
|
<param name="disposing">Whether to clean up managed resources.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.LoggerListener.Dispose">
|
||||||
|
<summary>
|
||||||
|
Closes the logger listener.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.LoggerListener.OnLog(System.Int32,System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
Handles an incoming log.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">The message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.LoggerListener.OnLog(System.Int32,System.String,System.Char[],System.Int32,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
Handles an incoming log.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">An array of <see cref="T:System.Char" /> containing the message.</param>
|
||||||
|
<param name="index">A zero-based index of the first character of the message within <paramref name="message" />.</param>
|
||||||
|
<param name="length">The length of the message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.LoggerListener.OnLog(System.Int32,System.String,System.Char*,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
Handles an incoming log.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">A pointer to the first character of the message.</param>
|
||||||
|
<param name="length">The length of the message.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.Common.Logging.InstantLoggerListener">
|
||||||
|
<summary>
|
||||||
|
A <see cref="T:Cryville.Common.Logging.LoggerListener" /> that calls a callback function on log.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="E:Cryville.Common.Logging.InstantLoggerListener.Log">
|
||||||
|
<summary>
|
||||||
|
Occurs when a log is logged to the logger.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.InstantLoggerListener.OnLog(System.Int32,System.String,System.String)">
|
||||||
|
<inheritdoc />
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.Common.Logging.BufferedLoggerListener">
|
||||||
|
<summary>
|
||||||
|
A <see cref="T:Cryville.Common.Logging.LoggerListener" /> that buffers the logs for enumeration.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.BufferedLoggerListener.OnLog(System.Int32,System.String,System.String)">
|
||||||
|
<inheritdoc />
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.BufferedLoggerListener.Enumerate(Cryville.Common.Logging.LogHandler)">
|
||||||
|
<summary>
|
||||||
|
Enumerates the buffered logs.
|
||||||
|
</summary>
|
||||||
|
<param name="callback">The callback function to receive the logs.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.Common.Logging.StreamLoggerListener">
|
||||||
|
<summary>
|
||||||
|
A <see cref="T:Cryville.Common.Logging.LoggerListener" /> that writes logs into a stream.
|
||||||
|
</summary>
|
||||||
|
<param name="stream">The stream.</param>
|
||||||
|
<param name="encoding">The encoding.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.StreamLoggerListener.#ctor(System.IO.Stream,System.Text.Encoding)">
|
||||||
|
<summary>
|
||||||
|
A <see cref="T:Cryville.Common.Logging.LoggerListener" /> that writes logs into a stream.
|
||||||
|
</summary>
|
||||||
|
<param name="stream">The stream.</param>
|
||||||
|
<param name="encoding">The encoding.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.StreamLoggerListener.#ctor(System.IO.Stream)">
|
||||||
|
<summary>
|
||||||
|
Creates an instance of the <see cref="T:Cryville.Common.Logging.StreamLoggerListener" /> class.
|
||||||
|
</summary>
|
||||||
|
<param name="stream">The stream.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.Common.Logging.StreamLoggerListener.AutoFlush">
|
||||||
|
<summary>
|
||||||
|
Whether to flush the stream every time a log is written.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.Common.Logging.StreamLoggerListener.OnLog(System.Int32,System.String,System.String)">
|
||||||
|
<inheritdoc />
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.Common.Logging.LogHandler">
|
||||||
|
<summary>
|
||||||
|
Represents the method that will handle a log.
|
||||||
|
</summary>
|
||||||
|
<param name="level">The severity level.</param>
|
||||||
|
<param name="category">The category.</param>
|
||||||
|
<param name="message">The message.</param>
|
||||||
|
</member>
|
||||||
|
</members>
|
||||||
|
</doc>
|
||||||
7
Assets/Plugins/Cryville.Common.Logging.xml.meta
Normal file
7
Assets/Plugins/Cryville.Common.Logging.xml.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 72ded0675457e0348809193a9c1092b5
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
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.
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.
BIN
Assets/Plugins/Cryville.EEW.GeoNet.Map.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.GeoNet.Map.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.GeoNet.Map.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.GeoNet.Map.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9add703a85e306e41a5f1f424b9e5980
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
- first:
|
||||||
|
Windows Store Apps: WindowsStoreApps
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Plugins/Cryville.EEW.GeoNet.TTS.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.GeoNet.TTS.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.GeoNet.TTS.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.GeoNet.TTS.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1fa7d6d104052f447b49fc53f65d55cd
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
- first:
|
||||||
|
Windows Store Apps: WindowsStoreApps
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user