예제 #1
0
        // This is just short for GetAnimation(...).CreateInstance();
        public static SpriteAnimationInstance CreateAnimationInstance(SpriteAnimationType animType)
        {
            SpriteAnimationData     anim   = GetAnimation(animType);
            SpriteAnimationInstance result = anim.CreateInstance();

            return(result);
        }
예제 #2
0
        public void Initialize()
        {
            HealthIconAnimation = SpriteAnimationFactory.CreateAnimationInstance(SpriteAnimationType.OwlHealthIcon);

            MoneyBagIconAnimation = SpriteAnimationFactory.CreateAnimationInstance(SpriteAnimationType.Bonbon_Gold);

            CrossAnimation = SpriteAnimationFactory.CreateAnimationInstance(SpriteAnimationType.Cross);

            DigitAnimations = new SpriteAnimationInstance[10];
            for (int digit = 0; digit < DigitAnimations.Length; digit++)
            {
                SpriteAnimationType animType = SpriteAnimationType.Digit0 + digit;
                DigitAnimations[digit] = SpriteAnimationFactory.CreateAnimationInstance(animType);
            }

            KeyRingAnchor.AttachTo(HealthIconAnchor);
            KeyRingAnchor.Position.Y += 64;

            KeyAnimations = new SpriteAnimationInstance[(int)KeyType.COUNT];
            for (int keyIndex = 0; keyIndex < KeyAnimations.Length; keyIndex++)
            {
                SpriteAnimationType animType = SpriteAnimationType.Key_Gold + keyIndex;
                KeyAnimations[keyIndex] = SpriteAnimationFactory.CreateAnimationInstance(animType);
            }
        }
예제 #3
0
        public bool ChangeActiveAnimation(SpriteAnimationType newAnimationType, bool transferState = false)
        {
            Debug.Assert(newAnimationType != SpriteAnimationType.Unknown);
            bool result = false;

            if (newAnimationType != ActiveAnimationType)
            {
                bool hasOldState = false;
                SpriteAnimationState oldState = default(SpriteAnimationState);
                if (ActiveAnimationType != SpriteAnimationType.Unknown)
                {
                    hasOldState = true;
                    oldState    = ActiveAnimation.State;

                    ActiveAnimation.Stop();
                }

                ActiveAnimationType = newAnimationType;

                ActiveAnimation.Play();

                if (hasOldState && transferState)
                {
                    ActiveAnimation.State.CurrentFrameTime  = oldState.CurrentFrameTime;
                    ActiveAnimation.State.CurrentFrameIndex = oldState.CurrentFrameIndex;
                }

                Spatial.LocalAABB = Conversion.ToMeters(ActiveAnimation.CalcAABB());

                result = true;
            }

            return(result);
        }
예제 #4
0
 public SpriteAnimation(float interval, SpriteAnimationType type)
 {
     m_sprites  = new List <Sprite>();
     m_interval = interval;
     m_sequence = 0;
     m_end      = 0;
     m_type     = type;
 }
예제 #5
0
 public SpriteAnimation(float interval, SpriteAnimationType type)
 {
     m_sprites = new List<Sprite>();
     m_interval = interval;
     m_sequence = 0;
     m_end = 0;
     m_type = type;
 }
예제 #6
0
        public SpriteAnimation(float interval, SpriteAnimationType type, SpriteSheet spriteSheet)
        {
            m_sprites = new List<Sprite>();
            m_interval = interval;
            m_sequence = 0;
            m_end = 0;
            m_type = type;

            addSprites(spriteSheet);
        }
예제 #7
0
        public SpriteAnimation(float interval, SpriteAnimationType type, SpriteSheet spriteSheet)
        {
            m_sprites  = new List <Sprite>();
            m_interval = interval;
            m_sequence = 0;
            m_end      = 0;
            m_type     = type;

            addSprites(spriteSheet);
        }
예제 #8
0
 public SpriteAnimation(String name, float duration, SpriteAnimationType type)
 {
     m_name     = (name == null) ? "" : name;
     m_sprites  = new List <Sprite>();
     m_duration = (duration <= 0) ? 1 : duration;
     m_interval = 0;
     m_sequence = 0;
     m_type     = type;
     m_index    = 0;
     m_finished = false;
 }
