diff --git a/frontend/src/components/editor/SplitEditor.tsx b/frontend/src/components/editor/SplitEditor.tsx index 8cc0349..2c93c0a 100644 --- a/frontend/src/components/editor/SplitEditor.tsx +++ b/frontend/src/components/editor/SplitEditor.tsx @@ -446,11 +446,11 @@ export default function SplitEditor({ splitFilePayload }: SplitEditorParams) {
- + setAttempts(Number(e.target.value))} value={attempts ?? 0} - id="attempts" + id="runattempts" name="attempts" inputMode="numeric" /> diff --git a/frontend/src/components/splitter/SegmentList.tsx b/frontend/src/components/splitter/SegmentList.tsx index 442b9f0..bc0a0db 100644 --- a/frontend/src/components/splitter/SegmentList.tsx +++ b/frontend/src/components/splitter/SegmentList.tsx @@ -188,9 +188,39 @@ function isVisible(id: string, parentById: Map, expandedP } export default function SegmentList({ sessionPayload, comparison }: SplitListParameters) { + const [completeClassName, setCompleteClassName] = React.useState(""); const activeRowRef = useRef(null); const containerRef = useRef(null); + useEffect(() => { + let className = ""; + if (sessionPayload.loaded_split_file && + sessionPayload.current_run && + sessionPayload.leaf_segments) { + if(Object.keys(sessionPayload.current_run.splits).length + == sessionPayload.leaf_segments.length) { + className = "complete"; + + const pb = sessionPayload.loaded_split_file.pb; + console.log(sessionPayload.loaded_split_file) + if (pb) { + const segments = sessionPayload.leaf_segments; + if (segments) { + const finalSplit = segments[segments.length - 1].id; + const finalTime = sessionPayload.current_run.splits[finalSplit].current_cumulative; + if (finalTime < pb.total_time) { + className += " pb"; + } + } + } + } + setCompleteClassName(className); + } else { + setCompleteClassName(""); + } + + }, [sessionPayload]); + const targets = useMemo(() => { let cumulative = 0; const results: Targets = { cumulative: {}, individual: {} }; @@ -353,7 +383,7 @@ export default function SegmentList({ sessionPayload, comparison }: SplitListPar // Delta pulled from last leaf vs its cumulative target let parentDelta: JSX.Element | null = null; - if (lastLeafId && lastLeafSplit) { + if (lastLeafId) { const leafSeg = segmentById.get(lastLeafId); const cTarget = targets.cumulative[lastLeafId] ?? null; const iTarget = targets.individual[lastLeafId] ?? null; @@ -363,19 +393,21 @@ export default function SegmentList({ sessionPayload, comparison }: SplitListPar } if (cTarget != null) { - const delta = lastLeafSplit.current_cumulative - cTarget; - parentDelta = getDeltaDisplayTime(delta); + if (lastLeafSplit != null) { + const delta = lastLeafSplit.current_cumulative - cTarget; + parentDelta = getDeltaDisplayTime(delta); + } } } main.push( - + {toggle} {segmentData.Segment.name} - {parentDelta} - {parentComparison} + {parentDelta} + {parentComparison} , ); continue; @@ -423,26 +455,26 @@ export default function SegmentList({ sessionPayload, comparison }: SplitListPar ]); return ( -
-
-

+
+
+

{sessionPayload.loaded_split_file?.game_name}

-

+

{sessionPayload.loaded_split_file?.game_category}

-
{sessionPayload.loaded_split_file?.attempts}
+
{sessionPayload.loaded_split_file?.attempts}
-
-
- +
+
+
{mainRows}
-
- +
+
{finalRow}
diff --git a/session/service.go b/session/service.go index 1a259f3..bd09bc0 100644 --- a/session/service.go +++ b/session/service.go @@ -131,6 +131,7 @@ func (s *Service) SetLoadedSplitFile(sf SplitFile) { s.currentSegmentIndex = -1 s.sessionState = Idle s.dirty = false + s.loadedSplitFile.BuildStats() logger.Infof(logModule, "%s loaded in session (segments total/leaf %d/%d)", sf.GameName, len(sf.Segments), len(s.leafSegments)) } @@ -151,6 +152,7 @@ func (s *Service) Split() SplitResult { case Running: return s.advanceRun() case Finished: + s.loadedSplitFile.BuildStats() s.resetLocked() return SplitReset case Paused: @@ -326,7 +328,6 @@ func (s *Service) resetLocked() { func (s *Service) PersistRunToSession() { if s.currentRun != nil { s.loadedSplitFile.Runs = append(s.loadedSplitFile.Runs, *s.currentRun) - s.loadedSplitFile.BuildStats() logger.Info(logModule, "run persisted to session, new stats built") } else { logger.Warn(logModule, "persist requested on nil current run") diff --git a/skin/default-skin.zip b/skin/default-skin.zip index e61bcf9..fc15023 100644 Binary files a/skin/default-skin.zip and b/skin/default-skin.zip differ