Advertisement
Guest User

My Secret :3

a guest
Jun 23rd, 2015
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 6.81 KB | None | 0 0
  1. namespace TestSignal
  2.  
  3. open Signal
  4.  
  5.  
  6. module MainView =
  7.    
  8.     type View =
  9.         | PvE
  10.         | PvP
  11.         | Lab
  12.         | Lobby
  13.  
  14.     type Action =
  15.         | Click of View
  16.  
  17.     let gotoView action view =
  18.         match action, view with
  19.         | Click Lobby, _ -> Lobby
  20.         | Click i, Lobby -> i
  21.         | _ -> view
  22.  
  23.     let emptySignal = Signal.createSignal()        
  24.  
  25.     let input =
  26.         [(PvE, "pve"); (PvP, "pvp"); (Lab, "lab"); (Lobby, "lobby")]
  27.         |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (Click i) ("#" + name))) emptySignal
  28.        |> Signal.merge (Input'.button (Click Lobby) ".btn-back-home")
  29.    
  30.     let state = fold gotoView Lobby input
  31.     // |> render blah blah blah
  32.  
  33.  
  34. module PvE =
  35.    
  36.     type Island =
  37.         | Starter
  38.         | Beginner
  39.         | Professional
  40.         | WorldClass
  41.  
  42.     type UnlockMethod =
  43.         | Coin
  44.         | Crystal
  45.  
  46.     type Events =
  47.         | GotoView of Island
  48.         | GotoInfo of Island
  49.         | Unlock of UnlockMethod * Island
  50.        
  51.     type ViewState =
  52.         | MainView
  53.         | IslandView of Island
  54.         | Info of Island
  55.  
  56.     let step action state =
  57.         match action, state with
  58.         | GotoView i, MainView -> IslandView i
  59.         | Unlock (_, i), _ ->
  60.             IslandView i
  61.         | GotoInfo i, MainView -> Info i
  62.         | _ -> state
  63.  
  64.     let input =
  65.         let emptySignal = Signal.createSignal()
  66.         let islandList = [(Starter, "starter"); (Beginner, "beginner"); (Professional, "pro"); (WorldClass, "worldclass")]
  67.  
  68.         let mySignalCreation (createString: string -> string) islandList =
  69.             List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoView i) (createString name))) emptySignal islandList
  70.  
  71.        islandList |> mySignalCreation (fun s -> "#" + s)
  72.        |> Signal.merge (islandList |> mySignalCreation (fun s -> "#" + s + "-locked"))
  73.        |> Signal.merge (islandList |> mySignalCreation (fun s -> "#unlock-coin-" + s))
  74.        |> Signal.merge (islandList |> mySignalCreation (fun s -> "#unlock-crystal-" + s))
  75.        
  76.    let state = fold step MainView input
  77.  
  78. module PvP =
  79.    
  80. //    type FindMatchMode =
  81. //        | Random
  82. //        | Friends
  83.  
  84.    type PlayMode =
  85.        | Normal
  86.        | GrabFight
  87.  
  88.    type ViewState =
  89.        | MainView
  90.        | IslandView of PlayMode
  91.        | FindMatchView of PlayMode
  92.  
  93.    type Events =
  94.        | Click of PlayMode
  95.        | Play
  96.        | FindMatch of PlayMode
  97.  
  98.    let step action state =
  99.        match action, state with
  100.        | Click i, MainView -> FindMatchView i
  101.        | Play, FindMatchView v -> IslandView v
  102.        | FindMatch _, FindMatchView v -> state
  103.        | _ -> MainView
  104.  
  105.    
  106.  
  107.    let input =
  108.        let emptySignal = Signal.createSignal()
  109.  
  110.        [(Normal, "#play-normal"); (GrabFight, "#play-grab-fight")]
  111.        |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (Click i) name)) emptySignal
  112.         |> Signal.merge (Input'.button Play "#fight" )
  113.  
  114.    let state = fold step MainView input
  115.  
  116. module Lab =
  117.    type LabKinds =
  118.        | Combine
  119.        | Upgrade
  120.        | Transform
  121.        | Laser
  122.        | Divinisation
  123.  
  124.    type ViewState =
  125.        | LabView of LabKinds
  126.  
  127.    type Events =
  128.        | GotoView of LabKinds
  129.        | Action of LabKinds
  130.  
  131.    let step action state =
  132.        match action, state with
  133.        | GotoView i, _ -> LabView i
  134.        | Action _, _ -> state
  135.  
  136.    let input =
  137.        let emptySignal = Signal.createSignal()
  138.        [(Combine, "#combine"); (Upgrade, "#upgrade"); (Transform, "#transform"); (Laser, "#laser"); (Divinisation, "#divinisation")]
  139.        |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoView i) name)) emptySignal
  140.  
  141.     let state = fold step (LabView Combine) input
  142.    
  143. module Shop' =
  144.    type Item = {id: int; desc: string}    
  145.    
  146.    type b = Item[]
  147.    
  148.    type View =
  149.        | Default of Item list
  150.        | HasSelectedItem of Item list * Item
  151.  
  152.    type Event =
  153.        | Select of Item
  154.        | BackToShop
  155.  
  156.    let step action view =
  157.        match action, view with
  158.        | BackToShop, HasSelectedItem (v, i) -> Default v
  159.        | Select i, Default v -> HasSelectedItem (v, i)
  160.        | _ -> view
  161.  
  162.    let input (items: Item list) =
  163.        let emptySignal = createSignal()
  164.        items
  165.        |> List.fold (fun s i -> s |> Signal.merge (Input'.button (Select i) "#item")) emptySignal
  166.         |> Signal.merge (Input'.button (BackToShop) "#btn-back-to-shop")
  167.    
  168.    let state (items: Item list) = input(items) |> fold step (Default items)
  169.    
  170.  
  171. //module Shop =
  172. //    type View =
  173. //        | MainView
  174. //        | Panel
  175. //    
  176. //    type Event =
  177. //        | GotoView of View
  178. //
  179. //    let step action view =
  180. //        match action, view with
  181. //        | GotoView Panel, MainView -> Panel
  182. //        | GotoView MainView, Panel -> MainView
  183. //        | _ -> view
  184. //
  185. //    let input =
  186. //        let emptySignal = Signal.createSignal()
  187. //        [(MainView, "#shop-view"); (Panel, "#panel-buy")]
  188. //        |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoView i) name)) emptySignal
  189.  
  190.  
  191. module Bag =
  192.    
  193.     type BagType =
  194.         | All
  195.         | Upgrade
  196.         | Gift
  197.         | Decor
  198.    
  199.     type Profile =
  200.         | UserInfo
  201.         | WeaponInfo
  202.  
  203.     type Panel =
  204.         | Extend
  205.         | OpenBoxes
  206.         | ChangeTitle
  207.        
  208.  
  209.     type Event =
  210.         | GotoBagTab of BagType
  211.         | GotoInfo of Profile
  212.         | GotoPanel of Panel
  213.  
  214.     type ViewState =
  215.         | View of Profile * BagType
  216.         | PanelView of Panel
  217.  
  218.     let step action (view: ViewState) =
  219.         match action, view with
  220.         | GotoPanel v, _ -> PanelView v
  221.         | GotoBagTab i, View (p, b) -> View (p, i)
  222.         | GotoInfo i, View (p, b) -> View (i, b)
  223.         | _ -> view
  224.  
  225.     let input =
  226.         let emptySignal = Signal.createSignal()
  227.         let bagInput =
  228.             [(All, "#bag-all"); (Upgrade, "#bag-upgrade"); (Gift, "#bag-gift"); (Decor, "#bag-decor")]
  229.             |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoBagTab i) name)) emptySignal
  230.        let profileInput =
  231.            [(UserInfo, "#bag-user-info"); (WeaponInfo, "#bag-weapone-info")]
  232.            |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoInfo i) name)) emptySignal
  233.        
  234.         [(Extend, "#bag-panel-extend"); (OpenBoxes, "#bag-open-boxes-panel"); (ChangeTitle, "#bag-change-title")]
  235.         |> List.fold (fun s (i, name) -> s |> Signal.merge (Input'.button (GotoPanel i) name)) emptySignal
  236.        |> Signal.merge bagInput
  237.        |> Signal.merge profileInput
  238.  
  239.    let state = fold step (View (UserInfo, All)) input
  240.  
  241.  
  242. module Client =
  243.    let Main() =
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement