static void BuildTransform(Vector3 position, Vector2 size, SpriteFlags flags, out Matrix4x4 transform)
        {
            var offset = (flags & SpriteFlags.AlignmentMask) switch
            {
                0 => Vector3.Zero,
                SpriteFlags.MidAligned => new Vector3(0, -0.5f, 0),
                SpriteFlags.BottomAligned => new Vector3(0, -1.0f, 0),
                SpriteFlags.LeftAligned => new Vector3(0.5f, 0, 0),
                SpriteFlags.LeftAligned | SpriteFlags.MidAligned => new Vector3(0.5f, -0.5f, 0),
                SpriteFlags.LeftAligned | SpriteFlags.BottomAligned => new Vector3(0.5f, -1.0f, 0),
                _ => Vector3.Zero
            };

            transform = Matrix4x4.CreateTranslation(offset);

            if (flags.HasFlag(SpriteFlags.Floor))
            {
                transform *= new Matrix4x4(
                    1, 0, 0, 0,
                    0, 0, -1, 0,
                    0, 1, 0, 0,
                    0, 0, 0, 1);
            }

            transform *= Matrix4x4.CreateScale(new Vector3(size.X, size.Y, size.X));
            transform *= Matrix4x4.CreateTranslation(position);
        }
Example #2
0
        protected Obj_Sprite CreateSprite(string name, SpriteFlags flags)
        {
            int index = Sprites.Count;

            Sprites.Add(name, new Obj_Sprite(SpriteFlags.SortTexture | SpriteFlags.AlphaBlend));
            return(Sprites[name]);
        }
Example #3
0
        public Sprite(ITextureId id, Vector3 position, DrawLayer layer, SpriteKeyFlags keyFlags, SpriteFlags flags, Func <ITextureId, ITexture> loaderFunc = null)
        {
            On <BackendChangedEvent>(_ => Dirty = true);
            On <RenderEvent>(e => UpdateSprite());
            OnAsync <WorldCoordinateSelectEvent, Selection>(Select);
            On <HoverEvent>(e =>
            {
                if ((Resolve <IEngineSettings>()?.Flags & EngineFlags.HighlightSelection) == EngineFlags.HighlightSelection)
                {
                    Flags |= SpriteFlags.Highlight;
                }
            });
            On <BlurEvent>(e =>
            {
                if ((Resolve <IEngineSettings>()?.Flags & EngineFlags.HighlightSelection) == EngineFlags.HighlightSelection)
                {
                    Flags &= ~SpriteFlags.Highlight;
                }
            });

            Position    = position;
            _layer      = layer;
            _keyFlags   = keyFlags;
            _flags      = flags;
            Id          = id;
            _loaderFunc = loaderFunc ?? DefaultLoader;
        }
Example #4
0
    public void Update(int index, Vector3 position, Vector2 size, Region region, SpriteFlags flags)
    {
        bool taken = false;
        var  span  = Lock(ref taken);

        span[index] = new SpriteInstanceData(position, size, region, flags);
        Unlock(taken);
    }
Example #5
0
    public void UpdateFlags(int index, SpriteFlags flags, SpriteFlags?mask = null)
    {
        SpriteFlags mask2 = mask ?? flags;
        bool        taken = false;
        var         span  = Lock(ref taken);

        span[index].Flags = (span[index].Flags & ~mask2) | (flags & mask2);
        Unlock(taken);
    }
Example #6
0
 protected Sprite(string name, int subObject, Vector3 position, int renderOrder, SpriteFlags flags, Vector2?size)
 {
     Name        = name;
     SubObject   = subObject;
     Position    = position;
     RenderOrder = renderOrder;
     Flags       = flags;
     Size        = size;
 }
