Esempio n. 1
0
    private ISprite CreateSprite(
        Point position,
        string status,
        Func <TObject, Point, Task>?onPointerDown,
        Func <TObject, Point, Task>?onPointerOut,
        Func <TObject, Point, Task>?onPointerOver)
    {
        var spriteInfo = _spritesSpec.GetSpriteInfo(
            Model.Id,
            status);

        var sprite = Graphics.AddSprite(
            spriteInfo.AtlasKey,
            spriteInfo.FrameName,
            position,
            options =>
        {
            options.Depth        = position.Y + Model.DepthOffset;
            options.Origin       = new Point(0.5, 1);
            options.ScrollFactor = Model.ScrollFactor;

            if (Model.IsTouchable)
            {
                if (onPointerDown is not null)
                {
                    options.OnPointerDown = (pointerPosition) =>
                                            onPointerDown(Model, pointerPosition);
                }

                if (onPointerOut is not null)
                {
                    options.OnPointerOut = (pointerPosition) =>
                                           onPointerOut(Model, pointerPosition);
                }

                if (onPointerOver is not null)
                {
                    options.OnPointerOver = (pointerPosition) =>
                                            onPointerOver(Model, pointerPosition);
                }
            }
        });

        // Load animations.
        if (_spritesSpec.TryGetValue(Model.Id, out SpriteSpec spriteSpec))
        {
            foreach (var animationSpec in spriteSpec.Animations)
            {
                sprite.AddAnimation(
                    animationSpec.Key,
                    spriteSpec.AtlasKey,
                    animationSpec.Value);
            }
        }

        return(sprite);
    }