import { SpriteBaseProps , mutateBaseProps } from "./props" ; import { MaskShape } from "./mask" ; export type TextureFont = { /**
     * Font name
     */ family ? : string ; /**
     * Size of font in relation to game size
     */ size ? : number ; /**
     * Font weight, either a string like `"bold"` or a number like `500`
     */ weight ? : number | string ; default style ? : "normal" | "italic" | "oblique" | "inherit" ; default baseline ? : "top" | "hanging" | "middle" | "alphabetic" | "ideographic" | "bottom" ; default align ? : "left" | "center" | "right" ; } ; export type Gradient = { type : "linearHoriz" ; /**
     * Colours in left to right order spread evenly
     */ colors : string [ ] ; /**
     * Array of opacity of each colour, from 0 - 1
     */ opacities ? : number [ ] ; /**
     * Width between first and last colour in game coordinates
     */ width : number ; } | { type : "linearVert" ; /**
     * Colours in top to bottom order spread evenly
     */ colors : string [ ] ; /**
     * Array of opacity of each colour, from 0 - 1
     */ opacities ? : number [ ] ; /**
     * Height between first and last colour in game coordinates
     */ height : number ; } ; /**
 * `t` is a util which contains functions to create every type of Texture.
 */ export const t = { text : ( props ) : Texture => { return { type : "text" , props : mutateBaseProps ( { testId : props . testId , font : props . font , text : props . text , color : props . color , gradient : props . gradient , strokeColor : props . strokeColor , strokeThickness : props . strokeThickness , } , props ) , } ; } , circle : ( props ) : Texture => { return { type : "circle" , props : mutateBaseProps ( { testId : props . testId , radius : props . radius , color : props . color , } , props ) , } ; } , rectangle : ( props ) : Texture => { return { type : "rectangle" , props : mutateBaseProps ( { testId : props . testId , width : props . width , height : props . height , color : props . color , gradient : props . gradient , } , props ) , } ; } , rectangleArray : ( arg ) : RectangleArrayTexture => { return { type : "rectangleArray" , mask : arg . mask || null , props : arg . props . map ( ( props ) => mutateBaseProps < RectangleProps > ( { testId : props . testId , width : props . width , height : props . height , color : props . color , } , props ) ) , } ; } , line : ( props ) : Texture => { return { type : "line" , props : mutateBaseProps ( { testId : props . testId , color : props . color , fillColor : props . fillColor , thickness : props . thickness ?? 1 , lineCap : props . lineCap || "butt" , path : props . path , fillGradient : props . fillGradient , } , props ) , } ; } , image : ( props ) : Texture => { return { type : "image" , props : mutateBaseProps ( { testId : props . testId , fileName : props . fileName , width : props . width , height : props . height , } , props ) , } ; } , imageArray : ( arg ) : ImageArrayTexture => { return { type : "imageArray" , fileName : arg . fileName , mask : arg . mask || null , props : arg . props . map ( ( props ) => mutateBaseProps < Omit < ImageProps , "fileName" > > ( { testId : props . testId , width : props . width , height : props . height , } , props ) ) , } ; } , spriteSheet : ( props ) : Texture => { return { type : "spriteSheet" , props : mutateBaseProps ( { testId : props . testId , fileName : props . fileName , columns : props . columns , rows : props . rows , index : props . index , width : props . width , height : props . height , } , props ) , } ; } , } ; interface TestProps { testId ? : string ; } type BaseProps = TestProps & SpriteBaseProps ; /**
 * A Replay texture
 */ export type SingleTexture = TextTexture | CircleTexture | RectangleTexture | LineTexture | ImageTexture | SpriteSheetTexture ; export type Texture = SingleTexture | RectangleArrayTexture | ImageArrayTexture ; type TextProps = BaseProps & { font ? : TextureFont ; text : string ; color : string ; gradient ? : Gradient ; strokeColor ? : string ; strokeThickness ? : number ; } ; export interface TextTexture { type : "text" ; props : TextProps ; } type CircleProps = BaseProps & { radius : number ; color : string ; gradient ? : Gradient ; } ; export interface CircleTexture { type : "circle" ; props : CircleProps ; } type RectangleProps = BaseProps & { width : number ; height : number ; color : string ; gradient ? : Gradient ; } ; export interface RectangleTexture { type : "rectangle" ; props : RectangleProps ; } export interface RectangleArrayTexture { type : "rectangleArray" ; mask : MaskShape ; props : Omit < RectangleProps , "mask" | "gradient" > [ ] ; } type LineProps = BaseProps & { color ? : string ; thickness : number ; path : [ number , number ] [ ] ; fillColor ? : string ; lineCap : "butt" | "round" ; gradient ? : Gradient ; fillGradient ? : Gradient ; } ; export interface LineTexture { type : "line" ; props : LineProps ; } type ImageProps = BaseProps & { fileName : string ; width : number ; height : number ; } ; export interface ImageTexture { type : "image" ; props : ImageProps ; } export interface ImageArrayTexture { type : "imageArray" ; fileName : string ; mask : MaskShape ; props : Omit < ImageProps , "fileName" | "mask" > [ ] ; } type SpriteSheetProps = BaseProps & { fileName : string ; columns : number ; rows : number ; index : number ; width : number ; height : number ; } ; export interface SpriteSheetTexture { type : "spriteSheet" ; props : SpriteSheetProps ; }