Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module DashieWashie.Main
- open System
- open SFML.Graphics
- open SFML
- open SFML.Window
- open System.Diagnostics
- type DashWash(dashPath: string, washPath: string) =
- let dashieTexture = new Texture(dashPath)
- let washieTexture = new Texture(washPath)
- let dashie = new Sprite(dashieTexture)
- let washie = new Sprite(washieTexture)
- let mutable washable = true
- do
- dashieTexture.Smooth <- true
- washieTexture.Smooth <- true
- dashie.Position <- new Vector2f(128.f, 172.f)
- dashie.Origin <- new Vector2f(100.f, 100.f)
- dashie.Scale <- new Vector2f(0.85f, 0.85f)
- member x.Update(delta: float32) =
- if washable then
- dashie.Rotation <- dashie.Rotation + 360.0f * float32 x.RotateSpeed * delta
- member x.RotateSpeed = 1
- interface Drawable with
- member x.Draw(target, states) =
- if washable then do
- target.Draw(dashie)
- target.Draw(washie)
- let shakiness = 20
- let stayInPlace = false
- [<EntryPoint>]
- let main argv =
- let mainWindow = new RenderWindow(new VideoMode(258ul, 342ul), "Dashie Washie")
- mainWindow.SetFramerateLimit(60ul);
- mainWindow.Closed.AddHandler(fun sender args -> (sender :?> RenderWindow).Close())
- let dw = new DashWash("dashie.png", "washie.png")
- let clock = new Stopwatch()
- let rnd = new Random();
- let winpos = mainWindow.Position
- clock.Start()
- let rec mainLoop() =
- let delta = float32 clock.ElapsedMilliseconds / 1000.f
- clock.Restart()
- dw.Update(delta)
- let shake = shakiness * dw.RotateSpeed
- let refpos = if stayInPlace then winpos else mainWindow.Position
- mainWindow.Position <- refpos + new Vector2i(
- rnd.Next(Math.Max(2*shake, 1))-shake,
- rnd.Next(Math.Max(2*shake, 1))-shake
- )
- mainWindow.Clear()
- mainWindow.DispatchEvents()
- (dw :> Drawable).Draw(mainWindow, new RenderStates());
- mainWindow.Display()
- if mainWindow.IsOpen() then mainLoop()
- mainLoop()
- 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement