From 60e3102257e9a64d1aee70d12c862154fd47423a Mon Sep 17 00:00:00 2001 From: HorizonCode Date: Sun, 29 Jun 2025 19:35:32 +0200 Subject: [PATCH] too many changes, forgot to commit smh --- bun.lock | 3 + package.json | 1 + src/assets/cursor-additive.png | Bin 0 -> 11916 bytes src/assets/cursor.png | Bin 0 -> 11228 bytes .../components/ui/checkbox/checkbox.svelte | 35 ++ src/lib/components/ui/checkbox/index.ts | 6 + src/lib/components/ui/label/index.ts | 7 + src/lib/components/ui/label/label.svelte | 19 ++ .../components/ui/osu-cursor/OsuCursor.svelte | 176 +++++++++++ .../components/ui/titlebar/titlebar.svelte | 2 +- src/lib/global.ts | 13 +- src/lib/osuUtil.ts | 3 + src/pages/Launch.svelte | 299 ++++++++++++++++++ src/pages/Loading.svelte | 8 + src/pages/SetupWizard.svelte | 65 ++++ src/routes/+layout.svelte | 3 + src/routes/+page.svelte | 272 +--------------- 17 files changed, 633 insertions(+), 279 deletions(-) create mode 100644 src/assets/cursor-additive.png create mode 100644 src/assets/cursor.png create mode 100644 src/lib/components/ui/checkbox/checkbox.svelte create mode 100644 src/lib/components/ui/checkbox/index.ts create mode 100644 src/lib/components/ui/label/index.ts create mode 100644 src/lib/components/ui/label/label.svelte create mode 100644 src/lib/components/ui/osu-cursor/OsuCursor.svelte create mode 100644 src/lib/osuUtil.ts create mode 100644 src/pages/Launch.svelte create mode 100644 src/pages/Loading.svelte create mode 100644 src/pages/SetupWizard.svelte diff --git a/bun.lock b/bun.lock index 159561c..24cad72 100644 --- a/bun.lock +++ b/bun.lock @@ -12,6 +12,7 @@ "@tauri-apps/plugin-fs": "2.4.0", "@tauri-apps/plugin-shell": "2.3.0", "@tauri-apps/plugin-sql": "2.3.0", + "animejs": "^4.0.2", "ky": "1.8.1", "lucide-svelte": "0.523.0", "osu-classes": "3.1.0", @@ -232,6 +233,8 @@ "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "animejs": ["animejs@4.0.2", "", {}, "sha512-f0L/kSya2RF23iMSF/VO01pMmLwlAFoiQeNAvBXhEyLzIPd2/QTBRatwGUqkVCC6seaAJYzAkGir55N4SL+h3A=="], + "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], "ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], diff --git a/package.json b/package.json index 5979644..c17589e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@tauri-apps/plugin-fs": "2.4.0", "@tauri-apps/plugin-shell": "2.3.0", "@tauri-apps/plugin-sql": "2.3.0", + "animejs": "^4.0.2", "ky": "1.8.1", "lucide-svelte": "0.523.0", "osu-classes": "3.1.0", diff --git a/src/assets/cursor-additive.png b/src/assets/cursor-additive.png new file mode 100644 index 0000000000000000000000000000000000000000..8dcda490961272a093b1c671b7bf1acab48bdc02 GIT binary patch literal 11916 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 Y@?cxyiAM1EyAX)sArnFo{>+7c1B5^Jod5s; literal 0 HcmV?d00001 diff --git a/src/lib/components/ui/checkbox/checkbox.svelte b/src/lib/components/ui/checkbox/checkbox.svelte new file mode 100644 index 0000000..2395094 --- /dev/null +++ b/src/lib/components/ui/checkbox/checkbox.svelte @@ -0,0 +1,35 @@ + + + + {#snippet children({ checked, indeterminate })} +
+ {#if indeterminate} + + {:else} + + {/if} +
+ {/snippet} +
diff --git a/src/lib/components/ui/checkbox/index.ts b/src/lib/components/ui/checkbox/index.ts new file mode 100644 index 0000000..6d92d94 --- /dev/null +++ b/src/lib/components/ui/checkbox/index.ts @@ -0,0 +1,6 @@ +import Root from "./checkbox.svelte"; +export { + Root, + // + Root as Checkbox, +}; diff --git a/src/lib/components/ui/label/index.ts b/src/lib/components/ui/label/index.ts new file mode 100644 index 0000000..8bfca0b --- /dev/null +++ b/src/lib/components/ui/label/index.ts @@ -0,0 +1,7 @@ +import Root from "./label.svelte"; + +export { + Root, + // + Root as Label, +}; diff --git a/src/lib/components/ui/label/label.svelte b/src/lib/components/ui/label/label.svelte new file mode 100644 index 0000000..247d23c --- /dev/null +++ b/src/lib/components/ui/label/label.svelte @@ -0,0 +1,19 @@ + + + diff --git a/src/lib/components/ui/osu-cursor/OsuCursor.svelte b/src/lib/components/ui/osu-cursor/OsuCursor.svelte new file mode 100644 index 0000000..894523d --- /dev/null +++ b/src/lib/components/ui/osu-cursor/OsuCursor.svelte @@ -0,0 +1,176 @@ + + + + +
+
+ cursor + cursor +
+
+ + diff --git a/src/lib/components/ui/titlebar/titlebar.svelte b/src/lib/components/ui/titlebar/titlebar.svelte index 8518a31..22ea0ce 100644 --- a/src/lib/components/ui/titlebar/titlebar.svelte +++ b/src/lib/components/ui/titlebar/titlebar.svelte @@ -19,7 +19,7 @@ }); -
+
EZPP Launcher Logo EZPPLauncher diff --git a/src/lib/global.ts b/src/lib/global.ts index d6ad204..f9e8066 100644 --- a/src/lib/global.ts +++ b/src/lib/global.ts @@ -3,14 +3,11 @@ import { ezppfarm } from './api/ezpp'; export const server_ping = writable(undefined); export const server_connection_fails = writable(0); -export let server_no_connection = false; export const online_friends = writable(undefined); export const beatmap_sets = writable(undefined); -export const updateNoConnection = (noConnection: boolean) => (server_no_connection = noConnection); - export const setupValues = () => { updatePing(); updateFriends(); @@ -26,7 +23,7 @@ export const setupValues = () => { const updatePing = async () => { const serverPing = await ezppfarm.ping(); - if (!serverPing || server_no_connection) { + if (!serverPing) { server_connection_fails.update((num) => num + 1); } else { server_connection_fails.set(0); @@ -36,12 +33,8 @@ const updatePing = async () => { const updateFriends = async () => { await new Promise((res) => setTimeout(res, Math.random() * 300)); - if (server_no_connection) { - online_friends.set(undefined); - } else { - const onlineFriends = Math.round(Math.random() * 10); - online_friends.set(onlineFriends); - } + const onlineFriends = Math.round(Math.random() * 10); + online_friends.set(onlineFriends); }; const updateBeatmapSets = async () => { diff --git a/src/lib/osuUtil.ts b/src/lib/osuUtil.ts new file mode 100644 index 0000000..fdb59d2 --- /dev/null +++ b/src/lib/osuUtil.ts @@ -0,0 +1,3 @@ +export const clientNeedsUpdate = () => { + +} \ No newline at end of file diff --git a/src/pages/Launch.svelte b/src/pages/Launch.svelte new file mode 100644 index 0000000..0a1c7cb --- /dev/null +++ b/src/pages/Launch.svelte @@ -0,0 +1,299 @@ + + + + +
+ logo + Launching... +
+
+ + Downloading update files... +
+
+
+ +
+
+
+ + + + + + + Quetzalcoatl +
+ Owner +
+
+
+ + +
+ + osu!vn +
+
+ + osu!vn + osu!rx + osu!ap + +
+
+
+ + Mode Stats +
+
+
+ Rank + #727 +
+
+ PP + 727 +
+
+
+ Accuracy + 72.72% + + Play Count + 727 + + Play Time + 727h +
+
+ +
+
+
+
+ + +
+ {#if selectedTab === 'home'} +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
Beatmap Sets imported
+
+ +
+
+ {#if $server_connection_fails > 1} + + {:else} + + {/if} +
+
+
+ +
+
+ +
+
+
Ping to Server
+
+
+ +
+
+
+ + Client Info +
+
+ osu! Version + + 20250626.1 + + + Beatmap Sets + {numberHumanReadable($beatmap_sets ?? 0)} + + Skins + {numberHumanReadable(727)} +
+
+ {:else if selectedTab === 'settings'} +
+
EZPPLauncher Settings
+
+
+ +
+ Enable a custom cursor in the Launcher like in the lazer build of osu! +
+
+ + +
+ +
+ Makes the custom cursor movement smoother. +
+
+ +
+
+ {/if} +
+
diff --git a/src/pages/Loading.svelte b/src/pages/Loading.svelte new file mode 100644 index 0000000..9f57cf6 --- /dev/null +++ b/src/pages/Loading.svelte @@ -0,0 +1,8 @@ + +
+ + +
\ No newline at end of file diff --git a/src/pages/SetupWizard.svelte b/src/pages/SetupWizard.svelte new file mode 100644 index 0000000..9139a35 --- /dev/null +++ b/src/pages/SetupWizard.svelte @@ -0,0 +1,65 @@ + + +
+
+ {#each steps as step, i (step)} +
+
+ {i + 1} +
+ {step} +
+ {/each} +
+
+
+ {#if selectedStep === 1} +

Welcome to EZPPLauncher!

+ + {/if} +
+
+ + +
+
+
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 852b234..3bc4713 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,11 +3,14 @@ import '../app.css'; import { setupValues } from '@/global'; import { onMount } from 'svelte'; + import OsuCursor from '@/components/ui/osu-cursor/OsuCursor.svelte'; let { children } = $props(); onMount(setupValues); + +
{@render children()} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ce5858f..e3eaf31 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,271 +1,7 @@ - - -
- - Downloading update files... -
-
-
- -
-
-
- - - - - - - Quetzalcoatl -
- Owner -
-
-
- - -
- - osu!vn -
-
- - osu!vn - osu!rx - osu!ap - -
-
-
- - Mode Stats -
-
-
- Rank - #727 -
-
- PP - 727 -
-
-
- Accuracy - 72.72% - - Play Count - 727 - - Play Time - 727h -
-
-
-
-
- - Friends -
- 3 online -
-
-
-
-
-
- - -
-
-
-
-
- -
-
-
- -
-
- -
-
-
Beatmap Sets imported
-
-
-
- {#if $server_connection_fails > 1} - - {:else} - - {/if} -
-
-
- -
-
- -
-
-
Friends online
-
-
-
- {#if $server_connection_fails > 1} - - {:else} - - {/if} -
-
-
- -
-
- -
-
-
Ping to Server
-
-
- - {#key server_no_connection} - - {/key} -
-
-
- - Client Info -
-
- osu! Version - - 20250626.1 - - - Beatmap Sets - {numberHumanReadable($beatmap_sets ?? 0)} - - Skins - {numberHumanReadable(727)} -
-
-
-
+ \ No newline at end of file