module Tile where import Data.Tile import Geometry import Geometry.Data import Picture.Data tToRender :: Tile -> [RenderType] tToRender t = map Render3x3 $ polyToTris $ zip ps3 coords3 where ps = _tilePoly t coords = map (calcTexCoord (_tileCenter t) (_tileX t) (_tileY t)) ps ps3 = map (mkTrip 0.9) ps coords3 = map (mkTrip (_tileZ t)) coords mkTrip :: c -> (a,b) -> (a,b,c) mkTrip z (x,y) = (x,y,z) calcTexCoord :: Point2 -- ^ tile (0,0) -> Point2 -- ^ tile (1,0) -> Point2 -- ^ tile (0,1) -> Point2 -- ^ world point -> Point2 calcTexCoord cen x' y' p = ( magV (projV (p -.- cen) x) / magV x , magV (projV (p -.- cen) y) / magV y ) where x = x' -.- cen y = y' -.- cen oTile :: [Point2] -> Float -> Tile oTile poly z = Tile { _tilePoly = poly , _tileCenter = c , _tileX = x , _tileY = y , _tileZ = z } where c = head poly xdir = 50 *.* normalizeV (poly !! 1 -.- c) x = c +.+ xdir y = c +.+ vNormal xdir