예제 #9
0
 public AnimatedSprite(int totalFrames, string textureFileName, float fps)
 {
     this.totalFrames = totalFrames;
     this.textureFileName = textureFileName;
     texture = GameClass.LoadTextureData(textureFileName);
     this.frameHeight = texture.Height;
     currentFrame = 0;
     frameWidth = (int)(texture.Width / totalFrames);
     this.fps = fps;
     this.animationType = SpriteAnimationType.Repeating;
     animationDirection = SpriteAnimationDirection.Forward;
 }
예제 #10
0
파일: Owliver.cs 프로젝트: lab132/owlicity
        private void OnAnimationLoopFinished(SpriteAnimationType animType, SpriteAnimationPlaybackState oldPlaybackState, SpriteAnimationPlaybackState newPlaybackState)
        {
            bool isAttackAnimation = _attackAnimations.Contains(animType);

            if (isAttackAnimation)
            {
                if (oldPlaybackState == SpriteAnimationPlaybackState.Playing && newPlaybackState != SpriteAnimationPlaybackState.Playing)
                {
                    OwliverState newState = CurrentState;
                    newState.MovementMode = OwliverMovementMode.Walking;
                    ChangeState(ref newState);
                }
            }
        }
예제 #11
0
        public override void Initialize()
        {
            SpatialData s = BodyComponent.GetWorldSpatialData();

            BodyComponent.Body = BodyFactory.CreateCircle(
                world: Global.Game.World,
                radius: 0.2f,
                density: 0.5f * Global.OwliverDensity,
                position: s.Position);
            BodyComponent.Body.IsSensor     = true;
            BodyComponent.Body.CollidesWith = CollisionCategory.Friendly;

            SpriteAnimationType animType = SpriteAnimationType.Bonbon_Gold + (int)BonbonType;

            Animation.AnimationTypes.Add(animType);

            base.Initialize();
        }
예제 #12
0
파일: Owliver.cs 프로젝트: lab132/owlicity
        public void ChangeState(ref OwliverState newState)
        {
            OwliverState oldState = CurrentState;

            CurrentState = newState;

            OnStateChanged?.Invoke(oldState, newState);

            bool transferAnimationState = oldState.MovementMode == newState.MovementMode &&
                                          oldState.FacingDirection != newState.FacingDirection;

            SpriteAnimationType animType = GetAnimationType(ref newState);

            if (Animation.ChangeActiveAnimation(animType))
            {
                Console.WriteLine();
            }
        }
예제 #13
0
        public AnimationOverlay(string name, SpriteAnimationType animType, SpriteOriginType origin, int width, int height, int frames, int framerateMillisec, int yOffset)
        {
            drawingRect = new Rectangle(0, yOffset, width, height);

            ID             = Guid.NewGuid().ToString();
            Name           = name;
            AnimationType  = animType;
            FrameCount     = frames;
            FrameRateTimer = new MillisecCounter(framerateMillisec);

            //assign origin
            if (origin == SpriteOriginType.Center)
            {
                Origin = new Vector2(drawingRect.Width * 0.5f, drawingRect.Height * 0.5f);
            }
            else
            {
                Origin = Vector2.Zero;
            }
        }
예제 #14
0
 public void PlaySpriteAnimation(float afDelay, SpriteAnimationType aeType, int aiStartFrame, int aiEndFrame)
 {
     PlaySpriteAnimation(afDelay, aeType, aiStartFrame, aiEndFrame, null);
 }
예제 #15
0
 public void PlaySpriteAnimation(float afDelay, SpriteAnimationType aeType)
 {
     PlaySpriteAnimation(afDelay, aeType, -1, _spriteNumFrames - 1);
 }
예제 #16
0
        public void ClearSpriteInfo()
        {
            for (int i = 0; i < _spriteNumFrames; ++i)
            {
                _spriteTextures[i] = null;
            }
            
            _spriteAnimType = SpriteAnimationType.None;
            _spriteAnimDelay = 0.0f;

            _spriteCurrentFrame = 0;
        }
예제 #17
0
 public SpriteAnimationDefinition(string name, float fps, IEnumerable<SpriteAnimFrame> frames, Vector2 origin, SpriteAnimationType animationType)
 {
     Name = name;
     FPS = fps;
     Origin = origin;
     Frames = frames != null ? frames.ToArray() : null;
 }
