Files
loop/src/Tile.hs
T
2021-09-09 13:29:09 +01:00

44 lines
984 B
Haskell

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 (_tileZero t) (_tileX 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 -- ^ world point
-> Point2
calcTexCoord c p x = V2 (0.02 * dotV (p -.- c) xdir) (0.02 * dotV (p -.- c) ydir)
where
xdir = x -.- c
ydir = vNormal xdir
makeTileFromPoly
:: [Point2]
-> Float
-> Tile
makeTileFromPoly poly z = Tile
{ _tilePoly = poly
, _tileZero = c
--, _tileXY = c +.+ xdir +.+ vNormal xdir
, _tileX = c +.+ normalizeV ((poly !! 1) -.- c)
, _tileZ = z
}
where
c = head poly