행성 Level 1~100 수치표 적용 · 행성 컬러 마스터
This commit is contained in:
@@ -3,6 +3,8 @@ import 'package:cloud_firestore/cloud_firestore.dart' show Timestamp;
|
||||
import '../../core/data/backend.dart';
|
||||
import '../../core/data/invite_code.dart';
|
||||
import '../../core/data/server_clock.dart';
|
||||
import '../../core/ui/planet_25d.dart' show planetColors, planetColorsFrom, setPlanetColorMaster;
|
||||
import 'package:flutter/painting.dart' show Color;
|
||||
import 'home_data.dart';
|
||||
import '../inside/inside_repository_firestore.dart' show insideQuestionFrom;
|
||||
import '../quest/quest_data.dart' show QuestType;
|
||||
@@ -66,6 +68,19 @@ class FirestoreHomeRepository implements HomeRepository {
|
||||
'colorKey': colorKey,
|
||||
});
|
||||
|
||||
@override
|
||||
Future<List<(String, Color)>> planetColorOptions() async {
|
||||
try {
|
||||
final master = planetColorsFrom(
|
||||
(await _backend.db.doc('config/planetColors').get()).data(),
|
||||
);
|
||||
setPlanetColorMaster(master.all);
|
||||
return master.visible;
|
||||
} catch (_) {
|
||||
return planetColors;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<NebulaTargets> nebulaTargets() async {
|
||||
try {
|
||||
@@ -82,6 +97,8 @@ class FirestoreHomeRepository implements HomeRepository {
|
||||
final uid = _backend.requireUid;
|
||||
// 공유 링크 `?ref=` 용 — 기다리지 않는다.
|
||||
InviteCode.ensure(_backend);
|
||||
// 컬러 마스터 — HOME · GALAXY 행성이 발주사가 더한 색도 그리도록 먼저 읽어 둔다. 기다리지 않는다.
|
||||
planetColorOptions();
|
||||
final db = _backend.db;
|
||||
|
||||
final userSnap = await db.doc('users/$uid').get();
|
||||
@@ -291,8 +308,15 @@ class FirestoreHomeRepository implements HomeRepository {
|
||||
int? validInt(dynamic value) => value is int && value >= 0 ? value : null;
|
||||
num? validNumber(dynamic value) =>
|
||||
value is num && value.isFinite && value >= 0 ? value : null;
|
||||
final current = validNumber(fandom['growthPop']);
|
||||
final required = validInt(next?['requiredPop']);
|
||||
// 정식 행성은 서버가 수치표 v1.4 대로 적은 레벨업 POP 진행도(생성 기준점 이후 · ZAP 가중치 반영)와
|
||||
// 다음 Stage 진입 누계를 쓴다. 아직 판정 전인 행성만 구 마스터(`planetStages`)로 그린다.
|
||||
final leveled = stage != null && stage > 0 && fandom['levelPop'] is num;
|
||||
final current = leveled
|
||||
? validNumber(fandom['levelPop'])
|
||||
: validNumber(fandom['growthPop']);
|
||||
final required = leveled
|
||||
? validInt(fandom['nextStagePop'])
|
||||
: validInt(next?['requiredPop']);
|
||||
// 성운(Stage0)의 전환 목표는 서버와 같은 `config/policy` 키로 읽는다.
|
||||
final policy = stage == 0
|
||||
? (await _backend.db.doc('config/policy').get()).data()
|
||||
@@ -325,7 +349,9 @@ class FirestoreHomeRepository implements HomeRepository {
|
||||
// Q-PN-01 A안 — 탄생은 창립자만.
|
||||
isFounder:
|
||||
fandom['founderUid'] != null && fandom['founderUid'] == _backend.uid,
|
||||
requiredSfpi: validNumber(next?['requiredSfpi']),
|
||||
requiredSfpi: leveled
|
||||
? validNumber(fandom['nextStageSfpi'])
|
||||
: validNumber(next?['requiredSfpi']),
|
||||
nebulaGoalPassed: goalPassed,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user