Compare commits
43 Commits
18312176d9
...
0.0.9
Author | SHA1 | Date | |
---|---|---|---|
130f880d5d | |||
cf6d76d4c0 | |||
4628db1d49 | |||
1eeaa4f728 | |||
309ee12b93 | |||
59335c9102 | |||
e182ebd53f | |||
65b158f387 | |||
9f844f2744 | |||
ae917a8e51 | |||
44a72d1a8f | |||
4758b65159 | |||
de3196d38a | |||
c2311fb7a4 | |||
7562be2c09 | |||
a8f46113d4 | |||
99736f114d | |||
4d1a008106 | |||
9318cbca4e | |||
a162f345c4 | |||
1af4afc7c6 | |||
a3efe939e8 | |||
5daee1a01a | |||
2d5d305528 | |||
8da46c0511 | |||
75b5d7708c | |||
5b2177a795 | |||
8cb33dca5f | |||
ae2e0af18a | |||
2ac5a3d4f0 | |||
5f78a1afde | |||
ef5cf78a03 | |||
b60e62af70 | |||
3e59fe1462 | |||
4b4bf5ed65 | |||
a4f78b3a95 | |||
074a58dabd | |||
a2ef175a81 | |||
915ba55c2e | |||
f154a2a468 | |||
c52d438d40 | |||
8d3f53ba13 | |||
1db25e62e7 |
@@ -2,7 +2,7 @@
|
|||||||
"name": "Cryville.Common",
|
"name": "Cryville.Common",
|
||||||
"rootNamespace": "",
|
"rootNamespace": "",
|
||||||
"references": [
|
"references": [
|
||||||
"GUID:da293eebbcb9a4947a212534c52d1a32"
|
"GUID:6055be8ebefd69e48b49212b09b47b2f"
|
||||||
],
|
],
|
||||||
"includePlatforms": [],
|
"includePlatforms": [],
|
||||||
"excludePlatforms": [],
|
"excludePlatforms": [],
|
||||||
|
@@ -56,7 +56,7 @@ namespace Cryville.Common.Unity.UI {
|
|||||||
const float _placeholderLength = 100;
|
const float _placeholderLength = 100;
|
||||||
int _firstIndex, _lastIndex;
|
int _firstIndex, _lastIndex;
|
||||||
readonly Stack<GameObject> _pool = new();
|
readonly Stack<GameObject> _pool = new();
|
||||||
void Update() {
|
void LateUpdate() {
|
||||||
int axis = (int)m_direction;
|
int axis = (int)m_direction;
|
||||||
int sign = m_direction == 0 ? 1 : -1;
|
int sign = m_direction == 0 ? 1 : -1;
|
||||||
float padding = axis == 0 ? m_padding.left : m_padding.top;
|
float padding = axis == 0 ? m_padding.left : m_padding.top;
|
||||||
|
@@ -23,6 +23,12 @@ namespace Cryville.Common.Unity.UI {
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
protected bool m_ChildScaleHeight;
|
protected bool m_ChildScaleHeight;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
protected bool m_ChildOverflowWidth;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
protected bool m_ChildOverflowHeight;
|
||||||
|
|
||||||
public override void CalculateLayoutInputHorizontal() {
|
public override void CalculateLayoutInputHorizontal() {
|
||||||
base.CalculateLayoutInputHorizontal();
|
base.CalculateLayoutInputHorizontal();
|
||||||
CalcAlongAxis(0);
|
CalcAlongAxis(0);
|
||||||
@@ -60,9 +66,10 @@ namespace Cryville.Common.Unity.UI {
|
|||||||
float size = rectTransform.rect.size[axis];
|
float size = rectTransform.rect.size[axis];
|
||||||
bool controlSize = (axis == 0) ? m_ChildControlWidth : m_ChildControlHeight;
|
bool controlSize = (axis == 0) ? m_ChildControlWidth : m_ChildControlHeight;
|
||||||
bool useScale = (axis == 0) ? m_ChildScaleWidth : m_ChildScaleHeight;
|
bool useScale = (axis == 0) ? m_ChildScaleWidth : m_ChildScaleHeight;
|
||||||
|
bool overflow = (axis == 0) ? m_ChildOverflowWidth : m_ChildOverflowHeight;
|
||||||
bool childForceExpandSize = (axis == 0) ? m_ChildForceExpandWidth : m_ChildForceExpandHeight;
|
bool childForceExpandSize = (axis == 0) ? m_ChildForceExpandWidth : m_ChildForceExpandHeight;
|
||||||
float alignmentOnAxis = GetAlignmentOnAxis(axis);
|
float alignmentOnAxis = GetAlignmentOnAxis(axis);
|
||||||
float innerSize = size - ((axis == 0) ? padding.horizontal : padding.vertical);
|
float innerSize = overflow ? float.PositiveInfinity : (size - ((axis == 0) ? padding.horizontal : padding.vertical));
|
||||||
RectTransform child = rectChildren[0];
|
RectTransform child = rectChildren[0];
|
||||||
GetChildSizes(child, axis, controlSize, childForceExpandSize, out var min2, out var preferred2, out var flexible2);
|
GetChildSizes(child, axis, controlSize, childForceExpandSize, out var min2, out var preferred2, out var flexible2);
|
||||||
float scaleFactor2 = useScale ? child.localScale[axis] : 1f;
|
float scaleFactor2 = useScale ? child.localScale[axis] : 1f;
|
||||||
|
@@ -6,8 +6,9 @@ using System.Globalization;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.TextCore;
|
||||||
using UnityEngine.TextCore.LowLevel;
|
using UnityEngine.TextCore.LowLevel;
|
||||||
using UnityEngine.TextCore.Text;
|
using AtlasPopulationMode = TMPro.AtlasPopulationMode;
|
||||||
|
|
||||||
namespace Cryville.Common.Unity.UI {
|
namespace Cryville.Common.Unity.UI {
|
||||||
[RequireComponent(typeof(TMP_Text))]
|
[RequireComponent(typeof(TMP_Text))]
|
||||||
@@ -16,7 +17,7 @@ namespace Cryville.Common.Unity.UI {
|
|||||||
public static FontMatcher FontMatcher;
|
public static FontMatcher FontMatcher;
|
||||||
public static int MaxFallbackCount = 4;
|
public static int MaxFallbackCount = 4;
|
||||||
|
|
||||||
static readonly Dictionary<CultureInfo, FontAsset> _cachedFonts = new();
|
static readonly Dictionary<CultureInfo, TMP_FontAsset> _cachedFonts = new();
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
Shader m_shader;
|
Shader m_shader;
|
||||||
@@ -46,7 +47,7 @@ namespace Cryville.Common.Unity.UI {
|
|||||||
if (MaxFallbackCount <= 0) break;
|
if (MaxFallbackCount <= 0) break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
font.fallbackFontAssetTable ??= new List<FontAsset>();
|
font.fallbackFontAssetTable ??= new List<TMP_FontAsset>();
|
||||||
font.fallbackFontAssetTable.Add(ifont);
|
font.fallbackFontAssetTable.Add(ifont);
|
||||||
if (font.fallbackFontAssetTable.Count >= MaxFallbackCount) break;
|
if (font.fallbackFontAssetTable.Count >= MaxFallbackCount) break;
|
||||||
}
|
}
|
||||||
@@ -58,23 +59,93 @@ namespace Cryville.Common.Unity.UI {
|
|||||||
Text.font = font;
|
Text.font = font;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MethodInfo _methodCreateFontAsset;
|
static TMP_FontAsset CreateFontAsset(string path, int index) => CreateFontAsset(path, index, 90, 9, GlyphRenderMode.SDFAA, 1024, 1024, AtlasPopulationMode.Dynamic);
|
||||||
static readonly object[] _paramsCreateFontAsset = new object[] { null, null, 90, 9, GlyphRenderMode.SDFAA, 1024, 1024, Type.Missing, Type.Missing };
|
|
||||||
static FontAsset CreateFontAsset(string path, int index) {
|
static readonly Lazy<FieldInfo> _f_m_Version = new(() => typeof(TMP_FontAsset).GetField("m_Version", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
if (_methodCreateFontAsset == null) {
|
static readonly Lazy<PropertyInfo> _p_atlasWidth = new(() => typeof(TMP_FontAsset).GetProperty("atlasWidth", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
_methodCreateFontAsset = typeof(FontAsset).GetMethod(
|
static readonly Lazy<PropertyInfo> _p_atlasHeight = new(() => typeof(TMP_FontAsset).GetProperty("atlasHeight", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
"CreateFontAsset", BindingFlags.Static | BindingFlags.NonPublic, null,
|
static readonly Lazy<PropertyInfo> _p_atlasPadding = new(() => typeof(TMP_FontAsset).GetProperty("atlasPadding", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
new Type[] {
|
static readonly Lazy<PropertyInfo> _p_atlasRenderMode = new(() => typeof(TMP_FontAsset).GetProperty("atlasRenderMode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
typeof(string), typeof(int), typeof(int), typeof(int),
|
static readonly Lazy<PropertyInfo> _p_freeGlyphRects = new(() => typeof(TMP_FontAsset).GetProperty("freeGlyphRects", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
typeof(GlyphRenderMode), typeof(int), typeof(int),
|
static readonly Lazy<PropertyInfo> _p_usedGlyphRects = new(() => typeof(TMP_FontAsset).GetProperty("usedGlyphRects", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
typeof(AtlasPopulationMode), typeof(bool)
|
|
||||||
},
|
static readonly Lazy<PropertyInfo> _p_ShaderRef_MobileBitmap = new(() => typeof(ShaderUtilities).GetProperty("ShaderRef_MobileBitmap", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
null
|
static readonly Lazy<PropertyInfo> _p_ShaderRef_MobileSDF = new(() => typeof(ShaderUtilities).GetProperty("ShaderRef_MobileSDF", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic));
|
||||||
);
|
|
||||||
|
public static TMP_FontAsset CreateFontAsset(string path, int faceIndex, int samplingPointSize, int atlasPadding, GlyphRenderMode renderMode, int atlasWidth, int atlasHeight, AtlasPopulationMode atlasPopulationMode = AtlasPopulationMode.Dynamic, bool enableMultiAtlasSupport = true) {
|
||||||
|
// Initialize FontEngine
|
||||||
|
FontEngine.InitializeFontEngine();
|
||||||
|
|
||||||
|
// Load Font Face
|
||||||
|
if (FontEngine.LoadFontFace(path, samplingPointSize, faceIndex) != FontEngineError.Success) {
|
||||||
|
Debug.LogWarning("Unable to load font face at path " + path);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
_paramsCreateFontAsset[0] = path;
|
|
||||||
_paramsCreateFontAsset[1] = index;
|
// Create new font asset
|
||||||
return (FontAsset)_methodCreateFontAsset.Invoke(null, _paramsCreateFontAsset);
|
TMP_FontAsset fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>();
|
||||||
|
|
||||||
|
_f_m_Version.Value.SetValue(fontAsset, "1.1.0");
|
||||||
|
fontAsset.faceInfo = FontEngine.GetFaceInfo();
|
||||||
|
|
||||||
|
fontAsset.atlasPopulationMode = atlasPopulationMode;
|
||||||
|
|
||||||
|
_p_atlasWidth.Value.SetValue(fontAsset, atlasWidth);
|
||||||
|
_p_atlasHeight.Value.SetValue(fontAsset, atlasHeight);
|
||||||
|
_p_atlasPadding.Value.SetValue(fontAsset, atlasPadding);
|
||||||
|
_p_atlasRenderMode.Value.SetValue(fontAsset, renderMode);
|
||||||
|
|
||||||
|
// Initialize array for the font atlas textures.
|
||||||
|
fontAsset.atlasTextures = new Texture2D[1];
|
||||||
|
|
||||||
|
// Create and add font atlas texture.
|
||||||
|
var texture = new Texture2D(0, 0, TextureFormat.Alpha8, false);
|
||||||
|
fontAsset.atlasTextures[0] = texture;
|
||||||
|
|
||||||
|
fontAsset.isMultiAtlasTexturesEnabled = enableMultiAtlasSupport;
|
||||||
|
|
||||||
|
// Add free rectangle of the size of the texture.
|
||||||
|
int packingModifier;
|
||||||
|
if (((int)renderMode & 0x10) != 0) {
|
||||||
|
packingModifier = 0;
|
||||||
|
|
||||||
|
// Optimize by adding static ref to shader.
|
||||||
|
var tmp_material = new Material((Shader)_p_ShaderRef_MobileBitmap.Value.GetValue(null));
|
||||||
|
|
||||||
|
//tmp_material.name = texture.name + " Material";
|
||||||
|
tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
|
||||||
|
|
||||||
|
fontAsset.material = tmp_material;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
packingModifier = 1;
|
||||||
|
|
||||||
|
// Optimize by adding static ref to shader.
|
||||||
|
var tmp_material = new Material((Shader)_p_ShaderRef_MobileSDF.Value.GetValue(null));
|
||||||
|
|
||||||
|
//tmp_material.name = texture.name + " Material";
|
||||||
|
tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
|
||||||
|
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier);
|
||||||
|
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
|
||||||
|
tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
|
||||||
|
|
||||||
|
fontAsset.material = tmp_material;
|
||||||
|
}
|
||||||
|
|
||||||
|
_p_freeGlyphRects.Value.SetValue(fontAsset, new List<GlyphRect>(8) { new(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) });
|
||||||
|
_p_usedGlyphRects.Value.SetValue(fontAsset, new List<GlyphRect>(8));
|
||||||
|
|
||||||
|
// TODO: Consider adding support for extracting glyph positioning data
|
||||||
|
|
||||||
|
fontAsset.ReadFontAssetDefinition();
|
||||||
|
|
||||||
|
return fontAsset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@ MonoImporter:
|
|||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
defaultReferences: []
|
defaultReferences: []
|
||||||
executionOrder: 0
|
executionOrder: -95
|
||||||
icon: {instanceID: 0}
|
icon: {instanceID: 0}
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
|
@@ -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.2")]
|
[assembly: AssemblyVersion("0.0.9")]
|
||||||
|
@@ -1,5 +1,9 @@
|
|||||||
|
using Cryville.EEW.Core;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Cryville.EEW.Unity {
|
namespace Cryville.EEW.Unity {
|
||||||
@@ -8,11 +12,19 @@ namespace Cryville.EEW.Unity {
|
|||||||
float SeverityColorMappingLuminanceMultiplier,
|
float SeverityColorMappingLuminanceMultiplier,
|
||||||
bool UseContinuousColor,
|
bool UseContinuousColor,
|
||||||
string ColorScheme,
|
string ColorScheme,
|
||||||
|
float HillshadeLayerOpacity,
|
||||||
|
string LocationNamer,
|
||||||
|
|
||||||
string OverrideTimeZone,
|
string OverrideTimeZone,
|
||||||
bool DoDisplayTimeZone,
|
bool DoDisplayTimeZone,
|
||||||
bool DoSwitchBackToHistory,
|
bool DoSwitchBackToHistory,
|
||||||
|
|
||||||
|
string NowcastWarningDelayTolerance,
|
||||||
|
|
||||||
|
string OverrideDisplayCulture,
|
||||||
|
IReadOnlyCollection<TTSCultureConfig> TTSCultures,
|
||||||
|
bool DoIgnoreLanguageVariant,
|
||||||
|
|
||||||
IReadOnlyCollection<EventSourceConfig> EventSources
|
IReadOnlyCollection<EventSourceConfig> EventSources
|
||||||
) {
|
) {
|
||||||
public static Config Default => new(
|
public static Config Default => new(
|
||||||
@@ -20,11 +32,19 @@ namespace Cryville.EEW.Unity {
|
|||||||
1f,
|
1f,
|
||||||
false,
|
false,
|
||||||
"Default",
|
"Default",
|
||||||
|
1,
|
||||||
|
"FERegionLong",
|
||||||
|
|
||||||
null,
|
null,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
|
||||||
|
"1:00:00",
|
||||||
|
|
||||||
|
"",
|
||||||
|
new List<TTSCultureConfig> { new(SharedCultures.CurrentUICulture) },
|
||||||
|
true,
|
||||||
|
|
||||||
new List<EventSourceConfig> {
|
new List<EventSourceConfig> {
|
||||||
new JMAAtomEventSourceConfig(Array.Empty<string>()),
|
new JMAAtomEventSourceConfig(Array.Empty<string>()),
|
||||||
new UpdateCheckerEventSourceConfig(),
|
new UpdateCheckerEventSourceConfig(),
|
||||||
@@ -37,26 +57,44 @@ 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(FANStudioEventSourceConfig), "FANStudio")]
|
||||||
|
[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")]
|
||||||
[JsonDerivedType(typeof(NOAAEventSourceConfig), "NOAA")]
|
[JsonDerivedType(typeof(NOAAEventSourceConfig), "NOAA")]
|
||||||
[JsonDerivedType(typeof(UpdateCheckerEventSourceConfig), "UpdateChecker")]
|
[JsonDerivedType(typeof(UpdateCheckerEventSourceConfig), "UpdateChecker")]
|
||||||
[JsonDerivedType(typeof(USGSQuakeMLEventSourceConfig), "USGSQuakeML")]
|
[JsonDerivedType(typeof(USGSEventSourceConfig), "USGSQuakeML")]
|
||||||
[JsonDerivedType(typeof(WolfxEventSourceConfig), "Wolfx")]
|
[JsonDerivedType(typeof(WolfxEventSourceConfig), "Wolfx")]
|
||||||
abstract record EventSourceConfig();
|
abstract record EventSourceConfig();
|
||||||
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 FANStudioEventSourceConfig([property: JsonRequired] string Subtype) : 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;
|
||||||
record NOAAEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
|
record NOAAEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
|
||||||
record UpdateCheckerEventSourceConfig : EventSourceConfig;
|
record UpdateCheckerEventSourceConfig : EventSourceConfig;
|
||||||
record USGSQuakeMLEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig;
|
record USGSEventSourceConfig([property: JsonRequired] string Subtype, bool UseGeoJSONFeeds, string[] Products) : 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))]
|
[JsonSerializable(typeof(Config))]
|
||||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
[JsonSourceGenerationOptions(Converters = new Type[] { typeof(CultureInfoConverter) }, WriteIndented = true)]
|
||||||
sealed partial class ConfigSerializationContext : JsonSerializerContext { }
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,8 +3,9 @@
|
|||||||
"rootNamespace": "",
|
"rootNamespace": "",
|
||||||
"references": [
|
"references": [
|
||||||
"GUID:b92f9c7ac10b1c04e86fc48210f62ab1",
|
"GUID:b92f9c7ac10b1c04e86fc48210f62ab1",
|
||||||
|
"GUID:1e0937e40dadba24a97b7342c4559580",
|
||||||
"GUID:e5b7e7f40a80a814ba706299d68f9213",
|
"GUID:e5b7e7f40a80a814ba706299d68f9213",
|
||||||
"GUID:da293eebbcb9a4947a212534c52d1a32"
|
"GUID:6055be8ebefd69e48b49212b09b47b2f"
|
||||||
],
|
],
|
||||||
"includePlatforms": [],
|
"includePlatforms": [],
|
||||||
"excludePlatforms": [],
|
"excludePlatforms": [],
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
using Cryville.EEW.Core.Map;
|
||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@@ -10,30 +11,51 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
Transform m_layerTile;
|
Transform m_layerTile;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
|
Transform m_layerTileHillshade;
|
||||||
|
[SerializeField]
|
||||||
MapElementManager m_layerElement;
|
MapElementManager m_layerElement;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
MapElementManager m_layerElementSub;
|
MapElementManager m_layerElementSub;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
GameObject m_prefabTile;
|
GameObject m_prefabTile;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
|
GameObject m_prefabTileHillshade;
|
||||||
|
[SerializeField]
|
||||||
GameObject m_prefabBitmapHolder;
|
GameObject m_prefabBitmapHolder;
|
||||||
|
[SerializeField]
|
||||||
|
int m_maxMapTileZoom = 10;
|
||||||
|
[SerializeField]
|
||||||
|
bool m_isEditor;
|
||||||
|
|
||||||
readonly MapTileCacheManager _tiles = new();
|
MapTileCacheManager _tiles;
|
||||||
|
MapTileCacheManager _tilesHillshade;
|
||||||
float _elementLayerZ;
|
float _elementLayerZ;
|
||||||
|
|
||||||
void Start() {
|
void Start() {
|
||||||
_camera = GetComponent<Camera>();
|
_camera = GetComponent<Camera>();
|
||||||
|
_tiles = m_isEditor ? new EditorMapTileCacheManager() : new MapTileCacheManager();
|
||||||
_tiles.ExtraCachedZoomLevel = 20;
|
_tiles.ExtraCachedZoomLevel = 20;
|
||||||
_tiles.Parent = m_layerTile;
|
_tiles.Parent = m_layerTile;
|
||||||
_tiles.PrefabTile = m_prefabTile;
|
_tiles.PrefabTile = m_prefabTile;
|
||||||
_tiles.PrefabBitmapHolder = m_prefabBitmapHolder;
|
_tiles.PrefabBitmapHolder = m_prefabBitmapHolder;
|
||||||
_tiles.CacheDir = Application.temporaryCachePath;
|
_tiles.CacheDir = Application.temporaryCachePath;
|
||||||
|
if (m_layerTileHillshade) {
|
||||||
|
m_prefabTileHillshade.GetComponent<SpriteRenderer>().sharedMaterial.color = new UnityEngine.Color(1, 1, 1, SharedSettings.Instance.HillshadeLayerOpacity);
|
||||||
|
_tilesHillshade = new HillshadeMapTileCacheManager {
|
||||||
|
ExtraCachedZoomLevel = 20,
|
||||||
|
Parent = m_layerTileHillshade,
|
||||||
|
PrefabTile = m_prefabTileHillshade,
|
||||||
|
PrefabBitmapHolder = m_prefabBitmapHolder,
|
||||||
|
CacheDir = Application.temporaryCachePath,
|
||||||
|
};
|
||||||
|
}
|
||||||
_camera.orthographicSize = 0.5f / MathF.Max(1, (float)_camera.pixelWidth / _camera.pixelHeight);
|
_camera.orthographicSize = 0.5f / MathF.Max(1, (float)_camera.pixelWidth / _camera.pixelHeight);
|
||||||
_elementLayerZ = m_layerElement.transform.position.z;
|
if (m_layerElement != null) _elementLayerZ = m_layerElement.transform.position.z;
|
||||||
_mapElementUpdated = true;
|
_mapElementUpdated = true;
|
||||||
}
|
}
|
||||||
void OnDestroy() {
|
void OnDestroy() {
|
||||||
_tiles.Dispose();
|
_tiles.Dispose();
|
||||||
|
_tilesHillshade?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
float Scale {
|
float Scale {
|
||||||
@@ -74,7 +96,7 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
void ZoomToMapElement() {
|
void ZoomToMapElement() {
|
||||||
var aabb = m_layerElement.AABB;
|
var aabb = m_layerElement != null ? m_layerElement.AABB : null;
|
||||||
if (aabb is not RectangleF b) return;
|
if (aabb is not RectangleF b) return;
|
||||||
if (b.Width * _camera.pixelHeight < _camera.pixelWidth * b.Height)
|
if (b.Width * _camera.pixelHeight < _camera.pixelWidth * b.Height)
|
||||||
Scale = b.Height;
|
Scale = b.Height;
|
||||||
@@ -97,26 +119,30 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
transform.localPosition = new(nx, Math.Clamp(transform.position.y, h / 2 - 1, -h / 2), -20);
|
transform.localPosition = new(nx, Math.Clamp(transform.position.y, h / 2 - 1, -h / 2), -20);
|
||||||
|
|
||||||
var bounds = new Bounds((Vector2)transform.position, new Vector2(w, h));
|
var bounds = new Bounds((Vector2)transform.position, new Vector2(w, h));
|
||||||
int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, 10);
|
int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, m_maxMapTileZoom);
|
||||||
int zoomScale = 1 << zoom;
|
int zoomScale = 1 << zoom;
|
||||||
_tiles.MoveTo(
|
var a = new MapTileIndex(Mathf.FloorToInt(bounds.min.x * zoomScale), Mathf.FloorToInt(-bounds.max.y * zoomScale), zoom);
|
||||||
new(Mathf.FloorToInt(bounds.min.x * zoomScale), Mathf.FloorToInt(-bounds.max.y * zoomScale), zoom),
|
var b = new MapTileIndex(Mathf.CeilToInt(bounds.max.x * zoomScale), Mathf.CeilToInt(-bounds.min.y * zoomScale), zoom);
|
||||||
new(Mathf.CeilToInt(bounds.max.x * zoomScale), Mathf.CeilToInt(-bounds.min.y * zoomScale), zoom)
|
_tiles.MoveTo(a, b);
|
||||||
);
|
_tilesHillshade?.MoveTo(a, b);
|
||||||
|
|
||||||
m_layerElement.Scale = h;
|
if (m_layerElement != null) {
|
||||||
m_layerElementSub.Scale = h;
|
m_layerElement.Scale = h;
|
||||||
|
}
|
||||||
|
if (m_layerElementSub != null) {
|
||||||
|
m_layerElementSub.Scale = h;
|
||||||
|
|
||||||
if (nx - w / 2 < 0) {
|
if (nx - w / 2 < 0) {
|
||||||
m_layerElementSub.gameObject.SetActive(true);
|
m_layerElementSub.gameObject.SetActive(true);
|
||||||
m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ);
|
m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ);
|
||||||
}
|
}
|
||||||
else if (nx + w / 2 > 1) {
|
else if (nx + w / 2 > 1) {
|
||||||
m_layerElementSub.gameObject.SetActive(true);
|
m_layerElementSub.gameObject.SetActive(true);
|
||||||
m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ);
|
m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_layerElementSub.gameObject.SetActive(false);
|
m_layerElementSub.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
Assets/Cryville.EEW.Unity/Map/EditorMapTileCacheManager.cs
Normal file
15
Assets/Cryville.EEW.Unity/Map/EditorMapTileCacheManager.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using Cryville.EEW.Core.Map;
|
||||||
|
using System.IO;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Cryville.EEW.Unity.Map {
|
||||||
|
sealed class EditorMapTileCacheManager : MapTileCacheManager {
|
||||||
|
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
|
||||||
|
index,
|
||||||
|
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
|
||||||
|
new($"https://tile.openstreetmap.org/{index.Z}/{index.NX}/{index.NY}.png")
|
||||||
|
);
|
||||||
|
|
||||||
|
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map_editor/{index.Z}/{index.NX}/{index.NY}");
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 9e8aa96a139a7414cb4d2031a22588db
|
guid: 478198b8ecc0082449fa3f68795174a9
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@@ -98,24 +98,25 @@ namespace Cryville.EEW.Unity.Map.Element {
|
|||||||
for (int d = 0; d < 360; d++) {
|
for (int d = 0; d < 360; d++) {
|
||||||
Quaternion q = Quaternion.AngleAxis(d, axis);
|
Quaternion q = Quaternion.AngleAxis(d, axis);
|
||||||
Vector3 p = q * rp;
|
Vector3 p = q * rp;
|
||||||
Vector2 p2 = ToTilePos(p).ToVector2();
|
AddVertex(renderer, ref lp2, ref segmentIndex, d, p);
|
||||||
if (lp2 != null) {
|
|
||||||
float dx = p2.x - lp2.Value.x;
|
|
||||||
if (MathF.Abs(dx) >= 0.5) {
|
|
||||||
_vertexBuffer[d] = p2.x < 0.5 ? p2 + new Vector2(1, 0) : p2 - new Vector2(1, 0);
|
|
||||||
renderer.AddSegment(_vertexBuffer, segmentIndex, d - segmentIndex + 1);
|
|
||||||
segmentIndex = d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_vertexBuffer[d] = p2;
|
|
||||||
lp2 = p2;
|
|
||||||
}
|
}
|
||||||
Vector2 rp2 = ToTilePos(rp).ToVector2();
|
AddVertex(renderer, ref lp2, ref segmentIndex, 360, rp);
|
||||||
_vertexBuffer[360] = rp2;
|
|
||||||
renderer.AddSegment(_vertexBuffer, segmentIndex, 361 - segmentIndex);
|
renderer.AddSegment(_vertexBuffer, segmentIndex, 361 - segmentIndex);
|
||||||
}
|
}
|
||||||
renderer.SetMaterial(isHistory ? m_historyMaterial : m_ongoingMaterial);
|
renderer.SetMaterial(isHistory ? m_historyMaterial : m_ongoingMaterial);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddVertex(MultiLineRenderer renderer, ref Vector2? lp2, ref int segmentIndex, int d, Vector3 p) {
|
||||||
|
Vector2 p2 = ToTilePos(p).ToVector2();
|
||||||
|
if (lp2 != null && MathF.Abs(p2.x - lp2.Value.x) >= 0.5) {
|
||||||
|
_vertexBuffer[d] = p2.x < 0.5 ? p2 + new Vector2(1, 0) : p2 - new Vector2(1, 0);
|
||||||
|
renderer.AddSegment(_vertexBuffer, segmentIndex, d - segmentIndex + 1);
|
||||||
|
segmentIndex = d;
|
||||||
|
}
|
||||||
|
_vertexBuffer[d] = p2;
|
||||||
|
lp2 = p2;
|
||||||
|
}
|
||||||
|
|
||||||
static PointF ToTilePos(Vector3 p) => MapTileUtils.WorldToTilePos(new(MathF.Atan2(p.z, p.x) / MathF.PI * 180f, MathF.Asin(p.y) / MathF.PI * 180f));
|
static PointF ToTilePos(Vector3 p) => MapTileUtils.WorldToTilePos(new(MathF.Atan2(p.z, p.x) / MathF.PI * 180f, MathF.Asin(p.y) / MathF.PI * 180f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,15 @@
|
|||||||
|
using Cryville.EEW.Core.Map;
|
||||||
|
using System.IO;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Cryville.EEW.Unity.Map {
|
||||||
|
sealed class HillshadeMapTileCacheManager : MapTileCacheManager {
|
||||||
|
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
|
||||||
|
index,
|
||||||
|
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
|
||||||
|
new($"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer/tile/{index.Z}/{index.NY}/{index.NX}.png")
|
||||||
|
);
|
||||||
|
|
||||||
|
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map_hillshade/{index.Z}/{index.NX}/{index.NY}");
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 4f85302336d038c4da80ea264d185657
|
guid: d5fed9b884a4ff54f837aa0f2265ad36
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@@ -150,12 +150,8 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
_mesh.Clear();
|
_mesh.Clear();
|
||||||
if (_positions == null) return;
|
if (_positions == null) return;
|
||||||
if (_positionCount <= 1) return;
|
if (_positionCount <= 1) return;
|
||||||
float hw = m_width / 2;
|
|
||||||
int maxVertexCount = 4 * (_positionCount - 1);
|
|
||||||
var vbuf = ArrayPool<Vector3>.Shared.Rent(maxVertexCount);
|
|
||||||
var ubuf = ArrayPool<Vector2>.Shared.Rent(maxVertexCount);
|
|
||||||
var ibuf = ArrayPool<int>.Shared.Rent(3 * (2 + 4 * (_positionCount - 2)));
|
|
||||||
|
|
||||||
|
float hw = m_width / 2;
|
||||||
int i, vi = 0, ii = 0, li = 0, ri = 1;
|
int i, vi = 0, ii = 0, li = 0, ri = 1;
|
||||||
float uvScale = 1 / (m_tilingScale * m_width);
|
float uvScale = 1 / (m_tilingScale * m_width);
|
||||||
Vector2 p0 = _positions[0], p1 = default;
|
Vector2 p0 = _positions[0], p1 = default;
|
||||||
@@ -163,6 +159,12 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
if ((p1 = _positions[i]) != p0) break;
|
if ((p1 = _positions[i]) != p0) break;
|
||||||
}
|
}
|
||||||
if (i >= _positionCount) return;
|
if (i >= _positionCount) return;
|
||||||
|
|
||||||
|
int maxVertexCount = 4 * (_positionCount - 1);
|
||||||
|
var vbuf = ArrayPool<Vector3>.Shared.Rent(maxVertexCount);
|
||||||
|
var ubuf = ArrayPool<Vector2>.Shared.Rent(maxVertexCount);
|
||||||
|
var ibuf = ArrayPool<int>.Shared.Rent(3 * (2 + 4 * (_positionCount - 2)));
|
||||||
|
|
||||||
Vector2 dp0 = NormalizeSmallVector(p1 - p0), np0 = GetNormal(dp0 * hw);
|
Vector2 dp0 = NormalizeSmallVector(p1 - p0), np0 = GetNormal(dp0 * hw);
|
||||||
vbuf[vi] = p0 - np0; ubuf[vi++] = new(0, 0);
|
vbuf[vi] = p0 - np0; ubuf[vi++] = new(0, 0);
|
||||||
vbuf[vi] = p0 + np0; ubuf[vi++] = new(0, 1);
|
vbuf[vi] = p0 + np0; ubuf[vi++] = new(0, 1);
|
||||||
|
@@ -2,12 +2,15 @@ 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.FANStudio.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;
|
||||||
using Cryville.EEW.NOAA.Map;
|
using Cryville.EEW.NOAA.Map;
|
||||||
using Cryville.EEW.QuakeML.Map;
|
using Cryville.EEW.QuakeML.Map;
|
||||||
using Cryville.EEW.Report;
|
using Cryville.EEW.Report;
|
||||||
|
using Cryville.EEW.USGS.Map;
|
||||||
using Cryville.EEW.Wolfx.Map;
|
using Cryville.EEW.Wolfx.Map;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
@@ -128,19 +131,27 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
|
|
||||||
readonly ContextedGeneratorManager<IMapGeneratorContext, MapElement> _gen = new(new IContextedGenerator<IMapGeneratorContext, MapElement>[] {
|
readonly ContextedGeneratorManager<IMapGeneratorContext, MapElement> _gen = new(new IContextedGenerator<IMapGeneratorContext, MapElement>[] {
|
||||||
new BMKGEarthquakeMapGenerator(),
|
new BMKGEarthquakeMapGenerator(),
|
||||||
|
new CEAEEWMapGenerator(),
|
||||||
new CENCEarthquakeMapGenerator(),
|
new CENCEarthquakeMapGenerator(),
|
||||||
new CENCEEWMapGenerator(),
|
new CENCEEWMapGenerator(),
|
||||||
new CWAEarthquakeMapGenerator(),
|
new CWAEarthquakeMapGenerator(),
|
||||||
new CWAEEWMapGenerator(),
|
new CWAEEWMapGenerator(),
|
||||||
new CWATsunamiMapGenerator(),
|
new CWATsunamiMapGenerator(),
|
||||||
new EMSCRealTimeEventMapGenerator(),
|
new EMSCRealTimeEventMapGenerator(),
|
||||||
new FujianEEWMapGenerator(),
|
new FANStudio.Map.FujianEEWMapGenerator(),
|
||||||
|
new Wolfx.Map.FujianEEWMapGenerator(),
|
||||||
|
new GeoNetQuakeHistoryMapGenerator(),
|
||||||
|
new GeoNetQuakeMapGenerator(),
|
||||||
|
new GeoNetStrongMapGenerator(),
|
||||||
new GlobalQuakeMapViewGenerator(),
|
new GlobalQuakeMapViewGenerator(),
|
||||||
|
new ICLEEWMapGenerator(),
|
||||||
new JMAAtomMapGenerator(),
|
new JMAAtomMapGenerator(),
|
||||||
new JMAEEWMapGenerator(),
|
new JMAEEWMapGenerator(),
|
||||||
new NOAAMapGenerator(),
|
new NOAAMapGenerator(),
|
||||||
|
new FANStudio.Map.SichuanEEWMapGenerator(),
|
||||||
|
new Wolfx.Map.SichuanEEWMapGenerator(),
|
||||||
new QuakeMLEventMapGenerator(),
|
new QuakeMLEventMapGenerator(),
|
||||||
new SichuanEEWMapGenerator(),
|
new USGSContoursMapGenerator(),
|
||||||
});
|
});
|
||||||
public UnityMapElement Build(object e, out CultureInfo culture, out int order) {
|
public UnityMapElement Build(object e, out CultureInfo culture, out int order) {
|
||||||
culture = CultureInfo.InvariantCulture;
|
culture = CultureInfo.InvariantCulture;
|
||||||
|
@@ -19,10 +19,12 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
float z = 1 << index.Z;
|
float z = 1 << index.Z;
|
||||||
transform.localPosition = new(index.X / z, -(index.Y + 1) / z, -index.Z / 100f);
|
transform.localPosition = new(index.X / z, -(index.Y + 1) / z, -index.Z / 100f);
|
||||||
transform.localScale = new Vector3(1 / z, 1 / z, 1);
|
transform.localScale = new Vector3(1 / z, 1 / z, 1);
|
||||||
_idView.gameObject.SetActive(true);
|
if (_idView) {
|
||||||
byte e = SharedSettings.Instance.IdBytes[((index.X << 2) + index.Y) & 0x1f];
|
_idView.gameObject.SetActive(true);
|
||||||
int ex = e >> 4, ey = e & 0xf;
|
byte e = SharedSettings.Instance.IdBytes[((index.X << 2) + index.Y) & 0x1f];
|
||||||
_idView.localPosition = new(ex / 16f, 1 - ey / 16f, -1 / 200f);
|
int ex = e >> 4, ey = e & 0xf;
|
||||||
|
_idView.localPosition = new(ex / 16f, 1 - ey / 16f, -1 / 200f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Set(Sprite sprite) {
|
public void Set(Sprite sprite) {
|
||||||
@@ -40,5 +42,9 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
Destroy(gameObject);
|
Destroy(gameObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetVisible(bool v) {
|
||||||
|
_renderer.enabled = v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -7,10 +7,13 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace Cryville.EEW.Unity.Map {
|
namespace Cryville.EEW.Unity.Map {
|
||||||
sealed class MapTileBitmapHolder : Core.Map.MapTileBitmapHolder {
|
sealed class MapTileBitmapHolder : Core.Map.MapTileBitmapHolder {
|
||||||
MapTileBitmapHolderBehaviour _behaviour;
|
readonly MapTileBitmapHolderBehaviour _behaviour;
|
||||||
|
readonly Uri _uri;
|
||||||
|
|
||||||
public MapTileBitmapHolder(MapTileIndex index, GameObject gameObject) : base(index) {
|
public MapTileBitmapHolder(MapTileIndex index, GameObject gameObject, Uri uri) : base(index) {
|
||||||
_behaviour = gameObject.GetComponent<MapTileBitmapHolderBehaviour>();
|
_behaviour = gameObject.GetComponent<MapTileBitmapHolderBehaviour>();
|
||||||
|
_behaviour.Index = index;
|
||||||
|
_uri = uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool disposing) {
|
protected override void Dispose(bool disposing) {
|
||||||
@@ -20,8 +23,7 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Uri GetUri() =>
|
protected override Uri GetUri() => _uri;
|
||||||
new($"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{Index.Z}/{Index.NY}/{Index.NX}");
|
|
||||||
|
|
||||||
protected override Task LoadBitmap(FileInfo file, CancellationToken cancellationToken) {
|
protected override Task LoadBitmap(FileInfo file, CancellationToken cancellationToken) {
|
||||||
_behaviour.Load(file);
|
_behaviour.Load(file);
|
||||||
@@ -31,5 +33,17 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
public void Bind(MapTile tile) {
|
public void Bind(MapTile tile) {
|
||||||
_behaviour.Bind(tile);
|
_behaviour.Bind(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Unbind(MapTile tile) {
|
||||||
|
_behaviour.Unbind(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddChild(MapTileBitmapHolder bitmapHolder) {
|
||||||
|
_behaviour.AddChild(bitmapHolder._behaviour);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveChild(MapTileBitmapHolder bitmapHolder) {
|
||||||
|
_behaviour.RemoveChild(bitmapHolder._behaviour);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,16 +1,39 @@
|
|||||||
|
using Cryville.EEW.Core.Map;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Networking;
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
namespace Cryville.EEW.Unity.Map {
|
namespace Cryville.EEW.Unity.Map {
|
||||||
sealed class MapTileBitmapHolderBehaviour : MonoBehaviour {
|
sealed class MapTileBitmapHolderBehaviour : MonoBehaviour {
|
||||||
Action<Sprite> _callback;
|
public MapTileIndex Index { get; set; }
|
||||||
|
|
||||||
|
readonly List<MapTile> _tiles = new();
|
||||||
public void Bind(MapTile tile) {
|
public void Bind(MapTile tile) {
|
||||||
if (_isDone)
|
_tiles.Add(tile);
|
||||||
|
if (_sprite) {
|
||||||
tile.Set(_sprite);
|
tile.Set(_sprite);
|
||||||
else
|
}
|
||||||
_callback += tile.Set;
|
}
|
||||||
|
public void Unbind(MapTile tile) {
|
||||||
|
_tiles.Remove(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly List<MapTileBitmapHolderBehaviour> _children = new();
|
||||||
|
public void AddChild(MapTileBitmapHolderBehaviour behaviour) {
|
||||||
|
_children.Add(behaviour);
|
||||||
|
foreach (var tile in _tiles) {
|
||||||
|
tile.SetVisible(false);
|
||||||
|
}
|
||||||
|
SetChildSprite(behaviour);
|
||||||
|
}
|
||||||
|
public void RemoveChild(MapTileBitmapHolderBehaviour behaviour) {
|
||||||
|
_children.Remove(behaviour);
|
||||||
|
bool isActive = _children.Count == 0;
|
||||||
|
foreach (var tile in _tiles) {
|
||||||
|
tile.SetVisible(isActive);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UnityWebRequest _req;
|
UnityWebRequest _req;
|
||||||
@@ -20,7 +43,6 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
|
|
||||||
FileInfo _localFile;
|
FileInfo _localFile;
|
||||||
bool _isReady;
|
bool _isReady;
|
||||||
bool _isDone;
|
|
||||||
public void Load(FileInfo file) {
|
public void Load(FileInfo file) {
|
||||||
_localFile = file;
|
_localFile = file;
|
||||||
_isReady = true;
|
_isReady = true;
|
||||||
@@ -40,27 +62,49 @@ 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;
|
||||||
}
|
}
|
||||||
if (_req == null || !_req.isDone) return;
|
if (_req == null || !_req.isDone) return;
|
||||||
if (_texHandler.isDone) {
|
if (_texHandler.isDone && _texHandler.texture != null) {
|
||||||
_tex = _texHandler.texture;
|
_tex = _texHandler.texture;
|
||||||
_tex.wrapMode = TextureWrapMode.Clamp;
|
_tex.wrapMode = TextureWrapMode.Clamp;
|
||||||
_sprite = Sprite.Create(_tex, new Rect(0, 0, _tex.width, _tex.height), Vector2.zero, _tex.height, 0, SpriteMeshType.FullRect, Vector4.zero, false);
|
SetSprite(_tex, 0, 0, 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Debug.LogError(_req.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();
|
||||||
_texHandler.Dispose();
|
_texHandler.Dispose();
|
||||||
_req = null;
|
_req = null;
|
||||||
_callback?.Invoke(_sprite);
|
|
||||||
_isDone = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int _minDz = int.MaxValue;
|
||||||
|
int _x, _y;
|
||||||
|
void SetSprite(Texture2D tex, int dz, int x, int y) {
|
||||||
|
if (dz >= 8) return;
|
||||||
|
if (dz > _minDz) return;
|
||||||
|
_tex = tex;
|
||||||
|
_x = x; _y = y;
|
||||||
|
_minDz = dz;
|
||||||
|
if (_sprite) Destroy(_sprite);
|
||||||
|
int sx = x << (8 - dz), sy = 256 - ((y + 1) << (8 - dz));
|
||||||
|
_sprite = Sprite.Create(tex, new Rect(sx, sy, 1 << (8 - dz), 1 << (8 - dz)), Vector2.zero, 1 << (8 - dz), 0, SpriteMeshType.FullRect, Vector4.zero, false);
|
||||||
|
foreach (var tile in _tiles)
|
||||||
|
tile.Set(_sprite);
|
||||||
|
foreach (var child in _children) {
|
||||||
|
SetChildSprite(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetChildSprite(MapTileBitmapHolderBehaviour child) {
|
||||||
|
if (!_tex) return;
|
||||||
|
int cdz = child.Index.Z - Index.Z;
|
||||||
|
int cx = child.Index.X % (1 << cdz) | (_x << cdz), cy = child.Index.Y % (1 << cdz) | (_y << cdz);
|
||||||
|
child.SetSprite(_tex, cdz + _minDz, cx, cy);
|
||||||
|
}
|
||||||
|
|
||||||
bool _isDestroyed;
|
bool _isDestroyed;
|
||||||
public void Destroy() {
|
public void Destroy() {
|
||||||
@@ -69,11 +113,15 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
void OnDestroy() {
|
void OnDestroy() {
|
||||||
if (_req != null) {
|
if (_req != null) {
|
||||||
_req.Abort();
|
_req.Abort();
|
||||||
|
if (_texHandler != null) {
|
||||||
|
var tex = _texHandler.texture;
|
||||||
|
if (tex) Destroy(tex);
|
||||||
|
_texHandler.Dispose();
|
||||||
|
}
|
||||||
_req.Dispose();
|
_req.Dispose();
|
||||||
_texHandler.Dispose();
|
|
||||||
}
|
}
|
||||||
if (_sprite) Destroy(_sprite);
|
if (_sprite) Destroy(_sprite);
|
||||||
if (_tex) Destroy(_tex);
|
if (_tex && _minDz == 0) Destroy(_tex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
using Cryville.EEW.Core.Map;
|
using Cryville.EEW.Core.Map;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Cryville.EEW.Unity.Map {
|
namespace Cryville.EEW.Unity.Map {
|
||||||
sealed class MapTileCacheManager : MapTileCacheManager<MapTileBitmapHolder> {
|
class MapTileCacheManager : MapTileCacheManager<MapTileBitmapHolder> {
|
||||||
public GameObject PrefabTile { get; set; }
|
public GameObject PrefabTile { get; set; }
|
||||||
public GameObject PrefabBitmapHolder { get; set; }
|
public GameObject PrefabBitmapHolder { get; set; }
|
||||||
|
|
||||||
@@ -12,7 +13,11 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
|
|
||||||
public string CacheDir { get; set; }
|
public string CacheDir { get; set; }
|
||||||
|
|
||||||
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(index, GameObject.Instantiate(PrefabBitmapHolder, Parent, false));
|
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
|
||||||
|
index,
|
||||||
|
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
|
||||||
|
new($"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{index.Z}/{index.NY}/{index.NX}")
|
||||||
|
);
|
||||||
|
|
||||||
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map/{index.Z}/{index.NX}/{index.NY}");
|
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map/{index.Z}/{index.NX}/{index.NY}");
|
||||||
|
|
||||||
@@ -22,16 +27,30 @@ namespace Cryville.EEW.Unity.Map {
|
|||||||
var gameObject = GameObject.Instantiate(PrefabTile, Parent, false);
|
var gameObject = GameObject.Instantiate(PrefabTile, Parent, false);
|
||||||
var uTile = gameObject.GetComponent<MapTile>();
|
var uTile = gameObject.GetComponent<MapTile>();
|
||||||
_map.Add(tile, uTile);
|
_map.Add(tile, uTile);
|
||||||
uTile.Init(tile.Index);
|
var index = tile.Index;
|
||||||
tile.BitmapHolder.Bind(uTile);
|
uTile.Init(index);
|
||||||
|
var bitmapHolder = tile.BitmapHolder;
|
||||||
|
bitmapHolder.Bind(uTile);
|
||||||
|
|
||||||
|
if (index.Z <= 0) return;
|
||||||
|
var maybeTile = FindTile(index.ZoomToLevel(index.Z - 1, Math.Floor), false);
|
||||||
|
if (maybeTile is not MapTile<MapTileBitmapHolder> parentTile) return;
|
||||||
|
parentTile.BitmapHolder.AddChild(bitmapHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnTileDestroyed(MapTile<MapTileBitmapHolder> tile) {
|
protected override void OnTileDestroyed(MapTile<MapTileBitmapHolder> tile) {
|
||||||
base.OnTileDestroyed(tile);
|
base.OnTileDestroyed(tile);
|
||||||
|
var bitmapHolder = tile.BitmapHolder;
|
||||||
if (_map.TryGetValue(tile, out var uTile)) {
|
if (_map.TryGetValue(tile, out var uTile)) {
|
||||||
uTile.Destroy();
|
uTile.Destroy();
|
||||||
|
bitmapHolder.Unbind(uTile);
|
||||||
_map.Remove(tile);
|
_map.Remove(tile);
|
||||||
}
|
}
|
||||||
|
var index = tile.Index;
|
||||||
|
if (index.Z <= 0) return;
|
||||||
|
var maybeTile = FindTile(index.ZoomToLevel(index.Z - 1, Math.Floor), false);
|
||||||
|
if (maybeTile is not MapTile<MapTileBitmapHolder> parentTile) return;
|
||||||
|
parentTile.BitmapHolder.RemoveChild(bitmapHolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
219
Assets/Cryville.EEW.Unity/Map/RegionEditor.cs
Normal file
219
Assets/Cryville.EEW.Unity/Map/RegionEditor.cs
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Cryville.EEW.Unity.Map {
|
||||||
|
sealed class RegionEditor : MonoBehaviour {
|
||||||
|
QuadTreeNode _root;
|
||||||
|
|
||||||
|
[SerializeField] CameraController m_cameraController;
|
||||||
|
[SerializeField] GameObject m_regionViewPrefab;
|
||||||
|
|
||||||
|
[SerializeField] TMP_Text m_textSelectedInfo;
|
||||||
|
[SerializeField] TMP_Text m_textHoveredInfo;
|
||||||
|
[SerializeField] TMP_InputField m_inputId;
|
||||||
|
|
||||||
|
readonly Dictionary<QuadTreeNode, RegionView> _map = new();
|
||||||
|
|
||||||
|
void Start() {
|
||||||
|
var file = new FileInfo(Path.Combine(Application.persistentDataPath, "regions.json"));
|
||||||
|
if (file.Exists) {
|
||||||
|
using var stream = file.OpenRead();
|
||||||
|
_root = JsonSerializer.Deserialize<QuadTreeNode>(stream);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_root = NewNode();
|
||||||
|
}
|
||||||
|
BuildView(_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Save() {
|
||||||
|
var file = new FileInfo(Path.Combine(Application.persistentDataPath, "regions.json"));
|
||||||
|
using var stream = file.Open(FileMode.Create);
|
||||||
|
JsonSerializer.Serialize(stream, _root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BuildView(QuadTreeNode node) {
|
||||||
|
var view = Instantiate(m_regionViewPrefab, transform, false).GetComponent<RegionView>();
|
||||||
|
view.Init(node.X, node.Y, node.Z);
|
||||||
|
view.Id = node.Data.Id;
|
||||||
|
view.IsLeaf = node.Children == null;
|
||||||
|
_map.Add(node, view);
|
||||||
|
BuildChildViews(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BuildChildViews(QuadTreeNode node) {
|
||||||
|
if (node.Children == null) return;
|
||||||
|
foreach (var child in node.Children) {
|
||||||
|
BuildView(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DestroyChildViews(QuadTreeNode node) {
|
||||||
|
if (node.Children == null) return;
|
||||||
|
foreach (var child in node.Children) {
|
||||||
|
Destroy(_map[child].gameObject);
|
||||||
|
_map.Remove(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QuadTreeNode _hoveredNode;
|
||||||
|
QuadTreeNode _selectedNode;
|
||||||
|
Vector3? _ppos;
|
||||||
|
void Update() {
|
||||||
|
var pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
|
||||||
|
pos.y += 1;
|
||||||
|
var hoveredNode = _root.Get(pos);
|
||||||
|
if (hoveredNode != _hoveredNode) {
|
||||||
|
HoverNode(hoveredNode);
|
||||||
|
}
|
||||||
|
if (Input.GetMouseButtonDown(0)) {
|
||||||
|
_ppos = Input.mousePosition;
|
||||||
|
}
|
||||||
|
if (Input.GetMouseButton(0) && _ppos is Vector3 pos0) {
|
||||||
|
if (Input.mousePosition != pos0) {
|
||||||
|
_ppos = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hoveredNode == null) return;
|
||||||
|
if (Input.GetMouseButtonUp(0) && _ppos != null) {
|
||||||
|
SelectNode(hoveredNode);
|
||||||
|
_ppos = null;
|
||||||
|
}
|
||||||
|
if (m_inputId.isFocused)
|
||||||
|
return;
|
||||||
|
if (Input.GetKeyUp(KeyCode.A)) {
|
||||||
|
MergeNode(hoveredNode);
|
||||||
|
}
|
||||||
|
if (Input.GetKeyUp(KeyCode.S)) {
|
||||||
|
SplitNode(hoveredNode);
|
||||||
|
}
|
||||||
|
if (Input.GetKeyUp(KeyCode.C)) {
|
||||||
|
m_inputId.text = hoveredNode.Data.Id;
|
||||||
|
}
|
||||||
|
if (Input.GetKeyUp(KeyCode.V)) {
|
||||||
|
hoveredNode.Data.Id = m_inputId.text;
|
||||||
|
_map[hoveredNode].Id = hoveredNode.Data.Id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void HoverNode(QuadTreeNode node) {
|
||||||
|
if (_hoveredNode != null) {
|
||||||
|
_map[_hoveredNode].IsHovered = false;
|
||||||
|
}
|
||||||
|
_hoveredNode = node;
|
||||||
|
if (_hoveredNode != null) {
|
||||||
|
_map[_hoveredNode].IsHovered = true;
|
||||||
|
m_textHoveredInfo.text = string.Format(CultureInfo.InvariantCulture, "<Hovered>\nZ: {2}, XY: ({0}, {1})\nD: {3}", node.X, node.Y, node.Z, node.Data.Id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_textHoveredInfo.text = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SelectNode(QuadTreeNode node) {
|
||||||
|
if (_selectedNode != null) {
|
||||||
|
_map[_selectedNode].IsSelected = false;
|
||||||
|
}
|
||||||
|
_selectedNode = node;
|
||||||
|
if (_selectedNode != null) {
|
||||||
|
_map[_selectedNode].IsSelected = true;
|
||||||
|
m_textSelectedInfo.text = string.Format(CultureInfo.InvariantCulture, "<Selected>\nZ: {2}, XY: ({0}, {1})\nD: {3}", node.X, node.Y, node.Z, node.Data.Id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_textSelectedInfo.text = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void MergeNode(QuadTreeNode node) {
|
||||||
|
var parent = node.Parent;
|
||||||
|
if (parent == null)
|
||||||
|
return;
|
||||||
|
DestroyChildViews(parent);
|
||||||
|
_map[parent].IsLeaf = true;
|
||||||
|
parent.Merge();
|
||||||
|
_hoveredNode = null;
|
||||||
|
if (_selectedNode != null && !_map.ContainsKey(_selectedNode)) {
|
||||||
|
_selectedNode = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SplitNode(QuadTreeNode node) {
|
||||||
|
node.Split();
|
||||||
|
_map[node].IsLeaf = false;
|
||||||
|
BuildChildViews(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
static QuadTreeNode NewNode() => new() { Data = new("") };
|
||||||
|
|
||||||
|
sealed class QuadTreeNode {
|
||||||
|
QuadTreeNode[] m_children;
|
||||||
|
public QuadTreeNode[] Children {
|
||||||
|
get => m_children;
|
||||||
|
set {
|
||||||
|
if (m_children != null) {
|
||||||
|
foreach (var child in m_children) {
|
||||||
|
child.DetachFromParent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_children = value;
|
||||||
|
UpdateChildren();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QuadTreeNode m_parent;
|
||||||
|
[JsonIgnore] public QuadTreeNode Parent => m_parent;
|
||||||
|
void AttachToParent(QuadTreeNode parent, int index) {
|
||||||
|
if (m_parent != null && m_parent != parent)
|
||||||
|
throw new InvalidOperationException("Node already in a tree.");
|
||||||
|
m_parent = parent;
|
||||||
|
X = (parent.X << 1) | (index is 0 or 3 ? 1 : 0);
|
||||||
|
Y = (parent.Y << 1) | (index is 0 or 1 ? 1 : 0);
|
||||||
|
Z = parent.Z + 1;
|
||||||
|
UpdateChildren();
|
||||||
|
}
|
||||||
|
void DetachFromParent() => m_parent = null;
|
||||||
|
void UpdateChildren() {
|
||||||
|
if (m_children != null) {
|
||||||
|
for (int i = 0; i < m_children.Length; i++) {
|
||||||
|
m_children[i].AttachToParent(this, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[JsonIgnore] public int X { get; private set; }
|
||||||
|
[JsonIgnore] public int Y { get; private set; }
|
||||||
|
[JsonIgnore] public int Z { get; private set; }
|
||||||
|
public RegionData Data { get; set; }
|
||||||
|
|
||||||
|
public QuadTreeNode Get(Vector2 pos) {
|
||||||
|
if ((pos.x is < 0 or >= 1) || (pos.y is < 0 or >= 1))
|
||||||
|
return null;
|
||||||
|
if (m_children == null)
|
||||||
|
return this;
|
||||||
|
Vector2 subPos = pos * 2;
|
||||||
|
subPos.x %= 1;
|
||||||
|
subPos.y %= 1;
|
||||||
|
return pos.x >= 0.5f
|
||||||
|
? (pos.y >= 0.5f ? m_children[0] : m_children[3]).Get(subPos)
|
||||||
|
: (pos.y >= 0.5f ? m_children[1] : m_children[2]).Get(subPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Merge() {
|
||||||
|
Children = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Split() {
|
||||||
|
Children = new QuadTreeNode[] {
|
||||||
|
new() { Data = Data.Copy() },
|
||||||
|
new() { Data = Data.Copy() },
|
||||||
|
new() { Data = Data.Copy() },
|
||||||
|
new() { Data = Data.Copy() },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sealed record RegionData(string Id) {
|
||||||
|
public string Id { get; set; } = Id;
|
||||||
|
public RegionData Copy() => (RegionData)MemberwiseClone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 225b67dcce9247b4c806e435b34695d2
|
guid: fd7b70d11ebfe324e830806e394cc334
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
68
Assets/Cryville.EEW.Unity/Map/RegionView.cs
Normal file
68
Assets/Cryville.EEW.Unity/Map/RegionView.cs
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Cryville.EEW.Unity.Map {
|
||||||
|
sealed class RegionView : MonoBehaviour {
|
||||||
|
[SerializeField]
|
||||||
|
SpriteRenderer m_spriteRenderer;
|
||||||
|
|
||||||
|
Color _color;
|
||||||
|
|
||||||
|
bool m_isHovered;
|
||||||
|
public bool IsHovered {
|
||||||
|
get => m_isHovered;
|
||||||
|
set {
|
||||||
|
m_isHovered = value;
|
||||||
|
UpdateColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool m_isSelected;
|
||||||
|
public bool IsSelected {
|
||||||
|
get => m_isSelected;
|
||||||
|
set {
|
||||||
|
m_isSelected = value;
|
||||||
|
UpdateColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool m_isLeaf = true;
|
||||||
|
public bool IsLeaf {
|
||||||
|
get => m_isLeaf;
|
||||||
|
set {
|
||||||
|
m_isLeaf = value;
|
||||||
|
UpdateColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string m_id;
|
||||||
|
public string Id {
|
||||||
|
get => m_id;
|
||||||
|
set {
|
||||||
|
m_id = value;
|
||||||
|
unchecked {
|
||||||
|
uint hash = (uint)value.GetHashCode();
|
||||||
|
_color = Color.HSVToRGB(((hash >> 24) ^ ((hash >> 16) & 0xff) ^ ((hash >> 8) & 0xff) ^ (hash & 0xff)) / (float)0xff, 1, 1);
|
||||||
|
}
|
||||||
|
UpdateColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Init(int x, int y, int z) {
|
||||||
|
float scale = 1f / (1 << z);
|
||||||
|
transform.localScale = new Vector3(scale, scale, 1);
|
||||||
|
transform.localPosition = new Vector3(x * scale, y * scale - 1, -1 - z / 100f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateColor() {
|
||||||
|
if (!m_isLeaf)
|
||||||
|
_color.a = 0.0f;
|
||||||
|
else if (m_isSelected)
|
||||||
|
_color.a = 0.6f;
|
||||||
|
else if (m_isHovered)
|
||||||
|
_color.a = 0.4f;
|
||||||
|
else
|
||||||
|
_color.a = 0.2f;
|
||||||
|
m_spriteRenderer.color = _color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: f0dddddc28f728c42a1fed80ba8f95cc
|
guid: c57a0e86eb63b6048ba265e9d98e84f6
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@@ -1,4 +1,5 @@
|
|||||||
using Cryville.EEW.Colors;
|
using Cryville.EEW.Colors;
|
||||||
|
using Cryville.EEW.Core;
|
||||||
using Cryville.EEW.Core.Colors;
|
using Cryville.EEW.Core.Colors;
|
||||||
using Cryville.EEW.FERegion;
|
using Cryville.EEW.FERegion;
|
||||||
using Cryville.EEW.Map;
|
using Cryville.EEW.Map;
|
||||||
@@ -25,8 +26,24 @@ namespace Cryville.EEW.Unity {
|
|||||||
public IColorScheme ColorScheme { get; private set; } = new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.Instance);
|
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 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 ISubColorScheme TextColorScheme { get; private set; } = new DefaultTextColorScheme(Color.White, Color.Black);
|
||||||
public ILocationConverter LocationConverter => new FERegionLongConverter(); // TODO TTS
|
public float HillshadeLayerOpacity { get; private set; } = 1;
|
||||||
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() };
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
public bool NameLocation(double lat, double lon, CultureInfo localCulture, ref CultureInfo targetCulture, out string name) {
|
||||||
|
int specificity = _infoLocationSpecificity;
|
||||||
|
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 TimeZoneInfo OverrideTimeZone { get; private set; }
|
||||||
public bool DoDisplayTimeZone { get; private set; } = true;
|
public bool DoDisplayTimeZone { get; private set; } = true;
|
||||||
@@ -101,9 +118,21 @@ namespace Cryville.EEW.Unity {
|
|||||||
"SREV" => new DefaultTextColorScheme(Color.White, Color.FromArgb(28, 28, 28), 0.555f),
|
"SREV" => new DefaultTextColorScheme(Color.White, Color.FromArgb(28, 28, 28), 0.555f),
|
||||||
_ => new DefaultTextColorScheme(Color.White, Color.Black),
|
_ => new DefaultTextColorScheme(Color.White, Color.Black),
|
||||||
};
|
};
|
||||||
|
HillshadeLayerOpacity = config.HillshadeLayerOpacity;
|
||||||
|
_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);
|
OverrideTimeZone = ParseTimeZone(config.OverrideTimeZone);
|
||||||
DoDisplayTimeZone = config.DoDisplayTimeZone;
|
DoDisplayTimeZone = config.DoDisplayTimeZone;
|
||||||
DoSwitchBackToHistory = config.DoSwitchBackToHistory;
|
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;
|
EventSources = config.EventSources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@ using System.IO;
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Cryville.EEW.Unity {
|
namespace Cryville.EEW.Unity {
|
||||||
class SoundPlayer : Core.SoundPlayer {
|
class SoundPlayer : Core.Audio.SoundPlayer {
|
||||||
public SoundPlayer() : base(GetEngineList(), AudioUsage.NotificationEvent) { }
|
public SoundPlayer() : base(GetEngineList(), AudioUsage.NotificationEvent) { }
|
||||||
static List<Type> GetEngineList() => new() {
|
static List<Type> GetEngineList() => new() {
|
||||||
typeof(Audio.Wasapi.MMDeviceEnumeratorWrapper),
|
typeof(Audio.Wasapi.MMDeviceEnumeratorWrapper),
|
||||||
@@ -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);
|
||||||
|
@@ -1,25 +1,53 @@
|
|||||||
|
using SpeechLib;
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Cryville.EEW.Unity {
|
namespace Cryville.EEW.Unity {
|
||||||
class TTSWorker : Core.TTSWorker {
|
class TTSWorker : Core.Audio.TTSWorker {
|
||||||
public TTSWorker() : base(CreateSoundPlayer()) { }
|
readonly ISpVoice _voice;
|
||||||
|
|
||||||
|
public TTSWorker() : base(CreateSoundPlayer()) {
|
||||||
|
App.MainLogger.Log(1, "Audio", null, "Initializing TTS worker");
|
||||||
|
try {
|
||||||
|
_voice = new SpVoiceClass();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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),
|
||||||
|
(uint)(SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak),
|
||||||
|
out _
|
||||||
|
);
|
||||||
|
App.MainLogger.Log(0, "Audio", null, "TTS ({0}): {1}", culture, content);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void StopCurrent() { }
|
protected override void StopCurrent() {
|
||||||
|
if (_voice == null) return;
|
||||||
|
App.MainLogger.Log(0, "Audio", null, "TTS stopping current");
|
||||||
|
_voice.Skip("SENTENCE", int.MaxValue, out _);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
37
Assets/Cryville.EEW.Unity/UI/Dialog.cs
Normal file
37
Assets/Cryville.EEW.Unity/UI/Dialog.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using Cryville.Common.Unity;
|
||||||
|
using Cryville.Common.Unity.UI;
|
||||||
|
using System.Globalization;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Cryville.EEW.Unity.UI {
|
||||||
|
public class Dialog : MonoBehaviour {
|
||||||
|
public static Dialog Instance { get; private set; }
|
||||||
|
|
||||||
|
[SerializeField] CanvasGroup m_mask;
|
||||||
|
PropertyTweener<float> _groupAlphaTweener;
|
||||||
|
|
||||||
|
[SerializeField] TMPLocalizedText m_title;
|
||||||
|
[SerializeField] TMPLocalizedText m_message;
|
||||||
|
|
||||||
|
void Awake() {
|
||||||
|
Instance = this;
|
||||||
|
|
||||||
|
m_mask.gameObject.SetActive(false);
|
||||||
|
_groupAlphaTweener = new(() => m_mask.alpha, v => m_mask.alpha = v, Tweeners.Single);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Show(string title, string message) {
|
||||||
|
Show(SharedCultures.CurrentUICulture, title, message);
|
||||||
|
}
|
||||||
|
public void Show(CultureInfo culture, string title, string message) {
|
||||||
|
m_title.SetText(title, culture);
|
||||||
|
m_message.SetText(message, culture);
|
||||||
|
m_mask.gameObject.SetActive(true);
|
||||||
|
_groupAlphaTweener.Start(1, 0.2f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update() {
|
||||||
|
_groupAlphaTweener.Advance(Time.deltaTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Cryville.EEW.Unity/UI/Dialog.cs.meta
Normal file
11
Assets/Cryville.EEW.Unity/UI/Dialog.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f1b4f209f34bc6e4c8e13aeb4dd5789d
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: -5
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@@ -14,9 +14,12 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
[SerializeField] GameObject m_listViewRail;
|
[SerializeField] GameObject m_listViewRail;
|
||||||
[SerializeField] GameObject m_expander;
|
[SerializeField] GameObject m_expander;
|
||||||
|
|
||||||
void Start() {
|
void OnEnable() {
|
||||||
m_groupHeader.onClick.AddListener(OnGroupHeaderClicked);
|
m_groupHeader.onClick.AddListener(OnGroupHeaderClicked);
|
||||||
}
|
}
|
||||||
|
void OnDisable() {
|
||||||
|
m_groupHeader.onClick.RemoveListener(OnGroupHeaderClicked);
|
||||||
|
}
|
||||||
void OnGroupHeaderClicked() {
|
void OnGroupHeaderClicked() {
|
||||||
SetExpanded(!m_listViewContainer.activeSelf);
|
SetExpanded(!m_listViewContainer.activeSelf);
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
child.SetViewModel(e);
|
child.SetViewModel(e);
|
||||||
child.transform.SetParent(m_listView, false);
|
child.transform.SetParent(m_listView, false);
|
||||||
_displayingViews.Add(child);
|
_displayingViews.Add(child);
|
||||||
|
OnDisplayingViewsChanged();
|
||||||
|
|
||||||
SwitchTo(_displayingReports.Count - 1);
|
SwitchTo(_displayingReports.Count - 1);
|
||||||
|
|
||||||
@@ -37,6 +38,7 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
child.SetParent(null, false);
|
child.SetParent(null, false);
|
||||||
Destroy(child.gameObject);
|
Destroy(child.gameObject);
|
||||||
_displayingViews.RemoveAt(index);
|
_displayingViews.RemoveAt(index);
|
||||||
|
OnDisplayingViewsChanged();
|
||||||
|
|
||||||
if (_displayingReports.Count == 0) {
|
if (_displayingReports.Count == 0) {
|
||||||
m_currentView.gameObject.SetActive(false);
|
m_currentView.gameObject.SetActive(false);
|
||||||
@@ -49,6 +51,14 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
|
|
||||||
if (_displayingReports.Count <= 1) m_listView.gameObject.SetActive(false);
|
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() {
|
void Awake() {
|
||||||
if (Instance != null) {
|
if (Instance != null) {
|
||||||
@@ -63,6 +73,7 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
|
|
||||||
int _index = -1;
|
int _index = -1;
|
||||||
float _tickDown;
|
float _tickDown;
|
||||||
|
float _maxBaseDuration;
|
||||||
void Update() {
|
void Update() {
|
||||||
if (_displayingReports.Count == 0) return;
|
if (_displayingReports.Count == 0) return;
|
||||||
_tickDown -= Time.deltaTime;
|
_tickDown -= Time.deltaTime;
|
||||||
@@ -77,12 +88,15 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
_index = index;
|
_index = index;
|
||||||
var e = _displayingReports[index];
|
var e = _displayingReports[index];
|
||||||
m_currentView.SetViewModel(e, true);
|
m_currentView.SetViewModel(e, true);
|
||||||
var keyProp = e.Properties.FirstOrDefault();
|
|
||||||
_displayingViews[_index].SetCurrent(true);
|
_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);
|
m_currentView.gameObject.SetActive(true);
|
||||||
Worker.Instance.SetCurrent(e);
|
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) {
|
public void OnItemClicked(ReportViewModel viewModel) {
|
||||||
int index = _displayingReports.IndexOf(viewModel);
|
int index = _displayingReports.IndexOf(viewModel);
|
||||||
if (index == -1) return;
|
if (index == -1) return;
|
||||||
|
@@ -27,7 +27,7 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
}
|
}
|
||||||
void SetView(float mainSeverity, string title, string location, CultureInfo culture) {
|
void SetView(float mainSeverity, string title, string location, CultureInfo culture) {
|
||||||
SetSeverity(mainSeverity);
|
SetSeverity(mainSeverity);
|
||||||
SetText(m_textView, string.Format("{0} {1}", title, location), culture);
|
SetText(m_textView, string.Format(culture, "{0} {1}", title, location), culture);
|
||||||
}
|
}
|
||||||
static void SetText(TMPLocalizedText view, string text, CultureInfo culture) {
|
static void SetText(TMPLocalizedText view, string text, CultureInfo culture) {
|
||||||
if (string.IsNullOrWhiteSpace(text)) {
|
if (string.IsNullOrWhiteSpace(text)) {
|
||||||
@@ -47,9 +47,12 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
void Awake() {
|
void Awake() {
|
||||||
_dockRatioTweener = new(() => m_dockLayoutGroup.DockOccupiedRatio, v => m_dockLayoutGroup.DockOccupiedRatio = v, Tweeners.Single);
|
_dockRatioTweener = new(() => m_dockLayoutGroup.DockOccupiedRatio, v => m_dockLayoutGroup.DockOccupiedRatio = v, Tweeners.Single);
|
||||||
}
|
}
|
||||||
void Start() {
|
void OnEnable() {
|
||||||
m_button.onClick.AddListener(OnViewClicked);
|
m_button.onClick.AddListener(OnViewClicked);
|
||||||
}
|
}
|
||||||
|
void OnDisable() {
|
||||||
|
m_button.onClick.RemoveListener(OnViewClicked);
|
||||||
|
}
|
||||||
void OnViewClicked() {
|
void OnViewClicked() {
|
||||||
EventOngoingListView.Instance.OnItemClicked(_viewModel);
|
EventOngoingListView.Instance.OnItemClicked(_viewModel);
|
||||||
}
|
}
|
||||||
|
@@ -14,9 +14,12 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
[SerializeField] TMPLocalizedText m_revisionView;
|
[SerializeField] TMPLocalizedText m_revisionView;
|
||||||
ReportViewModel _viewModel;
|
ReportViewModel _viewModel;
|
||||||
|
|
||||||
protected virtual void Start() {
|
protected virtual void OnEnable() {
|
||||||
if (m_reportViewButton != null) m_reportViewButton.onClick.AddListener(OnViewClicked);
|
if (m_reportViewButton != null) m_reportViewButton.onClick.AddListener(OnViewClicked);
|
||||||
}
|
}
|
||||||
|
protected virtual void OnDisable() {
|
||||||
|
if (m_reportViewButton != null) m_reportViewButton.onClick.RemoveListener(OnViewClicked);
|
||||||
|
}
|
||||||
void OnViewClicked() {
|
void OnViewClicked() {
|
||||||
Worker.Instance.SetSelected(_viewModel);
|
Worker.Instance.SetSelected(_viewModel);
|
||||||
}
|
}
|
||||||
|
@@ -8,10 +8,14 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
|
|
||||||
[SerializeField] Button m_revisionViewContainerButton;
|
[SerializeField] Button m_revisionViewContainerButton;
|
||||||
|
|
||||||
protected override void Start() {
|
protected override void OnEnable() {
|
||||||
base.Start();
|
base.OnEnable();
|
||||||
m_revisionViewContainerButton.onClick.AddListener(OnRevisionViewClicked);
|
m_revisionViewContainerButton.onClick.AddListener(OnRevisionViewClicked);
|
||||||
}
|
}
|
||||||
|
protected override void OnDisable() {
|
||||||
|
base.OnDisable();
|
||||||
|
m_revisionViewContainerButton.onClick.RemoveListener(OnRevisionViewClicked);
|
||||||
|
}
|
||||||
void OnRevisionViewClicked() {
|
void OnRevisionViewClicked() {
|
||||||
m_listView.gameObject.SetActive(!m_listView.gameObject.activeSelf);
|
m_listView.gameObject.SetActive(!m_listView.gameObject.activeSelf);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.Text;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@@ -11,17 +12,30 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
_textView = GetComponent<TMP_Text>();
|
_textView = GetComponent<TMP_Text>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readonly StringBuilder _sb = new();
|
||||||
|
readonly char[] _buffer = new char[256];
|
||||||
void Update() {
|
void Update() {
|
||||||
_textView.text = string.Format(
|
_sb.Clear();
|
||||||
|
_sb.AppendFormat(
|
||||||
CultureInfo.InvariantCulture,
|
CultureInfo.InvariantCulture,
|
||||||
"FPS: i{0:0} / s{1:0}\nSMem: {2:N0} / {3:N0}\nIMem: {4:N0} / {5:N0}",
|
"FPS: i{0:0} / s{1:0}\n",
|
||||||
1 / Time.deltaTime,
|
1 / Time.deltaTime,
|
||||||
1 / Time.smoothDeltaTime,
|
1 / Time.smoothDeltaTime
|
||||||
|
);
|
||||||
|
_sb.AppendFormat(
|
||||||
|
CultureInfo.InvariantCulture,
|
||||||
|
"SMem: {0:N0} / {1:N0}\n",
|
||||||
UnityEngine.Profiling.Profiler.GetMonoUsedSizeLong(),
|
UnityEngine.Profiling.Profiler.GetMonoUsedSizeLong(),
|
||||||
UnityEngine.Profiling.Profiler.GetMonoHeapSizeLong(),
|
UnityEngine.Profiling.Profiler.GetMonoHeapSizeLong()
|
||||||
|
);
|
||||||
|
_sb.AppendFormat(
|
||||||
|
CultureInfo.InvariantCulture,
|
||||||
|
"IMem: {0:N0} / {1:N0}",
|
||||||
UnityEngine.Profiling.Profiler.GetTotalAllocatedMemoryLong(),
|
UnityEngine.Profiling.Profiler.GetTotalAllocatedMemoryLong(),
|
||||||
UnityEngine.Profiling.Profiler.GetTotalReservedMemoryLong()
|
UnityEngine.Profiling.Profiler.GetTotalReservedMemoryLong()
|
||||||
);
|
);
|
||||||
|
_sb.CopyTo(0, _buffer, _sb.Length);
|
||||||
|
_textView.SetText(_buffer, 0, _sb.Length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@@ -19,7 +18,7 @@ namespace Cryville.EEW.Unity.UI {
|
|||||||
time = TimeZoneInfo.ConvertTime(time, timeZone, tTimeZone);
|
time = TimeZoneInfo.ConvertTime(time, timeZone, tTimeZone);
|
||||||
else
|
else
|
||||||
tTimeZone = timeZone;
|
tTimeZone = timeZone;
|
||||||
_textView.text = SharedSettings.Instance.DoDisplayTimeZone ? string.Format(CultureInfo.CurrentCulture, "{0:G} ({1})", time, tTimeZone.ToTimeZoneString()) : time.ToString(CultureInfo.CurrentCulture);
|
_textView.text = SharedSettings.Instance.DoDisplayTimeZone ? string.Format(SharedCultures.CurrentCulture, "{0:G} ({1})", time, tTimeZone.ToTimeZoneString()) : time.ToString(SharedCultures.CurrentCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,10 @@ 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.FANStudio;
|
||||||
|
using Cryville.EEW.FANStudio.TTS;
|
||||||
|
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;
|
||||||
@@ -17,7 +21,6 @@ using Cryville.EEW.Unity.UI;
|
|||||||
using Cryville.EEW.UpdateChecker;
|
using Cryville.EEW.UpdateChecker;
|
||||||
using Cryville.EEW.USGS;
|
using Cryville.EEW.USGS;
|
||||||
using Cryville.EEW.Wolfx;
|
using Cryville.EEW.Wolfx;
|
||||||
using Cryville.EEW.Wolfx.Model;
|
|
||||||
using Cryville.EEW.Wolfx.TTS;
|
using Cryville.EEW.Wolfx.TTS;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
@@ -50,35 +53,52 @@ namespace Cryville.EEW.Unity {
|
|||||||
}
|
}
|
||||||
Instance = this;
|
Instance = this;
|
||||||
|
|
||||||
App.Init();
|
try {
|
||||||
|
App.Init();
|
||||||
|
|
||||||
_worker = new(new TTSWorker());
|
_worker = new(new TTSWorker());
|
||||||
_grouper = new ReportGrouper();
|
_grouper = new ReportGrouper();
|
||||||
_cancellationTokenSource = new();
|
_cancellationTokenSource = new();
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
Dialog.Instance.Show("FATAL ERROR", ex.ToString());
|
||||||
|
throw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Start() {
|
void Start() {
|
||||||
LocalizedResources.Init(new LocalizedResourcesManager());
|
try {
|
||||||
RegisterViewModelGenerators(_worker);
|
App.MainLogger.Log(1, "App", null, "Initializing localized resources manager");
|
||||||
RegisterTTSMessageGenerators(_worker);
|
LocalizedResources.Init(new LocalizedResourcesManager());
|
||||||
BuildWorkers();
|
RegisterViewModelGenerators(_worker);
|
||||||
_worker.RVMGeneratorContext = SharedSettings.Instance;
|
RegisterTTSMessageGenerators(_worker);
|
||||||
_worker.TTSMessageGeneratorContext = SharedSettings.Instance;
|
BuildWorkers();
|
||||||
_ongoingReportManager.Changed += OnOngoingReported;
|
_worker.RVMGeneratorContext = SharedSettings.Instance;
|
||||||
_worker.Reported += OnReported;
|
_worker.TTSMessageGeneratorContext = SharedSettings.Instance;
|
||||||
_grouper.GroupUpdated += OnGroupUpdated;
|
_worker.RVMCulture = SharedSettings.Instance.RVMCulture;
|
||||||
_grouper.GroupRemoved += OnGroupRemoved;
|
_worker.SetTTSCultures(SharedSettings.Instance.TTSCultures ?? new TTSCultureConfig[0]);
|
||||||
Task.Run(() => GatewayVerify(_cancellationTokenSource.Token)).ContinueWith(task => {
|
_worker.IgnoreLanguageVariant = SharedSettings.Instance.DoIgnoreLanguageVariant;
|
||||||
if (task.IsFaulted) {
|
_ongoingReportManager.Changed += OnOngoingReported;
|
||||||
OnReported(this, new() { Title = task.Exception.Message });
|
_worker.Reported += OnReported;
|
||||||
return;
|
_grouper.GroupUpdated += OnGroupUpdated;
|
||||||
}
|
_grouper.GroupRemoved += OnGroupRemoved;
|
||||||
_verified = true;
|
App.MainLogger.Log(1, "App", null, "Worker ready");
|
||||||
_uiActionQueue.Enqueue(() => m_connectingHint.SetActive(false));
|
Task.Run(() => GatewayVerify(_cancellationTokenSource.Token)).ContinueWith(task => {
|
||||||
Task.Run(() => ScheduledGatewayVerify(_cancellationTokenSource, _cancellationTokenSource.Token));
|
if (task.IsFaulted) {
|
||||||
Task.Run(() => _worker.RunAsync(_cancellationTokenSource.Token));
|
OnReported(this, new() { Title = task.Exception.Message });
|
||||||
Task.Run(() => _ongoingReportManager.RunAsync(_cancellationTokenSource.Token));
|
return;
|
||||||
}, TaskScheduler.Current);
|
}
|
||||||
|
_verified = true;
|
||||||
|
_uiActionQueue.Enqueue(() => m_connectingHint.SetActive(false));
|
||||||
|
Task.Run(() => ScheduledGatewayVerify(_cancellationTokenSource, _cancellationTokenSource.Token));
|
||||||
|
Task.Run(() => _worker.RunAsync(_cancellationTokenSource.Token));
|
||||||
|
Task.Run(() => _ongoingReportManager.RunAsync(_cancellationTokenSource.Token));
|
||||||
|
}, TaskScheduler.Current);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
Dialog.Instance.Show("FATAL ERROR", ex.ToString());
|
||||||
|
throw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDestroy() {
|
void OnDestroy() {
|
||||||
@@ -87,72 +107,103 @@ namespace Cryville.EEW.Unity {
|
|||||||
_ongoingReportManager.Dispose();
|
_ongoingReportManager.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RegisterViewModelGenerators(CoreWorker worker) {
|
CENCEarthquakeRVMGenerator _cencEarthquakeRVMGenerator;
|
||||||
|
void RegisterViewModelGenerators(CoreWorker worker) {
|
||||||
worker.RegisterViewModelGenerator(new BMKGEarthquakeRVMGenerator());
|
worker.RegisterViewModelGenerator(new BMKGEarthquakeRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new CENCEarthquakeRVMGenerator());
|
worker.RegisterViewModelGenerator(new CEAEEWRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(_cencEarthquakeRVMGenerator = new CENCEarthquakeRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator());
|
worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator());
|
worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator());
|
worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator());
|
worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new EMSCRealTimeEventRVMGenerator());
|
worker.RegisterViewModelGenerator(new EMSCRealTimeEventRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new FujianEEWRVMGenerator());
|
worker.RegisterViewModelGenerator(new FANStudio.FujianEEWRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new Wolfx.FujianEEWRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new GeoNetQuakeHistoryRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new GeoNetQuakeRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new GeoNetStrongRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator());
|
worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new ICLEEWRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator());
|
worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator());
|
worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new NOAAAtomRVMGenerator());
|
worker.RegisterViewModelGenerator(new NOAAAtomRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new QuakeMLEventRVMGenerator());
|
var quakemlEventRVMGenerator = new QuakeMLEventRVMGenerator();
|
||||||
worker.RegisterViewModelGenerator(new SichuanEEWRVMGenerator());
|
quakemlEventRVMGenerator.AddExtension(new USGSQuakeMLExtension());
|
||||||
|
worker.RegisterViewModelGenerator(quakemlEventRVMGenerator);
|
||||||
|
worker.RegisterViewModelGenerator(new FANStudio.SichuanEEWRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new Wolfx.SichuanEEWRVMGenerator());
|
||||||
|
worker.RegisterViewModelGenerator(new USGSContoursRVMGenerator());
|
||||||
worker.RegisterViewModelGenerator(new VersionRVMGenerator());
|
worker.RegisterViewModelGenerator(new VersionRVMGenerator());
|
||||||
}
|
}
|
||||||
static void RegisterTTSMessageGenerators(CoreWorker worker) {
|
CENCEarthquakeTTSMessageGenerator _cencEarthquakeTTSMessageGenerator;
|
||||||
|
void RegisterTTSMessageGenerators(CoreWorker worker) {
|
||||||
worker.RegisterTTSMessageGenerator(new BMKGEarthquakeTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new BMKGEarthquakeTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new CENCEarthquakeTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CEAEEWTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(_cencEarthquakeTTSMessageGenerator = new CENCEarthquakeTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new FujianEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new FANStudio.TTS.FujianEEWTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new Wolfx.TTS.FujianEEWTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new GeoNetQuakeHistoryTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new GeoNetQuakeTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new GeoNetStrongTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new ICLEEWTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator());
|
||||||
worker.RegisterTTSMessageGenerator(new SichuanEEWTTSMessageGenerator());
|
worker.RegisterTTSMessageGenerator(new FANStudio.TTS.SichuanEEWTTSMessageGenerator());
|
||||||
|
worker.RegisterTTSMessageGenerator(new Wolfx.TTS.SichuanEEWTTSMessageGenerator());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _verified;
|
bool _verified;
|
||||||
void BuildWorkers() {
|
void BuildWorkers() {
|
||||||
#if UNITY_EDITOR
|
App.MainLogger.Log(1, "App", null, "Building workers");
|
||||||
|
#if false//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")));
|
||||||
|
_worker.AddWorker(new FANStudioWorker<FANStudio.Model.CEAEEW>(new("ws://localhost:9995/fan/cea")));
|
||||||
_worker.AddWorker(new CWAReportWorker<Tsunami>(new Uri("http://localhost:9095/E-A0014-001.json"), "1"));
|
_worker.AddWorker(new CWAReportWorker<Tsunami>(new Uri("http://localhost:9095/E-A0014-001.json"), "1"));
|
||||||
_worker.AddWorker(new CWAReportWorker<Earthquake>(new Uri("http://localhost:9095/E-A0015-001.json"), "1"));
|
_worker.AddWorker(new CWAReportWorker<Earthquake>(new Uri("http://localhost:9095/E-A0015-001.json"), "1"));
|
||||||
_worker.AddWorker(new CWAReportWorker<Earthquake>(new Uri("http://localhost:9095/E-A0016-001.json"), "1"));
|
_worker.AddWorker(new CWAReportWorker<Earthquake>(new Uri("http://localhost:9095/E-A0016-001.json"), "1"));
|
||||||
BMKGOpenDataWorker bmkgWorker = new(new Uri("http://localhost:9095/autogempa.json"));
|
BMKGOpenDataWorker bmkgWorker = new(new Uri("http://localhost:9095/autogempa.json"));
|
||||||
bmkgWorker.SetDataUris(new Uri[] { new("http://localhost:9095/gempadirasakan.json") });
|
bmkgWorker.SetDataUris(new Uri[] { new("http://localhost:9095/gempadirasakan.json") });
|
||||||
_worker.AddWorker(bmkgWorker);
|
_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"));
|
_worker.AddWorker(new UpdateCheckerWorker(typeof(Worker).Assembly.GetName().Version?.ToString(3) ?? "", "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")),
|
||||||
|
FANStudioEventSourceConfig fanStudio => fanStudio.Subtype switch {
|
||||||
|
"cea" => new FANStudioWorker<FANStudio.Model.CEAEEW>(new("wss://ws.fanstudio.tech/cea")),
|
||||||
|
"sichuan" => new FANStudioWorker<FANStudio.Model.SichuanEEW>(new("wss://ws.fanstudio.tech/sichuan")),
|
||||||
|
"fujian" => new FANStudioWorker<FANStudio.Model.FujianEEW>(new("wss://ws.fanstudio.tech/fujian")),
|
||||||
|
_ => throw new InvalidOperationException("Unknown FAN Studio sub-type."),
|
||||||
|
},
|
||||||
|
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),
|
USGSEventSourceConfig usgs => BuildUSGSWorker(usgs.UseGeoJSONFeeds
|
||||||
WolfxEventSourceConfig wolfx => BuildWolfxWorkerFilter(new WolfxWorker(new Uri("wss://ws-api.wolfx.jp/all_eew")), wolfx),
|
? new USGSGeoJSONWorker(new Uri("https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php"))
|
||||||
|
: new USGSQuakeMLWorker(new Uri("https://earthquake.usgs.gov/earthquakes/feed/v1.0/quakeml.php"))
|
||||||
|
, usgs),
|
||||||
|
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."),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -163,25 +214,44 @@ namespace Cryville.EEW.Unity {
|
|||||||
worker.IsFilterWhitelist = config.IsFilterWhitelist;
|
worker.IsFilterWhitelist = config.IsFilterWhitelist;
|
||||||
return worker;
|
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 {
|
if (config.Filter != null) worker.SetFilter(config.Filter.Select(i => i switch {
|
||||||
"cenc_eew" => typeof(CENCEEW),
|
"cenc_eew" => typeof(Wolfx.Model.CENCEEW),
|
||||||
"cenc_eqlist" => typeof(WolfxEarthquakeList<CENCEarthquake>),
|
"cenc_eqlist" => typeof(Wolfx.Model.WolfxEarthquakeList<Wolfx.Model.CENCEarthquake>),
|
||||||
"cwa_eew" => typeof(CWAEEW),
|
"cwa_eew" => typeof(Wolfx.Model.CWAEEW),
|
||||||
"fj_eew" => typeof(FujianEEW),
|
"fj_eew" => typeof(Wolfx.Model.FujianEEW),
|
||||||
"jma_eew" => typeof(JMAEEW),
|
"jma_eew" => typeof(Wolfx.Model.JMAEEW),
|
||||||
"sc_eew" => typeof(SichuanEEW),
|
"sc_eew" => typeof(Wolfx.Model.SichuanEEW),
|
||||||
_ => throw new InvalidOperationException("Unknown Wolfx event type."),
|
_ => throw new InvalidOperationException("Unknown Wolfx event type."),
|
||||||
}));
|
}));
|
||||||
worker.IsFilterWhitelist = config.IsFilterWhitelist;
|
worker.IsFilterWhitelist = config.IsFilterWhitelist;
|
||||||
|
|
||||||
|
_cencEarthquakeRVMGenerator.UseRawLocationName
|
||||||
|
= _cencEarthquakeTTSMessageGenerator.UseRawLocationName
|
||||||
|
= config.UseRawCENCLocationName;
|
||||||
|
|
||||||
return worker;
|
return worker;
|
||||||
}
|
}
|
||||||
static BMKGOpenDataWorker BuildBMKGOpenDataWorkerUris(BMKGOpenDataWorker worker, BMKGOpenDataEventSourceConfig config) {
|
static BMKGOpenDataWorker BuildBMKGOpenDataWorkerUris(BMKGOpenDataWorker worker, BMKGOpenDataEventSourceConfig config) {
|
||||||
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 USGSQuakeMLWorker BuildUSGSQuakeMLWorkerUri(USGSQuakeMLWorker worker, USGSQuakeMLEventSourceConfig config) {
|
static GeoNetWorker BuildGeoNetWorker(GeoNetWorker worker, GeoNetEventSourceConfig pref) {
|
||||||
worker.SetFeedRelativeUri(new(string.Format(CultureInfo.InvariantCulture, "/earthquakes/feed/v1.0/summary/{0}.quakeml", config.Subtype), UriKind.Relative));
|
worker.MinimumMMI = pref.MinimumMMI;
|
||||||
|
worker.DoGetFullHistory = pref.DoGetFullHistory;
|
||||||
|
worker.DoGetStrongMotionInfo = pref.DoGetStrongMotionInfo;
|
||||||
|
return worker;
|
||||||
|
}
|
||||||
|
static USGSWorker BuildUSGSWorker(USGSWorker worker, USGSEventSourceConfig config) {
|
||||||
|
worker.SetFeedRelativeUri(new(string.Format(CultureInfo.InvariantCulture, "/earthquakes/feed/v1.0/summary/{0}{1}", config.Subtype, config.UseGeoJSONFeeds ? ".geojson" : ".quakeml"), UriKind.Relative));
|
||||||
|
if (worker is USGSGeoJSONWorker geojsonWorker) {
|
||||||
|
geojsonWorker.SetFilter(
|
||||||
|
config.Products
|
||||||
|
.Select(i => i.Split('/', 2))
|
||||||
|
.GroupBy(i => i[0])
|
||||||
|
.ToDictionary(g => g.Key, g => g.Select(i => i[1]))
|
||||||
|
);
|
||||||
|
}
|
||||||
return worker;
|
return worker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +260,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, "App", 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(() => {
|
||||||
|
2394
Assets/Main.unity
2394
Assets/Main.unity
File diff suppressed because it is too large
Load Diff
91
Assets/Materials/Multiply.mat
Normal file
91
Assets/Materials/Multiply.mat
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 8
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Multiply
|
||||||
|
m_Shader: {fileID: 4800000, guid: 0637d3d4bac33b34ea1fb084d1aa83c5, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords: []
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _AlphaTex:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _BumpMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailAlbedoMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailMask:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _DetailNormalMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _EmissionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _MetallicGlossMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _OcclusionMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ParallaxMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
|
m_Floats:
|
||||||
|
- PixelSnap: 0
|
||||||
|
- _BumpScale: 1
|
||||||
|
- _Cutoff: 0.5
|
||||||
|
- _DetailNormalMapScale: 1
|
||||||
|
- _DstBlend: 0
|
||||||
|
- _EnableExternalAlpha: 0
|
||||||
|
- _GlossMapScale: 1
|
||||||
|
- _Glossiness: 0.5
|
||||||
|
- _GlossyReflections: 1
|
||||||
|
- _Metallic: 0
|
||||||
|
- _Mode: 0
|
||||||
|
- _OcclusionStrength: 1
|
||||||
|
- _Parallax: 0.02
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
|
- _SrcBlend: 1
|
||||||
|
- _UVSec: 0
|
||||||
|
- _ZWrite: 1
|
||||||
|
m_Colors:
|
||||||
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _Flip: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _RendererColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
@@ -1,8 +1,8 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 4972abff193472e4bbef2dd0ec07b55e
|
guid: e2b4779e0934e3b45978a57b79d75597
|
||||||
NativeFormatImporter:
|
NativeFormatImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
mainObjectFileID: 0
|
mainObjectFileID: 2100000
|
||||||
userData:
|
userData:
|
||||||
assetBundleName:
|
assetBundleName:
|
||||||
assetBundleVariant:
|
assetBundleVariant:
|
BIN
Assets/Plugins/Analyzers/Cryville.EEW.Analyzer.dll
Normal file
BIN
Assets/Plugins/Analyzers/Cryville.EEW.Analyzer.dll
Normal file
Binary file not shown.
78
Assets/Plugins/Analyzers/Cryville.EEW.Analyzer.dll.meta
Normal file
78
Assets/Plugins/Analyzers/Cryville.EEW.Analyzer.dll.meta
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 88e8ae9c8ce06934ab7681fb678d7b00
|
||||||
|
labels:
|
||||||
|
- RoslynAnalyzer
|
||||||
|
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: 1
|
||||||
|
Exclude Linux64: 1
|
||||||
|
Exclude OSXUniversal: 1
|
||||||
|
Exclude Win: 1
|
||||||
|
Exclude Win64: 1
|
||||||
|
- first:
|
||||||
|
Android: Android
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: ARMv7
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
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: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Win64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Windows Store Apps: WindowsStoreApps
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
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>
|
@@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 2ade62400bece1a4f9093a91ca22b276
|
guid: 72ded0675457e0348809193a9c1092b5
|
||||||
TextScriptImporter:
|
TextScriptImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/Plugins/Cryville.EEW.CENCStrongGroundMotion.Map.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.CENCStrongGroundMotion.Map.dll
Normal file
Binary file not shown.
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 550171b48a648b34e9ce5f1aba6244f1
|
||||||
|
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.CENCStrongGroundMotion.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.CENCStrongGroundMotion.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.CENCStrongGroundMotion.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.CENCStrongGroundMotion.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0f848a4ea2f35e7449e584beee48c659
|
||||||
|
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:
|
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.FANStudio.Map.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.FANStudio.Map.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.FANStudio.Map.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.FANStudio.Map.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: decba95f87869fa4699fd22f50528285
|
||||||
|
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.FANStudio.TTS.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.FANStudio.TTS.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.FANStudio.TTS.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.FANStudio.TTS.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 50ac3fa1c3c1c7244820383f3c6f2617
|
||||||
|
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.FANStudio.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.FANStudio.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.FANStudio.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.FANStudio.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2c4be81d04cc2a345933d001819f2d96
|
||||||
|
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:
|
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:
|
BIN
Assets/Plugins/Cryville.EEW.GeoNet.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.GeoNet.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.GeoNet.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.GeoNet.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 590f9955e3e1e36458e2f7b807a05188
|
||||||
|
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:
|
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.
@@ -14,10 +14,10 @@
|
|||||||
The shared instance of the <see cref="T:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext" /> class.
|
The shared instance of the <see cref="T:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext" /> class.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.LocationConverter">
|
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NowcastWarningDelayTolerance">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NowcastWarningDelayTolerance">
|
<member name="M:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@)">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.TTS.ITTSMessageGeneratorContext">
|
<member name="T:Cryville.EEW.TTS.ITTSMessageGeneratorContext">
|
||||||
@@ -25,16 +25,22 @@
|
|||||||
Represents a context used in TTS message generators.
|
Represents a context used in TTS message generators.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.LocationConverter">
|
|
||||||
<summary>
|
|
||||||
The location converter.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NowcastWarningDelayTolerance">
|
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NowcastWarningDelayTolerance">
|
||||||
<summary>
|
<summary>
|
||||||
The delay tolerance before a nowcast warning event cannot trigger sounds and TTS.
|
The delay tolerance before a nowcast warning event cannot trigger sounds and TTS.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@)">
|
||||||
|
<summary>
|
||||||
|
Names a location in a culture.
|
||||||
|
</summary>
|
||||||
|
<param name="lat">The latitude of the location.</param>
|
||||||
|
<param name="lon">The longitude of the location.</param>
|
||||||
|
<param name="localCulture">The local culture supported by the event itself.</param>
|
||||||
|
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
|
||||||
|
<param name="name">The location name.</param>
|
||||||
|
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
|
||||||
|
</member>
|
||||||
<member name="T:Cryville.EEW.TTS.TTSEntry">
|
<member name="T:Cryville.EEW.TTS.TTSEntry">
|
||||||
<summary>
|
<summary>
|
||||||
Represents an entry sent to a TTS worker.
|
Represents an entry sent to a TTS worker.
|
||||||
@@ -101,7 +107,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.TTS.TTSEntry.IssueTime">
|
<member name="P:Cryville.EEW.TTS.TTSEntry.IssueTime">
|
||||||
<summary>
|
<summary>
|
||||||
The time when the entry is created.
|
The time when the entry is created in UTC.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
|
BIN
Assets/Plugins/Cryville.EEW.USGS.Map.dll
Normal file
BIN
Assets/Plugins/Cryville.EEW.USGS.Map.dll
Normal file
Binary file not shown.
33
Assets/Plugins/Cryville.EEW.USGS.Map.dll.meta
Normal file
33
Assets/Plugins/Cryville.EEW.USGS.Map.dll.meta
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 123d46d01924a434fbe65219e8baba1e
|
||||||
|
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:
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -30,17 +30,17 @@
|
|||||||
<param name="amount">The amount of phase to increment.</param>
|
<param name="amount">The amount of phase to increment.</param>
|
||||||
<returns>The next delay value.</returns>
|
<returns>The next delay value.</returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.EmptyLocationConverter">
|
<member name="T:Cryville.EEW.EmptyLocationNamer">
|
||||||
<summary>
|
<summary>
|
||||||
An empty <see cref="T:Cryville.EEW.ILocationConverter" />.
|
An empty <see cref="T:Cryville.EEW.ILocationNamer" />.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.EmptyLocationConverter.Instance">
|
<member name="P:Cryville.EEW.EmptyLocationNamer.Instance">
|
||||||
<summary>
|
<summary>
|
||||||
The shared instance of the <see cref="T:Cryville.EEW.EmptyLocationConverter" /> class.
|
The shared instance of the <see cref="T:Cryville.EEW.EmptyLocationNamer" /> class.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.EmptyLocationConverter.Convert(Cryville.EEW.INamedLocation,System.Globalization.CultureInfo@)">
|
<member name="M:Cryville.EEW.EmptyLocationNamer.Name(System.Double,System.Double,System.Globalization.CultureInfo@,System.Int32@)">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.GeoUtils">
|
<member name="T:Cryville.EEW.GeoUtils">
|
||||||
@@ -76,6 +76,20 @@
|
|||||||
The shared instance of the <see cref="T:Cryville.EEW.Heartbeat" /> class.
|
The shared instance of the <see cref="T:Cryville.EEW.Heartbeat" /> class.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.HttpExtensions">
|
||||||
|
<summary>
|
||||||
|
Provides a set of <see langword="static" /> methods related to HTTP.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.HttpExtensions.EnsureNonErrorStatusCode(System.Net.Http.HttpResponseMessage)">
|
||||||
|
<summary>
|
||||||
|
Throws an exception if the HTTP response has a client error status code (400~499) or a server error status code (500~599).
|
||||||
|
</summary>
|
||||||
|
<param name="response">The response message.</param>
|
||||||
|
<returns>The response message if there is no error.</returns>
|
||||||
|
<exception cref="T:System.InvalidOperationException">The response has a client error status code (400~499).</exception>
|
||||||
|
<exception cref="T:System.Net.Http.HttpRequestException">The response has a server error status code (500~599).</exception>
|
||||||
|
</member>
|
||||||
<member name="T:Cryville.EEW.HttpPullWorker">
|
<member name="T:Cryville.EEW.HttpPullWorker">
|
||||||
<summary>
|
<summary>
|
||||||
A source worker that pulls events with HTTP GET requests.
|
A source worker that pulls events with HTTP GET requests.
|
||||||
@@ -117,6 +131,34 @@
|
|||||||
<returns>The task.</returns>
|
<returns>The task.</returns>
|
||||||
<exception cref="T:System.InvalidOperationException">The server responses with an unhandled status code.</exception>
|
<exception cref="T:System.InvalidOperationException">The server responses with an unhandled status code.</exception>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.HttpPullWorker.HandleRawResponse(System.Net.Http.HttpResponseMessage,System.Threading.CancellationToken)">
|
||||||
|
<summary>
|
||||||
|
Handles a raw response message.
|
||||||
|
</summary>
|
||||||
|
<param name="response">The response message.</param>
|
||||||
|
<param name="cancellationToken">A cancellation token.</param>
|
||||||
|
<returns>A task.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.HttpPullWorker.TryGetAsync(System.Uri,System.Threading.CancellationToken,System.Boolean,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
Try to send a GET request to the specified URI.
|
||||||
|
</summary>
|
||||||
|
<param name="uri">The URI.</param>
|
||||||
|
<param name="cancellationToken">The cancellation token.</param>
|
||||||
|
<param name="retryOnErrorStatusCode">Whether to retry if the server responses with an error status code.</param>
|
||||||
|
<param name="retries">Times to retry before the request fails.</param>
|
||||||
|
<returns>The response message, or <see langword="null" /> if the request fails.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.HttpPullWorker.TrySendAsync(System.Func{System.Net.Http.HttpRequestMessage},System.Threading.CancellationToken,System.Boolean,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
Try to send a request to the specified URI.
|
||||||
|
</summary>
|
||||||
|
<param name="msgFactory">A function that creates the request message.</param>
|
||||||
|
<param name="cancellationToken">The cancellation token.</param>
|
||||||
|
<param name="retryOnErrorStatusCode">Whether to retry if the server responses with an error status code.</param>
|
||||||
|
<param name="retries">Times to retry before the request fails.</param>
|
||||||
|
<returns>The response message, or <see langword="null" /> if the request fails.</returns>
|
||||||
|
</member>
|
||||||
<member name="M:Cryville.EEW.HttpPullWorker.GetUri">
|
<member name="M:Cryville.EEW.HttpPullWorker.GetUri">
|
||||||
<summary>
|
<summary>
|
||||||
Gets the URI of the next request, usually based on <see cref="P:Cryville.EEW.HttpPullWorker.BaseUri" />.
|
Gets the URI of the next request, usually based on <see cref="P:Cryville.EEW.HttpPullWorker.BaseUri" />.
|
||||||
@@ -128,7 +170,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.HttpPullWorker.AfterHandled(System.Threading.CancellationToken)">
|
<member name="M:Cryville.EEW.HttpPullWorker.AfterHandled(System.Threading.CancellationToken)">
|
||||||
<summary>
|
<summary>
|
||||||
Called when a response is handled successfully, or when the server reponses with No Content (204) or Not Modified (304).
|
Called when a response is handled successfully, or when the server responses with a non-error status code (100~399).
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.HttpPullWorker.Handle(System.IO.Stream,System.Net.Http.Headers.HttpResponseHeaders,System.Threading.CancellationToken)">
|
<member name="M:Cryville.EEW.HttpPullWorker.Handle(System.IO.Stream,System.Net.Http.Headers.HttpResponseHeaders,System.Threading.CancellationToken)">
|
||||||
@@ -151,6 +193,52 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="ex">The exception.</param>
|
<param name="ex">The exception.</param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.IBuilder">
|
||||||
|
<summary>
|
||||||
|
Represents a builder that builds another object. May hold a set of properties used when constructing the target object.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.IBuilder.GetName(System.Globalization.CultureInfo@)">
|
||||||
|
<summary>
|
||||||
|
Gets a human-readable name of the builder.
|
||||||
|
</summary>
|
||||||
|
<param name="culture">The preferred culture of the name. When the method returns, set to the actual culture of the name.</param>
|
||||||
|
<remarks>
|
||||||
|
It is recommended to get the name from a <see cref="T:Cryville.EEW.LocalizedResource" />.
|
||||||
|
</remarks>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.IBuilder.Build(System.Globalization.CultureInfo@)">
|
||||||
|
<summary>
|
||||||
|
Builds the object.
|
||||||
|
</summary>
|
||||||
|
<param name="culture">The preferred culture of the object. When the method returns, set to the actual culture of the object.</param>
|
||||||
|
<returns>The built object.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.IBuilder`1">
|
||||||
|
<summary>
|
||||||
|
Represents a builder that builds another object. May hold a set of properties used when constructing the target object.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the target object.</typeparam>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.IBuilder`1.Build(System.Globalization.CultureInfo@)">
|
||||||
|
<summary>
|
||||||
|
Builds the object.
|
||||||
|
</summary>
|
||||||
|
<param name="culture">The preferred culture of the object. When the method returns, set to the actual culture of the object.</param>
|
||||||
|
<returns>The built object.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.SimpleBuilder`1">
|
||||||
|
<summary>
|
||||||
|
Represents a builder that builds another object with a parameterless constructor.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the target object.</typeparam>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.SimpleBuilder`1.GetName(System.Globalization.CultureInfo@)">
|
||||||
|
<inheritdoc />
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.SimpleBuilder`1.Build(System.Globalization.CultureInfo@)">
|
||||||
|
<inheritdoc />
|
||||||
|
</member>
|
||||||
<member name="T:Cryville.EEW.IGenerator`1">
|
<member name="T:Cryville.EEW.IGenerator`1">
|
||||||
<summary>
|
<summary>
|
||||||
Represents a generator that generates objects of a specific type from input objects.
|
Represents a generator that generates objects of a specific type from input objects.
|
||||||
@@ -213,18 +301,31 @@
|
|||||||
<param name="culture">The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object.</param>
|
<param name="culture">The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object.</param>
|
||||||
<returns>The generated object.</returns>
|
<returns>The generated object.</returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.ILocationConverter">
|
<member name="T:Cryville.EEW.ILocationNamer">
|
||||||
<summary>
|
<summary>
|
||||||
Represents a converter that converts a named location to a name in a specified culture.
|
Represents a namer that names a location in a specified culture.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.ILocationConverter.Convert(Cryville.EEW.INamedLocation,System.Globalization.CultureInfo@)">
|
<member name="M:Cryville.EEW.ILocationNamer.Name(System.Double,System.Double,System.Globalization.CultureInfo@,System.Int32@)">
|
||||||
<summary>
|
<summary>
|
||||||
Converts a named location to a name in a specified culture.
|
Names a location in a specified culture.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="location">The named location.</param>
|
<param name="lat">The latitude.</param>
|
||||||
|
<param name="lon">The longitude.</param>
|
||||||
<param name="culture">The preferred culture of the name. When the method returns, set to the actual culture of the name.</param>
|
<param name="culture">The preferred culture of the name. When the method returns, set to the actual culture of the name.</param>
|
||||||
<returns>The converted name.</returns>
|
<param name="specificity">The preferred specificity of the name. When the method returns, set to the actual specificity of the name.</param>
|
||||||
|
<returns>The name.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.IPropertiesHolder">
|
||||||
|
<summary>
|
||||||
|
Represents an object that holds a set of properties.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.IPropertiesHolder.GetProperties">
|
||||||
|
<summary>
|
||||||
|
Gets the properties of the object.
|
||||||
|
</summary>
|
||||||
|
<returns>The properties of the object.</returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.ISourceWorker">
|
<member name="T:Cryville.EEW.ISourceWorker">
|
||||||
<summary>
|
<summary>
|
||||||
@@ -349,6 +450,16 @@
|
|||||||
<returns>The string of the specified name in the resource.</returns>
|
<returns>The string of the specified name in the resource.</returns>
|
||||||
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The string of the specified name is not found.</exception>
|
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The string of the specified name is not found.</exception>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringOrDefault(Cryville.EEW.IMessageStringSet,System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
Gets a string in the string set, or a default string in the string set if not found.
|
||||||
|
</summary>
|
||||||
|
<param name="set">The string set.</param>
|
||||||
|
<param name="name">The name of the string.</param>
|
||||||
|
<param name="defaultName">The name of the default string.</param>
|
||||||
|
<returns>The string of the specified name in the resource, or the default string of the specified default name in the string set if not found.</returns>
|
||||||
|
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The default string of the specified default name is not found.</exception>
|
||||||
|
</member>
|
||||||
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringSetRequired(Cryville.EEW.IMessageStringSet,System.String)">
|
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringSetRequired(Cryville.EEW.IMessageStringSet,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
Gets a string set in the string set.
|
Gets a string set in the string set.
|
||||||
@@ -537,6 +648,61 @@
|
|||||||
<member name="P:Cryville.EEW.Models.GeoJSON.Feature.Properties">
|
<member name="P:Cryville.EEW.Models.GeoJSON.Feature.Properties">
|
||||||
<summary>The properties of the feature.</summary>
|
<summary>The properties of the feature.</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.Models.GeoJSON.Feature`1">
|
||||||
|
<summary>
|
||||||
|
Represents a spatially bounded thing.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the properties.</typeparam>
|
||||||
|
<param name="Id">A JSON string or number representing the commonly used identifier of the feature.</param>
|
||||||
|
<param name="Geometry">The geometry of the feature.</param>
|
||||||
|
<param name="Properties">The properties of the feature.</param>
|
||||||
|
<param name="BoundingBox">The bounding box.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.Models.GeoJSON.Feature`1.#ctor(System.Text.Json.JsonElement,Cryville.EEW.Models.GeoJSON.Geometry,`0,System.Double[])">
|
||||||
|
<summary>
|
||||||
|
Represents a spatially bounded thing.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the properties.</typeparam>
|
||||||
|
<param name="Id">A JSON string or number representing the commonly used identifier of the feature.</param>
|
||||||
|
<param name="Geometry">The geometry of the feature.</param>
|
||||||
|
<param name="Properties">The properties of the feature.</param>
|
||||||
|
<param name="BoundingBox">The bounding box.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.Feature`1.Id">
|
||||||
|
<summary>A JSON string or number representing the commonly used identifier of the feature.</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.Feature`1.Geometry">
|
||||||
|
<summary>The geometry of the feature.</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.Feature`1.Properties">
|
||||||
|
<summary>The properties of the feature.</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.Models.GeoJSON.IFeature`1">
|
||||||
|
<summary>
|
||||||
|
Represents a spatially bounded thing.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the properties.</typeparam>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.IFeature`1.Id">
|
||||||
|
<summary>
|
||||||
|
A JSON string or number representing the commonly used identifier of the feature.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.IFeature`1.Geometry">
|
||||||
|
<summary>
|
||||||
|
The geometry of the feature.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.IFeature`1.Properties">
|
||||||
|
<summary>
|
||||||
|
The properties of the feature.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.IFeature`1.BoundingBox">
|
||||||
|
<summary>
|
||||||
|
The bounding box.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:Cryville.EEW.Models.GeoJSON.FeatureCollection">
|
<member name="T:Cryville.EEW.Models.GeoJSON.FeatureCollection">
|
||||||
<summary>
|
<summary>
|
||||||
Represents a feature collection.
|
Represents a feature collection.
|
||||||
@@ -554,6 +720,25 @@
|
|||||||
<member name="P:Cryville.EEW.Models.GeoJSON.FeatureCollection.Features">
|
<member name="P:Cryville.EEW.Models.GeoJSON.FeatureCollection.Features">
|
||||||
<summary>The features.</summary>
|
<summary>The features.</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.Models.GeoJSON.FeatureCollection`1">
|
||||||
|
<summary>
|
||||||
|
Represents a feature collection.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the properties of the features.</typeparam>
|
||||||
|
<param name="Features">The features.</param>
|
||||||
|
<param name="BoundingBox">The bounding box.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.Models.GeoJSON.FeatureCollection`1.#ctor(Cryville.EEW.Models.GeoJSON.Feature{`0}[],System.Double[])">
|
||||||
|
<summary>
|
||||||
|
Represents a feature collection.
|
||||||
|
</summary>
|
||||||
|
<typeparam name="T">The type of the properties of the features.</typeparam>
|
||||||
|
<param name="Features">The features.</param>
|
||||||
|
<param name="BoundingBox">The bounding box.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.Models.GeoJSON.FeatureCollection`1.Features">
|
||||||
|
<summary>The features.</summary>
|
||||||
|
</member>
|
||||||
<member name="T:Cryville.EEW.Models.GeoJSON.GeoJSONObject">
|
<member name="T:Cryville.EEW.Models.GeoJSON.GeoJSONObject">
|
||||||
<summary>
|
<summary>
|
||||||
A Geometry, Feature, or collection of Features.
|
A Geometry, Feature, or collection of Features.
|
||||||
@@ -960,61 +1145,6 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="value">An instance of the <see cref="T:Cryville.EEW.Models.XmlSerializedDateTimeOffset" /> struct.</param>
|
<param name="value">An instance of the <see cref="T:Cryville.EEW.Models.XmlSerializedDateTimeOffset" /> struct.</param>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.INamedLocation">
|
|
||||||
<summary>
|
|
||||||
Represents a named location.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.INamedLocation.Name">
|
|
||||||
<summary>
|
|
||||||
The source name of the location.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.INamedLocation.Culture">
|
|
||||||
<summary>
|
|
||||||
The source culture of <see cref="P:Cryville.EEW.INamedLocation.Name" />.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.INamedLocation.Latitude">
|
|
||||||
<summary>
|
|
||||||
The latitude of the location.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.INamedLocation.Longitude">
|
|
||||||
<summary>
|
|
||||||
The longitude of the location.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:Cryville.EEW.NamedLocation">
|
|
||||||
<summary>
|
|
||||||
Represents a named location.
|
|
||||||
</summary>
|
|
||||||
<param name="Name">The source name of the location.</param>
|
|
||||||
<param name="Culture">The source culture of <paramref name="Name" />.</param>
|
|
||||||
<param name="Latitude">The latitude of the location.</param>
|
|
||||||
<param name="Longitude">The longitude of the location.</param>
|
|
||||||
</member>
|
|
||||||
<member name="M:Cryville.EEW.NamedLocation.#ctor(System.String,System.Globalization.CultureInfo,System.Double,System.Double)">
|
|
||||||
<summary>
|
|
||||||
Represents a named location.
|
|
||||||
</summary>
|
|
||||||
<param name="Name">The source name of the location.</param>
|
|
||||||
<param name="Culture">The source culture of <paramref name="Name" />.</param>
|
|
||||||
<param name="Latitude">The latitude of the location.</param>
|
|
||||||
<param name="Longitude">The longitude of the location.</param>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.NamedLocation.Name">
|
|
||||||
<summary>The source name of the location.</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.NamedLocation.Culture">
|
|
||||||
<summary>The source culture of <paramref name="Name" />.</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.NamedLocation.Latitude">
|
|
||||||
<summary>The latitude of the location.</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.NamedLocation.Longitude">
|
|
||||||
<summary>The longitude of the location.</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:Cryville.EEW.NonstandardDateTimeJsonConverter">
|
<member name="T:Cryville.EEW.NonstandardDateTimeJsonConverter">
|
||||||
<summary>
|
<summary>
|
||||||
Converts instances of the <see cref="T:System.DateTime" /> struct to or from JSON.
|
Converts instances of the <see cref="T:System.DateTime" /> struct to or from JSON.
|
||||||
@@ -1026,6 +1156,37 @@
|
|||||||
<member name="M:Cryville.EEW.NonstandardDateTimeJsonConverter.Write(System.Text.Json.Utf8JsonWriter,System.DateTime,System.Text.Json.JsonSerializerOptions)">
|
<member name="M:Cryville.EEW.NonstandardDateTimeJsonConverter.Write(System.Text.Json.Utf8JsonWriter,System.DateTime,System.Text.Json.JsonSerializerOptions)">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.ProgressiveDelay">
|
||||||
|
<summary>
|
||||||
|
A helper class that produces progressive delay.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Cryville.EEW.ProgressiveDelay.CurrentDelay">
|
||||||
|
<summary>
|
||||||
|
The delay to next tick.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.ProgressiveDelay.#ctor(System.Double,System.Double,System.Double)">
|
||||||
|
<summary>
|
||||||
|
Creates an instance of the <see cref="T:Cryville.EEW.ProgressiveDelay" /> class.
|
||||||
|
</summary>
|
||||||
|
<param name="baseDelay">The minimum delay.</param>
|
||||||
|
<param name="maxDelay">The maximum delay.</param>
|
||||||
|
<param name="delayMultiplier">The multiplier between adjacent delay values.</param>
|
||||||
|
<exception cref="T:System.ArgumentOutOfRangeException"><paramref name="baseDelay" /> is negative or zero. -or- <paramref name="maxDelay" /> is negative or zero. -or- <paramref name="delayMultiplier" /> is less than or equal to 1.</exception>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.ProgressiveDelay.Step(System.Double)">
|
||||||
|
<summary>
|
||||||
|
Decrements the current delay and ticks if the delay has run over.
|
||||||
|
</summary>
|
||||||
|
<param name="amount">The amount of delay to decrement.</param>
|
||||||
|
<returns>Whether to tick.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.ProgressiveDelay.Reset">
|
||||||
|
<summary>
|
||||||
|
Resets to the base delay.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:Cryville.EEW.Report.EmptyRVMGeneratorContext">
|
<member name="T:Cryville.EEW.Report.EmptyRVMGeneratorContext">
|
||||||
<summary>
|
<summary>
|
||||||
An empty <see cref="T:Cryville.EEW.Report.IRVMGeneratorContext" />.
|
An empty <see cref="T:Cryville.EEW.Report.IRVMGeneratorContext" />.
|
||||||
@@ -1039,7 +1200,7 @@
|
|||||||
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.SeverityScheme">
|
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.SeverityScheme">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.LocationConverter">
|
<member name="M:Cryville.EEW.Report.EmptyRVMGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@,System.Int32@)">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.Report.EmptySeverityScheme">
|
<member name="T:Cryville.EEW.Report.EmptySeverityScheme">
|
||||||
@@ -1061,7 +1222,7 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="Latitude">The latitude of the hypocenter.</param>
|
<param name="Latitude">The latitude of the hypocenter.</param>
|
||||||
<param name="Longitude">The longitude of the hypocenter.</param>
|
<param name="Longitude">The longitude of the hypocenter.</param>
|
||||||
<param name="DateTime">The origin date time.</param>
|
<param name="DateTime">The origin date time in UTC.</param>
|
||||||
<param name="Magnitude">The magnitude.</param>
|
<param name="Magnitude">The magnitude.</param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.Report.HypocenterGroupKey.#ctor(System.Double,System.Double,System.DateTime,System.Double)">
|
<member name="M:Cryville.EEW.Report.HypocenterGroupKey.#ctor(System.Double,System.Double,System.DateTime,System.Double)">
|
||||||
@@ -1070,7 +1231,7 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="Latitude">The latitude of the hypocenter.</param>
|
<param name="Latitude">The latitude of the hypocenter.</param>
|
||||||
<param name="Longitude">The longitude of the hypocenter.</param>
|
<param name="Longitude">The longitude of the hypocenter.</param>
|
||||||
<param name="DateTime">The origin date time.</param>
|
<param name="DateTime">The origin date time in UTC.</param>
|
||||||
<param name="Magnitude">The magnitude.</param>
|
<param name="Magnitude">The magnitude.</param>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.Report.HypocenterGroupKey.Latitude">
|
<member name="P:Cryville.EEW.Report.HypocenterGroupKey.Latitude">
|
||||||
@@ -1080,7 +1241,7 @@
|
|||||||
<summary>The longitude of the hypocenter.</summary>
|
<summary>The longitude of the hypocenter.</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.Report.HypocenterGroupKey.DateTime">
|
<member name="P:Cryville.EEW.Report.HypocenterGroupKey.DateTime">
|
||||||
<summary>The origin date time.</summary>
|
<summary>The origin date time in UTC.</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.Report.HypocenterGroupKey.Magnitude">
|
<member name="P:Cryville.EEW.Report.HypocenterGroupKey.Magnitude">
|
||||||
<summary>The magnitude.</summary>
|
<summary>The magnitude.</summary>
|
||||||
@@ -1192,10 +1353,34 @@
|
|||||||
The severity scheme.
|
The severity scheme.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.Report.IRVMGeneratorContext.LocationConverter">
|
<member name="M:Cryville.EEW.Report.IRVMGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@,System.Int32@)">
|
||||||
<summary>
|
<summary>
|
||||||
The location converter.
|
Names a location in a culture.
|
||||||
</summary>
|
</summary>
|
||||||
|
<param name="lat">The latitude of the location.</param>
|
||||||
|
<param name="lon">The longitude of the location.</param>
|
||||||
|
<param name="localCulture">The local culture supported by the event itself.</param>
|
||||||
|
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
|
||||||
|
<param name="name">The location name.</param>
|
||||||
|
<param name="specificity">The location specificity. See <see cref="P:Cryville.EEW.Report.ReportViewModel.LocationSpecificity" />.</param>
|
||||||
|
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="T:Cryville.EEW.Report.RVMGeneratorContextExtensions">
|
||||||
|
<summary>
|
||||||
|
Provides a set of <see langword="static" /> methods related to <see cref="T:Cryville.EEW.Report.IRVMGeneratorContext" />.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.Report.RVMGeneratorContextExtensions.NameLocationTo(Cryville.EEW.Report.IRVMGeneratorContext,Cryville.EEW.Report.ReportViewModel,System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo)">
|
||||||
|
<summary>
|
||||||
|
Names a location in a culture and sets the result to a report view model.
|
||||||
|
</summary>
|
||||||
|
<param name="context">The context.</param>
|
||||||
|
<param name="e">The report view model.</param>
|
||||||
|
<param name="lat">The latitude of the location.</param>
|
||||||
|
<param name="lon">The longitude of the location.</param>
|
||||||
|
<param name="localCulture">The local culture supported by the event itself.</param>
|
||||||
|
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
|
||||||
|
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:Cryville.EEW.Report.ISeverityScheme">
|
<member name="T:Cryville.EEW.Report.ISeverityScheme">
|
||||||
<summary>
|
<summary>
|
||||||
@@ -1336,11 +1521,6 @@
|
|||||||
<see cref="P:Cryville.EEW.Report.ReportViewModel.InvalidatedTime" /> converted to UTC.
|
<see cref="P:Cryville.EEW.Report.ReportViewModel.InvalidatedTime" /> converted to UTC.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="P:Cryville.EEW.Report.ReportViewModel.IssueTime">
|
|
||||||
<summary>
|
|
||||||
The time when the report is issued, in the time zone indicated by <see cref="P:Cryville.EEW.Report.ReportViewModel.TimeZone" />.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:Cryville.EEW.Report.ReportViewModel.UtcIssueTime">
|
<member name="P:Cryville.EEW.Report.ReportViewModel.UtcIssueTime">
|
||||||
<summary>
|
<summary>
|
||||||
The time when the report is issued, in UTC.
|
The time when the report is issued, in UTC.
|
||||||
@@ -1464,13 +1644,10 @@
|
|||||||
The parent type.
|
The parent type.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.#ctor(System.String,Cryville.EEW.Report.ReportViewModelPropertyType)">
|
<member name="P:Cryville.EEW.Report.ReportViewModelPropertyType.Root">
|
||||||
<summary>
|
<summary>
|
||||||
Creates an instance of the <see cref="T:Cryville.EEW.Report.ReportViewModelPropertyType" /> class.
|
The root type.
|
||||||
</summary>
|
</summary>
|
||||||
<param name="name">The name of the type.</param>
|
|
||||||
<param name="parent">The parent type.</param>
|
|
||||||
<exception cref="T:System.ArgumentException"><paramref name="name" /> contains the sub-type delimiter <c>:</c>.</exception>
|
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.OfSubtype(System.String)">
|
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.OfSubtype(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
@@ -1482,6 +1659,14 @@
|
|||||||
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.ToString">
|
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.ToString">
|
||||||
<inheritdoc/>
|
<inheritdoc/>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.Of(System.String,Cryville.EEW.Report.ReportViewModelPropertyType)">
|
||||||
|
<summary>
|
||||||
|
Gets an instance of the <see cref="T:Cryville.EEW.Report.ReportViewModelPropertyType" /> class.
|
||||||
|
</summary>
|
||||||
|
<param name="name">The name of the type.</param>
|
||||||
|
<param name="parent">The parent type.</param>
|
||||||
|
<exception cref="T:System.ArgumentException"><paramref name="name" /> contains the sub-type delimiter <c>:</c>.</exception>
|
||||||
|
</member>
|
||||||
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.FromString(System.String)">
|
<member name="M:Cryville.EEW.Report.ReportViewModelPropertyType.FromString(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
Creates a report view model property type from a string.
|
Creates a report view model property type from a string.
|
||||||
@@ -1525,6 +1710,16 @@
|
|||||||
The culture <c>zh-TW</c>.
|
The culture <c>zh-TW</c>.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="F:Cryville.EEW.SharedCultures.CurrentCulture">
|
||||||
|
<summary>
|
||||||
|
The current culture.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="F:Cryville.EEW.SharedCultures.CurrentUICulture">
|
||||||
|
<summary>
|
||||||
|
The current UI culture.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="M:Cryville.EEW.SharedCultures.Get(System.String)">
|
<member name="M:Cryville.EEW.SharedCultures.Get(System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
Gets a culture of the specified name.
|
Gets a culture of the specified name.
|
||||||
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user