File size: 1,135 Bytes
40a6d5e
a6e23da
ed482ba
7f7b2cc
a6e23da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca23eb9
a6e23da
 
 
40a6d5e
 
 
 
7f7b2cc
40a6d5e
 
 
7f7b2cc
40a6d5e
 
 
a6e23da
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { Fragment } from "react";
import { CubePiece } from "./cube-piece";
import { RotationPanel } from "./rotation-panel";
import { FacingDirection } from "./consts";

const CUBE_POSITIONS: Array<[number, number, number]> = [];
for (let x = -0.5; x <= 0.5; x++) {
  for (let y = -0.5; y <= 0.5; y++) {
    for (let z = -0.5; z <= 0.5; z++) {
      CUBE_POSITIONS.push([x, y, z]);
    }
  }
}

type RubiksCubeProps = {
  roughness: number;
};

export const RubiksCube = ({ roughness }: RubiksCubeProps) => {
  return (
    <group>
      {CUBE_POSITIONS.map((position) => (
        <CubePiece
          key={position.join(",")}
          initialPosition={position}
          roughness={roughness}
        />
      ))}
      {["front", "back", "left", "right", "top", "bottom"].map((face) => (
        <Fragment key={face}>
          <RotationPanel
            direction="clockwise"
            facingDirection={face as FacingDirection}
          />
          <RotationPanel
            direction="counter-clockwise"
            facingDirection={face as FacingDirection}
          />
        </Fragment>
      ))}
    </group>
  );
};