Files
loop/src/Tile.hs
T

49 lines
1.0 KiB
Haskell

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