{-# OPTIONS -Wall #-}

import LPFP.SimpleVec ( zeroV, iHat, (*^), xComp, yComp )
import LPFP.Mechanics3D ( ParticleState(..), simulateGloss )
import LPFP.MultipleObjects ( MultiParticleState(..) )
import LPFP.MOExamples
import Graphics.Gloss ( Picture(..), scale, blue )

stringPicture :: MultiParticleState -> Picture
stringPicture (MPS sts)
    = let rs = [zeroV] ++ [posVec st | st <- sts] ++ [0.65 *^ iHat]
          xy r = (realToFrac $ xComp r, realToFrac $ yComp r)
          xys = map xy rs
          ppm = 400  -- pixels per meter
      in scale ppm (20*ppm) $ Color blue $ Line xys

main :: IO ()
main = let initialState = stringInitialOvertone 3
       in simulateGloss 0.001 40 initialState stringPicture stringUpdate