"use client"; import { useState, useRef } from "react"; import { useDoomOverlay } from "@/app/providers/DoomOverlayProvider"; import { Modal } from "@/app/components/overlay/Modal"; import { JsDosPlayer } from "./JsDosPlayer"; export enum DoomEngine { JsDos = "js-dos", } export type DoomConfig = { engine: DoomEngine; jsdos?: { zipUrl?: string }; }; export function DoomOverlay() { const { isOpen, close } = useDoomOverlay(); const [selectedZipUrl, setSelectedZipUrl] = useState(null); const [loadError, setLoadError] = useState(null); const fileInputRef = useRef(null); const remoteDemoUrl = "https://v8.js-dos.com/v7/build/doom.jsdos"; const handleRemoteLoad = async () => { try { setLoadError(null); setSelectedZipUrl(remoteDemoUrl); } catch (error) { console.error("Failed to load remote demo:", error); setLoadError("Failed to load remote demo. Please try selecting a local file."); } }; const handleFileSelect = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file && file.name.endsWith(".jsdos")) { const url = URL.createObjectURL(file); setSelectedZipUrl(url); setLoadError(null); } else { setLoadError("Please select a valid .jsdos file"); } }; const handleDrop = (event: React.DragEvent) => { event.preventDefault(); const file = event.dataTransfer.files[0]; if (file && file.name.endsWith(".jsdos")) { const url = URL.createObjectURL(file); setSelectedZipUrl(url); setLoadError(null); } else { setLoadError("Please drop a valid .jsdos file"); } }; const handleDragOver = (event: React.DragEvent) => { event.preventDefault(); }; const handleReset = () => { setSelectedZipUrl(null); setLoadError(null); if (fileInputRef.current) { fileInputRef.current.value = ""; } }; return (
{!selectedZipUrl ? (

Running on a Potato

Choose how you'd like to run Doom:

or

Drag and drop a .jsdos file here

or

{loadError && (
{loadError}
)}

You can create .jsdos files using the{" "} js-dos tools .

The demo requires internet connection and may take a moment to load.

) : (
{selectedZipUrl === remoteDemoUrl ? "Running demo from internet" : "Running local file"}

Use keyboard controls to play. ESC to exit fullscreen mode.

Close this modal to stop the emulator.

)}
); }