feat: Draft ongoing list view

This commit is contained in:
2025-02-14 18:17:29 +08:00
parent 1e8699c5a1
commit f357a90a0c
4 changed files with 2640 additions and 46 deletions

View File

@@ -0,0 +1,52 @@
using Cryville.EEW.Report;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Cryville.EEW.Unity.UI {
class EventOngoingListView : MonoBehaviour {
[SerializeField] EventReportView m_currentView;
readonly List<ReportViewModel> _displayingReports = new();
public void Add(ReportViewModel e) {
_displayingReports.Add(e);
SwitchTo(_displayingReports.Count - 1);
}
public void Remove(ReportViewModel e) {
int index = _displayingReports.IndexOf(e);
if (index == -1) return;
_displayingReports.RemoveAt(index);
if (_displayingReports.Count == 0) {
m_currentView.gameObject.SetActive(false);
}
else {
if (_index > index) --_index;
else if (_index == index) SwitchTo(index % _displayingReports.Count);
}
}
void Start() {
m_currentView.gameObject.SetActive(false);
}
int _index;
float _tickDown;
void Update() {
if (_displayingReports.Count == 0) return;
_tickDown -= Time.deltaTime;
if (_tickDown < 0) {
SwitchTo((_index + 1) % _displayingReports.Count);
}
}
void SwitchTo(int index) {
_index = index;
var e = _displayingReports[index];
m_currentView.SetViewModel(e);
var keyProp = e.Properties.FirstOrDefault();
_tickDown = Math.Max(0, keyProp?.Severity ?? 0) * 4 + 4;
m_currentView.gameObject.SetActive(true);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a0bef35c7c4889f4a895fe709447b867
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -23,12 +23,10 @@ namespace Cryville.EEW.Unity {
sealed class Worker : MonoBehaviour {
public static Worker Instance { get; private set; }
[SerializeField]
CameraController m_cameraController;
[SerializeField]
MapElementManager m_mapElementManager;
[SerializeField]
EventGroupListView m_historyEventGroupList;
[SerializeField] CameraController m_cameraController;
[SerializeField] MapElementManager m_mapElementManager;
[SerializeField] EventOngoingListView m_ongoingEventList;
[SerializeField] EventGroupListView m_historyEventGroupList;
GroupingCoreWorker _worker;
CancellationTokenSource _cancellationTokenSource;
@@ -127,10 +125,16 @@ namespace Cryville.EEW.Unity {
}
void OnOngoingReported(ReportViewModel item, CollectionChangeAction action) {
if (action == CollectionChangeAction.Add) {
_uiActionQueue.Enqueue(() => m_mapElementManager.AddOngoing(item));
_uiActionQueue.Enqueue(() => {
m_mapElementManager.AddOngoing(item);
m_ongoingEventList.Add(item);
});
}
else if (action == CollectionChangeAction.Remove) {
_uiActionQueue.Enqueue(() => m_mapElementManager.RemoveOngoing(item));
_uiActionQueue.Enqueue(() => {
m_mapElementManager.RemoveOngoing(item);
m_ongoingEventList.Remove(item);
});
}
}
void OnGroupUpdated(object sender, ReportGroup e) {

File diff suppressed because it is too large Load Diff