module Star where
import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT  as GLUT
import Data.Either
import Circle
import List
starPoints radius rays
 = map (\(_,(x,y,z))->Vertex3 x y z)(os++es)
  where
   (os,es) = partition (\(i,_)-> odd i)
               $zip [1,2..]
               $circlePoints radius rays
complexPolygon points
 = ComplexPolygon 
     [ComplexContour $map (\v->AnnotatedVertex v 0) points]
star radius rays= do
  startess 
    <- tessellate 
         TessWindingPositive 0 (Normal3 0 0 0) noOpCombiner 
            $complexPolygon (starPoints radius rays)
  drawSimplePolygon  startess
drawSimplePolygon  (SimplePolygon primitiveParts) =
  mapM_ renderPrimitiveParts primitiveParts
            
renderPrimitiveParts (Primitive primitiveMode vertices) =
  renderPrimitive primitiveMode
    $mapM_ (vertex . stripAnnotation) vertices 

stripAnnotation (AnnotatedVertex plainVertex _) = plainVertex

noOpCombiner _newVertex _weightedProperties = 0.0 ::GLfloat
