From 3c8fc95e23bf0768658a82f620e1c637363cad0e Mon Sep 17 00:00:00 2001 From: adrien Date: Tue, 1 Oct 2024 01:57:38 +0200 Subject: [PATCH] texture on all faces --- jsm/TetraGUI.js | 7 ++----- jsm/Tetrominoes.js | 30 +++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/jsm/TetraGUI.js b/jsm/TetraGUI.js index a3ee9c3..ce680bd 100644 --- a/jsm/TetraGUI.js +++ b/jsm/TetraGUI.js @@ -12,7 +12,7 @@ export class TetraGUI extends GUI { this.pauseButton = this.add(game, "pause").name("Pause").hide() this.resumeButton = this.add(game, "resume").name("Reprendre").hide() - this.stats = this.addFolder("Stats").hide() + this.stats = this.addFolder("Statistiques").hide() this.stats.add(stats, "time").name("Temps").disable().listen() this.stats.add(stats, "score").name("Score").disable().listen() this.stats.add(stats, "highScore").name("Meilleur score").disable().listen() @@ -30,17 +30,14 @@ export class TetraGUI extends GUI { this.settings.add(settings, "theme", ["Plasma", "Espace", "Rétro"]).name("Thème").onChange(theme => { scene.theme = theme - Mino.meshes.material = Mino.materials[theme] + Mino.meshes.theme = theme if (theme == "Rétro") { playfield.edge.visible = false playfield.retroEdge.visible = true - Mino.meshes.resetColor() - Mino.meshes.update = Mino.meshes.updateOffset music.src = "audio/Tetris_MkVaffQuasi_Ultimix_OC_ReMix.mp3" } else { playfield.edge.visible = true playfield.retroEdge.visible = false - Mino.meshes.update = Mino.meshes.updateColor music.src = "audio/benevolence.m4a" } }) diff --git a/jsm/Tetrominoes.js b/jsm/Tetrominoes.js index b258e05..4ca2311 100644 --- a/jsm/Tetrominoes.js +++ b/jsm/Tetrominoes.js @@ -90,6 +90,25 @@ class InstancedMino extends THREE.InstancedMesh { this.instances.clear() } + set theme(theme) { + this._theme = theme + if(Mino.materials[theme]) Mino.meshes.material = Mino.materials[theme] + if (theme == "Rétro") { + this.geometry = Mino.retroGeometry + this.position.set(.5, .5, .5) + this.resetColor() + this.update = Mino.meshes.updateOffset + } else { + this.geometry = Mino.geometry + this.position.set(0, 0, 0) + this.update = Mino.meshes.updateColor + } + } + + get theme() { + return this._theme + } + setOffsetAt(index, offset) { this.offsets[2*index] = offset.x this.offsets[2*index + 1] = offset.y @@ -148,12 +167,11 @@ class Mino extends THREE.Object3D { opacity: 0.8, roughness: 0.1, metalness: 0.99, - }), - Rétro: [sideMaterial, sideMaterial, sideMaterial, sideMaterial, sideMaterial, sideMaterial] + }) } static { new THREE.TextureLoader().load("images/sprites.png", (texture) => { - this.materials.Rétro[0] = this.materials.Rétro[2] = new TileMaterial({ + this.materials.Rétro = new TileMaterial({ color: 0xd0d4c1, map: texture, bumpMap: texture, @@ -162,6 +180,7 @@ class Mino extends THREE.Object3D { metalness: 0.8, transparent: true, }, 8, 8) + if (this.meshes.theme == "Rétro") this.meshes.material = this.materials.Rétro }) } static meshes @@ -181,8 +200,9 @@ class Mino extends THREE.Object3D { bevelOffset: 0, bevelSegments: 1 } - let minoGeometry = new THREE.ExtrudeGeometry(minoFaceShape, minoExtrudeSettings) - this.meshes = new InstancedMino(minoGeometry, this.materials.Plasma, 2*ROWS*COLUMNS) + this.geometry = new THREE.ExtrudeGeometry(minoFaceShape, minoExtrudeSettings) + this.retroGeometry = new THREE.BoxGeometry() + this.meshes = new InstancedMino(this.geometry, this.materials.Plasma, 2*ROWS*COLUMNS) } constructor(color, offset) {