0 people like it.
Like the snippet!
F#monogametest
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:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
|
module FSharpEngine
open System
open Microsoft.Xna.Framework
// From http://www.fssnip.net/er
// Define an immutable stack Literally dont understand how unions work, should read up on that
type ImmutableStack<'T> =
| Empty
| Stack of 'T * ImmutableStack<'T>
member s.Push x = Stack(x, s)
// Returns a (unit -> 'T) How to make it just a 'T
member s.Pop() =
match s with
| Empty -> failwith "Underflow"
| Stack(t,_) -> t
// returns the top member of the stack; Returns an ImmutableStack<'T> how to make it just a 'T ??
member s.Top() =
match s with
| Empty -> failwith "Contain no elements"
| Stack(_,st) -> st
// makes an empty Stack
member s.IEmpty =
match s with
| Empty -> true
| _ -> false
// Returns a (unit -> 'T List); How to make it Return a list of type 'T
member s.All() =
let rec loop acc = function
| Empty -> acc
| Stack(t,st) -> loop (t::acc) st
loop [] s
// How am I going to deal with f#'s ordering?
type State(Name:String, Id:int, game:Game, StateManager:GameStateManager) as self =
inherit DrawableGameComponent(game)
let ChildComponents:List<GameComponent> = List.empty
let self = self
let show =
base.Visible<-true
base.Enabled<-true
for c in ChildComponents do
c.Enabled<-true
match c with
| :? DrawableGameComponent as dgc -> dgc.Visible<-true
| _ -> ()
let hide =
base.Visible<-false
base.Enabled<-false
for c in ChildComponents do
c.Enabled<-false
match c with
| :? DrawableGameComponent as dgc -> dgc.Visible<-false
| _ -> ()
// if current state is this state show otherwise hide
member s.StateChange sender e =
match StateManager.CurrentState with
| self -> show
| _ -> hide
override s.Initialize() =
base.Initialize()
// make that update method in the program and the draw one too?
type GameStateManager(game:Game) as self =
inherit GameComponent(game)
let states:ImmutableStack<State> = ImmutableStack.Empty
let startDrawOrder = 5000
let drawOrderInc = 100
let mutable drawOrder = 0
let OnStateChange = new Event<EventHandler<EventArgs>,EventArgs>()
member private gsm.RemoveState() =
let state = states.Pop
OnStateChange.Publish.RemoveHandler state.StateChange
base.Game.Components.Remove(states.Pop())
member gsm.CurrentState = states.Top
member gsm.PopState() =
if states.All.Length > 0 then
gsm.RemoveState
drawOrder = drawOrder - drawOrderInc
if OnStateChange != null then
OnStateChange.Trigger(self, null)
override gsm.Initialize() =
base.Initialize()
override gsm.Update(gameTime:GameTime) =
base.Update(gameTime)
|
module FSharpEngine
namespace System
namespace Microsoft
namespace Microsoft.Xna
namespace Microsoft.Xna.Framework
type ImmutableStack<'T> =
| Empty
| Stack of 'T * ImmutableStack<'T>
member All : unit -> 'T list
member Pop : unit -> 'T
member Push : x:'T -> ImmutableStack<'T>
member Top : unit -> ImmutableStack<'T>
member IEmpty : bool
Full name: FSharpEngine.ImmutableStack<_>
union case ImmutableStack.Empty: ImmutableStack<'T>
union case ImmutableStack.Stack: 'T * ImmutableStack<'T> -> ImmutableStack<'T>
val s : ImmutableStack<'T>
member ImmutableStack.Push : x:'T -> ImmutableStack<'T>
Full name: FSharpEngine.ImmutableStack`1.Push
val x : 'T
member ImmutableStack.Pop : unit -> 'T
Full name: FSharpEngine.ImmutableStack`1.Pop
val failwith : message:string -> 'T
Full name: Microsoft.FSharp.Core.Operators.failwith
val t : 'T
member ImmutableStack.Top : unit -> ImmutableStack<'T>
Full name: FSharpEngine.ImmutableStack`1.Top
val st : ImmutableStack<'T>
member ImmutableStack.IEmpty : bool
Full name: FSharpEngine.ImmutableStack`1.IEmpty
member ImmutableStack.All : unit -> 'T list
Full name: FSharpEngine.ImmutableStack`1.All
val loop : ('a list -> ImmutableStack<'a> -> 'a list)
val acc : 'a list
val t : 'a
val st : ImmutableStack<'a>
Multiple items
type State =
inherit DrawableGameComponent
new : Name:String * Id:int * game:Game * StateManager:obj -> State
override Initialize : unit -> unit
member StateChange : sender:'a -> e:'b -> unit
Full name: FSharpEngine.State
--------------------
new : Name:String * Id:int * game:Game * StateManager:obj -> State
val Name : String
Multiple items
type String =
new : value:char -> string + 7 overloads
member Chars : int -> char
member Clone : unit -> obj
member CompareTo : value:obj -> int + 1 overload
member Contains : value:string -> bool
member CopyTo : sourceIndex:int * destination:char[] * destinationIndex:int * count:int -> unit
member EndsWith : value:string -> bool + 2 overloads
member Equals : obj:obj -> bool + 2 overloads
member GetEnumerator : unit -> CharEnumerator
member GetHashCode : unit -> int
...
Full name: System.String
--------------------
String(value: nativeptr<char>) : unit
String(value: nativeptr<sbyte>) : unit
String(value: char []) : unit
String(c: char, count: int) : unit
String(value: nativeptr<char>, startIndex: int, length: int) : unit
String(value: nativeptr<sbyte>, startIndex: int, length: int) : unit
String(value: char [], startIndex: int, length: int) : unit
String(value: nativeptr<sbyte>, startIndex: int, length: int, enc: Text.Encoding) : unit
val Id : int
Multiple items
val int : value:'T -> int (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.int
--------------------
type int = int32
Full name: Microsoft.FSharp.Core.int
--------------------
type int<'Measure> = int
Full name: Microsoft.FSharp.Core.int<_>
val game : Game
Multiple items
type Game =
new : unit -> Game
member Components : GameComponentCollection
member Content : ContentManager with get, set
member Dispose : unit -> unit
member Exit : unit -> unit
member GraphicsDevice : GraphicsDevice
member InactiveSleepTime : TimeSpan with get, set
member IsActive : bool
member IsFixedTimeStep : bool with get, set
member IsMouseVisible : bool with get, set
...
Full name: Microsoft.Xna.Framework.Game
--------------------
Game() : unit
val StateManager : obj
val self : State
Multiple items
type DrawableGameComponent =
inherit GameComponent
new : game:Game -> DrawableGameComponent
member Draw : gameTime:GameTime -> unit
member DrawOrder : int with get, set
member GraphicsDevice : GraphicsDevice
member Initialize : unit -> unit
member Visible : bool with get, set
event DrawOrderChanged : EventHandler<EventArgs>
event VisibleChanged : EventHandler<EventArgs>
Full name: Microsoft.Xna.Framework.DrawableGameComponent
--------------------
DrawableGameComponent(game: Game) : unit
val ChildComponents : List<GameComponent>
Multiple items
module List
from Microsoft.FSharp.Collections
--------------------
type List<'T> =
| ( [] )
| ( :: ) of Head: 'T * Tail: 'T list
interface IEnumerable
interface IEnumerable<'T>
member Head : 'T
member IsEmpty : bool
member Item : index:int -> 'T with get
member Length : int
member Tail : 'T list
static member Cons : head:'T * tail:'T list -> 'T list
static member Empty : 'T list
Full name: Microsoft.FSharp.Collections.List<_>
Multiple items
type GameComponent =
new : game:Game -> GameComponent
member CompareTo : other:GameComponent -> int
member Dispose : unit -> unit
member Enabled : bool with get, set
member Game : Game with get, set
member Initialize : unit -> unit
member Update : gameTime:GameTime -> unit
member UpdateOrder : int with get, set
event EnabledChanged : EventHandler<EventArgs>
event UpdateOrderChanged : EventHandler<EventArgs>
Full name: Microsoft.Xna.Framework.GameComponent
--------------------
GameComponent(game: Game) : unit
val empty<'T> : 'T list
Full name: Microsoft.FSharp.Collections.List.empty
val show : unit
val c : GameComponent
property GameComponent.Enabled: bool
val dgc : DrawableGameComponent
property DrawableGameComponent.Visible: bool
val hide : unit
val s : State
member State.StateChange : sender:'a -> e:'b -> unit
Full name: FSharpEngine.State.StateChange
val sender : 'a
val e : 'b
val self : obj
override State.Initialize : unit -> unit
Full name: FSharpEngine.State.Initialize
Multiple items
type GameStateManager =
inherit GameComponent
new : game:Game -> GameStateManager
override Initialize : unit -> unit
member PopState : unit -> unit
member private RemoveState : unit -> bool
override Update : gameTime:GameTime -> unit
member CurrentState : (unit -> ImmutableStack<State>)
Full name: FSharpEngine.GameStateManager
--------------------
new : game:Game -> GameStateManager
val self : GameStateManager
val states : ImmutableStack<State>
val startDrawOrder : int
val drawOrderInc : int
val mutable drawOrder : int
val OnStateChange : Event<EventHandler<EventArgs>,EventArgs>
Multiple items
module Event
from Microsoft.FSharp.Control
--------------------
type Event<'T> =
new : unit -> Event<'T>
member Trigger : arg:'T -> unit
member Publish : IEvent<'T>
Full name: Microsoft.FSharp.Control.Event<_>
--------------------
type Event<'Delegate,'Args (requires delegate and 'Delegate :> Delegate)> =
new : unit -> Event<'Delegate,'Args>
member Trigger : sender:obj * args:'Args -> unit
member Publish : IEvent<'Delegate,'Args>
Full name: Microsoft.FSharp.Control.Event<_,_>
--------------------
new : unit -> Event<'T>
--------------------
new : unit -> Event<'Delegate,'Args>
Multiple items
type EventHandler =
delegate of obj * EventArgs -> unit
Full name: System.EventHandler
--------------------
type EventHandler<'TEventArgs (requires 'TEventArgs :> EventArgs)> =
delegate of obj * 'TEventArgs -> unit
Full name: System.EventHandler<_>
Multiple items
type EventArgs =
new : unit -> EventArgs
static val Empty : EventArgs
Full name: System.EventArgs
--------------------
EventArgs() : unit
val gsm : GameStateManager
member private GameStateManager.RemoveState : unit -> bool
Full name: FSharpEngine.GameStateManager.RemoveState
val state : (unit -> State)
member ImmutableStack.Pop : unit -> 'T
property Event.Publish: IEvent<EventHandler<EventArgs>,EventArgs>
abstract member IDelegateEvent.RemoveHandler : handler:'Delegate -> unit
member GameStateManager.CurrentState : (unit -> ImmutableStack<State>)
Full name: FSharpEngine.GameStateManager.CurrentState
member ImmutableStack.Top : unit -> ImmutableStack<'T>
member GameStateManager.PopState : unit -> unit
Full name: FSharpEngine.GameStateManager.PopState
member ImmutableStack.All : unit -> 'T list
member private GameStateManager.RemoveState : unit -> bool
member Event.Trigger : sender:obj * args:'Args -> unit
override GameStateManager.Initialize : unit -> unit
Full name: FSharpEngine.GameStateManager.Initialize
override GameStateManager.Update : gameTime:GameTime -> unit
Full name: FSharpEngine.GameStateManager.Update
val gameTime : GameTime
Multiple items
type GameTime =
new : unit -> GameTime + 2 overloads
member ElapsedGameTime : TimeSpan with get, set
member IsRunningSlowly : bool with get, set
member TotalGameTime : TimeSpan with get, set
Full name: Microsoft.Xna.Framework.GameTime
--------------------
GameTime() : unit
GameTime(totalGameTime: TimeSpan, elapsedGameTime: TimeSpan) : unit
GameTime(totalRealTime: TimeSpan, elapsedRealTime: TimeSpan, isRunningSlowly: bool) : unit
More information