Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace TestSignal
- open Signal
- module MainView =
- type View =
- | PvE
- | PvP
- | Lab
- | Lobby
- type Action =
- | Click of View
- let gotoView action view =
- match action, view with
- | Click Lobby, _ -> Lobby
- | Click i, Lobby -> i
- | _ -> view
- let emptySignal = Signal.createSignal()
- let input =
- [(PvE, "pve"); (PvP, "pvp"); (Lab, "lab"); (Lobby, "lobby")]
- |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (Click i) ("#" + name))) emptySignal
- |> Signal.merge (Input'.button (Click Lobby) ".btn-back-home")
- let state = fold gotoView Lobby input
- // |> render blah blah blah
- module PvE =
- type Island =
- | Starter
- | Beginner
- | Professional
- | WorldClass
- type UnlockMethod =
- | Coin
- | Crystal
- type Events =
- | GotoView of Island
- | GotoInfo of Island
- | Unlock of UnlockMethod * Island
- type ViewState =
- | MainView
- | IslandView of Island
- | Info of Island
- let step action state =
- match action, state with
- | GotoView i, MainView -> IslandView i
- | Unlock (_, i), _ ->
- IslandView i
- | GotoInfo i, MainView -> Info i
- | _ -> state
- let input =
- let emptySignal = Signal.createSignal()
- let islandList = [(Starter, "starter"); (Beginner, "beginner"); (Professional, "pro"); (WorldClass, "worldclass")]
- let mySignalCreation (createString: string -> string) islandList =
- List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoView i) (createString name))) emptySignal islandList
- islandList |> mySignalCreation (fun s -> "#" + s)
- |> Signal.merge (islandList |> mySignalCreation (fun s -> "#" + s + "-locked"))
- |> Signal.merge (islandList |> mySignalCreation (fun s -> "#unlock-coin-" + s))
- |> Signal.merge (islandList |> mySignalCreation (fun s -> "#unlock-crystal-" + s))
- let state = fold step MainView input
- module PvP =
- // type FindMatchMode =
- // | Random
- // | Friends
- type PlayMode =
- | Normal
- | GrabFight
- type ViewState =
- | MainView
- | IslandView of PlayMode
- | FindMatchView of PlayMode
- type Events =
- | Click of PlayMode
- | Play
- | FindMatch of PlayMode
- let step action state =
- match action, state with
- | Click i, MainView -> FindMatchView i
- | Play, FindMatchView v -> IslandView v
- | FindMatch _, FindMatchView v -> state
- | _ -> MainView
- let input =
- let emptySignal = Signal.createSignal()
- [(Normal, "#play-normal"); (GrabFight, "#play-grab-fight")]
- |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (Click i) name)) emptySignal
- |> Signal.merge (Input'.button Play "#fight" )
- let state = fold step MainView input
- module Lab =
- type LabKinds =
- | Combine
- | Upgrade
- | Transform
- | Laser
- | Divinisation
- type ViewState =
- | LabView of LabKinds
- type Events =
- | GotoView of LabKinds
- | Action of LabKinds
- let step action state =
- match action, state with
- | GotoView i, _ -> LabView i
- | Action _, _ -> state
- let input =
- let emptySignal = Signal.createSignal()
- [(Combine, "#combine"); (Upgrade, "#upgrade"); (Transform, "#transform"); (Laser, "#laser"); (Divinisation, "#divinisation")]
- |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoView i) name)) emptySignal
- let state = fold step (LabView Combine) input
- module Shop' =
- type Item = {id: int; desc: string}
- type b = Item[]
- type View =
- | Default of Item list
- | HasSelectedItem of Item list * Item
- type Event =
- | Select of Item
- | BackToShop
- let step action view =
- match action, view with
- | BackToShop, HasSelectedItem (v, i) -> Default v
- | Select i, Default v -> HasSelectedItem (v, i)
- | _ -> view
- let input (items: Item list) =
- let emptySignal = createSignal()
- items
- |> List.fold (fun s i -> s |> Signal.merge (Input'.button (Select i) "#item")) emptySignal
- |> Signal.merge (Input'.button (BackToShop) "#btn-back-to-shop")
- let state (items: Item list) = input(items) |> fold step (Default items)
- //module Shop =
- // type View =
- // | MainView
- // | Panel
- //
- // type Event =
- // | GotoView of View
- //
- // let step action view =
- // match action, view with
- // | GotoView Panel, MainView -> Panel
- // | GotoView MainView, Panel -> MainView
- // | _ -> view
- //
- // let input =
- // let emptySignal = Signal.createSignal()
- // [(MainView, "#shop-view"); (Panel, "#panel-buy")]
- // |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoView i) name)) emptySignal
- module Bag =
- type BagType =
- | All
- | Upgrade
- | Gift
- | Decor
- type Profile =
- | UserInfo
- | WeaponInfo
- type Panel =
- | Extend
- | OpenBoxes
- | ChangeTitle
- type Event =
- | GotoBagTab of BagType
- | GotoInfo of Profile
- | GotoPanel of Panel
- type ViewState =
- | View of Profile * BagType
- | PanelView of Panel
- let step action (view: ViewState) =
- match action, view with
- | GotoPanel v, _ -> PanelView v
- | GotoBagTab i, View (p, b) -> View (p, i)
- | GotoInfo i, View (p, b) -> View (i, b)
- | _ -> view
- let input =
- let emptySignal = Signal.createSignal()
- let bagInput =
- [(All, "#bag-all"); (Upgrade, "#bag-upgrade"); (Gift, "#bag-gift"); (Decor, "#bag-decor")]
- |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoBagTab i) name)) emptySignal
- let profileInput =
- [(UserInfo, "#bag-user-info"); (WeaponInfo, "#bag-weapone-info")]
- |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoInfo i) name)) emptySignal
- [(Extend, "#bag-panel-extend"); (OpenBoxes, "#bag-open-boxes-panel"); (ChangeTitle, "#bag-change-title")]
- |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoPanel i) name)) emptySignal
- |> Signal.merge bagInput
- |> Signal.merge profileInput
- let state = fold step (View (UserInfo, All)) input
- module Client =
- let Main() =
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement