Same margin for all pages & messiala map scaling for smaller devices

pull/10/head
v4ltages 5 months ago
parent 40ea03b678
commit ab6992709f
No known key found for this signature in database
GPG Key ID: DC7BC38E0DC642B
  1. 2
      src/app/haldus/meeskonnad/page.tsx
  2. 2
      src/app/haldus/page.tsx
  3. 2
      src/app/kodukord/page.tsx
  4. 53
      src/app/messiala/page.tsx
  5. 19
      src/app/turniirid/page.tsx

@ -44,7 +44,7 @@ export default async function AdminTeams() {
}); });
return ( return (
<div className="flex flex-col min-h-[90vh] p-12 pt-18"> <div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<Link href={"/haldus"}> <Link href={"/haldus"}>
<span className="material-symbols-outlined !text-[clamp(2rem,1.5rem+1.5vw,3.5rem)] !font-bold text-[#007CAB] dark:text-[#00A3E0] translate-y-2.5 hover:-translate-x-2 dark:hover:text-[#EEE5E5] hover:text-[#2A2C3F] transition"> <span className="material-symbols-outlined !text-[clamp(2rem,1.5rem+1.5vw,3.5rem)] !font-bold text-[#007CAB] dark:text-[#00A3E0] translate-y-2.5 hover:-translate-x-2 dark:hover:text-[#EEE5E5] hover:text-[#2A2C3F] transition">

@ -96,7 +96,7 @@ export default async function Admin({
const teamsData = await db.query.teams.findMany(); const teamsData = await db.query.teams.findMany();
return ( return (
<div className="flex flex-col min-h-[90vh] p-12 pt-18"> <div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
{showSuccess && <SuccessAlertDB />} {showSuccess && <SuccessAlertDB />}
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<Link href={"/"}> <Link href={"/"}>

@ -2,7 +2,7 @@ import { vipnagorgialla } from "@/components/Vipnagorgialla";
export default function Rulebook() { export default function Rulebook() {
return ( return (
<div className="flex flex-col min-h-[90vh] p-12 pt-18"> <div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
<h1 <h1
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`} className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
> >

@ -16,9 +16,25 @@ export default function Expo() {
const scene = new THREE.Scene(); const scene = new THREE.Scene();
scene.background = new THREE.Color(0x0e0f19); scene.background = new THREE.Color(0x0e0f19);
// Isometric camera setup // Get responsive dimensions
const aspect = 800 / 600; const getResponsiveDimensions = () => {
const frustumSize = 14; const container = mountRef.current;
if (!container) return { width: 800, height: 600 };
const containerWidth = container.offsetWidth;
const maxWidth = Math.min(containerWidth, 800);
const width = Math.max(maxWidth, 300); // Minimum width
const height = (width * 600) / 800; // Maintain aspect ratio
return { width, height };
};
const { width, height } = getResponsiveDimensions();
// Isometric camera setup with responsive sizing
const aspect = width / height;
const baseFrustumSize = 14;
const frustumSize = width < 600 ? baseFrustumSize * 0.8 : baseFrustumSize; // Smaller frustum for mobile
const camera = new THREE.OrthographicCamera( const camera = new THREE.OrthographicCamera(
(frustumSize * aspect) / -2, (frustumSize * aspect) / -2,
(frustumSize * aspect) / 2, (frustumSize * aspect) / 2,
@ -34,7 +50,7 @@ export default function Expo() {
// Renderer // Renderer
const renderer = new THREE.WebGLRenderer({ antialias: true }); const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(800, 600); renderer.setSize(width, height);
renderer.shadowMap.enabled = true; renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap; renderer.shadowMap.type = THREE.PCFSoftShadowMap;
mountRef.current.appendChild(renderer.domElement); mountRef.current.appendChild(renderer.domElement);
@ -197,6 +213,28 @@ export default function Expo() {
ground2.receiveShadow = true; ground2.receiveShadow = true;
scene.add(ground2); scene.add(ground2);
// Resize handler
const handleResize = () => {
const { width: newWidth, height: newHeight } = getResponsiveDimensions();
// Update camera
const newAspect = newWidth / newHeight;
const newFrustumSize =
newWidth < 600 ? baseFrustumSize * 0.8 : baseFrustumSize;
camera.left = (newFrustumSize * newAspect) / -2;
camera.right = (newFrustumSize * newAspect) / 2;
camera.top = newFrustumSize / 2;
camera.bottom = newFrustumSize / -2;
camera.updateProjectionMatrix();
// Update renderer
renderer.setSize(newWidth, newHeight);
};
// Add resize event listener
window.addEventListener("resize", handleResize);
// Mouse event handlers // Mouse event handlers
const onMouseMove = (event: MouseEvent) => { const onMouseMove = (event: MouseEvent) => {
const rect = renderer.domElement.getBoundingClientRect(); const rect = renderer.domElement.getBoundingClientRect();
@ -258,6 +296,7 @@ export default function Expo() {
// Cleanup // Cleanup
return () => { return () => {
window.removeEventListener("resize", handleResize);
renderer.domElement.removeEventListener("mousemove", onMouseMove); renderer.domElement.removeEventListener("mousemove", onMouseMove);
if (mountRef.current && renderer.domElement) { if (mountRef.current && renderer.domElement) {
mountRef.current.removeChild(renderer.domElement); mountRef.current.removeChild(renderer.domElement);
@ -267,7 +306,7 @@ export default function Expo() {
}, []); }, []);
return ( return (
<div className="flex flex-col min-h-[90vh] p-12 pt-18"> <div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
<h1 <h1
className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`} className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
> >
@ -344,8 +383,8 @@ export default function Expo() {
</div> </div>
</div> </div>
<div className="flex flex-col lg:flex-row gap-8 items-start"> <div className="flex flex-col lg:flex-row gap-8 items-start">
<div className="flex-shrink-0 border-3 border-[#1F5673]"> <div className="flex-shrink-0 border-3 border-[#1F5673] w-full max-w-[800px]">
<div ref={mountRef} /> <div ref={mountRef} className="w-full" />
</div> </div>
{/* Tooltip */} {/* Tooltip */}

@ -1,10 +1,17 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla"; import { vipnagorgialla } from "@/components/Vipnagorgialla";
export default function Tourney() { export default function Tourney() {
return ( return (
<div className="flex flex-col min-h-[90vh] p-12 pt-18"> <div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
<h1 className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}>Turniirid</h1> <h1
<p className="text-2xl text-[#2A2C3F] dark:text-[#EEE5E5]">Kui tahate oma oskusi proovile panna, siis vaadake siia tagasi! Rohkem infot lähiajal.</p> className={`text-5xl sm:text-6xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 mb-4`}
</div> >
); Turniirid
</h1>
<p className="text-2xl text-[#2A2C3F] dark:text-[#EEE5E5]">
Kui tahate oma oskusi proovile panna, siis vaadake siia tagasi! Rohkem
infot lähiajal.
</p>
</div>
);
} }

Loading…
Cancel
Save