74 lines
2.4 KiB
Haskell
74 lines
2.4 KiB
Haskell
module Dodge.Placement.TopDecoration where
|
|
|
|
import Color
|
|
import Dodge.Data.GenParams
|
|
import Dodge.Room.Foreground
|
|
import Geometry
|
|
import Shape
|
|
|
|
decorationToShape :: DecorationShape -> Float -> Float -> Float -> Color -> Color -> Shape
|
|
decorationToShape dec = case dec of
|
|
PLUS -> plusDecoration
|
|
SQUARE -> squareDecoration
|
|
CIRCLE -> circleDecoration
|
|
THREELINES -> threeLineDecoration
|
|
|
|
midBarDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
|
|
midBarDecoration w h z _ c =
|
|
embossingR
|
|
<> rotateSH pi embossingR
|
|
<> colorSH c (thinHighBar (z + 7) (V2 (-0.3 * w) 0) (V2 (0.3 * w) 0))
|
|
where
|
|
w' = 0.3 * w
|
|
embossingR =
|
|
colorSH c $
|
|
prismPoly Medium Typical
|
|
[V3 w h z, V3 w (0.3 * h) 41, V3 w (-0.3 * h) 41, V3 w (- h) z]
|
|
[V3 w' h z, V3 w' (0.3 * h) 41, V3 w' (-0.3 * h) 41, V3 w' (- h) z]
|
|
|
|
fourEmbossDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
|
|
fourEmbossDecoration w h z _ c = colorSH c $ foldMap f [(w, h), (- w, h), (w, - h), (- w, - h)]
|
|
where
|
|
f (a, b) = translateSH (V3 (a / 2) (b / 2) z) embossing
|
|
embossing = upperBoxHalf Large Typical 10 $ rectNSWE (h / 2) (- h / 2) (- w / 2) (w / 2)
|
|
|
|
plusDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
|
|
plusDecoration w h z _ c =
|
|
colorSH c $
|
|
thinHighBar z (V2 w 0) (V2 (- w) 0)
|
|
<> thinHighBar z (V2 0 h) (V2 0 (- h))
|
|
|
|
squareDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
|
|
squareDecoration w h z _ col =
|
|
colorSH col $
|
|
foldMap
|
|
f
|
|
[ (w', - w', h', h')
|
|
, (w', - w', - h', - h')
|
|
, (w', w', h', - h')
|
|
, (- w', - w', h', - h')
|
|
]
|
|
where
|
|
w' = w - 1.5
|
|
h' = h - 1.5
|
|
f (a, c, b, d) = thinHighBar z (V2 a b) (V2 c d)
|
|
|
|
circleDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
|
|
circleDecoration w _ z _ c = colorSH c $ foldMap toprail (take 8 [0, pi / 4 ..])
|
|
where
|
|
toprail a = rotateSH a $ thinHighBar z (V2 0 w) (rotateV (pi / 4) $ V2 0 w)
|
|
|
|
threeLineDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
|
|
threeLineDecoration w h z _ col =
|
|
colorSH col $
|
|
foldMap
|
|
f
|
|
[ (w', - w', h', h')
|
|
, (w', - w', 0, 0)
|
|
, (w', - w', - h', - h')
|
|
]
|
|
where
|
|
w' = w - 1.5
|
|
h' = h - 1.5
|
|
f (a, c, b, d) = thinHighBar z (V2 a b) (V2 c d)
|