diff --git a/app/components/About.tsx b/app/components/About.tsx index 544d473..eedbc09 100644 --- a/app/components/About.tsx +++ b/app/components/About.tsx @@ -1,30 +1,11 @@ "use client"; import { motion } from "framer-motion"; -import { Activity, GitBranch, Layers } from "lucide-react"; import { useTranslation } from "react-i18next"; export default function About() { const { t } = useTranslation(); - const stats = [ - { - label: t("about.stats.githubStars"), - value: "30k+", - icon: , - }, - { - label: t("about.stats.dailyUsers"), - value: "100k+", - icon: , - }, - { - label: t("about.stats.modules"), - value: "50+", - icon: , - }, - ]; - return (
@@ -49,22 +30,6 @@ export default function About() {

{t("about.paragraph1")}

{t("about.paragraph2")}

- -
- {stats.map((stat, i) => ( -
-
- {stat.icon} - - {stat.label} - -
-
- {stat.value} -
-
- ))} -
{/* Industrial Background Layer */} -
- {/* Left: Industrial Typography */} -
- - - - {t("hero.neuralOnline")} - - - +
+ {/* Main Content */} +
-
+
{/* Logo Icon */} -
- +
+ {t("hero.title")} - + {t("hero.subtitle")} - + {t("hero.description")}
- {/* Decorative lines attached to text */} -
-
-
+ {/* Elevated Decorative lines attached to text */} +
+
-
- +
+

{t("hero.tagline")} @@ -345,18 +327,18 @@ export default function Hero() { {!showDownloadOptions ? ( {/* 第一行:主下载 + 展示全部 */} -

+
{/* 主下载按钮 - 自动检测系统 */} -
+
- - {/* Right: Interactive Particle Model */} -
- -
); diff --git a/app/components/hero/BackgroundLayer.tsx b/app/components/hero/BackgroundLayer.tsx index ef9dab5..282bf45 100644 --- a/app/components/hero/BackgroundLayer.tsx +++ b/app/components/hero/BackgroundLayer.tsx @@ -1,78 +1,60 @@ "use client"; import { useTranslation } from "react-i18next"; +import { motion } from "framer-motion"; -// 静态背景装饰层 - 已移除视差动画以提升性能 export default function BackgroundLayer() { const { t } = useTranslation(); return ( -
- {/* Hazard Stripes Top/Bottom - 静态版本 */} -
-
- - {/* Vertical Guide Lines - 静态版本 */} -
-
- - {/* Technical Grid */} -
- - {/* Light Mode: Geometric Shapes - 静态版本,保留核心装饰 */} -
- {/* Geometric Shapes - Top Left */} -
-
- - {/* Geometric Shapes - Top Right */} -
-
- - {/* Diagonal Lines - Left Side */} -
-
-
- - {/* Diagonal Lines - Right Side */} -
-
-
- - {/* Corner Brackets - Bottom Left */} -
-
+
+ {/* Ambient Aurora Glows */} +
+
+
+ + {/* Subtle Technical Grid Overlay - very soft */} +
+ + {/* Modern Sci-Fi HUD Accents */} +
+
+ + {t("hero.systemReady")}
-
-
+
+
+
+
+
- {/* Corner Brackets - Bottom Right */} -
-
-
-
-
+
+
+ ID: MaaEnd-V1-RELEASE
- - {/* Technical Pattern - Center Background */} -
-
+
+
+
+
- {/* HUD Elements - 静态版本 */} -
-
- {t("hero.systemReady")} -
-
- ID: MaaEnd-V1-RELEASE + {/* Elegant Large Watermark - subtle integration */} +
+ MaaEnd
- {/* Large Watermark - 静态版本 */} -
- MaaEnd + {/* Floating Particles/Stars */} +
+
+
+
+
); diff --git a/app/components/hero/InteractiveModelOptimized.tsx b/app/components/hero/InteractiveModelOptimized.tsx deleted file mode 100644 index ce5f4d0..0000000 --- a/app/components/hero/InteractiveModelOptimized.tsx +++ /dev/null @@ -1,405 +0,0 @@ -"use client"; - -import { useEffect, useMemo, useRef, useState } from "react"; -import { Canvas, useFrame } from "@react-three/fiber"; -import { Float, OrbitControls, PerspectiveCamera } from "@react-three/drei"; -import * as THREE from "three"; -import { useTheme } from "next-themes"; - -// 性能优化的粒子系统 -const OptimizedArchitectureModel = ({ isDark }: { isDark: boolean }) => { - const count = 5000; // 保持原始粒子数量以维持视觉效果 - const mesh = useRef(null); - - // 使用 useMemo 缓存完整的几何体结构 - const geometry = useMemo(() => { - /* eslint-disable react-hooks/purity */ - // Math.random() is safe here as it's memoized and only runs once on mount - const temp = []; - - // 塔的总高度 - const towerHeight = 8; - const baseY = -4; // 底部位置(往下移动让顶部完整显示) - - // 1. 主塔身 - 底部宽大向上逐渐收窄的锥形结构 (四面体框架) - for (let i = 0; i < count * 0.25; i++) { - const t = Math.random(); // 0 = 底部, 1 = 顶部 - const y = baseY + t * towerHeight * 0.7; - - // 半径随高度减小 (底部2.0, 顶部0.3) - const radius = 2.0 - t * 1.7; - - // 四边形框架的边缘 - const edge = Math.floor(Math.random() * 4); - const baseAngle = (edge / 4) * Math.PI * 2 + Math.PI / 4; - const nextAngle = ((edge + 1) / 4) * Math.PI * 2 + Math.PI / 4; - const lerp = Math.random(); - - const angle = baseAngle + lerp * (nextAngle - baseAngle); - const x = Math.cos(angle) * radius + (Math.random() - 0.5) * 0.05; - const z = Math.sin(angle) * radius + (Math.random() - 0.5) * 0.05; - - temp.push(x, y, z); - } - - // 2. 垂直支撑柱 (四根主柱从底部延伸到顶部) - for (let pillar = 0; pillar < 4; pillar++) { - const angle = (pillar / 4) * Math.PI * 2 + Math.PI / 4; - for (let i = 0; i < count * 0.04; i++) { - const t = Math.random(); - const y = baseY + t * towerHeight * 0.7; - const radius = 2.0 - t * 1.7; - - const x = Math.cos(angle) * radius + (Math.random() - 0.5) * 0.08; - const z = Math.sin(angle) * radius + (Math.random() - 0.5) * 0.08; - - temp.push(x, y, z); - } - } - - // 3. 水平横梁结构 (多层平台) - const platforms = [0.0, 0.25, 0.5, 0.7]; - for (const pLevel of platforms) { - const y = baseY + pLevel * towerHeight * 0.7; - const radius = 2.0 - pLevel * 1.7; - - for (let i = 0; i < count * 0.03; i++) { - const angle = Math.random() * Math.PI * 2; - const r = radius * (0.3 + Math.random() * 0.7); - - const x = Math.cos(angle) * r + (Math.random() - 0.5) * 0.05; - const z = Math.sin(angle) * r + (Math.random() - 0.5) * 0.05; - - temp.push(x, y + (Math.random() - 0.5) * 0.1, z); - } - } - - // 4. 能量环 (围绕塔身的悬浮光环) - const energyRings = [ - { y: baseY + towerHeight * 0.3, radius: 2.8, particles: 0.06 }, - { y: baseY + towerHeight * 0.55, radius: 2.0, particles: 0.05 }, - { y: baseY + towerHeight * 0.75, radius: 1.2, particles: 0.04 }, - ]; - - for (const ring of energyRings) { - for (let i = 0; i < count * ring.particles; i++) { - const angle = Math.random() * Math.PI * 2; - const r = ring.radius + (Math.random() - 0.5) * 0.15; - const x = Math.cos(angle) * r; - const z = Math.sin(angle) * r; - const y = ring.y + (Math.random() - 0.5) * 0.08; - - temp.push(x, y, z); - } - } - - // 5. 顶部天线结构 (细长的能量发射器) - const antennaBase = baseY + towerHeight * 0.7; - const antennaHeight = towerHeight * 0.35; - - // 主天线柱 - for (let i = 0; i < count * 0.08; i++) { - const t = Math.random(); - const y = antennaBase + t * antennaHeight; - - // 天线越往上越细 - const radius = 0.15 - t * 0.12; - const angle = Math.random() * Math.PI * 2; - - const x = Math.cos(angle) * radius + (Math.random() - 0.5) * 0.03; - const z = Math.sin(angle) * radius + (Math.random() - 0.5) * 0.03; - - temp.push(x, y, z); - } - - // 6. 天线顶部能量球 - const topY = antennaBase + antennaHeight; - for (let i = 0; i < count * 0.04; i++) { - const theta = Math.random() * Math.PI * 2; - const phi = Math.random() * Math.PI; - const r = 0.25 + Math.random() * 0.1; - - const x = r * Math.sin(phi) * Math.cos(theta); - const y = topY + r * Math.cos(phi); - const z = r * Math.sin(phi) * Math.sin(theta); - - temp.push(x, y, z); - } - - // 7. 斜向支撑结构 (X形交叉支撑) - for (let level = 0; level < 3; level++) { - const t1 = level * 0.25; - const t2 = (level + 1) * 0.25; - - for (let cross = 0; cross < 4; cross++) { - const angle1 = (cross / 4) * Math.PI * 2 + Math.PI / 4; - const angle2 = ((cross + 1) / 4) * Math.PI * 2 + Math.PI / 4; - - for (let i = 0; i < count * 0.01; i++) { - const lerp = Math.random(); - const t = t1 + lerp * (t2 - t1); - const y = baseY + t * towerHeight * 0.7; - - const radius = 2.0 - t * 1.7; - const angle = angle1 + lerp * (angle2 - angle1); - - const x = Math.cos(angle) * radius * 0.95; - const z = Math.sin(angle) * radius * 0.95; - - temp.push(x, y, z); - } - } - } - - // 8. 悬浮能量粒子 (围绕塔身的浮动粒子) - for (let i = 0; i < count * 0.1; i++) { - const y = baseY + Math.random() * towerHeight; - const distance = 2.5 + Math.random() * 1.5; - const angle = Math.random() * Math.PI * 2; - - const x = Math.cos(angle) * distance; - const z = Math.sin(angle) * distance; - - temp.push(x, y, z); - } - - // 9. 底座结构 (宽大的六边形底座) - for (let i = 0; i < count * 0.06; i++) { - const angle = (Math.floor(Math.random() * 6) / 6) * Math.PI * 2; - const nextAngle = ((Math.floor(Math.random() * 6) + 1) / 6) * Math.PI * 2; - const lerp = Math.random(); - const finalAngle = angle + lerp * (nextAngle - angle); - - const radius = 2.2 + Math.random() * 0.3; - const x = Math.cos(finalAngle) * radius; - const z = Math.sin(finalAngle) * radius; - const y = baseY + (Math.random() - 0.5) * 0.2; - - temp.push(x, y, z); - } - - const geometry = new THREE.BufferGeometry(); - geometry.setAttribute( - "position", - new THREE.BufferAttribute(new Float32Array(temp), 3) - ); - return geometry; - /* eslint-enable react-hooks/purity */ - }, [count]); - - // 优化材质,减少重新创建 - const material = useMemo(() => { - return new THREE.PointsMaterial({ - size: 0.05, - color: isDark ? "#FFD000" : "#00BFFF", - transparent: true, - opacity: 0.8, - sizeAttenuation: true, - blending: isDark ? THREE.AdditiveBlending : THREE.NormalBlending, - }); - }, [isDark]); - - // 优化动画循环 - 保持原始旋转速度 - useFrame(() => { - if (!mesh.current) return; - // Technical rotation - 保持原始速度 - mesh.current.rotation.y -= 0.002; - }); - - // 清理几何体和材质 - useEffect(() => { - return () => { - geometry.dispose(); - material.dispose(); - }; - }, [geometry, material]); - - return ; -}; - -// 简化的全息场组件 -const OptimizedHoloField = ({ isDark }: { isDark: boolean }) => { - const ref = useRef(null); - - // 缓存几何体 - const geometries = useMemo( - () => ({ - outer: new THREE.CylinderGeometry(1.5, 3.5, 10, 6, 1, true), - inner: new THREE.CylinderGeometry(0.8, 0.8, 3, 8, 1, true), - }), - [] - ); - - // 缓存材质 - const materials = useMemo( - () => ({ - outer: new THREE.MeshBasicMaterial({ - color: isDark ? "#00F0FF" : "#008fa6", - wireframe: true, - opacity: 0.04, - transparent: true, - side: THREE.DoubleSide, - }), - inner: new THREE.MeshBasicMaterial({ - color: "#FFD000", - wireframe: true, - opacity: 0.03, - transparent: true, - side: THREE.DoubleSide, - }), - }), - [isDark] - ); - - useFrame((state, delta) => { - if (ref.current) { - ref.current.rotation.y += delta * 0.5; - } - }); - - // 清理资源 - useEffect(() => { - return () => { - Object.values(geometries).forEach((geo) => geo.dispose()); - Object.values(materials).forEach((mat) => mat.dispose()); - }; - }, [geometries, materials]); - - return ( - - - - - ); -}; - -// 主组件 -export default function InteractiveModelOptimized() { - const { theme, systemTheme } = useTheme(); - const [mounted, setMounted] = useState(false); - const [isVisible, setIsVisible] = useState(false); - const containerRef = useRef(null); - - // 延迟挂载以避免水合不匹配 - useEffect(() => { - const timeoutId = setTimeout(() => setMounted(true), 0); - return () => clearTimeout(timeoutId); - }, []); - - // 使用 Intersection Observer 优化性能 - useEffect(() => { - if (!mounted || !containerRef.current) return; - - const observer = new IntersectionObserver( - ([entry]) => { - setIsVisible(entry.isIntersecting); - }, - { threshold: 0.1 } - ); - - observer.observe(containerRef.current); - - return () => observer.disconnect(); - }, [mounted]); - - // 计算有效主题 - const currentTheme = theme === "system" ? systemTheme : theme; - const isDark = currentTheme === "dark"; - - // 防止水合不匹配 - if (!mounted) { - return
; - } - - // 只有在可见时才渲染 Canvas - if (!isVisible) { - return ( -
-
Loading 3D Model...
-
- ); - } - - return ( -
- - - - - - - - - - {/* 优化的光照 */} - - - - - - {/* 简化的 HUD 覆盖层 */} -
- {/* 角落括号 */} -
-
-
-
- - {/* 中心聚焦环 - 使用 CSS 动画而不是 Framer Motion */} -
-
-
- ); -} diff --git a/locales/en.json b/locales/en.json index 0ef822b..a4d257a 100644 --- a/locales/en.json +++ b/locales/en.json @@ -12,7 +12,7 @@ "title": "MaaEnd", "subtitle": "MAA - End", "description": "Endfield Assistant", - "tagline": "High-precision automation assistant. Designed for heavy-duty operations and maximum efficiency in Arknights: Endfield.", + "tagline": "Arknights: Endfield Automated Assistant Tool Powered by Visual Recognition", "status": "[ STATUS: OPTIMIZED FOR PRODUCTION ]", "systemReady": "SYSTEM_READY", "initCore": "DOWNLOAD", @@ -71,8 +71,8 @@ "architectureLabel": "Architecture", "title1": "AI-FIRST", "title2": "AUTOMATION SYSTEM", - "paragraph1": "MaaEnd is not just a script—it's an intelligent automation platform built on next-generation image recognition technology. Through deep learning models and real-time decision algorithms, it thinks like a human player but with machine-like precision and stability.", - "paragraph2": "Open source, secure, and transparent. MaaEnd is community-driven, providing reliable logistical support for administrators worldwide. Whether on high-performance Win32 native environments or ADB-driven mobile platforms, MaaEnd delivers a consistently excellent experience.", + "paragraph1": "MaaEnd is more than a simple script. Built on MaaFramework’s “black-box automation” capabilities, it forms a closed loop of screenshot capture → visual recognition → branching decisions → action execution. Without reading any in-game/internal data, it hands repetitive tasks over to the program.", + "paragraph2": "Whether you’re on PC or Android/emulators, MaaEnd runs tasks with the same logic to minimize platform-specific hassle. With auto-updates and continuous iteration, you can spend your time in the game—not in configuration.", "stats": { "githubStars": "GitHub Stars", "dailyUsers": "Daily Users", diff --git a/locales/zh.json b/locales/zh.json index 5df88f6..440d544 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -12,7 +12,7 @@ "title": "MaaEnd", "subtitle": "MAA - 终", "description": "终末地小助手", - "tagline": "高精度自动化助手。专为「明日方舟:终末地」重度作战和最大化效率而设计。", + "tagline": "基于视觉识别的明日方舟:终末地自动化辅助工具", "status": "[ 状态:已优化生产环境 ]", "systemReady": "系统就绪", "initCore": "下载", @@ -71,8 +71,8 @@ "architectureLabel": "架构", "title1": "AI 优先", "title2": "自动化系统", - "paragraph1": "MaaEnd 不仅仅是一个脚本,它是基于下一代图像识别技术的智能自动化平台。通过深度学习模型与即时决策算法,它能够像人类玩家一样思考,但拥有机器般的精确与稳定。", - "paragraph2": "开源、安全、透明。MaaEnd 由社区驱动,为全球管理员提供最可靠的后勤保障。无论是基于 Win32 API 的高性能原生环境,还是 ADB 驱动的移动端,MaaEnd 都能提供一致的极致体验。", + "paragraph1": "MaaEnd 不只是脚本,它构建在 MaaFramework 的“黑盒自动化”能力之上:通过截图 → 图像识别 → 分支判断 → 执行动作的闭环,在不读取游戏内部数据的前提下,把重复操作交给程序完成", + "paragraph2": "无论是 PC 端还是安卓/模拟器,MaaEnd 都以同一套逻辑执行任务,尽量减少环境差异带来的折腾。配合自动更新与持续迭代,让你把时间花在游戏里,而不是配置里", "stats": { "githubStars": "GitHub Stars", "dailyUsers": "日活用户",