@ -1144,6 +1144,7 @@ namespace olc
// Draws a decal rotated to specified angle, wit point of rotation offset
// Draws a decal rotated to specified angle, wit point of rotation offset
void DrawRotatedDecal ( const olc : : vf2d & pos , olc : : Decal * decal , const float fAngle , const olc : : vf2d & center = { 0.0f , 0.0f } , const olc : : vf2d & scale = { 1.0f , 1.0f } , const olc : : Pixel & tint = olc : : WHITE ) ;
void DrawRotatedDecal ( const olc : : vf2d & pos , olc : : Decal * decal , const float fAngle , const olc : : vf2d & center = { 0.0f , 0.0f } , const olc : : vf2d & scale = { 1.0f , 1.0f } , const olc : : Pixel & tint = olc : : WHITE ) ;
void DrawPartialRotatedDecal ( const olc : : vf2d & pos , olc : : Decal * decal , const float fAngle , const olc : : vf2d & center , const olc : : vf2d & source_pos , const olc : : vf2d & source_size , const olc : : vf2d & scale = { 1.0f , 1.0f } , const olc : : Pixel & tint = olc : : WHITE ) ;
void DrawPartialRotatedDecal ( const olc : : vf2d & pos , olc : : Decal * decal , const float fAngle , const olc : : vf2d & center , const olc : : vf2d & source_pos , const olc : : vf2d & source_size , const olc : : vf2d & scale = { 1.0f , 1.0f } , const olc : : Pixel & tint = olc : : WHITE ) ;
void DrawPartialSquishedRotatedDecal ( const olc : : vf2d & pos , olc : : Decal * decal , const float fAngle , const olc : : vf2d & center , const olc : : vf2d & source_pos , const olc : : vf2d & source_size , const olc : : vf2d & scale = { 1.0f , 1.0f } , const olc : : Pixel & tint = olc : : WHITE ) ;
// Draws a multiline string as a decal, with tiniting and scaling
// Draws a multiline string as a decal, with tiniting and scaling
void DrawStringDecal ( const olc : : vf2d & pos , std : : string_view sText , const Pixel col = olc : : WHITE , const olc : : vf2d & scale = { 1.0f , 1.0f } , const float width = std : : numeric_limits < float > : : max ( ) , const bool disableDynamicScaling = false ) ;
void DrawStringDecal ( const olc : : vf2d & pos , std : : string_view sText , const Pixel col = olc : : WHITE , const olc : : vf2d & scale = { 1.0f , 1.0f } , const float width = std : : numeric_limits < float > : : max ( ) , const bool disableDynamicScaling = false ) ;
void DrawOGStringDecal ( const olc : : vf2d & pos , const std : : string & sText , const Pixel col = olc : : WHITE , const olc : : vf2d & scale = { 1.0f , 1.0f } ) ;
void DrawOGStringDecal ( const olc : : vf2d & pos , const std : : string & sText , const Pixel col = olc : : WHITE , const olc : : vf2d & scale = { 1.0f , 1.0f } ) ;
@ -3321,6 +3322,37 @@ namespace olc
di . structure = nDecalStructure ;
di . structure = nDecalStructure ;
vLayers [ nTargetLayer ] . vecDecalInstance . push_back ( di ) ;
vLayers [ nTargetLayer ] . vecDecalInstance . push_back ( di ) ;
}
}
void PixelGameEngine : : DrawPartialSquishedRotatedDecal ( const olc : : vf2d & pos , olc : : Decal * decal , const float fAngle , const olc : : vf2d & center , const olc : : vf2d & source_pos , const olc : : vf2d & source_size , const olc : : vf2d & scale , const olc : : Pixel & tint )
{
DecalInstance di ;
di . decal = decal ;
di . points = 4 ;
di . tint = { tint , tint , tint , tint } ;
di . w = { 1 , 1 , 1 , 1 } ;
di . pos . resize ( 4 ) ;
di . pos [ 0 ] = ( olc : : vf2d ( 0.0f , 0.0f ) - center ) ;
di . pos [ 1 ] = ( olc : : vf2d ( 0.0f , source_size . y ) - center ) ;
di . pos [ 2 ] = ( olc : : vf2d ( source_size . x , source_size . y ) - center ) ;
di . pos [ 3 ] = ( olc : : vf2d ( source_size . x , 0.0f ) - center ) ;
float c = cos ( fAngle ) , s = sin ( fAngle ) ;
for ( int i = 0 ; i < 4 ; i + + )
{
di . pos [ i ] = pos + olc : : vf2d ( di . pos [ i ] . x * c - di . pos [ i ] . y * s , di . pos [ i ] . x * s + di . pos [ i ] . y * c ) ;
di . pos [ i ] = di . pos [ i ] * vInvScreenSize * 2.0f - olc : : vf2d ( 1.0f , 1.0f ) ;
di . pos [ i ] . y * = - 1.0f ;
}
di . pos [ 0 ] * = scale ;
di . pos [ 1 ] * = scale ;
di . pos [ 2 ] * = scale ;
di . pos [ 3 ] * = scale ;
olc : : vf2d uvtl = source_pos * decal - > vUVScale ;
olc : : vf2d uvbr = uvtl + ( source_size * decal - > vUVScale ) ;
di . uv = { { uvtl . x , uvtl . y } , { uvtl . x , uvbr . y } , { uvbr . x , uvbr . y } , { uvbr . x , uvtl . y } } ;
di . mode = nDecalMode ;
di . structure = nDecalStructure ;
vLayers [ nTargetLayer ] . vecDecalInstance . push_back ( di ) ;
}
void PixelGameEngine : : DrawPartialWarpedDecal ( olc : : Decal * decal , const olc : : vf2d * pos , const olc : : vf2d & source_pos , const olc : : vf2d & source_size , const olc : : Pixel & tint )
void PixelGameEngine : : DrawPartialWarpedDecal ( olc : : Decal * decal , const olc : : vf2d * pos , const olc : : vf2d & source_pos , const olc : : vf2d & source_size , const olc : : Pixel & tint )
{
{