0 people like it.

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
Raw view Test code New version

More information

Link:http://fssnip.net/rS
Posted:10 years ago
Author:
Tags: