Skip to content
This repository was archived by the owner on Dec 17, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
195 changes: 174 additions & 21 deletions data/model/cosmetic.model.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,48 @@ const (
)

type CosmeticPaintModel struct {
ID primitive.ObjectID `json:"id"`
Name string `json:"name"`
Function CosmeticPaintFunction `json:"function" enums:"LINEAR_GRADIENT,RADIAL_GRADIENT,URL"`
Color *int32 `json:"color"`
Repeat bool `json:"repeat"`
Angle int32 `json:"angle"`
Shape string `json:"shape"`
ImageURL string `json:"image_url"`
Stops []CosmeticPaintGradientStop `json:"stops"`
Shadows []CosmeticPaintDropShadow `json:"shadows"`
ID primitive.ObjectID `json:"id"`
Name string `json:"name"`
Color *int32 `json:"color"`
Gradients []CosmeticPaintGradient `json:"gradients"`
// A list of shadows. There may be any amount, which can be stacked onto each other
Shadows []CosmeticPaintShadow `json:"shadows"`
Flairs []CosmeticPaintFlair `json:"flairs"`
Text *CosmeticPaintText `json:"text"`
// use `gradients`
Function CosmeticPaintFunction `json:"function" enums:"LINEAR_GRADIENT,RADIAL_GRADIENT,URL"`
// use `gradients`
Repeat bool `json:"repeat"`
// use `gradients`
Angle int32 `json:"angle"`
// use `gradients`
Shape string `json:"shape"`
// use `gradients`
ImageURL string `json:"image_url"`
// use `gradients`
Stops []CosmeticPaintGradientStop `json:"stops"`
}

type CosmeticPaintGradient struct {
// The function used to generate the paint (i.e gradients or an image)
Function CosmeticPaintFunction `json:"function" bson:"function"`
// The repeat mode of the canvas
CanvasRepeat CosmeticPaintCanvasRepeat `json:"canvas_repeat" bson:"canvas_repeat"`
// The canvas size for the paint
Size [2]float64 `json:"canvas_size" bson:"canvas_size"`
// Gradient position (X/Y % values)
At [2]float64 `json:"at,omitempty" bson:"at,omitempty"`
// A list of gradients. There may be any amount, which can be stacked onto each other
// Gradient stops, a list of positions and colors
Stops []CosmeticPaintGradientStop `json:"stops" bson:"stops"`
// For a URL-based paint, the URL to an image
ImageURL string `json:"image_url,omitempty" bson:"image_url,omitempty"`
// For a radial gradient, the shape of the gradient
Shape string `json:"shape,omitempty" bson:"shape,omitempty"`
// The degree angle of the gradient (does not apply if function is URL)
Angle int32 `json:"angle,omitempty" bson:"angle,omitempty"`
// Whether or not the gradient repeats outside its original area
Repeat bool `json:"repeat" bson:"repeat"`
}

