// This is just short for GetAnimation(...).CreateInstance(); public static SpriteAnimationInstance CreateAnimationInstance(SpriteAnimationType animType) { SpriteAnimationData anim = GetAnimation(animType); SpriteAnimationInstance result = anim.CreateInstance(); return(result); }
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); } }
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); }
public SpriteAnimation(float interval, SpriteAnimationType type) { m_sprites = new List <Sprite>(); m_interval = interval; m_sequence = 0; m_end = 0; m_type = type; }
public SpriteAnimation(float interval, SpriteAnimationType type) { m_sprites = new List<Sprite>(); m_interval = interval; m_sequence = 0; m_end = 0; m_type = type; }
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); }
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); }
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; }
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; }
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); } } }
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(); }
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(); } }
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; } }
public void PlaySpriteAnimation(float afDelay, SpriteAnimationType aeType, int aiStartFrame, int aiEndFrame) { PlaySpriteAnimation(afDelay, aeType, aiStartFrame, aiEndFrame, null); }
public void PlaySpriteAnimation(float afDelay, SpriteAnimationType aeType) { PlaySpriteAnimation(afDelay, aeType, -1, _spriteNumFrames - 1); }
public void ClearSpriteInfo() { for (int i = 0; i < _spriteNumFrames; ++i) { _spriteTextures[i] = null; } _spriteAnimType = SpriteAnimationType.None; _spriteAnimDelay = 0.0f; _spriteCurrentFrame = 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; }
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); }
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); }
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; }
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; } } } }
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; }