Exemple #1
0
        private void DrawAsset(List <AvatarAsset> buildQueue, Image <Rgba32> bodyCanvas, Image <Rgba32> faceCanvas, Image <Rgba32> drinkCanvas, AvatarAsset asset)
        {
            var graphicsOptions = new GraphicsOptions();

            graphicsOptions.ColorBlendingMode = PixelColorBlendingMode.Normal;

            using (var image = SixLabors.ImageSharp.Image.Load <Rgba32>(asset.FileName))
            {
                if (buildQueue.Count(x => x.Set.HiddenLayers.Contains(asset.Part.Type)) > 0)
                {
                    return;
                }

                if (asset.Part.Type != "ey")
                {
                    if (asset.Part.HexColor != null)
                    {
                        TintImage(image, asset.Part.HexColor, 255);
                    }
                    if (asset.Part.Colorable)
                    {
                        string[] parts = asset.Parts;

                        if (parts.Length > 2 && !IsOldFigure)
                        {
                            var paletteId = int.Parse(parts[2]);

                            if (!FiguredataReader.FigureSetTypes.ContainsKey(parts[0]))
                            {
                                return;
                            }

                            var figureTypeSet = FiguredataReader.FigureSetTypes[parts[0]];
                            var palette       = FiguredataReader.FigurePalettes[figureTypeSet.PaletteId];
                            var colourData    = palette.FirstOrDefault(x => x.ColourId == parts[2]);

                            if (colourData == null)
                            {
                                return;
                            }

                            TintImage(image, colourData.HexColor, 255);
                        }
                    }
                }
                else
                {
                    TintImage(image, "FFFFFF", 255);
                }

                try
                {
                    if (this.IsHead(asset.Part.Type))
                    {
                        faceCanvas.Mutate(ctx =>
                        {
                            ctx.DrawImage(image, new SixLabors.ImageSharp.Point(faceCanvas.Width - asset.ImageX, faceCanvas.Height - asset.ImageY), graphicsOptions);
                        });
                    }
                    else
                    {
                        if (!asset.IsDrinkCanvas)
                        {
                            bodyCanvas.Mutate(ctx =>
                            {
                                ctx.DrawImage(image, new SixLabors.ImageSharp.Point(bodyCanvas.Width - asset.ImageX, bodyCanvas.Height - asset.ImageY), graphicsOptions);
                            });
                        }
                        else
                        {
                            drinkCanvas.Mutate(ctx =>
                            {
                                ctx.DrawImage(image, new SixLabors.ImageSharp.Point(bodyCanvas.Width - asset.ImageX, bodyCanvas.Height - asset.ImageY), graphicsOptions);
                            });
                        }
                    }
                }
                catch { }
            }
        }
Exemple #2
0
        private AvatarAsset LoadFigureAsset(string[] parts, FigurePart part, FigureSet set)
        {
            var key      = part.Type + (IsSmall ? "_sh" : "_h");
            var document = FigureExtractor.Parts.ContainsKey(key) ? FigureExtractor.Parts[key] : null;

            if (document == null)
            {
                return(null);
            }

            int    direction;
            string gesture;

            if (IsHead(part.Type))
            {
                direction = HeadDirection;
                gesture   = Gesture;

                if (HeadDirection == 4)
                {
                    direction = 2;
                }

                if (HeadDirection == 6)
                {
                    direction = 0;
                }

                if (HeadDirection == 5)
                {
                    direction = 1;
                }
            }
            else
            {
                direction = BodyDirection;
                gesture   = Action;

                if (BodyDirection == 4)
                {
                    direction = 2;
                }

                if (BodyDirection == 6)
                {
                    direction = 0;
                }

                if (BodyDirection == 5)
                {
                    direction = 1;
                }
            }

            // Hide left arm on side view
            if (direction == 1 && part.Type == "ls")
            {
                return(null);
            }

            if (Action == "lay")
            {
                if (BodyDirection == 4)
                {
                    direction = 2;
                }
            }

            if (CarryDrink > 0 && Action != "lay" && Action != "drk")
            {
                var partsForAction = new string[] { "ls", "lh" };

                if (partsForAction.Contains(part.Type))
                {
                    gesture = "std";
                }
            }

            AvatarAsset asset = null;

            if (CarryDrink > 0 && (part.Type == "rs" || part.Type == "rh") && Action != "drk" && Action != "crr")
            {
                asset = LocateAsset((this.IsSmall ? "sh" : "h") + "_" + "crr" + "_" + part.Type + "_" + part.Id + "_" + direction + "_0", document, parts, part, set);
            }

            if (asset == null)
            {
                asset = LocateAsset((this.IsSmall ? "sh" : "h") + "_" + gesture + "_" + part.Type + "_" + part.Id + "_" + direction + "_" + Frame, document, parts, part, set);
            }

            if (asset == null)
            {
                asset = LocateAsset((this.IsSmall ? "sh" : "h") + "_" + "std" + "_" + part.Type + "_" + part.Id + "_" + direction + "_" + Frame, document, parts, part, set);
            }

            if (asset == null)
            {
                asset = LocateAsset((this.IsSmall ? "sh" : "h") + "_" + "std" + "_" + part.Type + "_" + part.Id + "_" + direction + "_0", document, parts, part, set);
            }

            if (IsSmall)
            {
                if (asset == null)
                {
                    asset = LocateAsset((this.IsSmall ? "sh" : "h") + "_" + "std" + "_" + part.Type + "_" + 1 + "_" + direction + "_" + Frame, document, parts, part, set);
                }
            }

            return(asset);
        }