module GI where import Graphics.UI.GLUT hiding (index) import RubikCube import Data.Sequence import Data.Word (Word8) import Sprites face :: IO () face = renderPrimitive Quads $ do vertex (Vertex3 0.0 0.0 (0 :: GLfloat)) vertex (Vertex3 0.0 2.0 (0 :: GLfloat)) vertex (Vertex3 2.0 2.0 (0 :: GLfloat)) vertex (Vertex3 2.0 0.0 (0 :: GLfloat)) color3f = color :: Color3 GLfloat -> IO () scalef = scale :: GLfloat -> GLfloat -> GLfloat -> IO () translatef::GLfloat -> GLfloat -> GLfloat -> IO () translatef a b c = translate $ Vector3 a b c rotatef::GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO () rotatef a b c d = rotate a $ Vector3 b c d --faceColor:: Int -> Color3 faceColor 0 = color3f (Color3 1 1 1) faceColor 1 = color3f (Color3 1 1 0) faceColor 2 = color3f (Color3 1 0 0) faceColor 3 = color3f (Color3 1 0 1) faceColor 4 = color3f (Color3 0 1 1) faceColor 5 = color3f (Color3 0 1 0) paintCube:: RCube -> IO() paintCube (RCube corners edges centers) = do tops centers edges corners -- paintEdges edges -- paintCenters centers -- paintCorners corners {- fe :: !CFace, -- ^ Front Edge xy :: !CFace -- ^ X or Y axis -} paintCorners:: Seq Corner -> IO() paintCorners sequence = do paintFace sequence x 5 (Vector3 (-3) (1) (-1)) 90 (Vector3 0 1 0) paintFace sequence z 5 (Vector3 (-3) (1) (-3)) 0 (Vector3 0 0 0) paintFace sequence y 5 (Vector3 (-3) (3) (-3)) 90 (Vector3 1 0 0) paintFace sequence z 4 (Vector3 (1) (1) (-3)) 0 (Vector3 0 0 0) paintFace sequence x 4 (Vector3 (3) (1) (-1)) 90 (Vector3 0 1 0) paintFace sequence y 4 (Vector3 (1) (3) (-3)) 90 (Vector3 1 0 0) paintFace sequence y 7 (Vector3 (1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace sequence z 7 (Vector3 (1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace sequence x 7 (Vector3 (3) (-3) (-1)) 90 (Vector3 0 1 0) paintFace sequence y 6 (Vector3 (-3) (-3) (-3)) 90 (Vector3 1 0 0) paintFace sequence z 6 (Vector3 (-3) (-3) (-3)) 0 (Vector3 0 0 0) paintFace sequence x 6 (Vector3 (-3) (-3) (-1)) 90 (Vector3 0 1 0) paintFace sequence x 0 (Vector3 (-3) (1) (3)) 90 (Vector3 0 1 0) paintFace sequence y 0 (Vector3 (-3) (3) (1)) 90 (Vector3 1 0 0) paintFace sequence z 0 (Vector3 (-3) (1) (3)) 0 (Vector3 0 0 0) paintFace sequence x 1 (Vector3 (3) (1) (3)) 90 (Vector3 0 1 0) paintFace sequence y 1 (Vector3 (1) (3) (1)) 90 (Vector3 1 0 0) paintFace sequence z 1 (Vector3 (1) (1) (3)) 0 (Vector3 0 0 0) paintFace sequence y 2 (Vector3 (1) (-3) (1)) 90 (Vector3 1 0 0) paintFace sequence x 2 (Vector3 (3) (-3) (3)) 90 (Vector3 0 1 0) paintFace sequence z 2 (Vector3 (1) (-3) (3)) 0 (Vector3 0 0 0) paintFace sequence x 3 (Vector3 (-3) (-3) (3)) 90 (Vector3 0 1 0) paintFace sequence y 3 (Vector3 (-3) (-3) (1)) 90 (Vector3 1 0 0) paintFace sequence z 3 (Vector3 (-3) (-3) (3)) 0 (Vector3 0 0 0) paintEdges:: Seq Edge -> IO() paintEdges sequence = do paintFace sequence xy 10 (Vector3 (-1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace sequence fe 10 (Vector3 (-1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace sequence fe 11 (Vector3 (1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace sequence xy 11 (Vector3 (3) (-1) (-1)) 90 (Vector3 0 1 0) paintFace sequence xy 9 (Vector3 (-3) (-1) (-1)) 90 (Vector3 0 1 0) paintFace sequence fe 9 (Vector3 (-3) (-1) (-3)) 0 (Vector3 0 0 0) paintFace sequence fe 8 (Vector3 (-1) (1) (-3)) 0 (Vector3 0 0 0) paintFace sequence xy 8 (Vector3 (-1) 3 (-3)) 90 (Vector3 1 0 0) paintFace sequence xy 7 (Vector3 (-3) (-3) (1)) 90 (Vector3 0 1 0) paintFace sequence fe 7 (Vector3 (-3) (-3) (-1)) 90 (Vector3 1 0 0) paintFace sequence fe 6 (Vector3 (1) (-3) (-1)) 90 (Vector3 1 0 0) paintFace sequence xy 6 (Vector3 (3) (-3) (1)) 90 (Vector3 0 1 0) paintFace sequence xy 4 (Vector3 (-3) 1 (1)) 90 (Vector3 0 1 0) paintFace sequence fe 4 (Vector3 (-3) (3) (-1)) 90 (Vector3 1 0 0) paintFace sequence xy 5 (Vector3 (3) 1 (1)) 90 (Vector3 0 1 0) paintFace sequence fe 5 (Vector3 (1) (3) (-1)) 90 (Vector3 1 0 0) paintFace sequence xy 2 (Vector3 (-1) (-3) (1)) 90 (Vector3 1 0 0) paintFace sequence fe 2 (Vector3 (-1) (-3) (3)) 0 (Vector3 0 0 0) paintFace sequence xy 1 (Vector3 (3) (-1) (3)) 90 (Vector3 0 1 0) paintFace sequence fe 1 (Vector3 (1) (-1) 3) 0 (Vector3 0 0 0) paintFace sequence xy 3 (Vector3 (-3) (-1) (3)) 90 (Vector3 0 1 0) paintFace sequence fe 3 (Vector3 (-3) (-1) 3) 0 (Vector3 0 0 0) paintFace sequence xy 0 (Vector3 (-1) 3 (1)) 90 (Vector3 1 0 0) paintFace sequence fe 0 (Vector3 (-1) (1) 3) 0 (Vector3 0 0 0) paintCenters:: Seq Center -> IO() paintCenters sequence = do paintFace sequence center 0 (Vector3 (-1) (-1) 3) 0 (Vector3 0 0 0) paintFace sequence center 1 (Vector3 (-1) 3 (-1)) 90 (Vector3 1 0 0) paintFace sequence center 2 (Vector3 3 (-1) (1)) 90 (Vector3 0 1 0) paintFace sequence center 3 (Vector3 (-3) (-1) (-1)) (-90) (Vector3 0 1 0) paintFace sequence center 4 (Vector3 (-1) (-3) (1)) (-90) (Vector3 1 0 0) paintFace sequence center 5 (Vector3 (-1) (-1) (-3)) 0 (Vector3 0 0 0) {-| PINTA TOOOOOOODO EL CUBO PERO PINTA DE ULTIMO LOS QUE VAN AL FRENTE -} tops:: Seq Center -> Seq Edge -> Seq Corner -> IO() tops centers edges corners = do paintFace centers center 3 (Vector3 (-3) (-1) (-1)) (-90) (Vector3 0 1 0) paintFace centers center 4 (Vector3 (-1) (-3) (1)) (-90) (Vector3 1 0 0) paintFace centers center 5 (Vector3 (-1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 10 (Vector3 (-1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace edges fe 10 (Vector3 (-1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 9 (Vector3 (-3) (-1) (-1)) 90 (Vector3 0 1 0) paintFace edges fe 9 (Vector3 (-3) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 7 (Vector3 (-3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges fe 7 (Vector3 (-3) (-3) (-1)) 90 (Vector3 1 0 0) paintFace corners y 6 (Vector3 (-3) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 6 (Vector3 (-3) (-3) (-3)) 0 (Vector3 0 0 0) paintFace corners x 6 (Vector3 (-3) (-3) (-1)) 90 (Vector3 0 1 0) paintFace corners z 7 (Vector3 (1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace corners x 0 (Vector3 (-3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners x 3 (Vector3 (-3) (-3) (3)) 90 (Vector3 0 1 0) paintFace corners y 3 (Vector3 (-3) (-3) (1)) 90 (Vector3 1 0 0) paintFace corners y 2 (Vector3 (1) (-3) (1)) 90 (Vector3 1 0 0) paintFace edges fe 8 (Vector3 (-1) (1) (-3)) 0 (Vector3 0 0 0) paintFace edges fe 11 (Vector3 (1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 5 (Vector3 (-3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners z 5 (Vector3 (-3) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners y 5 (Vector3 (-3) (3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 4 (Vector3 (1) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 4 (Vector3 (3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners y 4 (Vector3 (1) (3) (-3)) 90 (Vector3 1 0 0) paintFace corners y 7 (Vector3 (1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners x 7 (Vector3 (3) (-3) (-1)) 90 (Vector3 0 1 0) -- LE MOVI Z paintFace edges xy 11 (Vector3 (3) (-1) (-1)) 90 (Vector3 0 1 0) -- LE MOVI FE paintFace edges xy 8 (Vector3 (-1) 3 (-3)) 90 (Vector3 1 0 0) -- LE MOVI FE paintFace edges fe 6 (Vector3 (1) (-3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 6 (Vector3 (3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges xy 4 (Vector3 (-3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 4 (Vector3 (-3) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 5 (Vector3 (3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 5 (Vector3 (1) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 2 (Vector3 (-1) (-3) (1)) 90 (Vector3 1 0 0) paintFace edges fe 2 (Vector3 (-1) (-3) (3)) 0 (Vector3 0 0 0) paintFace edges xy 1 (Vector3 (3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 1 (Vector3 (1) (-1) 3) 0 (Vector3 0 0 0) paintFace edges xy 3 (Vector3 (-3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 3 (Vector3 (-3) (-1) 3) 0 (Vector3 0 0 0) paintFace edges xy 0 (Vector3 (-1) 3 (1)) 90 (Vector3 1 0 0) paintFace edges fe 0 (Vector3 (-1) (1) 3) 0 (Vector3 0 0 0) paintFace centers center 0 (Vector3 (-1) (-1) 3) 0 (Vector3 0 0 0) paintFace centers center 1 (Vector3 (-1) 3 (-1)) 90 (Vector3 1 0 0) paintFace centers center 2 (Vector3 3 (-1) (1)) 90 (Vector3 0 1 0) paintFace corners y 0 (Vector3 (-3) (3) (1)) 90 (Vector3 1 0 0) -- LE MOVI X paintFace corners z 0 (Vector3 (-3) (1) (3)) 0 (Vector3 0 0 0) paintFace corners x 1 (Vector3 (3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners y 1 (Vector3 (1) (3) (1)) 90 (Vector3 1 0 0) paintFace corners z 1 (Vector3 (1) (1) (3)) 0 (Vector3 0 0 0) paintFace corners x 2 (Vector3 (3) (-3) (3)) 90 (Vector3 0 1 0) -- LE MOVI Y paintFace corners z 2 (Vector3 (1) (-3) (3)) 0 (Vector3 0 0 0) paintFace corners z 3 (Vector3 (-3) (-3) (3)) 0 (Vector3 0 0 0) -- LE MOVI X y Y paintFace:: (Integral b) => Seq a -> (a -> b) -> Int -> (Vector3 GLfloat) -> GLfloat -> (Vector3 GLfloat) -> IO () paintFace sequence f indice trans deg rot = preservingMatrix $ do let val = index sequence indice faceColor $ (f val) `div` 10 translate trans rotate deg rot face paintColum2:: RCube -> IO() paintColum2 (RCube corners edges centers) = do paintFace centers center 3 (Vector3 (-3) (-1) (-1)) (-90) (Vector3 0 1 0) paintFace edges xy 9 (Vector3 (-3) (-1) (-1)) 90 (Vector3 0 1 0) paintFace edges fe 9 (Vector3 (-3) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 7 (Vector3 (-3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges fe 7 (Vector3 (-3) (-3) (-1)) 90 (Vector3 1 0 0) paintFace corners y 6 (Vector3 (-3) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 6 (Vector3 (-3) (-3) (-3)) 0 (Vector3 0 0 0) paintFace corners x 6 (Vector3 (-3) (-3) (-1)) 90 (Vector3 0 1 0) paintFace corners x 0 (Vector3 (-3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners x 3 (Vector3 (-3) (-3) (3)) 90 (Vector3 0 1 0) paintFace corners y 3 (Vector3 (-3) (-3) (1)) 90 (Vector3 1 0 0) paintFace corners x 5 (Vector3 (-3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners z 5 (Vector3 (-3) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners y 5 (Vector3 (-3) (3) (-3)) 90 (Vector3 1 0 0) paintFace edges xy 4 (Vector3 (-3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 4 (Vector3 (-3) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 3 (Vector3 (-3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 3 (Vector3 (-3) (-1) 3) 0 (Vector3 0 0 0) paintFace corners y 0 (Vector3 (-3) (3) (1)) 90 (Vector3 1 0 0) -- LE MOVI X paintFace corners z 0 (Vector3 (-3) (1) (3)) 0 (Vector3 0 0 0) paintFace corners z 3 (Vector3 (-3) (-3) (3)) 0 (Vector3 0 0 0) -- LE MOVI X y Y paintColum1:: RCube -> IO() paintColum1 (RCube corners edges centers) = do paintFace centers center 4 (Vector3 (-1) (-3) (1)) (-90) (Vector3 1 0 0) paintFace centers center 5 (Vector3 (-1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 10 (Vector3 (-1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace edges fe 10 (Vector3 (-1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace edges fe 8 (Vector3 (-1) (1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 8 (Vector3 (-1) 3 (-3)) 90 (Vector3 1 0 0) -- LE MOVI FE paintFace edges xy 2 (Vector3 (-1) (-3) (1)) 90 (Vector3 1 0 0) paintFace edges fe 2 (Vector3 (-1) (-3) (3)) 0 (Vector3 0 0 0) paintFace edges xy 0 (Vector3 (-1) 3 (1)) 90 (Vector3 1 0 0) paintFace edges fe 0 (Vector3 (-1) (1) 3) 0 (Vector3 0 0 0) paintFace centers center 0 (Vector3 (-1) (-1) 3) 0 (Vector3 0 0 0) paintFace centers center 1 (Vector3 (-1) 3 (-1)) 90 (Vector3 1 0 0) paintColum0:: RCube -> IO() paintColum0 (RCube corners edges centers) = do paintFace edges xy 11 (Vector3 (3) (-1) (-1)) 90 (Vector3 0 1 0) -- LE MOVI FE paintFace edges fe 6 (Vector3 (1) (-3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 6 (Vector3 (3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges xy 5 (Vector3 (3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 5 (Vector3 (1) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 1 (Vector3 (3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 1 (Vector3 (1) (-1) 3) 0 (Vector3 0 0 0) paintFace corners z 4 (Vector3 (1) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 4 (Vector3 (3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners y 4 (Vector3 (1) (3) (-3)) 90 (Vector3 1 0 0) paintFace corners y 7 (Vector3 (1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners x 7 (Vector3 (3) (-3) (-1)) 90 (Vector3 0 1 0) -- LE MOVI Z paintFace corners x 1 (Vector3 (3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners y 1 (Vector3 (1) (3) (1)) 90 (Vector3 1 0 0) paintFace corners z 1 (Vector3 (1) (1) (3)) 0 (Vector3 0 0 0) paintFace corners x 2 (Vector3 (3) (-3) (3)) 90 (Vector3 0 1 0) -- LE MOVI Y paintFace corners z 2 (Vector3 (1) (-3) (3)) 0 (Vector3 0 0 0) paintFace centers center 2 (Vector3 3 (-1) (1)) 90 (Vector3 0 1 0) paintRow0:: RCube -> IO() paintRow0 (RCube corners edges centers) = do paintFace corners x 0 (Vector3 (-3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners x 3 (Vector3 (-3) (-3) (3)) 90 (Vector3 0 1 0) paintFace corners y 3 (Vector3 (-3) (-3) (1)) 90 (Vector3 1 0 0) paintFace corners y 2 (Vector3 (1) (-3) (1)) 90 (Vector3 1 0 0) paintFace edges xy 2 (Vector3 (-1) (-3) (1)) 90 (Vector3 1 0 0) paintFace edges fe 2 (Vector3 (-1) (-3) (3)) 0 (Vector3 0 0 0) paintFace edges xy 1 (Vector3 (3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 1 (Vector3 (1) (-1) 3) 0 (Vector3 0 0 0) paintFace edges xy 3 (Vector3 (-3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 3 (Vector3 (-3) (-1) 3) 0 (Vector3 0 0 0) paintFace edges xy 0 (Vector3 (-1) 3 (1)) 90 (Vector3 1 0 0) paintFace edges fe 0 (Vector3 (-1) (1) 3) 0 (Vector3 0 0 0) paintFace centers center 0 (Vector3 (-1) (-1) 3) 0 (Vector3 0 0 0) paintFace corners y 0 (Vector3 (-3) (3) (1)) 90 (Vector3 1 0 0) -- LE MOVI X paintFace corners z 0 (Vector3 (-3) (1) (3)) 0 (Vector3 0 0 0) paintFace corners x 1 (Vector3 (3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners y 1 (Vector3 (1) (3) (1)) 90 (Vector3 1 0 0) paintFace corners z 1 (Vector3 (1) (1) (3)) 0 (Vector3 0 0 0) paintFace corners x 2 (Vector3 (3) (-3) (3)) 90 (Vector3 0 1 0) -- LE MOVI Y paintFace corners z 2 (Vector3 (1) (-3) (3)) 0 (Vector3 0 0 0) paintFace corners z 3 (Vector3 (-3) (-3) (3)) 0 (Vector3 0 0 0) -- LE MOVI X y Y paintRow1:: RCube -> IO() paintRow1 (RCube _ edges centers) = do paintFace centers center 3 (Vector3 (-3) (-1) (-1)) (-90) (Vector3 0 1 0) paintFace centers center 4 (Vector3 (-1) (-3) (1)) (-90) (Vector3 1 0 0) paintFace edges xy 7 (Vector3 (-3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges fe 7 (Vector3 (-3) (-3) (-1)) 90 (Vector3 1 0 0) paintFace edges fe 6 (Vector3 (1) (-3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 6 (Vector3 (3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges xy 4 (Vector3 (-3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 4 (Vector3 (-3) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 5 (Vector3 (3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 5 (Vector3 (1) (3) (-1)) 90 (Vector3 1 0 0) paintFace centers center 1 (Vector3 (-1) 3 (-1)) 90 (Vector3 1 0 0) paintFace centers center 2 (Vector3 3 (-1) (1)) 90 (Vector3 0 1 0) paintRow2:: RCube -> IO() paintRow2 (RCube corners edges centers) = do paintFace centers center 5 (Vector3 (-1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 10 (Vector3 (-1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace edges fe 10 (Vector3 (-1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 9 (Vector3 (-3) (-1) (-1)) 90 (Vector3 0 1 0) paintFace edges fe 9 (Vector3 (-3) (-1) (-3)) 0 (Vector3 0 0 0) paintFace corners y 6 (Vector3 (-3) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 6 (Vector3 (-3) (-3) (-3)) 0 (Vector3 0 0 0) paintFace corners x 6 (Vector3 (-3) (-3) (-1)) 90 (Vector3 0 1 0) paintFace corners z 7 (Vector3 (1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace edges fe 8 (Vector3 (-1) (1) (-3)) 0 (Vector3 0 0 0) paintFace edges fe 11 (Vector3 (1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 5 (Vector3 (-3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners z 5 (Vector3 (-3) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners y 5 (Vector3 (-3) (3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 4 (Vector3 (1) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 4 (Vector3 (3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners y 4 (Vector3 (1) (3) (-3)) 90 (Vector3 1 0 0) paintFace corners y 7 (Vector3 (1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners x 7 (Vector3 (3) (-3) (-1)) 90 (Vector3 0 1 0) -- LE MOVI Z paintFace edges xy 11 (Vector3 (3) (-1) (-1)) 90 (Vector3 0 1 0) -- LE MOVI FE paintFace edges xy 8 (Vector3 (-1) 3 (-3)) 90 (Vector3 1 0 0) -- LE MOVI FE paintLayer0:: RCube -> IO() paintLayer0 (RCube corners edges centers) = do paintFace edges fe 8 (Vector3 (-1) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 5 (Vector3 (-3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners z 5 (Vector3 (-3) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners y 5 (Vector3 (-3) (3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 4 (Vector3 (1) (1) (-3)) 0 (Vector3 0 0 0) paintFace corners x 4 (Vector3 (3) (1) (-1)) 90 (Vector3 0 1 0) paintFace corners y 4 (Vector3 (1) (3) (-3)) 90 (Vector3 1 0 0) paintFace edges xy 8 (Vector3 (-1) 3 (-3)) 90 (Vector3 1 0 0) -- LE MOVI FE paintFace edges xy 4 (Vector3 (-3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 4 (Vector3 (-3) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 5 (Vector3 (3) 1 (1)) 90 (Vector3 0 1 0) paintFace edges fe 5 (Vector3 (1) (3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 0 (Vector3 (-1) 3 (1)) 90 (Vector3 1 0 0) paintFace edges fe 0 (Vector3 (-1) (1) 3) 0 (Vector3 0 0 0) paintFace centers center 1 (Vector3 (-1) 3 (-1)) 90 (Vector3 1 0 0) paintFace corners y 0 (Vector3 (-3) (3) (1)) 90 (Vector3 1 0 0) -- LE MOVI X paintFace corners z 0 (Vector3 (-3) (1) (3)) 0 (Vector3 0 0 0) paintFace corners x 1 (Vector3 (3) (1) (3)) 90 (Vector3 0 1 0) paintFace corners y 1 (Vector3 (1) (3) (1)) 90 (Vector3 1 0 0) paintFace corners z 1 (Vector3 (1) (1) (3)) 0 (Vector3 0 0 0) paintLayer1:: RCube -> IO() paintLayer1 (RCube corners edges centers) = do paintFace centers center 3 (Vector3 (-3) (-1) (-1)) (-90) (Vector3 0 1 0) paintFace centers center 5 (Vector3 (-1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 9 (Vector3 (-3) (-1) (-1)) 90 (Vector3 0 1 0) paintFace edges fe 9 (Vector3 (-3) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges fe 11 (Vector3 (1) (-1) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 11 (Vector3 (3) (-1) (-1)) 90 (Vector3 0 1 0) -- LE MOVI FE paintFace edges xy 1 (Vector3 (3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 1 (Vector3 (1) (-1) 3) 0 (Vector3 0 0 0) paintFace edges xy 3 (Vector3 (-3) (-1) (3)) 90 (Vector3 0 1 0) paintFace edges fe 3 (Vector3 (-3) (-1) 3) 0 (Vector3 0 0 0) paintFace centers center 0 (Vector3 (-1) (-1) 3) 0 (Vector3 0 0 0) paintFace centers center 2 (Vector3 3 (-1) (1)) 90 (Vector3 0 1 0) paintLayer2:: RCube -> IO() paintLayer2 (RCube corners edges centers) = do paintFace centers center 4 (Vector3 (-1) (-3) (1)) (-90) (Vector3 1 0 0) paintFace edges xy 10 (Vector3 (-1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace edges fe 10 (Vector3 (-1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace edges xy 7 (Vector3 (-3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges fe 7 (Vector3 (-3) (-3) (-1)) 90 (Vector3 1 0 0) paintFace corners y 6 (Vector3 (-3) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners z 6 (Vector3 (-3) (-3) (-3)) 0 (Vector3 0 0 0) paintFace corners x 6 (Vector3 (-3) (-3) (-1)) 90 (Vector3 0 1 0) paintFace corners z 7 (Vector3 (1) (-3) (-3)) 0 (Vector3 0 0 0) paintFace corners x 3 (Vector3 (-3) (-3) (3)) 90 (Vector3 0 1 0) paintFace corners y 3 (Vector3 (-3) (-3) (1)) 90 (Vector3 1 0 0) paintFace corners y 2 (Vector3 (1) (-3) (1)) 90 (Vector3 1 0 0) paintFace corners y 7 (Vector3 (1) (-3) (-3)) 90 (Vector3 1 0 0) paintFace corners x 7 (Vector3 (3) (-3) (-1)) 90 (Vector3 0 1 0) -- LE MOVI Z paintFace edges fe 6 (Vector3 (1) (-3) (-1)) 90 (Vector3 1 0 0) paintFace edges xy 6 (Vector3 (3) (-3) (1)) 90 (Vector3 0 1 0) paintFace edges xy 2 (Vector3 (-1) (-3) (1)) 90 (Vector3 1 0 0) paintFace edges fe 2 (Vector3 (-1) (-3) (3)) 0 (Vector3 0 0 0) paintFace corners x 2 (Vector3 (3) (-3) (3)) 90 (Vector3 0 1 0) -- LE MOVI Y paintFace corners z 2 (Vector3 (1) (-3) (3)) 0 (Vector3 0 0 0) paintFace corners z 3 (Vector3 (-3) (-3) (3)) 0 (Vector3 0 0 0) -- LE MOVI X y Y --paintCubeByLayers