Beispiel #1
0
        public override void WriteEndElement()
        {
            states.Pop();

            if (elemName == null)
            {
                return;
            }

            if (thread == null)
            {
                thread = callback.GetThread(StringSlice.Empty);
            }
            long position    = callback.CurrentPosition;
            long endPosition = callback.CurrentEndPosition;

            switch (elemName)
            {
            case "m":
                output = new Content(position, endPosition, thread, dateTime, new StringSlice(GetAndClearContent()), severity);
                break;

            case "f":
                output = new FrameBegin(position, endPosition, thread, dateTime, new StringSlice(GetAndClearContent()));
                break;

            case "ef":
                output = new FrameEnd(position, endPosition, thread, dateTime);
                break;
            }

            elemName = null;
            Reset();
        }
Beispiel #2
0
        public void RenderFrame(object o, ElapsedEventArgs e)
        {
            FrameTimer.Enabled = false;
            FrameStart         = DateTime.Now;

            Graphics g = Buffer.Graphics;

            g.SmoothingMode = SmoothingMode.AntiAlias;

            p.Gui.Draw(g);

            Buffer.Render(Graphics.FromHwnd(p.Handle));

            FrameEnd  = DateTime.Now;
            FrameTime = FrameEnd.Subtract(FrameStart).TotalMilliseconds;

            if (FrameTime < (1000 / FrameLimit))
            {
                FrameTimer.Interval = ((1000 / FrameLimit) - FrameTime);
                FrameTime           = (1000 / FrameLimit);
            }
            else
            {
                FrameTimer.Interval = FrameTime;
            }

            FramesPerSec       = (1000 / FrameTime);
            FrameTimer.Enabled = true;
        }
Beispiel #3
0
 /// <summary>
 /// Duplicates the values from an existing atlas to make a copy that
 /// references only the sprite (all other values copied).
 /// </summary>
 /// <param name="atlas"></param>
 public SpriteAtlas(SpriteAtlas atlas)
 {
     sprite           = atlas.sprite;
     frame            = atlas.frame;
     frames           = atlas.frames;
     frameSpeed       = atlas.frameSpeed;
     frameEndBehavior = atlas.frameEndBehavior;
     frameWidth       = atlas.frameWidth;
     frameHeight      = atlas.frameHeight;
     atlasRows        = atlas.atlasRows;
     atlasCols        = atlas.atlasCols;
     frameOffsetH     = atlas.frameOffsetH;
     frameOffsetV     = atlas.frameOffsetV;
 }
Beispiel #4
0
        /// <summary>Initializes a sprite atlas from another.</summary>
        /// <param name="spriteAtlas">The existing sprite atlas.</param>
        /// <param name="sameFrame">
        /// Whether the frame is copied or set to 0.
        /// </param>
        public SpriteAtlas(SpriteAtlas spriteAtlas, bool sameFrame)
        {
            atlasCols        = spriteAtlas.atlasCols;
            atlasRows        = spriteAtlas.atlasRows;
            frameEndBehavior = spriteAtlas.frameEndBehavior;
            frameHeight      = spriteAtlas.frameHeight;
            frameOffsetH     = spriteAtlas.frameOffsetH;
            frameOffsetV     = spriteAtlas.frameOffsetV;
            frames           = spriteAtlas.frames;
            frameSpeed       = spriteAtlas.frameSpeed;
            frameWidth       = spriteAtlas.frameWidth;
            if (sameFrame)
            {
                frame = spriteAtlas.frame;
            }

            sprite = spriteAtlas.sprite;
            sprite.rectSrc.Width   = frameWidth;
            sprite.rectSrc.Height  = frameHeight;
            sprite.rectDest.Width  = frameWidth * this.sprite.scaleX;
            sprite.rectDest.Height = frameHeight * this.sprite.scaleY;
        }
Beispiel #5
0
 protected virtual void OnFrameEnd(RenderTimer timer)
 {
     FrameEnd?.Invoke(this, new FrameStageEventArgs(timer));
 }
Beispiel #6
0
        /// <summary>
        /// Update the animation.
        /// </summary>
        public void Update(float dt)
        {
            if (IsPaused)
            {
                return;
            }

            if (wantToChangedTag != null)
            {
                ReallySetTag(wantToChangedTag, wantToChangedTagReverseMode);
                wantToChangedTag            = null;
                wantToChangedTagReverseMode = false;
            }

            if (wantToSetFrameIndexFlag)
            {
                SetFrameImmediately(wantToSetFrameIndex);
            }

            if (dt == 0)
            {
                return;
            }

            if (dt < 0)
            {
                throw new Exception($"{nameof(dt)} must be positive");
            }

            if (currentTag == null)
            {
                throw new Exception("not set tag yet");
            }

            string currentExecuteTagName = currentTag.Name;


            // invoke ....
            if (isNeedStartToCallFrameAction)
            {
                FrameBegin?.Invoke(currentExecuteTagName, CurrentFrameIndex);
                isNeedStartToCallFrameAction = false;
            }

            if (currentTag.loopTime)
            {
                var lastFrame = CurrentFrameIndex;
                ElapsedTimeMoveFrame_LoopMode(CurrentFrameIndex, TimeElapsed, dt,
                                              out var beginFrameList, out var endFrameList);

                foreach (var itemIndex in beginFrameList)
                {
                    FrameBegin?.Invoke(currentExecuteTagName, itemIndex);
                }
                foreach (var itemIndex in endFrameList)
                {
                    FrameEnd?.Invoke(currentExecuteTagName, itemIndex);
                }

                if (beginFrameList.Count > 0)
                {
                    CurrentFrameIndex = beginFrameList[beginFrameList.Count - 1];
                }

                // add the remain ....
                TimeElapsed += dt;
            }
            else
            {
                var lastFrameIndex = currentTag.Frames.Count - 1;
                if (CurrentFrameIndex == lastFrameIndex && TimeElapsed > currentTag.Duration)
                {
                    // do nothing ...
                }
                else
                {
                    var curFrame = CurrentFrameIndex;
                    ElapsedTimeMoveFrame_NoLoopMode(CurrentFrameIndex, TimeElapsed, dt,
                                                    out var beginFrameList, out var endFrameList);

                    foreach (var itemIndex in beginFrameList)
                    {
                        FrameBegin?.Invoke(currentExecuteTagName, itemIndex);
                    }
                    foreach (var itemIndex in endFrameList)
                    {
                        FrameEnd?.Invoke(currentExecuteTagName, itemIndex);
                    }

                    // add the remain ....
                    if (beginFrameList.Count > 0)
                    {
                        CurrentFrameIndex = beginFrameList[beginFrameList.Count - 1];
                    }

                    TimeElapsed += dt;
                }
            }
        }
 /// <summary>
 /// Raises the <see cref="FrameEnd"/> event.
 /// </summary>
 protected virtual void OnFrameEnd() =>
 FrameEnd?.Invoke(this);
Beispiel #8
0
 /// <summary>
 /// Sets the behavior of the animation at the end of the frame.
 /// Examples are to continue from the first frame, or reverse animation.
 /// </summary>
 /// <param name="endBehavior">The end behavior (see FrameEnd enum).</param>
 public void SetEndBehavior(FrameEnd endBehavior)
 {
     frameEndBehavior = endBehavior;
 }