예제 #18
0
        public static SpriteAnimation parseFrom(StreamReader input, SpriteSheetCollection spriteSheets)
        {
            if (input == null || spriteSheets == null)
            {
                return(null);
            }

            SpriteAnimation animation;
            VariableSystem  animationProperties = new VariableSystem();

            // store all of the animation properties
            String   data;
            Variable property;

            do
            {
                data = input.ReadLine();
                if (data == null)
                {
                    return(null);
                }

                data = data.Trim();
                if (data.Length == 0)
                {
                    continue;
                }

                property = Variable.parseFrom(data);
                if (property == null)
                {
                    return(null);
                }

                animationProperties.add(property);
            } while(animationProperties.size() < 7);

            // parse the animation name
            String animationName = animationProperties.getValue("Animation Name");

            if (animationName == null)
            {
                return(null);
            }

            // parse the animation type
            SpriteAnimationType animationType = parseType(animationProperties.getValue("Animation Type"));

            if (animationType == SpriteAnimationType.Invalid)
            {
                return(null);
            }

            // parse the duration of the animation
            float duration;

            try {
                duration = float.Parse(animationProperties.getValue("Animation Duration"));
            }
            catch (Exception) { return(null); }
            if (duration <= 0)
            {
                return(null);
            }

            // parse the number of frames in the animation
            int numberOfFrames;

            try {
                numberOfFrames = int.Parse(animationProperties.getValue("Number of Frames"));
            }
            catch (Exception) { return(null); }
            if (numberOfFrames <= 0)
            {
                return(null);
            }

            // get the sprite sheet name
            String spriteSheetName = animationProperties.getValue("SpriteSheet Name");

            if (spriteSheetName == null)
            {
                return(null);
            }

            // get the sprite name
            String spriteName = animationProperties.getValue("Sprite Name");

            if (spriteName == null)
            {
                return(null);
            }

            string startIndex  = animationProperties.getValue("Start Index");
            int    iStartIndex = 1;

            if (startIndex != null)
            {
                iStartIndex = int.Parse(startIndex);
            }

            animation = new SpriteAnimation(animationName, duration, animationType);

            // get the sprite sheet which contains the animation
            SpriteSheet spriteSheet = spriteSheets.getSpriteSheet(spriteSheetName);

            if (spriteSheet == null)
            {
                return(null);
            }

            // obtain and add the sprites to the sprite animation
            Sprite sprite;

            for (int i = 0; i < numberOfFrames; i++)
            {
                sprite = spriteSheet.getSprite(spriteName + " " + (i + iStartIndex));
                if (sprite == null)
                {
                    return(null);
                }

                animation.addSprite(sprite);
            }

            return(animation);
        }
