Advertisement
Guest User

Untitled

a guest
Nov 14th, 2014
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.05 KB | None | 0 0
  1. module DashieWashie.Main
  2.  
  3. open System
  4. open SFML.Graphics
  5. open SFML
  6. open SFML.Window
  7. open System.Diagnostics
  8.  
  9.  
  10. type DashWash(dashPath: string, washPath: string) =
  11.   let dashieTexture = new Texture(dashPath)
  12.   let washieTexture = new Texture(washPath)
  13.   let dashie = new Sprite(dashieTexture)
  14.   let washie = new Sprite(washieTexture)
  15.   let mutable washable = true
  16.   do
  17.     dashieTexture.Smooth <- true
  18.     washieTexture.Smooth <- true
  19.     dashie.Position <- new Vector2f(128.f, 172.f)
  20.     dashie.Origin <- new Vector2f(100.f, 100.f)
  21.     dashie.Scale <- new Vector2f(0.85f, 0.85f)
  22.  
  23.   member x.Update(delta: float32) =
  24.     if washable then
  25.       dashie.Rotation <- dashie.Rotation + 360.0f * float32 x.RotateSpeed * delta
  26.   member x.RotateSpeed = 1
  27.   interface Drawable with
  28.     member x.Draw(target, states) =
  29.       if washable then do
  30.         target.Draw(dashie)
  31.         target.Draw(washie)
  32.  
  33. let shakiness = 20
  34.  
  35. let stayInPlace = false
  36.  
  37. [<EntryPoint>]
  38. let main argv =
  39.  
  40.     let mainWindow = new RenderWindow(new VideoMode(258ul, 342ul), "Dashie Washie")
  41.     mainWindow.SetFramerateLimit(60ul);
  42.     mainWindow.Closed.AddHandler(fun sender args -> (sender :?> RenderWindow).Close())
  43.     let dw = new DashWash("dashie.png", "washie.png")
  44.  
  45.     let clock = new Stopwatch()
  46.     let rnd = new Random();
  47.     let winpos = mainWindow.Position
  48.    
  49.     clock.Start()
  50.     let rec mainLoop() =
  51.         let delta = float32 clock.ElapsedMilliseconds / 1000.f
  52.         clock.Restart()
  53.         dw.Update(delta)
  54.        
  55.         let shake = shakiness * dw.RotateSpeed
  56.         let refpos = if stayInPlace then winpos else mainWindow.Position
  57.         mainWindow.Position <- refpos + new Vector2i(
  58.           rnd.Next(Math.Max(2*shake, 1))-shake,
  59.           rnd.Next(Math.Max(2*shake, 1))-shake
  60.           )
  61.        
  62.         mainWindow.Clear()
  63.         mainWindow.DispatchEvents()
  64.         (dw :> Drawable).Draw(mainWindow, new RenderStates());
  65.         mainWindow.Display()
  66.        
  67.         if mainWindow.IsOpen() then mainLoop()    
  68.     mainLoop()
  69.  
  70.     0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement