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); }
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]); }
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; }
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); }
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); }
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; }
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; }
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(); }
/// <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; }
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; }
// 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; }
/// <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); }
// 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; }
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; }
public void Update(int index, Vector3 position, Vector2 size, int regionIndex, SpriteFlags flags) => Update(index, position, size, Key.Texture.Regions[regionIndex], flags);
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));
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); } }
public void Begin(SpriteFlags flags) { _sprite_resource.Begin(flags); }
public void Begin(SpriteFlags flags) { this.sprite.Begin(flags); }
public Obj_Sprite(string filename, SpriteFlags flags) { _filename = filename; _flags = flags; ClearPosition(); }
public void Begin(SpriteFlags flags) => sprite.Begin(flags);
public Sprite(T id, Vector3 position, DrawLayer layer, SpriteKeyFlags keyFlags, SpriteFlags flags) : base(TextureFunc, position, layer, keyFlags, flags) =>
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)); }
public Obj_Sprite(SpriteFlags flags) { _filename = string.Empty; _flags = flags; ClearPosition(); }
public static SpriteInstanceData TopMid(Vector3 position, Vector2 size, Vector2 texPosition, Vector2 texSize, uint texLayer, SpriteFlags flags) => new SpriteInstanceData(position, size, texPosition, texSize, texLayer, flags);
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); }
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);
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]; }
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);