예제 #19
0
        public static SpriteAnimationData GetAnimation(SpriteAnimationType animType)
        {
            Debug.Assert(_content != null, "Not initialized.");
            SpriteAnimationData result = _known[(int)animType];

            if (result == null)
            {
                const float owliverHotspotY = 170.0f;

                SpriteAnimationConfig config = SpriteAnimationConfig.Default;

                switch (animType)
                {
                case SpriteAnimationType.Owliver_Idle_Stick_Left:
                {
                    config.TileSheetName = "owliver_idle_front_left_spritesheet";
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(125, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Idle_Stick_Right:
                {
                    config.TileSheetName = "owliver_idle_front_left_spritesheet";
                    config.SpriteEffects = SpriteEffects.FlipHorizontally;
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(129, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Walk_Stick_Left:
                {
                    config.TileSheetName = "owliver_walk_front_left_spritesheet";
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(125, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Walk_Stick_Right:
                {
                    config.TileSheetName = "owliver_walk_front_left_spritesheet";
                    config.SpriteEffects = SpriteEffects.FlipHorizontally;
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(129, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Attack_Stick_Left:
                {
                    config.TileSheetName  = "owliver_attack_spritesheet";
                    config.Scale          = Global.OwliverScale;
                    config.Hotspot        = new Vector2(169, owliverHotspotY);
                    config.TileCount      = 5;
                    config.PingPong       = false;
                    config.NumLoopsToPlay = 1;
                }
                break;

                case SpriteAnimationType.Owliver_Attack_Stick_Right:
                {
                    config.TileSheetName  = "owliver_attack_spritesheet";
                    config.SpriteEffects  = SpriteEffects.FlipHorizontally;
                    config.Scale          = Global.OwliverScale;
                    config.Hotspot        = new Vector2(86, owliverHotspotY);
                    config.TileCount      = 5;
                    config.PingPong       = false;
                    config.NumLoopsToPlay = 1;
                }
                break;

                case SpriteAnimationType.Owliver_Idle_FishingRod_Left:
                {
                    config.TileSheetName = "owliver_idle_fishingrod_spritesheet";
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(125, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Idle_FishingRod_Right:
                {
                    config.TileSheetName = "owliver_idle_fishingrod_spritesheet";
                    config.SpriteEffects = SpriteEffects.FlipHorizontally;
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(129, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Walk_FishingRod_Left:
                {
                    config.TileSheetName = "owliver_walk_fishingrod_spritesheet";
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(125, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Walk_FishingRod_Right:
                {
                    config.TileSheetName = "owliver_walk_fishingrod_spritesheet";
                    config.SpriteEffects = SpriteEffects.FlipHorizontally;
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(129, owliverHotspotY);
                }
                break;

                case SpriteAnimationType.Owliver_Attack_FishingRod_Left:
                {
                    config.TileSheetName  = "owliver_attack_fishingrod_spritesheet";
                    config.Scale          = Global.OwliverScale;
                    config.Hotspot        = new Vector2(169, owliverHotspotY);
                    config.TileCount      = 5;
                    config.PingPong       = false;
                    config.NumLoopsToPlay = 1;
                }
                break;

                case SpriteAnimationType.Owliver_Attack_FishingRod_Right:
                {
                    config.TileSheetName  = "owliver_attack_fishingrod_spritesheet";
                    config.SpriteEffects  = SpriteEffects.FlipHorizontally;
                    config.Scale          = Global.OwliverScale;
                    config.Hotspot        = new Vector2(86, owliverHotspotY);
                    config.TileCount      = 5;
                    config.PingPong       = false;
                    config.NumLoopsToPlay = 1;
                }
                break;

                case SpriteAnimationType.Slurp_Idle_Left:
                {
                    config.TileSheetName = "slurp_spritesheet";
                    config.TileCount     = 7;
                    config.TileDim       = new Point(210, 270);
                    config.Hotspot       = 0.5f * config.TileDim.ToVector2();
                    config.Scale         = Global.SlurpScale;
                }
                break;

                case SpriteAnimationType.Slurp_Idle_Right:
                {
                    config.SpriteEffects = SpriteEffects.FlipHorizontally;
                }
                    goto case SpriteAnimationType.Slurp_Idle_Left;

                case SpriteAnimationType.Singer_Idle_Left:
                {
                    // TODO(manu)
                    config.TileSheetName  = "slurp_spritesheet";
                    config.TileCount      = 7;
                    config.TileDim        = new Point(210, 270);
                    config.Hotspot        = 0.5f * config.TileDim.ToVector2();
                    config.Scale          = Global.SingerScale;
                    config.SpriteEffects |= SpriteEffects.FlipVertically;
                }
                break;

                case SpriteAnimationType.Singer_Idle_Right:
                {
                    config.SpriteEffects |= SpriteEffects.FlipHorizontally;
                }
                    goto case SpriteAnimationType.Singer_Idle_Left;

                case SpriteAnimationType.Shopkeeper_Idle_Front:
                {
                    config.TileSheetName = "shopkeeper_spritesheet";
                    config.Scale         = Global.OwliverScale;
                    config.Hotspot       = new Vector2(137, 236);
                }
                break;

                case SpriteAnimationType.Shop:
                {
                    config.TileSheetName = "shop_spritesheet";
                    config.TileDim       = new Point(512);
                    config.Hotspot       = new Vector2(261, 415);
                }
                break;

                case SpriteAnimationType.PriceTag_20:
                {
                    config.TileSheetName = "pricetag_20_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = new Vector2(61, 100);
                }
                break;

                case SpriteAnimationType.PriceTag_100:
                {
                    config.TileSheetName = "pricetag_100_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = new Vector2(61, 100);
                }
                break;

                case SpriteAnimationType.Gate_Closed:
                {
                    config.TileSheetName = "gate_spritesheet";
                    config.TileDim       = new Point(1024);
                    config.Hotspot       = new Vector2(560);
                }
                break;

                case SpriteAnimationType.Gate_Open:
                {
                    config.TileSheetName = "gate_open_spritesheet";
                    config.TileDim       = new Point(1024);
                    config.Hotspot       = new Vector2(560);
                }
                break;

                case SpriteAnimationType.Tankton_Idle_Left:
                {
                    config.SpriteEffects = SpriteEffects.FlipHorizontally;
                }
                    goto case SpriteAnimationType.Tankton_Idle_Right;

                case SpriteAnimationType.Tankton_Idle_Right:
                {
                    config.TileSheetName    = "boss_spritesheet";
                    config.TileDim          = new Point(512);
                    config.Hotspot          = new Vector2(256, 450);
                    config.Scale            = Global.TanktonScale;
                    config.PingPong         = false;
                    config.SecondsPerFrame *= 2;
                }
                break;

                case SpriteAnimationType.Fir_Idle:
                {
                    config.TileSheetName = "fir_spritesheet";
                    config.Hotspot       = new Vector2(136, 235);
                }
                break;

                case SpriteAnimationType.FirAlt_Idle:
                {
                    config.TileSheetName = "fir_spritesheet";
                    config.Hotspot       = new Vector2(128, 17);
                }
                break;

                case SpriteAnimationType.Conifer_Idle:
                {
                    config.TileSheetName = "conifer_spritesheet";
                    config.Hotspot       = new Vector2(134, 233);
                }
                break;

                case SpriteAnimationType.ConiferAlt_Idle:
                {
                    config.TileSheetName = "conifer_spritesheet";
                    config.Hotspot       = new Vector2(135, 18);
                }
                break;

                case SpriteAnimationType.Oak_Idle:
                {
                    config.TileSheetName = "oak_spritesheet";
                    config.Hotspot       = new Vector2(126, 224);
                }
                break;

                case SpriteAnimationType.Orange_Idle:
                {
                    config.TileSheetName = "orange_spritesheet";
                    config.Hotspot       = new Vector2(127, 227);
                }
                break;

                case SpriteAnimationType.Bush_Idle:
                {
                    config.TileSheetName = "bush_spritesheet";
                    config.Hotspot       = new Vector2(130, 212);
                }
                break;

                case SpriteAnimationType.Key_Gold:
                {
                    config.TileSheetName = "key_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = 0.5f * config.TileDim.ToVector2();
                    config.Scale         = new Vector2(0.5f);
                }
                break;

                case SpriteAnimationType.Bonbon_Gold:
                {
                    config.TileSheetName = "bonbon_gold";
                    config.TileDim       = new Point(64);
                    config.Hotspot       = new Vector2(32);
                }
                break;

                case SpriteAnimationType.Bonbon_Red:
                {
                    config.TileSheetName = "bonbon_red";
                    config.TileDim       = new Point(64);
                    config.Hotspot       = new Vector2(32);
                }
                break;

                case SpriteAnimationType.FruitBowl:
                {
                    config.TileSheetName = "fruitbowl_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = new Vector2(62, 82);
                }
                break;

                case SpriteAnimationType.Stick_Left:
                {
                    config.TileSheetName = "stick_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = new Vector2(94, 92);
                }
                break;

                case SpriteAnimationType.FishingRod_Left:
                {
                    config.TileSheetName = "fishingrod_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = new Vector2(106, 104);
                }
                break;

                case SpriteAnimationType.Cross:
                {
                    config.TileSheetName = "cross";
                    config.TileDim       = new Point(64);
                    config.Hotspot       = new Vector2(32);
                    config.Scale         = new Vector2(0.5f);
                }
                break;

                case SpriteAnimationType.Digit0:
                case SpriteAnimationType.Digit1:
                case SpriteAnimationType.Digit2:
                case SpriteAnimationType.Digit3:
                case SpriteAnimationType.Digit4:
                case SpriteAnimationType.Digit5:
                case SpriteAnimationType.Digit6:
                case SpriteAnimationType.Digit7:
                case SpriteAnimationType.Digit8:
                case SpriteAnimationType.Digit9:
                {
                    int digit = animType - SpriteAnimationType.Digit0;
                    config.TileSheetName = $"digits/{digit}";
                    config.TileDim       = new Point(64);
                    config.Hotspot       = new Vector2(32);

                    config.Scale = new Vector2(0.5f);
                    // TODO(manu): Remove this once we have all digits.
                    if (digit > 2)
                    {
                        config.TileSheetName = $"cross";
                    }
                }
                break;

                case SpriteAnimationType.OwlHealthIcon:
                {
                    config.TileSheetName = "health_icon_spritesheet";
                    config.TileDim       = new Point(128);
                    config.Hotspot       = 0.5f * config.TileDim.ToVector2();
                    config.Scale         = new Vector2(0.5f);
                }
                break;

                default: throw new ArgumentException("Unknown sprite animation type.");
                }

                if (config.TileSheetName != null)
                {
                    result = CreateAnimation(ref config);
                    _known[(int)animType] = result;
                }
            }

            return(result);
        }
예제 #20
0
        public void PlaySpriteAnimation(float afDelay, SpriteAnimationType aeType, int aiStartFrame, int aiEndFrame, string asAnimName)
        {
            aiStartFrame = MathUtil.Clamp(aiStartFrame, 0, _spriteNumFrames - 1);
            aiEndFrame = MathUtil.Clamp(aiEndFrame, 0, _spriteNumFrames - 1);

            _spriteAnimDirection = aiStartFrame > aiEndFrame ? -1 : 1;

            _spriteCurrentFrameDelay = _spriteAnimDelay = afDelay;
            _spriteAnimType = aeType;
            SpriteAnimStartFrame = _spriteCurrentFrame = aiStartFrame;
            SpriteAnimEndFrame = aiEndFrame;

            if (asAnimName != null)
                _currentAnimName = asAnimName;
        }
예제 #21
0
        public void UpdateSpriteAnimation(GameTime aTime)
        {
            float dt = (float)aTime.ElapsedGameTime.TotalSeconds;

            if (_spriteAnimDelay > 0.0f)
            {
                _spriteCurrentFrameDelay -= dt;

                if (_spriteCurrentFrameDelay < 0.0f)
                {
                    while (_spriteCurrentFrameDelay < 0.0f)
                    {
                        switch(_spriteAnimType)
                        {
                            case SpriteAnimationType.Loop:
                                if (_spriteCurrentFrame == SpriteAnimEndFrame)
                                    _spriteCurrentFrame = SpriteAnimStartFrame;
                                else
                                    ++_spriteCurrentFrame;
                                break;
                            case SpriteAnimationType.PingPong:
                                if (_spriteAnimDirection == 1)
                                {
                                    if (_spriteCurrentFrame == SpriteAnimEndFrame)
                                    {
                                        _spriteAnimDirection = -1;
                                        _spriteCurrentFrame = SpriteAnimEndFrame - 1;
                                    }
                                    else
                                        ++_spriteCurrentFrame;

                                }
                                else
                                {
                                    if (_spriteCurrentFrame == SpriteAnimStartFrame)
                                    {
                                        _spriteAnimDirection = 1;
                                        _spriteCurrentFrame = SpriteAnimStartFrame + 1;
                                    }
                                    else
                                    {
                                        --_spriteCurrentFrame;
                                    }
                                }
                                break;
                            case SpriteAnimationType.OneShot:
                                // If we're done with our one shot and they set an animName, let them know it's done.
                                if (_spriteCurrentFrame == SpriteAnimEndFrame)
                                {
                                    // Needs to get called before callback, in case they start a new animation.
                                    _spriteAnimType = SpriteAnimationType.None;

                                    if (_currentAnimName != null && _currentAnimName.Length > 0)
                                    {
                                        AnimCallback(_currentAnimName);
                                    }
                                }
                                else
                                {
                                    _spriteCurrentFrame += _spriteAnimDirection;
                                }
                                break;
                        }

                        _spriteCurrentFrameDelay += _spriteAnimDelay;
                    }
                }
            }
        }
예제 #22
0
 public SpriteAnimationDefinition(string name, float fps, IEnumerable <SpriteAnimFrame> frames, Vector2 origin, SpriteAnimationType animationType)
 {
     Name   = name;
     FPS    = fps;
     Origin = origin;
     Frames = frames != null?frames.ToArray() : null;
 }