예제 #1
0
파일: Sprite.cs 프로젝트: vsafonkin/ualbion
        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;
        }
예제 #2
0
 public SpriteKey(ITexture texture, DrawLayer renderOrder, SpriteKeyFlags flags, Rectangle?scissorRegion = null)
 {
     Texture       = texture;
     RenderOrder   = renderOrder;
     Flags         = flags;
     ScissorRegion = scissorRegion;
 }
예제 #3
0
    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;
    }
예제 #4
0
 public SpriteKey(ITexture texture, DrawLayer renderOrder, SpriteKeyFlags flags)
 {
     Texture     = texture;
     RenderOrder = renderOrder;
     Flags       = flags;
 }
예제 #5
0
파일: Sprite.cs 프로젝트: Metibor/ualbion
 public Sprite(T id, Vector3 position, DrawLayer layer, SpriteKeyFlags keyFlags, SpriteFlags flags)
     : base(TextureFunc, position, layer, keyFlags, flags) =>
예제 #6
0
    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;
            }
        });
    }