UX·FX v1.5 — 햅틱 단계 · 라이브 띠 · HERO 전광판 · Push 우선순위 · Shield · 이클립스 성공·실패 연출

This commit is contained in:
Sn-Kinos
2026-10-06 20:12:44 +09:00
parent a04626b003
commit 62b9637db9
30 changed files with 851 additions and 118 deletions
+27
View File
@@ -292,4 +292,31 @@ class PushNotice {
/// 표시할 내용이 있는가. 데이터 전용 메시지는 화면에 띄우지 않는다.
bool get hasText => title.isNotEmpty || body.isNotEmpty;
/// 원장 C-78 우선순위. 서버가 지금 싣는 `kind` 만 나눈다 — 모르는 종류는 단순 보상 유도형과 같이
/// 가장 뒤([PushTier.other])라 상위 이벤트를 가리지 않는다.
PushTier get tier => switch (kind) {
'eclipse' => PushTier.crisis,
'timeattack' => PushTier.collective,
'evolution' => PushTier.achievement,
_ => PushTier.other,
};
bool sameAs(PushNotice other) =>
kind == other.kind &&
title == other.title &&
body == other.body &&
fandomId == other.fandomId;
}
/// 원장 C-78 「Push 우선순위」 — ① 위기 ② 공동행동 ③ 성취 ④ 결과, 그 밖(단순 보상 유도형 포함)은 맨 뒤.
enum PushTier { crisis, collective, achievement, result, other }
/// 앱 사용 중 수신한 알림을 띄울지 — UX·FX v1.5 §1.1 「Push 와 인앱 티커는 동일 이벤트가 과도하게
/// 중첩되지 않도록 노출 빈도를 제어하고 핵심 이벤트는 우선순위를 높게」 · 9장 Eclipse 「앱 사용 중 동일
/// 내용의 과도한 중복 Push」 금지.
///
/// [showing] 은 지금 떠 있는 알림. 같은 알림은 다시 띄우지 않고, 더 낮은 순위가 높은 순위를 덮지 않는다.
bool shouldShowInApp(PushNotice next, PushNotice? showing) =>
showing == null ||
(!next.sameAs(showing) && next.tier.index <= showing.tier.index);