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 SpriteKey(ITexture texture, DrawLayer renderOrder, SpriteKeyFlags flags, Rectangle?scissorRegion = null) { Texture = texture; RenderOrder = renderOrder; Flags = flags; ScissorRegion = scissorRegion; }
public SpriteKey(ITexture texture, SpriteSampler sampler, DrawLayer renderOrder, SpriteKeyFlags flags, Rectangle?scissorRegion = null) { Texture = texture ?? throw new ArgumentNullException(nameof(texture)); Sampler = sampler; RenderOrder = renderOrder; Flags = (flags & ~(SpriteKeyFlags.UseArrayTexture | SpriteKeyFlags.UsePalette)) | (texture.ArrayLayers > 1 ? SpriteKeyFlags.UseArrayTexture : 0) | (texture is IReadOnlyTexture <byte>?SpriteKeyFlags.UsePalette : 0); ScissorRegion = scissorRegion; }
public SpriteKey(ITexture texture, DrawLayer renderOrder, SpriteKeyFlags flags) { Texture = texture; RenderOrder = renderOrder; Flags = flags; }
public Sprite(T id, Vector3 position, DrawLayer layer, SpriteKeyFlags keyFlags, SpriteFlags flags) : base(TextureFunc, position, layer, keyFlags, flags) =>
public MapObject(SpriteId id, Vector3 initialPosition, Vector2 size, bool onFloor, bool backAndForth, SpriteKeyFlags keyFlags = 0) { _sprite = AttachChild(new MapSprite( id, DrawLayer.Underlay, keyFlags, SpriteFlags.FlipVertical | (onFloor ? SpriteFlags.Floor | SpriteFlags.MidAligned : SpriteFlags.Billboard)) { Size = size, Position = initialPosition, SelectionCallback = registerHit => { registerHit(this); return(false); } }); On <SlowClockEvent>(e => { if (_sprite.FrameCount == 1) { Exchange.Unsubscribe <SlowClockEvent>(this); } _frame += e.Delta; if (backAndForth && _sprite.FrameCount > 2) { int maxFrame = _sprite.FrameCount - 1; int frame = _frame % (2 * maxFrame) - maxFrame; _sprite.Frame = Math.Abs(frame); } else { _sprite.Frame = _frame; } }); }