Visualizer work
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
3.2 KiB

import {
RADAR_X_MIN,
RADAR_X_MAX,
RADAR_Y_MIN,
RADAR_Y_MAX
} from "./constants.js";
export const appState = {
zoomHideDelayTimeout: null, // Timeout before the hide countdown begins
zoomCountdown: null, // Holds the number of seconds left before zoom hides
zoomCountdownInterval: null, // The interval timer for the countdown
fps: 0, // To store the calculated FPS for performance monitoring
isRawOnlyMode: false, // <-- ADD THIS LINE
videoReadyByFallback: false, // True if video resolved via loadedmetadata timeout
videoMissing: false, // True if user opts to continue without a video
isMouseOutOfBounds: false, // True when the mouse is outside the radar sketch canvas
zoomPanelExplicitlyClosed: false, // True if user clicked X on the zoom panel during zoom mode
gridStackInstance: null, // Holds reference to the main GridStack instance
// Stores the parsed visualization data (radar frames, tracks, etc.)
vizData: null,
zoomSketchInstance: null, // Add this line
// Stores the processed CAN bus data (speed, time)
offset: 0, // The calculated or manually set offset in milliseconds.
currentGraphScale: 10, // Current ms per block for the IFT graph (smooth zooming)
videoStartDate: null,
// The timestamp (in milliseconds) of the first radar frame, extracted from the JSON filename
radarStartTimeMs: 0,
// Boolean indicating if the playback is currently active
isPlaying: false,
// The index of the currently displayed radar frame
currentFrame: 0,
// The global minimum SNR value across all radar frames, used for color scaling
globalMinSnr: 0,
// The global maximum SNR value across all radar frames, used for color scaling
globalMaxSnr: 1,
// Reference to the p5.js instance for the radar visualization
p5_instance: null,
// Reference to the p5.js instance for the speed graph visualization
speedGraphInstance: null,
// The filename of the loaded JSON file
jsonFilename: "",
// The filename of the loaded video file
videoFilename: "",
// The filename of the loaded CAN log file
isCloseUpMode: false,
// Timestamp (from performance.now()) when the master clock started for synchronized playback
masterClockStart: 0,
// The media time (in seconds) of the video when the master clock started
mediaTimeStart: 0,
// Timestamp (from performance.now()) of the last synchronization check
lastSyncTime: 0,
lastFrameRenderTime: 0,
lastVideoFrameTime: 0,
videoFrameRenderTime: 0,
lastOverlayUpdateTime: 0, // Track time between overlay updates for smoothing
useCustomTtcScheme: false, // Flag to switch between default and custom
customTtcScheme: {
// Default values match the UI
critical: { time: 1, color: "#ff0000" },
high: { time: 2, color: "#ffa500" },
medium: { time: 3, color: "#BA8E23" },
low: { color: "#00ff00" }, // Add this new line
},
// --- Resync Storm "Circuit Breaker" ---
isResyncLockdownEnabled: true, // Feature is enabled by default
lastResyncTimestamp: 0, // Timestamp of the last resync event
consecutiveResyncs: 0, // Counter for consecutive resyncs
isInLockdown: false, // Flag to prevent nested lockdown triggers
// --- Dynamic Radar Boundaries ---
radarXMin: RADAR_X_MIN,
radarXMax: RADAR_X_MAX,
radarYMin: RADAR_Y_MIN,
radarYMax: RADAR_Y_MAX,
};