PairMatchingGame initial commit

This commit is contained in:
2026-01-29 21:02:28 +02:00
parent 1d3c22ea80
commit 32f07a3f58
4 changed files with 118 additions and 2 deletions
@@ -0,0 +1,75 @@
import { BoxGeometry, Mesh, MeshStandardMaterial, Group } from 'three';
import { centerOrigin } from '@/lib/MeshUtils';
import { EventManager } from '@/lib/EventManager';
import Utils from '@/lib/Utils';
class PairMatchingGame extends EventManager {
emits = ['finish']
constructor(engine, data) {
super();
return new Promise(async (resolve, reject)=>{
let container = new Group();
let c = data.c, orderArray = Array.from({length:c}, (_, i)=>i);
let o = [ Utils.shuffleArray(orderArray), Utils.shuffleArray(orderArray) ]
const aq = engine.motionQueue;
let dx = 3, dy = 1.2;
let bm = new BoxGeometry(1, 1, 1);
let material = new MeshStandardMaterial({
map: await engine.loadTexture(data.$go.asset.name),
// roughness:1, metalness:0,
// normalMap: await engine.loadTexture('NormalMap.png', '/static/textures/'),
});
//material.map.encoding = sRGBEncoding;
for (let i = 0; i < c; i++) {
let b = [], uv = [], p = [];
for (let xi = 0; xi < 2; xi++){
b[xi] = bm.clone();
uv[xi] = b[xi].getAttribute('uv');
let s = [xi/2, i / c];
for (let i = 0; i < 6; i++) {
//top left
uv[xi].array[8 * i] = s[0];
uv[xi].array[8 * i + 1] = s[1] + 1 / c;
//top right
uv[xi].array[8 * i + 2] = s[0] + 1 / 2;
uv[xi].array[8 * i + 3] = s[1] + 1 / c;
//bottom left
uv[xi].array[8 * i + 4] = s[0];
uv[xi].array[8 * i + 5] = s[1];
//bottom right
uv[xi].array[8 * i + 6] = s[0] + 1 / 2;
uv[xi].array[8 * i + 7] = s[1];
}
let mesh = new Mesh(b[xi], material);
mesh.position.set(xi * dx, o[xi][i] * dy, 0);
container.add(mesh);
}
}
var check = () => {
};
let clickFn = (i) => {
};
container.children.forEach(c => {
engine.clickable.add(c, clickFn);
});
this.update = () => {
};
this.object = centerOrigin(container);
resolve(this);
})
}
}
export { PairMatchingGame }