type CosmeticPaintFunction string
Expand All @@ -50,15 +82,78 @@ const (
type CosmeticPaintGradientStop struct {
At float64 `json:"at"`
Color int32 `json:"color"`
// the center position for the gradient. X/Y % values (for radial gradients only)
CenterAt [2]float64 `json:"center_at,omitempty" bson:"center_at,omitempty"`
}

type CosmeticPaintDropShadow struct {
type CosmeticPaintCanvasRepeat string

const (
CosmeticPaintCanvasRepeatNone CosmeticPaintCanvasRepeat = "no-repeat"
CosmeticPaintCanvasRepeatX CosmeticPaintCanvasRepeat = "repeat-x"
CosmeticPaintCanvasRepeatY CosmeticPaintCanvasRepeat = "repeat-y"
CosmeticPaintCanvasRepeatRevert CosmeticPaintCanvasRepeat = "revert"
CosmeticPaintCanvasRepeatRound CosmeticPaintCanvasRepeat = "round"
CosmeticPaintCanvasRepeatSpace CosmeticPaintCanvasRepeat = "space"
)

type CosmeticPaintShadow struct {
OffsetX float64 `json:"x_offset"`
OffsetY float64 `json:"y_offset"`
Radius float64 `json:"radius"`
Color int32 `json:"color"`
}

type CosmeticPaintText struct {
// Weight multiplier for the text. Defaults to 9x is not specified
Weight uint8 `json:"weight,omitempty" bson:"weight,omitempty"`
// Shadows applied to the text
Shadows []CosmeticPaintShadow `json:"shadows,omitempty" bson:"shadows,omitempty"`
// Text tranformation
Transform CosmeticPaintTextTransform `json:"transform,omitempty" bson:"transform,omitempty"`
// Text stroke
Stroke *CosmeticPaintStroke `json:"stroke,omitempty" bson:"stroke,omitempty"`
// (css) font variant property. non-standard
Variant string `json:"variant" bson:"variant"`
}

type CosmeticPaintStroke struct {
// Stroke color
Color int32 `json:"color" bson:"color"`
// Stroke width
Width float64 `json:"width" bson:"width"`
}

type CosmeticPaintTextTransform string

const (
CosmeticPaintTextTransformUppercase CosmeticPaintTextTransform = "uppercase"
CosmeticPaintTextTransformLowercase CosmeticPaintTextTransform = "lowercase"
)

type CosmeticPaintFlair struct {
// The kind of sprite
Kind CosmeticPaintFlairKind `json:"kind" bson:"kind"`
// The X offset of the flair (%)
OffsetX float64 `json:"x_offset" bson:"x_offset"`
// The Y offset of the flair (%)
OffsetY float64 `json:"y_offset" bson:"y_offset"`
// The width of the flair
Width float64 `json:"width" bson:"width"`
// The height of the flair
Height float64 `json:"height" bson:"height"`
// Base64-encoded image or vector data
Data string `json:"data" bson:"data"`
}

type CosmeticPaintFlairKind string

const (
CosmeticPaintSpriteKindImage CosmeticPaintFlairKind = "IMAGE"
CosmeticPaintSpriteKindVector CosmeticPaintFlairKind = "VECTOR"
CosmeticPaintSpriteKindText CosmeticPaintFlairKind = "TEXT"
)

type CosmeticBadgeModel struct {
ID primitive.ObjectID `json:"id"`
Name string `json:"name"`
Expand Down Expand Up @@ -112,24 +207,82 @@ func (x *modelizer) Paint(v structures.Cosmetic[structures.CosmeticDataPaint]) C
Name: v.Name,
Function: CosmeticPaintFunction(v.Data.Function),
Color: color,
Repeat: v.Data.Repeat,
Angle: v.Data.Angle,
Shape: v.Data.Shape,
ImageURL: v.Data.ImageURL,
Stops: utils.Map(v.Data.Stops, func(v structures.CosmeticPaintGradientStop) CosmeticPaintGradientStop {
return CosmeticPaintGradientStop{
At: v.At,
Color: v.Color.Sum(),
Gradients: utils.Map(v.Data.Gradients, func(x structures.CosmeticPaintGradient) CosmeticPaintGradient {
return CosmeticPaintGradient{
Function: CosmeticPaintFunction(x.Function),
CanvasRepeat: CosmeticPaintCanvasRepeat(x.CanvasRepeat),
Size: x.Size,
Stops: utils.Map(x.Stops, func(x structures.CosmeticPaintGradientStop) CosmeticPaintGradientStop {
return CosmeticPaintGradientStop{
At: x.At,
Color: x.Color.Sum(),
CenterAt: x.CenterAt,
}
}),
ImageURL: x.ImageURL,
Shape: x.Shape,
Angle: x.Angle,
Repeat: x.Repeat,
At: x.At,
}
}),
Shadows: utils.Map(v.Data.DropShadows, func(v structures.CosmeticPaintDropShadow) CosmeticPaintDropShadow {
return CosmeticPaintDropShadow{
Shadows: utils.Map(v.Data.DropShadows, func(v structures.CosmeticPaintDropShadow) CosmeticPaintShadow {
return CosmeticPaintShadow{
OffsetX: v.OffsetX,
OffsetY: v.OffsetY,
Radius: v.Radius,
Color: v.Color.Sum(),
}
}),
Flairs: utils.Map(v.Data.Flairs, func(v structures.CosmeticPaintFlair) CosmeticPaintFlair {
return CosmeticPaintFlair{
Kind: CosmeticPaintFlairKind(v.Kind),
OffsetX: v.OffsetX,
OffsetY: v.OffsetY,
Width: v.Width,
Height: v.Height,
Data: v.Data,
}
}),
Text: func() *CosmeticPaintText {
if v.Data.Text == nil {
return nil
}

return &CosmeticPaintText{
Weight: v.Data.Text.Weight,
Shadows: utils.Map(v.Data.Text.Shadows, func(v structures.CosmeticPaintDropShadow) CosmeticPaintShadow {
return CosmeticPaintShadow{
OffsetX: v.OffsetX,
OffsetY: v.OffsetY,
Radius: v.Radius,
Color: v.Color.Sum(),
}
}),
Transform: CosmeticPaintTextTransform(v.Data.Text.Transform),
Stroke: func() *CosmeticPaintStroke {
if v.Data.Text.Stroke == nil {
return nil
}

return &CosmeticPaintStroke{
Color: v.Data.Text.Stroke.Color.Sum(),
Width: v.Data.Text.Stroke.Width,
}
}(),
Variant: v.Data.Text.Variant,
}
}(),
Stops: utils.Map(v.Data.Stops, func(v structures.CosmeticPaintGradientStop) CosmeticPaintGradientStop {
return CosmeticPaintGradientStop{
At: v.At,
Color: v.Color.Sum(),
}
}),
Repeat: v.Data.Repeat,
Angle: v.Data.Angle,
Shape: v.Data.Shape,
ImageURL: v.Data.ImageURL,
}
}

Expand Down
76 changes: 67 additions & 9 deletions data/model/modelgql/cosmetic-gql.model.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,80 @@ func CosmeticPaint(xm model.CosmeticPaintModel) *gql_model.CosmeticPaint {
}

return &gql_model.CosmeticPaint{
ID: xm.ID,
Name: xm.Name,
Function: gql_model.CosmeticPaintFunction(xm.Function),
Color: color,
Repeat: xm.Repeat,
Angle: int(xm.Angle),
Shape: utils.Ternary(xm.Shape != "", &xm.Shape, nil),
ImageURL: utils.Ternary(xm.ImageURL != "", &xm.ImageURL, nil),
Shadows: utils.Map(xm.Shadows, func(x model.CosmeticPaintDropShadow) *gql_model.CosmeticPaintShadow {
ID: xm.ID,
Name: xm.Name,
Color: color,
Shadows: utils.Map(xm.Shadows, func(x model.CosmeticPaintShadow) *gql_model.CosmeticPaintShadow {
return &gql_model.CosmeticPaintShadow{
XOffset: x.OffsetX,
YOffset: x.OffsetY,
Radius: x.Radius,
Color: int(x.Color),
}
}),
Gradients: utils.Map(xm.Gradients, func(x model.CosmeticPaintGradient) *gql_model.CosmeticPaintGradient {
return &gql_model.CosmeticPaintGradient{
Function: gql_model.CosmeticPaintFunction(x.Function),
CanvasRepeat: string(x.CanvasRepeat),
Size: x.Size[:],
Stops: utils.Map(x.Stops, func(x model.CosmeticPaintGradientStop) *gql_model.CosmeticPaintStop {
return &gql_model.CosmeticPaintStop{
At: x.At,
Color: int(x.Color),
CenterAt: x.CenterAt[:],
}
}),
Angle: int(x.Angle),
Repeat: x.Repeat,
ImageURL: &x.ImageURL,
Shape: &x.Shape,
At: x.At[:],
}
}),
Flairs: utils.Map(xm.Flairs, func(x model.CosmeticPaintFlair) *gql_model.CosmeticPaintFlair {
return &gql_model.CosmeticPaintFlair{
Kind: gql_model.CosmeticPaintFlairKind(x.Kind),
XOffset: x.OffsetX,
YOffset: x.OffsetY,
Width: x.Width,
Height: x.Height,
Data: x.Data,
}
}),
Text: func() *gql_model.CosmeticPaintText {
if xm.Text == nil {
return nil
}

return &gql_model.CosmeticPaintText{
Weight: utils.PointerOf(int(xm.Text.Weight)),
Shadows: utils.Map(xm.Text.Shadows, func(x model.CosmeticPaintShadow) *gql_model.CosmeticPaintShadow {
return &gql_model.CosmeticPaintShadow{
XOffset: x.OffsetX,
YOffset: x.OffsetY,
Radius: x.Radius,
Color: int(x.Color),
}
}),
Transform: utils.PointerOf(string(xm.Text.Transform)),
Stroke: func() *gql_model.CosmeticPaintStroke {
if xm.Text.Stroke == nil {
return nil
}

return &gql_model.CosmeticPaintStroke{
Color: int(xm.Text.Stroke.Color),
Width: xm.Text.Stroke.Width,
}
}(),
Variant: new(string),
}
}(),
Function: gql_model.CosmeticPaintFunction(xm.Function),
Repeat: xm.Repeat,
Angle: int(xm.Angle),
Shape: utils.Ternary(xm.Shape != "", &xm.Shape, nil),
ImageURL: utils.Ternary(xm.ImageURL != "", &xm.ImageURL, nil),
Stops: utils.Map(xm.Stops, func(x model.CosmeticPaintGradientStop) *gql_model.CosmeticPaintStop {
return &gql_model.CosmeticPaintStop{
At: x.At,
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ require (
github.com/json-iterator/go v1.1.12
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/prometheus/client_golang v1.14.0
github.com/seventv/common v0.0.0-20230328045913-6c25d756c0ac
github.com/seventv/common v0.0.0-20230523123640-a3d24613572e
github.com/seventv/compactdisc v0.0.0-20221006190906-ccfe99954e48
github.com/seventv/image-processor/go v0.0.0-20221128171540-d050701ac324
github.com/seventv/message-queue/go v0.0.0-20220721124044-9fd23bda9643
Expand Down
6 changes: 4 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -336,8 +336,10 @@ github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee h1:8Iv5m6xEo1NR1Avp
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee/go.mod h1:qwtSXrKuJh/zsFQ12yEE89xfCrGKK63Rr7ctU/uCo4g=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/seventv/common v0.0.0-20230328045913-6c25d756c0ac h1:wzCOShqABPrOqqvfAZdT8iVIaXx0WOU5QvYXvU9MvhM=
github.com/seventv/common v0.0.0-20230328045913-6c25d756c0ac/go.mod h1:jHHFe3uNMyzb/ReDqMvaI/A1euvV/PW/G+2PhcWQqWw=
github.com/seventv/common v0.0.0-20230520215117-329d4f6c8680 h1:qZS9KubLRpQ7FJlF65t9xjzQCcQEaxFv+/W+PJmb/HY=
github.com/seventv/common v0.0.0-20230520215117-329d4f6c8680/go.mod h1:jHHFe3uNMyzb/ReDqMvaI/A1euvV/PW/G+2PhcWQqWw=
github.com/seventv/common v0.0.0-20230523123640-a3d24613572e h1:T9UFnNeKoPcCuisHGQfPFuepJAPkf55OvH1COfLU9CA=
github.com/seventv/common v0.0.0-20230523123640-a3d24613572e/go.mod h1:jHHFe3uNMyzb/ReDqMvaI/A1euvV/PW/G+2PhcWQqWw=
github.com/seventv/compactdisc v0.0.0-20221006190906-ccfe99954e48 h1:IqWrtt/yob45YnOQ5Wwkbf8qP22eKVtg0WzfyEkGnFg=
github.com/seventv/compactdisc v0.0.0-20221006190906-ccfe99954e48/go.mod h1:T+ldp0YQe03s44+A5HHHI/jB3ZmWqOIaNouEqAS+1Dk=
github.com/seventv/image-processor/go v0.0.0-20221128171540-d050701ac324 h1:iU3wWepRTbkNoTAPR23m6TAW6Yb9pOMCYVr0K++OBAw=
Expand Down
2 changes: 1 addition & 1 deletion internal/api/gql/v2/helpers/transform.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ func CosmeticStructureToModel(s structures.Cosmetic[bson.Raw]) *model.UserCosmet

f := strings.Replace(string(v.Data.Function), "_", "-", 1)
f = strings.ToLower(f)
v.Data.Function = structures.CosmeticPaintFunction(f)
v.Data.Function = structures.CosmeticPaintGradientFunction(f)

j, _ := json.Marshal(v.Data)

Expand Down
2 changes: 1 addition & 1 deletion internal/api/gql/v3/resolvers/cosmetics/cosmetics.ops.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (r *ResolverOps) UpdatePaint(ctx context.Context, obj *model.CosmeticOps, d
Priority: 0,
Name: def.Name,
Data: structures.CosmeticDataPaint{
Function: structures.CosmeticPaintFunction(def.Function),
Function: structures.CosmeticPaintGradientFunction(def.Function),
Color: utils.PointerOf(utils.Color(mainColor)),
Stops: stops,
Repeat: def.Repeat,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (r *Resolver) CreateCosmeticPaint(ctx context.Context, def model.CosmeticPa
Priority: 0,
Name: def.Name,
Data: structures.CosmeticDataPaint{
Function: structures.CosmeticPaintFunction(def.Function),
Function: structures.CosmeticPaintGradientFunction(def.Function),
Color: utils.PointerOf(utils.Color(mainColor)),
Stops: stops,
Repeat: def.Repeat,
Expand Down
Loading