diff --git a/src/components/views/SetupView.tsx b/src/components/views/SetupView.tsx index ab9b448..070ea64 100644 --- a/src/components/views/SetupView.tsx +++ b/src/components/views/SetupView.tsx @@ -12,11 +12,9 @@ const SetupView: React.FC = ({ onComplete }) => { const { username, setUsername, setHasCompletedSetup, - setVfxEnabled: setConfigVfx, setRpcEnabled: setConfigRpc, setLinuxRunner, linuxRunner: configLinuxRunner, - vfxEnabled: configVfx, rpcEnabled: configRpc, animationsEnabled, } = useConfig(); @@ -30,7 +28,6 @@ const SetupView: React.FC = ({ onComplete }) => { const [isSettingUpRuntime, setIsSettingUpRuntime] = useState(false); const [setupProgress, setSetupProgress] = useState<{ stage: string; message: string; percent?: number } | null>(null); const [runtimeAlreadyInstalled, setRuntimeAlreadyInstalled] = useState(false); - const [enableVfx, setEnableVfx] = useState(configVfx); const [enableDiscordRPC, setEnableDiscordRPC] = useState(configRpc); const totalSteps = 4; useEffect(() => { @@ -86,7 +83,6 @@ const SetupView: React.FC = ({ onComplete }) => { setCurrentStep(2); setFocusIndex(0); } else if (currentStep === 2) { - setConfigVfx(enableVfx); setConfigRpc(enableDiscordRPC); setCurrentStep(3); setFocusIndex(0); @@ -139,8 +135,8 @@ const SetupView: React.FC = ({ onComplete }) => { else if (focusIndex === 1) handleNext(); } } else if (currentStep === 2) { - if (focusIndex === 0) { setEnableVfx(!enableVfx); playPressSound(); } - else if (focusIndex === 1) { setEnableDiscordRPC(!enableDiscordRPC); playPressSound(); } + if (focusIndex === 0) { setEnableDiscordRPC(!enableDiscordRPC); playPressSound(); } + else if (focusIndex === 1) { playPressSound(); } else if (focusIndex === 2) handleBack(); else if (focusIndex === 3) handleNext(); } else if (currentStep === 3) { @@ -151,7 +147,7 @@ const SetupView: React.FC = ({ onComplete }) => { }; window.addEventListener("keydown", handleKey); return () => window.removeEventListener("keydown", handleKey); - }, [currentStep, focusIndex, runners, enableVfx, enableDiscordRPC, isLinux, isMac, tempUsername]); + }, [currentStep, focusIndex, runners, enableDiscordRPC, isLinux, isMac, tempUsername]); const handleMacosSetup = async () => { playPressSound(); @@ -179,7 +175,6 @@ const SetupView: React.FC = ({ onComplete }) => { return true; }; - const stepTitles = ["Welcome", "Compatibility", "Preferences", "Ready"]; const navBtnStyle = (isFocused: boolean) => ({ backgroundImage: isFocused ? "url('/images/button_highlighted.png')" @@ -200,71 +195,110 @@ const SetupView: React.FC = ({ onComplete }) => { /> - - +
-
- {Array.from({ length: totalSteps }, (_, i) => ( -
- ))} -
-

- {stepTitles[currentStep]} -

- - + {currentStep === 0 && ( +

+ Let's configure your launcher +

+ )} + {currentStep === 1 && ( +

+ Compatibility Runtime +

+ )} + {currentStep === 2 && ( +

+ Choose your preferred options and behaviors +

+ )} +
{currentStep === 0 && (
-

- Let's configure your launcher -

-
)} @@ -273,35 +307,36 @@ const SetupView: React.FC = ({ onComplete }) => {
-

- {runtimeAlreadyInstalled - ? "Compatibility runtime is already installed" - : "Emerald needs a compatibility runtime to run on macOS" - } -

-
- - {runtimeAlreadyInstalled ? "✓" : "⚠"} - +
+ {runtimeAlreadyInstalled ? ( + checked + ) : ( + + )}
-

+

{runtimeAlreadyInstalled ? "Runtime Detected" : "Runtime Not Detected"}

-

+

{runtimeAlreadyInstalled - ? "Ready to use — you can proceed." + ? "Game Porting Toolkit 3 and Wine installed" : "You must install the runtime before proceeding."}

{setupProgress && ( -
-

{setupProgress.stage}

-

{setupProgress.message}

+
+

{setupProgress.stage}

+

{setupProgress.message}

{setupProgress.percent !== undefined && ( -
+
= ({ onComplete }) => {
-

- Choose your preferred compatibility layer -

{runners.length === 0 ? ( -
-

No compatible runners found. Please install Wine or Proton.

+
+

No compatible runners found. Please install Wine or Proton.

) : (
@@ -347,11 +379,11 @@ const SetupView: React.FC = ({ onComplete }) => { onClick={() => handleRunnerSelect(runner.id)} onMouseEnter={() => setFocusIndex(idx)} className={`w-full h-10 flex items-center justify-between px-4 transition-all outline-none border-none - ${selectedRunner === runner.id ? "bg-white/10" : "bg-transparent"} - ${focusIndex === idx ? "text-[#FFFF55]" : "text-white/80"} hover:text-[#FFFF55] hover:bg-black/10`} + ${selectedRunner === runner.id ? "bg-gray-200" : "bg-transparent"} + ${focusIndex === idx ? "text-[#FFFF55]" : "text-gray-800"} hover:text-[#FFFF55] hover:bg-gray-200`} style={navBtnStyle(focusIndex === idx)} > - {runner.name} + {runner.name} {selectedRunner === runner.id && ( )} @@ -359,7 +391,7 @@ const SetupView: React.FC = ({ onComplete }) => { ))}
)} -

You can change this later in settings

+

You can change this later in settings

)} @@ -367,14 +399,11 @@ const SetupView: React.FC = ({ onComplete }) => {
-

- Everything is ready to go! -

-
+
-

Windows Native Support

-

Emerald Legacy runs natively on Windows without additional requirements.

+

Windows Native Support

+

Emerald Legacy runs natively on Windows without additional requirements.

@@ -384,48 +413,18 @@ const SetupView: React.FC = ({ onComplete }) => {
-

- Choose your preferred launcher settings -

- - + -

You can change these later in settings

+

You can change these later in settings

)} @@ -449,29 +474,29 @@ const SetupView: React.FC = ({ onComplete }) => {
-

+

Emerald Launcher is now configured and ready to use!

- Username + Username {tempUsername}
{isMac && (
- Runtime + Runtime Ready
)} {isLinux && selectedRunner && (
- Runner + Runner {runners.find(r => r.id === selectedRunner)?.name}
)}
- Click Effects + Animations
= ({ onComplete }) => { className="w-full h-full object-contain" style={{ imageRendering: "pixelated" }} /> - {enableVfx && ( + {animationsEnabled && ( checked = ({ onComplete }) => {
- Discord RPC + Discord RPC
= ({ onComplete }) => {
)} - - +
{currentStep > 0 ? ( @@ -568,8 +592,7 @@ const SetupView: React.FC = ({ onComplete }) => {
- - +
); diff --git a/src/css/index.css b/src/css/index.css index 8281e80..1a27bf8 100644 --- a/src/css/index.css +++ b/src/css/index.css @@ -155,6 +155,19 @@ body { } } +@keyframes blink-caret { + 0%, 50% { + opacity: 1; + } + 51%, 100% { + opacity: 0; + } +} + +.blink-caret { + animation: blink-caret 1s step-end infinite; +} + .particle-burst { animation: sga-burst 0.8s ease-out forwards; filter: drop-shadow(0 0 8px rgba(180, 100, 255, 0.9));