Skip to content

Commit 3a3513e

Browse files
Kathundundefined303
andcommitted
fix: oneclient account skin manager default rotate
See bs-community/skinview3d#198 for where fix came from Co-authored-by: undefined303 <undefined303@qq.com>
1 parent fedde0a commit 3a3513e

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

apps/oneclient/frontend/src/bindings.gen.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,15 +252,15 @@ export type VersionType =
252252
*/
253253
"old_beta"
254254

255-
const ARGS_MAP = { 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'core':'{"getUser":["uuid"],"getLoadersForVersion":["mc_version"],"killProcess":["pid"],"removeUser":["uuid"],"createCluster":["options"],"installModpack":["modpack","cluster_id"],"isClusterRunning":["cluster_id"],"searchPackages":["provider","query"],"getDefaultUser":["fallback"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"launchCluster":["id","uuid"],"getWorlds":["id"],"getPackage":["provider","slug"],"open":["input"],"changeSkin":["access_token","skin_url","skin_variant"],"removeCluster":["id"],"getRunningProcessesByClusterId":["cluster_id"],"readSettings":[],"writeSettings":["setting"],"getProfileOrDefault":["name"],"getUsers":[],"getScreenshots":["id"],"getLogs":["id"],"updateClusterProfile":["name","profile"],"getGameVersions":[],"getRunningProcesses":[],"openMsaLogin":[],"setDefaultUser":["uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusters":[],"getClusterById":["id"],"getMultiplePackages":["provider","slugs"],"getUsersFromAuthor":["provider","author"],"updateClusterById":["id","request"],"getLogByName":["id","name"],"getPackageBody":["provider","body"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getGlobalProfile":[],"fetchMinecraftProfile":["uuid"],"fetchLoggedInProfile":["access_token"]}', 'oneclient':'{"openDevTools":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"]}' }
256-
export type Router = { 'events': { ingress: (event: IngressPayload) => Promise<void>,
255+
const ARGS_MAP = { 'core':'{"getUser":["uuid"],"getLoadersForVersion":["mc_version"],"killProcess":["pid"],"removeUser":["uuid"],"createCluster":["options"],"installModpack":["modpack","cluster_id"],"isClusterRunning":["cluster_id"],"searchPackages":["provider","query"],"getDefaultUser":["fallback"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"launchCluster":["id","uuid"],"getWorlds":["id"],"getPackage":["provider","slug"],"open":["input"],"changeSkin":["access_token","skin_url","skin_variant"],"removeCluster":["id"],"getRunningProcessesByClusterId":["cluster_id"],"readSettings":[],"writeSettings":["setting"],"getProfileOrDefault":["name"],"getUsers":[],"getScreenshots":["id"],"getLogs":["id"],"updateClusterProfile":["name","profile"],"getGameVersions":[],"getRunningProcesses":[],"openMsaLogin":[],"setDefaultUser":["uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusters":[],"getClusterById":["id"],"getMultiplePackages":["provider","slugs"],"getUsersFromAuthor":["provider","author"],"updateClusterById":["id","request"],"getLogByName":["id","name"],"getPackageBody":["provider","body"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getGlobalProfile":[],"fetchMinecraftProfile":["uuid"],"fetchLoggedInProfile":["access_token"]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'oneclient':'{"openDevTools":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}' }
256+
export type Router = { 'folders': { fromCluster: (folderName: string) => Promise<string>,
257+
openCluster: (folderName: string) => Promise<null> },
258+
'events': { ingress: (event: IngressPayload) => Promise<void>,
257259
message: (event: MessagePayload) => Promise<void>,
258260
process: (event: ProcessPayload) => Promise<void> },
259261
'oneclient': { openDevTools: () => Promise<void>,
260262
getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
261263
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]> },
262-
'folders': { fromCluster: (folderName: string) => Promise<string>,
263-
openCluster: (folderName: string) => Promise<null> },
264264
'core': { getClusters: () => Promise<ClusterModel[]>,
265265
getClusterById: (id: number) => Promise<ClusterModel | null>,
266266
removeCluster: (id: number) => Promise<null>,

apps/oneclient/frontend/src/components/SkinViewer.tsx

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ export interface SkinViewerProps {
1212
autoRotate?: boolean;
1313
autoRotateSpeed?: number;
1414
showText?: boolean;
15-
playerRotateX?: number;
16-
playerRotateY?: number;
17-
playerRotateZ?: number;
15+
playerRotatePhi?: number;
16+
playerRotateTheta?: number;
1817
translateRotateX?: number;
1918
translateRotateY?: number;
2019
translateRotateZ?: number;
@@ -36,12 +35,11 @@ export function SkinViewer({
3635
width = 260,
3736
height = 300,
3837
className,
39-
autoRotate = false,
38+
autoRotate = true,
4039
autoRotateSpeed = 0.25,
4140
showText = true,
42-
playerRotateX = 0,
43-
playerRotateY = 0,
44-
playerRotateZ = 0,
41+
playerRotatePhi = Math.PI / 3,
42+
playerRotateTheta = -Math.PI / 6,
4543
translateRotateX = 0,
4644
translateRotateY = 0,
4745
translateRotateZ = 0,
@@ -71,13 +69,22 @@ export function SkinViewer({
7169
viewer.controls.enablePan = enablePan;
7270

7371
viewer.zoom = zoom;
74-
viewer.playerWrapper.rotateX(playerRotateX);
75-
viewer.playerWrapper.rotateY(playerRotateY);
76-
viewer.playerWrapper.rotateZ(playerRotateZ);
72+
73+
const setAngle = (phi: number, theta: number) => {
74+
const r = viewer.controls.object.position.distanceTo(viewer.controls.target);
75+
const x = r * Math.cos(phi - Math.PI / 2) * Math.sin(theta) + viewer.controls.target.x;
76+
const y = r * Math.sin(phi + Math.PI / 2) + viewer.controls.target.y;
77+
const z = r * Math.cos(phi - Math.PI / 2) * Math.cos(theta) + viewer.controls.target.z;
78+
viewer.controls.object.position.set(x, y, z);
79+
viewer.controls.object.lookAt(viewer.controls.target);
80+
};
81+
setAngle(playerRotatePhi, playerRotateTheta)
82+
7783
viewer.playerWrapper.translateX(translateRotateX);
7884
viewer.playerWrapper.translateY(translateRotateY);
7985
viewer.playerWrapper.translateZ(translateRotateZ);
8086

87+
8188
viewer.animation = animation;
8289

8390
viewer.autoRotate = autoRotate;
@@ -97,13 +104,12 @@ export function SkinViewer({
97104
viewerRef.current.loadSkin(getSkinUrl(skinUrl));
98105
}, [skinUrl]);
99106

100-
101107
useEffect(() => {
102108
if (!viewerRef.current)
103109
return;
104110

105111
if (capeUrl)
106-
viewerRef.current.loadCape(capeUrl, { backEquipment: elytra ? "elytra" : "cape" });
112+
viewerRef.current.loadCape(capeUrl, { backEquipment: elytra ? 'elytra' : 'cape' });
107113
else
108114
viewerRef.current.resetCape();
109115
}, [capeUrl, elytra]);

apps/oneclient/frontend/src/routes/app/accountSkin.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -335,16 +335,16 @@ function RenderSkin({ skin, selected, animation, setSelectedSkin, setSkins, cape
335335
{selected.skin_url === skin.skin_url
336336
? <></>
337337
: (
338-
<DialogTrigger>
339-
<Button className="group w-8 h-8 absolute top-0 right-0" color="ghost" size="icon">
340-
<Trash01Icon className="group-hover:stroke-danger" />
341-
</Button>
342-
343-
<Overlay>
344-
<RemoveSkinCapeModal onPress={() => setSkins(prev => prev.filter(skinData => skinData.skin_url !== skin.skin_url))} />
345-
</Overlay>
346-
</DialogTrigger>
347-
)}
338+
<DialogTrigger>
339+
<Button className="group w-8 h-8 absolute top-0 right-0" color="ghost" size="icon">
340+
<Trash01Icon className="group-hover:stroke-danger" />
341+
</Button>
342+
343+
<Overlay>
344+
<RemoveSkinCapeModal onPress={() => setSkins(prev => prev.filter(skinData => skinData.skin_url !== skin.skin_url))} />
345+
</Overlay>
346+
</DialogTrigger>
347+
)}
348348
<Button
349349
className="group w-8 h-8 absolute bottom-0 right-0"
350350
color="ghost"
@@ -444,7 +444,7 @@ function Viewer({ skinData, capeURL, height = 400, width = 250, showText = true,
444444
enableRotate={enableControls}
445445
enableZoom={enableControls}
446446
height={height}
447-
playerRotateY={flip ? Math.PI : 0}
447+
playerRotateTheta={(-Math.PI / 6) - (flip ? Math.PI : 0)}
448448
showText={showText}
449449
skinUrl={skinData.skin_url}
450450
translateRotateY={-2}

0 commit comments

Comments
 (0)