/
View.elm
83 lines (74 loc) · 2.53 KB
/
View.elm
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
module View exposing (draw)
import Clouds.EffectView
import Clouds.Model
import Effects
import Element exposing (..)
import Element.Background as Background
import Element.Border as Border
import Element.Font as Font
import Element.Input as Input
import Html exposing (Html)
import Messages exposing (..)
import Model exposing (Model)
draw : Effect model mod -> List MetaEffect -> List (Html Message)
draw effect otherEffects =
[ layout [ width fill, height fill ] <|
row [ width fill, height fill ]
[ column [ Font.size 12, width (px 200), height fill, spacing 20, padding 20 ] <|
[ text ("Current Effect: " ++ Effects.name effect)
, Input.radio []
{ onChange = UserSelectedEffect
, options = List.map effectOption otherEffects
, selected = Nothing
, label = Input.labelAbove [] (text "Choose New Effect")
}
, column [ width fill ] <|
List.map (modSlider effect) (Effects.modifiers effect)
]
, el [ width fill, height fill ] <|
html (Effects.draw effect)
]
]
effectOption : MetaEffect -> Input.Option MetaEffect Message
effectOption metaEffect =
let
-- this should be easier too!
name =
case metaEffect of
CloudEffect eff ->
Effects.name eff
LightningEffect eff ->
Effects.name eff
in
case metaEffect of
CloudEffect eff ->
Input.option metaEffect (text name)
LightningEffect eff ->
Input.option metaEffect (text name)
modSlider effect ( modifier, label, prop ) =
el
[ height (px 50)
, width (px 150)
, centerX
]
<|
Input.slider
[ Element.behindContent
(Element.el
[ Element.width Element.fill
, Element.height (Element.px 2)
, Element.centerY
, Background.color (rgb 0.5 0.5 0.5)
, Border.rounded 2
]
Element.none
)
]
{ onChange = ModifierChanged (Effects.modConstructor effect modifier)
, label = Input.labelAbove [] (text label)
, min = 0
, max = 1
, value = prop (Effects.model effect)
, thumb = Input.defaultThumb
, step = Just 0.01
}