Example #7
0
        void Rebuild(int width, int height, int order)
        {
            var window = Resolve <IWindowManager>();

            {
                var normSize  = window.UiToNormRelative(new Vector2(width, height));
                var pixelSize = window.NormToPixelRelative(normSize);

                if ((pixelSize - _lastPixelSize).LengthSquared() < float.Epsilon && _sprite.RenderOrder == order)
                {
                    return;
                }
                _lastPixelSize = pixelSize;
            }

            var totalSize = GetSize();
            var extents   = new Rectangle(0, 0, (int)totalSize.X, (int)totalSize.Y);

            var instances = new List <SpriteInstanceData>();

            for (int j = extents.Y; j < extents.Height; j++)
            {
                for (int i = extents.X; i < extents.Width; i++)
                {
                    int         n     = instances.Count;
                    SpriteFlags flags = SpriteFlags.NoTransform | SpriteFlags.NoDepthTest;
                    if ((n & 1) != 0)
                    {
                        flags |= SpriteFlags.BlueTint;
                    }
                    if ((n & 2) != 0)
                    {
                        flags |= SpriteFlags.GreenTint;
                    }
                    if ((n & 4) != 0)
                    {
                        flags |= SpriteFlags.RedTint;
                    }
                    if ((n & 8) != 0)
                    {
                        flags |= SpriteFlags.Highlight;
                    }

                    var position = new Vector3(window.UiToNorm(new Vector2(i, j)), 0);
                    var size     = 2 * Vector2.One / window.Size;
                    instances.Add(SpriteInstanceData.Centred(position, size, Vector2.Zero, Vector2.One, 0, flags));
                }
            }

            _sprite = new MultiSprite(new SpriteKey(_pixel, order, instances[0].Flags))
            {
                Instances = instances.ToArray()
            };
        }
 /// <summary>
 /// Instancia a classe.
 /// </summary>
 public EngineObject()
 {
     Name         = string.Empty;
     Transparency = 255;
     Visible      = true;
     Enabled      = true;
     DrawTexture  = true;
     SourceRect   = new Rectangle();
     Position     = new Point();
     Color        = Color.White;
     SpriteFlags  = SpriteFlags.AlphaBlend;
 }
Example #9
0
 public void BatchDraw(SpriteFlags flags)
 {
     _sprite_resource.Begin(flags);
     lock (this)
     {
         foreach (AGT_SpriteResource t in _texture_list.Values)
         {
             t.DrawRelative(_sprite_resource, Scale, X, Y, 0, Color.White.ToArgb());
         }
     }
     _sprite_resource.End();
 }
Example #10
0
 /// <summary>
 /// Instancia a classe.
 /// </summary>
 public EngineObject()
 {
     Name         = string.Empty;
     Transparency = byte.MaxValue;
     Visible      = true;
     Enabled      = true;
     SourceRect   = new Rectangle(0, 0, 0, 0);
     BorderRect   = new Rectangle(0, 0, 0, 0);
     Position     = new Point(0, 0);
     Color        = Color.White;
     SpriteFlags  = SpriteFlags.AlphaBlend;
 }
Example #11
0
 public SpriteInstanceData(Vector3 position, Vector2 size, Region region, SpriteFlags flags)
 {
     if (region == null)
     {
         throw new ArgumentNullException(nameof(region));
     }
     Position    = new Vector4(position, 1);
     Size        = size;
     TexPosition = region.TexOffset;
     TexSize     = region.TexSize;
     TexLayer    = (uint)region.Layer;
     Flags       = flags;
 }
Example #12
0
        // Main constructor
        SpriteInstanceData(Vector3 position, Vector2 size, Vector2 texPosition, Vector2 texSize, uint texLayer, SpriteFlags flags)
        {
            BuildTransform(position, size, flags, out Matrix4x4 transform);

            Transform1 = new Vector3(transform.M11, transform.M12, transform.M13);
            Transform2 = new Vector3(transform.M21, transform.M22, transform.M23);
            Transform3 = new Vector3(transform.M31, transform.M32, transform.M33);
            Transform4 = new Vector3(transform.M41, transform.M42, transform.M43);
            // Assume right column is always 0,0,0,1

            TexPosition = texPosition;
            TexSize     = texSize;
            TexLayer    = texLayer;
            Flags       = flags;
        }
