22{-# LANGUAGE PatternSynonyms #-}
33{-# LANGUAGE TypeSynonymInstances #-}
44{-# LANGUAGE FlexibleInstances #-}
5+ {-# LANGUAGE CPP #-}
56
67-- | Bindings for types used in all raylib modules
78module Raylib.Types.Core
@@ -140,10 +141,15 @@ import Foreign.C
140141 newCString ,
141142 peekCString ,
142143 )
143- import Linear (V2 (V2 ), V3 (V3 ), V4 (V4 ))
144144import Raylib.Internal (Closeable (.. ), _unloadAutomationEventList , addAutomationEventList )
145145import Raylib.Internal.Foreign (Freeable (rlFreeDependents ), c'free , peekStaticArray , pokeStaticArray )
146146
147+ #ifndef DISABLE_LENS
148+
149+ import Linear (V2 (V2 ), V3 (V3 ), V4 (V4 ))
150+
151+ #endif
152+
147153
148154---------------------------------------
149155-- core enums -------------------------
@@ -659,44 +665,106 @@ instance Enum Gesture where
659665-- core structures --------------------
660666---------------------------------------
661667
668+ pattern Vector2 :: Float -> Float -> Vector2
669+ pattern Vector3 :: Float -> Float -> Float -> Vector3
670+ pattern Vector4 :: Float -> Float -> Float -> Float -> Vector4
671+
672+ #ifdef DISABLE_LENS
673+
674+ data Vector2' = Vector2' Float Float deriving (Eq , Show , Freeable )
675+ instance Storable Vector2' where
676+ sizeOf _ = 8
677+ alignment _ = 4
678+ peek _p = do
679+ x <- realToFrac <$> peek (p'vector2'x _p)
680+ y <- realToFrac <$> peek (p'vector2'y _p)
681+ return $ Vector2' x y
682+ poke _p (Vector2' x y) = do
683+ poke (p'vector2'x _p) (realToFrac x)
684+ poke (p'vector2'y _p) (realToFrac y)
685+ return ()
686+ type Vector2 = Vector2'
687+
688+ pattern Vector2
689+ { vector2'x ,
690+ vector2'y
691+ } = Vector2' vector2'x vector2'y
692+ {-# COMPLETE Vector2 :: Vector2' #-}
693+
694+ data Vector3' = Vector3' Float Float Float deriving (Eq , Show , Freeable )
695+
696+ instance Storable Vector3' where
697+ sizeOf _ = 12
698+ alignment _ = 4
699+ peek _p = do
700+ x <- realToFrac <$> peek (p'vector3'x _p)
701+ y <- realToFrac <$> peek (p'vector3'y _p)
702+ z <- realToFrac <$> peek (p'vector3'z _p)
703+ return $ Vector3' x y z
704+ poke _p (Vector3' x y z) = do
705+ poke (p'vector3'x _p) (realToFrac x)
706+ poke (p'vector3'y _p) (realToFrac y)
707+ poke (p'vector3'z _p) (realToFrac z)
708+ return ()
709+
710+ type Vector3 = Vector3'
711+
712+ pattern Vector3
713+ { vector3'x ,
714+ vector3'y ,
715+ vector3'z
716+ } = Vector3' vector3'x vector3'y vector3'z
717+ {-# COMPLETE Vector3 :: Vector3' #-}
718+
719+ data Vector4' = Vector4' Float Float Float Float deriving (Eq , Show , Freeable )
720+
721+ instance Storable Vector4' where
722+ sizeOf _ = 16
723+ alignment _ = 4
724+ peek _p = do
725+ x <- realToFrac <$> peek (p'vector4'x _p)
726+ y <- realToFrac <$> peek (p'vector4'y _p)
727+ z <- realToFrac <$> peek (p'vector4'z _p)
728+ w <- realToFrac <$> peek (p'vector4'w _p)
729+ return $ Vector4' x y z w
730+ poke _p (Vector4' x y z w) = do
731+ poke (p'vector4'x _p) (realToFrac x)
732+ poke (p'vector4'y _p) (realToFrac y)
733+ poke (p'vector4'z _p) (realToFrac z)
734+ poke (p'vector4'w _p) (realToFrac w)
735+ return ()
736+
737+ type Vector4 = Vector4'
738+
739+ pattern Vector4
740+ { vector4'x,
741+ vector4'y,
742+ vector4'z,
743+ vector4'w
744+ } = Vector4' vector4'x vector4'y vector4'z vector4'w
745+ {-# COMPLETE Vector4 :: Vector4' #-}
746+
747+ #else
662748
663749type Vector2 = V2 Float
664750
665- pattern Vector2 :: Float -> Float -> Vector2
666751pattern Vector2
667752 { vector2'x ,
668753 vector2'y
669754 } = V2 vector2'x vector2'y
670755{-# COMPLETE Vector2 :: V2 #-}
671756
672- p'vector2'x :: Ptr Vector2 -> Ptr CFloat
673- p'vector2'x = (`plusPtr` 0 )
674-
675- p'vector2'y :: Ptr Vector2 -> Ptr CFloat
676- p'vector2'y = (`plusPtr` 4 )
677-
678757type Vector3 = V3 Float
679758
680- pattern Vector3 :: Float -> Float -> Float -> Vector3
681759pattern Vector3
682760 { vector3'x ,
683761 vector3'y ,
684762 vector3'z
685763 } = V3 vector3'x vector3'y vector3'z
686764{-# COMPLETE Vector3 :: V3 #-}
687765
688- p'vector3'x :: Ptr Vector3 -> Ptr CFloat
689- p'vector3'x = (`plusPtr` 0 )
690-
691- p'vector3'y :: Ptr Vector3 -> Ptr CFloat
692- p'vector3'y = (`plusPtr` 4 )
693-
694- p'vector3'z :: Ptr Vector3 -> Ptr CFloat
695- p'vector3'z = (`plusPtr` 8 )
696-
697766type Vector4 = V4 Float
698767
699- pattern Vector4 :: a -> a -> a -> a -> V4 a
700768pattern Vector4
701769 { vector4'x,
702770 vector4'y,
@@ -705,6 +773,23 @@ pattern Vector4
705773 } = V4 vector4'x vector4'y vector4'z vector4'w
706774{-# COMPLETE Vector4 :: V4 #-}
707775
776+ #endif
777+
778+ p'vector2'x :: Ptr Vector2 -> Ptr CFloat
779+ p'vector2'x = (`plusPtr` 0 )
780+
781+ p'vector2'y :: Ptr Vector2 -> Ptr CFloat
782+ p'vector2'y = (`plusPtr` 4 )
783+
784+ p'vector3'x :: Ptr Vector3 -> Ptr CFloat
785+ p'vector3'x = (`plusPtr` 0 )
786+
787+ p'vector3'y :: Ptr Vector3 -> Ptr CFloat
788+ p'vector3'y = (`plusPtr` 4 )
789+
790+ p'vector3'z :: Ptr Vector3 -> Ptr CFloat
791+ p'vector3'z = (`plusPtr` 8 )
792+
708793vectorToColor :: Vector4 -> Color
709794vectorToColor (Vector4 x y z w) = Color (round $ x * 255 ) (round $ y * 255 ) (round $ z * 255 ) (round $ w * 255 )
710795
0 commit comments