From af9e0c481a74cbe49a7b2cbddb2406a65c163c9a Mon Sep 17 00:00:00 2001 From: adrien Date: Tue, 1 Oct 2024 00:35:06 +0200 Subject: [PATCH] locked texture --- css/loading.css | 4 ++-- images/edge.png | Bin 5965 -> 6190 bytes images/sprites.png | Bin 761 -> 11442 bytes jsm/Tetrominoes.js | 40 ++++++++++++++++++++++------------------ 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/css/loading.css b/css/loading.css index b413be6..970df5d 100644 --- a/css/loading.css +++ b/css/loading.css @@ -34,8 +34,8 @@ body { background-color: black; } } @keyframes spinCube { - 0% { transform: translateZ(20px) rotateX( 0deg) rotateY( 0deg) rotateZ( 0deg); } - 100% { transform: translateZ(20px) rotateX(360deg) rotateY( 0deg) rotateZ(360deg); } + 0% { transform: translateZ(20px) rotateX( 0deg) rotateY( 0deg); } + 100% { transform: translateZ(20px) rotateX(360deg) rotateY(360deg); } } .face { diff --git a/images/edge.png b/images/edge.png index 70f2dd93ede840ef6f98e94e9ea992f5902b7283..a0e21fd09fb0732deabea9e4da61892edcc6823d 100644 GIT binary patch delta 1035 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 delta 750 zcmV~41^@s6LwUSK0004lX+uL$Nkc;*P;zf(X>4Tx04UFukxM8< zQ5?p926;4+%tDgxVpy3Ck|je)QPZGiuyF4kGt}H`x_4w_sce;n$Hr@6W6jpWRw?CC zvbL}yHkz*gxua%MqntXOU*9?3*E!#Tz+u+3+?pY!e_!gj$Baq zLFq=3UlnJ34yeqKGaVlh4hd_SGB(QCTyiYoe&KM+vL!!|C~`{ix?(H4YX00)y)d|F z&rB&@W(Q-8Gk-}84TDvd$&x1`t1XI4T=t_C{O!I!CN4u<%b4OAWd#e}_oM#cceif3 zueX>Kj6&_R=e>79-8K}qJn!qs^9sjM{REeG$-i<4gCC-Am9+2yG;hH9RY@~;;9?Wn z9&@^*`%<;cKspU?r}9lnXuW~PxngfW`<&dvv~)Fb4S#$4(4CR&`3mo@FYoQoGk$+W zzX66ya;_ng8T9}F010qNS#tmYE+PN`E+PS{;@y$}00A6HL_t(YOYN0S3WG2Zh0_uj z-pVV8o8rb3cpC5EPP~G*a-q=rrWpxCekxcBHXoFk7#e)OnaoXV{Zto*1a@6#mP$?2 zq>7@Tynk(5iuS$@?^jhtQ8Ekz#d)47O7c9X82f+U_Y`fGWl>GjP#$_eZSq|hi^JN6 z#W21@eXtltie@p46kV33$=;0PXtFSO6L(>ZTm!t6&y6#Poexp?;bXx;2~3bikU;4c za6S7qwx}%2OcsU&+HSEhmxK6nveeEbbUvP==V$7=rnSpKw2f>XZx2e2_M9YE+P;eh ztm{e_4MctF9P<}r;$iYjLIUmb<5C5DBl*gc_tPBQke7!Po#x<1nu89~9Au96oFrD- g-<*RN9urEv0A)MZBw04F=>Px#07*qoM6N<$f;qclHUIzs diff --git a/jsm/Tetrominoes.js b/jsm/Tetrominoes.js index 32cee9c..8066a85 100644 --- a/jsm/Tetrominoes.js +++ b/jsm/Tetrominoes.js @@ -189,7 +189,7 @@ class Mino extends THREE.Object3D { super() this.color = color this.offset = offset - this.velocity = P(50 - 100 * Math.random(), 50 - 100 * Math.random(), 50 - 100 * Math.random()) + this.velocity = P(50 - 100 * Math.random(), 70 - 100 * Math.random(), 50 - 100 * Math.random()) this.rotationAngle = P(Math.random(), Math.random(), Math.random()).normalize() this.angularVelocity = 5 - 10 * Math.random() this.constructor.meshes.add(this) @@ -223,6 +223,7 @@ class Tetromino extends THREE.Group { constructor(position) { super() if (position) this.position.copy(position) + this.offset = this.offset.clone() this.minoesPosition[FACING.NORTH].forEach(() => this.add(new Mino(this.freeColor, this.offset))) this.facing = FACING.NORTH this.rotatedLast = false @@ -243,8 +244,10 @@ class Tetromino extends THREE.Group { set locking(locking) { if (locking) { this.color = this.lockingColor + this.offset.y = 2 } else { this.color = this.freeColor + this.offset.y = 0 } } @@ -320,6 +323,7 @@ Ghost.prototype.freeColor = new THREE.Color(COLORS.GHOST) Ghost.prototype.minoesPosition = [ [P(0, 0, 0), P(0, 0, 0), P(0, 0, 0), P(0, 0, 0)], ] +Ghost.prototype.offset = P(0, 1) class I extends Tetromino { } @@ -336,8 +340,8 @@ I.prototype.srs = [ { [ROTATION.CW]: [P(0, 0), P(1, 0), P(-2, 0), P(1, -2), P(-2, 1)], [ROTATION.CCW]: [P(0, 0), P(-2, 0), P(1, 0), P(-2, -1), P(1, 2)] }, ] I.prototype.freeColor = new THREE.Color(COLORS.I) -I.prototype.offset = P(0, 1) -I.prototype.ghostOffset = P(0, 0) +I.prototype.offset = P(0, 0) +I.prototype.ghostOffset = P(0, 1) class J extends Tetromino { } J.prototype.minoesPosition = [ @@ -347,8 +351,8 @@ J.prototype.minoesPosition = [ [P(0, 1), P(-1, -1), P(0, 0), P(0, -1)], ] J.prototype.freeColor = new THREE.Color(COLORS.J) -J.prototype.offset = P(1, 1) -J.prototype.ghostOffset = P(1, 0) +J.prototype.offset = P(1, 0) +J.prototype.ghostOffset = P(1, 1) class L extends Tetromino { } @@ -359,8 +363,8 @@ L.prototype.minoesPosition = [ [P(0, 1), P(0, 0), P(0, -1), P(-1, 1)], ] L.prototype.freeColor = new THREE.Color(COLORS.L) -L.prototype.offset = P(2, 1) -L.prototype.ghostOffset = P(2, 0) +L.prototype.offset = P(2, 0) +L.prototype.ghostOffset = P(2, 1) class O extends Tetromino { } O.prototype.minoesPosition = [ @@ -370,8 +374,8 @@ O.prototype.srs = [ { [ROTATION.CW]: [], [ROTATION.CCW]: [] } ] O.prototype.freeColor = new THREE.Color(COLORS.O) -O.prototype.offset = P(3, 1) -O.prototype.ghostOffset = P(3, 0) +O.prototype.offset = P(3, 0) +O.prototype.ghostOffset = P(3, 1) class S extends Tetromino { } S.prototype.minoesPosition = [ @@ -381,8 +385,8 @@ S.prototype.minoesPosition = [ [P(-1, 1), P(0, 0), P(-1, 0), P(0, -1)], ] S.prototype.freeColor = new THREE.Color(COLORS.S) -S.prototype.offset = P(4, 1) -S.prototype.ghostOffset = P(4, 0) +S.prototype.offset = P(4, 0) +S.prototype.ghostOffset = P(4, 1) class T extends Tetromino { get tSpin() { @@ -410,8 +414,8 @@ T.prototype.tSlots = [ [P(-1, -1), P(-1, 1), P(1, 1), P(1, -1)], ] T.prototype.freeColor = new THREE.Color(COLORS.T) -T.prototype.offset = P(5, 1) -T.prototype.ghostOffset = P(5, 0) +T.prototype.offset = P(5, 0) +T.prototype.ghostOffset = P(5, 1) class Z extends Tetromino { } Z.prototype.minoesPosition = [ @@ -421,8 +425,8 @@ Z.prototype.minoesPosition = [ [P(0, 1), P(-1, 0), P(0, 0), P(-1, -1)] ] Z.prototype.freeColor = new THREE.Color(COLORS.Z) -Z.prototype.offset = P(6, 1) -Z.prototype.ghostOffset = P(6, 0) +Z.prototype.offset = P(6, 0) +Z.prototype.ghostOffset = P(6, 1) class Playfield extends THREE.Group { @@ -464,8 +468,8 @@ class Playfield extends THREE.Group { .lineTo(COLUMNS, 0) .lineTo(COLUMNS, SKYLINE) .lineTo(COLUMNS + 1, SKYLINE) - .lineTo(COLUMNS + 1, -.5) - .lineTo(-1, -.5) + .lineTo(COLUMNS + 1, -1/3) + .lineTo(-1, -1/3) .moveTo(-1, SKYLINE) const retroEdgeTexture = new THREE.TextureLoader(loadingManager).load("images/edge.png", (texture) => { texture.wrapS = THREE.RepeatWrapping @@ -494,7 +498,7 @@ class Playfield extends THREE.Group { metalness: 0.9, }) ) - back.position.set(COLUMNS/2, SKYLINE/2, 0) + back.position.set(COLUMNS/2, SKYLINE/2) this.retroEdge.add(back) this.retroEdge.visible = false this.add(this.retroEdge)