Example #13
0
        /// <summary>
        /// Carrega um novo arquivo com tamanho definido.
        /// </summary>
        /// <param name="file">Arquivo</param>
        public EngineObject(string file, int width, int height)
        {
            Name         = string.Empty;
            Transparency = byte.MaxValue;
            Visible      = true;
            Enabled      = true;
            Position     = new Point();
            Color        = Color.White;
            SpriteFlags  = SpriteFlags.AlphaBlend;
            Size         = new Size2(width, height);
            SourceRect   = new Rectangle(0, 0, width, height);
            BorderRect   = new Rectangle(0, 0, 0, 0);

            Texture = EngineTexture.TextureFromFile(file, width, height);
        }
        /// <summary>
        /// Carrega um novo arquivo e obtém automaticamente o tamanho.
        /// </summary>
        /// <param name="file">Arquivo</param>
        public EngineObject(string file)
        {
            Name         = string.Empty;
            Transparency = 255;
            Visible      = true;
            Enabled      = true;
            DrawTexture  = true;
            Position     = new Point();
            Color        = Color.White;
            SpriteFlags  = SpriteFlags.AlphaBlend;

            Size2 size;

            Texture = EngineTexture.TextureFromFile(file, out size);

            Size       = size;
            SourceRect = new Rectangle(0, 0, Size.Width, Size.Height);
        }
        /// <summary>
        /// Carrega um novo arquivo e obtém automaticamente o tamanho.
        /// </summary>
        /// <param name="lang">Idioma</param>
        /// <param name="file">Arquivo</param>
        /// <param name="name">Nome de Botão</param>
        public EngineButton(Language lang, string file, string name)
        {
            BorderRect   = new Rectangle();
            Position     = new Point();
            Enabled      = true;
            Visible      = true;
            Name         = string.Empty;
            Color        = Color.White;
            SpriteFlags  = SpriteFlags.AlphaBlend;
            Transparency = 255;
            Size2 size;

            string lang_path = "English";

            switch (lang)
            {
            case Language.Japanese:
                lang_path = "Japanese";
                break;

            case Language.English:
                lang_path = "English";
                break;

            case Language.Portuguese:
                lang_path = "Portuguese";
                break;

            case Language.Spanish:
                lang_path = "Spanish";
                break;

            case Language.Korean:
                lang_path = "Korean";
                break;
            }

            Texture[0] = EngineTexture.TextureFromFile(file + @"\Data\Graphics\" + lang_path + @"\" + name + "_inactive.png", out size);
            Texture[1] = EngineTexture.TextureFromFile(file + @"\Data\Graphics\" + lang_path + @"\" + name + "_hover.png", out size);
            Texture[2] = EngineTexture.TextureFromFile(file + @"\Data\Graphics\" + lang_path + @"\" + name + "_active.png", out size);

            Size       = size;
            SourceRect = new Rectangle(0, 0, Size.Width, Size.Height);
        }
Example #16
0
        // Main constructor
        SpriteInstanceData(Vector3 position, Vector2 size, SubImage subImage, SpriteFlags flags)
        {
            if (subImage == null)
            {
                throw new ArgumentNullException(nameof(subImage));
            }
            BuildTransform(position, size, flags, out Matrix4x4 transform);

            Transform1 = new Vector3(transform.M11, transform.M12, transform.M13);
            Transform2 = new Vector3(transform.M21, transform.M22, transform.M23);
            Transform3 = new Vector3(transform.M31, transform.M32, transform.M33);
            Transform4 = new Vector3(transform.M41, transform.M42, transform.M43);
            // Assume right column is always 0,0,0,1

            TexPosition = subImage.TexOffset;
            TexSize     = subImage.TexSize;
            TexLayer    = subImage.Layer;
            Flags       = flags;
        }
Example #17
0
        SpriteInstanceData(Vector3 position, Vector2 size, Vector2 texPosition, Vector2 texSize, uint texLayer, SpriteFlags flags)
        {
            var offset = (flags & SpriteFlags.AlignmentMask) switch
            {
                0 => Vector3.Zero,
                SpriteFlags.MidAligned => new Vector3(0, -0.5f, 0),
                SpriteFlags.BottomAligned => new Vector3(0, -1.0f, 0),
                SpriteFlags.LeftAligned => new Vector3(0.5f, 0, 0),
                SpriteFlags.LeftAligned | SpriteFlags.MidAligned => new Vector3(0.5f, -0.5f, 0),
                SpriteFlags.LeftAligned | SpriteFlags.BottomAligned => new Vector3(0.5f, -1.0f, 0),
                _ => Vector3.Zero
            };

            var transform = Matrix4x4.CreateTranslation(offset);

            if (flags.HasFlag(SpriteFlags.Floor))
            {
                transform *= new Matrix4x4(
                    1, 0, 0, 0,
                    0, 0, -1, 0,
                    0, 1, 0, 0,
                    0, 0, 0, 1);
            }

            transform *= Matrix4x4.CreateScale(new Vector3(size.X, size.Y, size.X));
            transform *= Matrix4x4.CreateTranslation(position);

            Transform1 = new Vector3(transform.M11, transform.M12, transform.M13);
            Transform2 = new Vector3(transform.M21, transform.M22, transform.M23);
            Transform3 = new Vector3(transform.M31, transform.M32, transform.M33);
            Transform4 = new Vector3(transform.M41, transform.M42, transform.M43);
            // Assume right column is always 0,0,0,1

            TexPosition = texPosition;
            TexSize     = texSize;
            TexLayer    = texLayer;
            Flags       = flags;
        }
Example #18
0
 public void Update(int index, Vector3 position, Vector2 size, int regionIndex, SpriteFlags flags)
 => Update(index, position, size, Key.Texture.Regions[regionIndex], flags);
Example #19
0
 public static SpriteFlags SetOpacity(this SpriteFlags flags, float opacity) =>
 (SpriteFlags)(((uint)flags & ~(uint)SpriteFlags.OpacityMask)
               |
               ((uint)(Math.Clamp(opacity, 1 / 255.0f, 1.0f) * 255) << 24));
Example #20
0
        public void AddTexture(string name, SpriteSheet spriteSheet, int frameStart, int frameCount, int varietyStart, int varietyCount, SpriteFlags flags = SpriteFlags.Default)
        {
            Debug.Assert(!spriteCache.ContainsKey(name.CRC32Hash()));

            if ((flags & SpriteFlags.FramesVertical) == SpriteFlags.FramesVertical)
            {
                spriteCache[name.CRC32Hash()] = Sprite.CreateVerticalFramesHorizontalVarieties(spriteSheet, frameStart, frameCount, varietyStart, varietyCount);
            }
            else
            {
                spriteCache[name.CRC32Hash()] = Sprite.CreateHorizontalFramesVerticalVarieties(spriteSheet, frameStart, frameCount, varietyStart, varietyCount);
            }
        }
Example #21
0
 public void Begin(SpriteFlags flags)
 {
     _sprite_resource.Begin(flags);
 }
Example #22
0
 public void BatchDraw(SpriteFlags flags)
 {
     _sprite_resource.Begin(flags);
     lock (this)
     {
         foreach (AGT_SpriteResource t in _texture_list.Values)
         {
             t.DrawRelative(_sprite_resource, Scale, X, Y, 0, Color.White.ToArgb());
         }
     }
     _sprite_resource.End();
 }
Example #23
0
 public void Begin(SpriteFlags flags)
 {
     this.sprite.Begin(flags);
 }
Example #24
0
 public Obj_Sprite(string filename, SpriteFlags flags)
 {
     _filename = filename;
     _flags = flags;
     ClearPosition();
 }
Example #25
0
 public void Begin(SpriteFlags flags) => sprite.Begin(flags);
Example #26
0
 public Sprite(T id, Vector3 position, DrawLayer layer, SpriteKeyFlags keyFlags, SpriteFlags flags)
     : base(TextureFunc, position, layer, keyFlags, flags) =>
Example #27
0
 public static SpriteInstanceData BottomMid(Vector3 position, Vector2 size, SpriteLease lease, int subImage, SpriteFlags flags)
 {
     lease.Key.Texture.GetSubImageDetails(subImage, out _, out var tp, out var ts, out var tl);
     return(BottomMid(position, size, tp, ts, tl, flags));
 }
Example #28
0
 public Obj_Sprite(SpriteFlags flags)
 {
     _filename = string.Empty;
     _flags    = flags;
     ClearPosition();
 }
Example #29
0
 public static SpriteInstanceData TopMid(Vector3 position, Vector2 size, Vector2 texPosition, Vector2 texSize, uint texLayer, SpriteFlags flags) => new SpriteInstanceData(position, size, texPosition, texSize, texLayer, flags);
Example #30
0
 public Obj_Sprite(string filename, SpriteFlags flags)
 {
     _filename = filename;
     _flags    = flags;
     ClearPosition();
 }
Example #31
0
        public void AddTexture(string name, Texture2D texture, int numberOfFrames = 1, int numberOfVarieties = 1, SpriteFlags flags = SpriteFlags.Default)
        {
            SpriteSheet ss;

            if ((flags & SpriteFlags.FramesVertical) == SpriteFlags.FramesVertical)
            {
                ss = new SpriteSheet(texture, numberOfVarieties, numberOfFrames);
            }
            else
            {
                ss = new SpriteSheet(texture, numberOfFrames, numberOfVarieties);
            }
            AddTexture(name, ss, 0, numberOfFrames, 0, numberOfVarieties, flags);
        }
Example #32
0
 public static SpriteInstanceData BottomMid(Vector3 position, Vector2 size, Vector2 texPosition, Vector2 texSize, uint texLayer, SpriteFlags flags) => new SpriteInstanceData(position, size, texPosition, texSize, texLayer, flags | SpriteFlags.BottomAligned);
Example #33
0
 protected Obj_Sprite CreateSprite(string name, SpriteFlags flags)
 {
     int index = Sprites.Count;
     Sprites.Add(name, new Obj_Sprite(SpriteFlags.SortTexture | SpriteFlags.AlphaBlend));
     return Sprites[name];
 }
Example #34
0
 public static SpriteInstanceData MidLeft(Vector3 position, Vector2 size, Vector2 texPosition, Vector2 texSize, uint texLayer, SpriteFlags flags) => new SpriteInstanceData(position, size, texPosition, texSize, texLayer, flags | SpriteFlags.LeftAligned | SpriteFlags.MidAligned);
Example #35
0
 public Obj_Sprite(SpriteFlags flags)
 {
     _filename = string.Empty;
     _flags = flags;
     ClearPosition();
 }