module Tile where import Data.Tile import Geometry --import Geometry.Data tToRender :: Tile -> [(Point3,Point3)] tToRender t = polyToTris $ zip ps3 coords3 where ps = _tilePoly t coords = map (calcTexCoord (_tileCenter t) (_tileX t) (_tileY t)) ps ps3 = map (addToV2 0) ps coords3 = map (addToV2 (_tileZ t)) coords addToV2 :: a -> V2 a -> V3 a addToV2 z (V2 x y) = V3 x y z 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 = V2 ( 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