ouppy/src/Main.elm

62 lines
1.6 KiB
Elm

module Main exposing (main)
import Browser
import Random
import Html exposing (Html, button, div, p, text)
import Html.Attributes exposing (disabled, hidden)
import Html.Events exposing (onClick)
import GenderFriends exposing (altBlumBlumShub, getPolygenderWithLength, renderPolygender)
constant a b = a
main = Browser.element
{ init = init
, update = update
, subscriptions = constant Sub.none
, view = view
}
type Model
= AwaitingSeed
| Ready Int {- seed -} Int {- regeneration count -}
type Msg
= SetSeed Int
| Regenerate
init : () -> (Model, Cmd Msg)
init _ = (AwaitingSeed, Random.generate SetSeed (Random.int 2147483648 4294967296))
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
let
newModel =
case msg of
SetSeed seed -> Ready seed 0
Regenerate -> case model of
AwaitingSeed -> AwaitingSeed
Ready oldSeed regenCount -> Ready (altBlumBlumShub oldSeed) (regenCount + 1)
in
(newModel, Cmd.none)
viewStr : Model -> String
viewStr model = case model of
AwaitingSeed -> "...loading..."
Ready seed regenCount ->
let
(gender, newSeed) = getPolygenderWithLength regenCount seed
genderStr = if regenCount == 75 then "queer platonic partners" else renderPolygender gender
in "do u think a ouppy and a kittys could be " ++ genderStr ++ ",,?"
view : Model -> Html Msg
view model =
div []
[ p [] [ text (viewStr model) ]
, button
( case model of
AwaitingSeed -> []
Ready _ 75 -> [disabled True, hidden True]
Ready _ _ -> [onClick Regenerate]
)
[ text "make it gayer" ]
]