44 lines
984 B
Haskell
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
|