Merge pull request #242 from LOG1997/release_0.6.0-beat3

Release 0.6.0 beat3
This commit is contained in:
LOG1997
2026-02-01 11:00:49 +08:00
committed by GitHub
8 changed files with 12 additions and 140 deletions

View File

@@ -1,7 +1,7 @@
{ {
"name": "log-lottery", "name": "log-lottery",
"private": true, "private": true,
"version": "0.6.0-2", "version": "0.6.0-3",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {

2
src-tauri/Cargo.lock generated
View File

@@ -77,7 +77,7 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
[[package]] [[package]]
name = "app" name = "app"
version = "0.6.0-1" version = "0.6.0-3"
dependencies = [ dependencies = [
"log", "log",
"serde", "serde",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "app" name = "app"
version = "0.6.0-2" version = "0.6.0-3"
description = "A Tauri App" description = "A Tauri App"
authors = [ "you" ] authors = [ "you" ]
license = "" license = ""

View File

@@ -1,7 +1,7 @@
{ {
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "log-lottery", "productName": "log-lottery",
"version": "0.6.0-2", "version": "0.6.0-3",
"identifier": "to2026.xyz", "identifier": "to2026.xyz",
"build": { "build": {
"frontendDist": "../dist", "frontendDist": "../dist",

View File

@@ -1 +1,2 @@
export const SINGLE_TIME_MAX_PERSON_COUNT = 30 export const SINGLE_TIME_MAX_PERSON_COUNT = 30
export const CONFETTI_FIRE_MAX_COUNT = 12

View File

@@ -11,7 +11,7 @@ import { useToast } from 'vue-toast-notification'
import dongSound from '@/assets/audio/end.mp3' import dongSound from '@/assets/audio/end.mp3'
import enterAudio from '@/assets/audio/enter.wav' import enterAudio from '@/assets/audio/enter.wav'
import worldCupAudio from '@/assets/audio/worldcup.mp3' import worldCupAudio from '@/assets/audio/worldcup.mp3'
import { SINGLE_TIME_MAX_PERSON_COUNT } from '@/constant/config' import { CONFETTI_FIRE_MAX_COUNT, SINGLE_TIME_MAX_PERSON_COUNT } from '@/constant/config'
import { useElementPosition, useElementStyle } from '@/hooks/useElement' import { useElementPosition, useElementStyle } from '@/hooks/useElement'
import i18n from '@/locales/i18n' import i18n from '@/locales/i18n'
import useStore from '@/store' import useStore from '@/store'
@@ -623,8 +623,7 @@ export function useViewModel() {
.start() .start()
.onComplete(() => { .onComplete(() => {
playWinMusic() playWinMusic()
confettiFire(index, CONFETTI_FIRE_MAX_COUNT)
confettiFire()
resetCamera() resetCamera()
}) })
}) })

View File

@@ -1,131 +0,0 @@
import type { IPersonConfig } from '@/types/storeType'
import confetti from 'canvas-confetti'
import { Object3D, Vector3 } from 'three'
import { filterData } from '@/utils'
/**
* @description 初始化表格数据
* @param0 allPersonList 所有人的列表
* @param1 rowCount 行数默认是7行
* @returns 表格数据
*/
export function initTableData({ allPersonList, rowCount }: { allPersonList: IPersonConfig[], rowCount: number }): IPersonConfig[] {
let tableData: IPersonConfig[] = []
if (allPersonList.length <= 0) {
return []
}
const totalCount = rowCount * 7
const allPersonLength = allPersonList.length
if (allPersonLength < totalCount) {
tableData = Array.from({ length: totalCount }, () => JSON.parse(JSON.stringify(allPersonList))).flat()
}
else {
tableData = allPersonList.slice(0, totalCount)
}
tableData = filterData(tableData.slice(0, totalCount), rowCount)
return tableData
}
/**
* @description 横铺图形:处理数据,把每个卡片在界面的位置写入
* @param0 tableData 表格数据
* @param1 rowCount 每行有多少个元素
* @param2 cardSize 卡片的大小
* @returns Object3D[]
*/
export function createTableVertices({ tableData, rowCount, cardSize }: { tableData: IPersonConfig[], rowCount: number, cardSize: { width: number, height: number } }): Object3D[] {
const tableLen = tableData.length
const objects: Object3D[] = []
for (let i = 0; i < tableLen; i++) {
const object = new Object3D()
object.position.x = tableData[i].x * (cardSize.width + 40) - rowCount * 90
object.position.y = -tableData[i].y * (cardSize.height + 20) + 1000
object.position.z = 0
objects.push(object)
// targets.table.push(object)
}
return objects
}
/**
* @description 创建球体
* @param0 objectsLength 物体的个数
* @returns Object3D[]
*/
export function createSphereVertices({ objectsLength }: { objectsLength: number }): Object3D[] {
let i = 0
const resObjects: Object3D[] = []
// const objLength = objects.value.length
const vector = new Vector3()
for (; i < objectsLength; ++i) {
const phi = Math.acos(-1 + (2 * i) / objectsLength)
const theta = Math.sqrt(objectsLength * Math.PI) * phi
const object = new Object3D()
object.position.x = 800 * Math.cos(theta) * Math.sin(phi)
object.position.y = 800 * Math.sin(theta) * Math.sin(phi)
object.position.z = -800 * Math.cos(phi)
// rotation object
vector.copy(object.position).multiplyScalar(2)
object.lookAt(vector)
resObjects.push(object)
}
return resObjects
}
export function confettiFire() {
const duration = 3 * 1000
const end = Date.now() + duration;
(function frame() {
// launch a few confetti from the left edge
confetti({
particleCount: 2,
angle: 60,
spread: 55,
origin: { x: 0 },
})
// and launch a few from the right edge
confetti({
particleCount: 2,
angle: 120,
spread: 55,
origin: { x: 1 },
})
// keep going until we are out of time
if (Date.now() < end) {
requestAnimationFrame(frame)
}
}())
centerFire(0.25, {
spread: 26,
startVelocity: 55,
})
centerFire(0.2, {
spread: 60,
})
centerFire(0.35, {
spread: 100,
decay: 0.91,
scalar: 0.8,
})
centerFire(0.1, {
spread: 120,
startVelocity: 25,
decay: 0.92,
scalar: 1.2,
})
centerFire(0.1, {
spread: 120,
startVelocity: 45,
})
}
function centerFire(particleRatio: number, opts: any) {
const count = 200
confetti({
origin: { y: 0.7 },
...opts,
particleCount: Math.floor(count * particleRatio),
})
}

View File

@@ -74,7 +74,10 @@ export function createSphereVertices({ objectsLength }: { objectsLength: number
return resObjects return resObjects
} }
export function confettiFire() { export function confettiFire(index: number, maxLimit: number) {
if (index > maxLimit) {
return
}
const duration = 3 * 1000 const duration = 3 * 1000
const end = Date.now() + duration; const end = Date.now() + duration;
(function frame() { (function frame() {
@@ -92,7 +95,7 @@ export function confettiFire() {
spread: 55, spread: 55,
origin: { x: 1 }, origin: { x: 1 },
}) })
console.log('requestAnimationFrame')
// keep going until we are out of time // keep going until we are out of time
if (Date.now() < end) { if (Date.now() < end) {
requestAnimationFrame(frame) requestAnimationFrame(frame)