Пример #1
0
        public static SpriteAnimationData CreateAnimation(Texture2D atlas, ref SpriteAnimationConfig config)
        {
            SpriteAnimationData result = null;

            if (config.TileCount > 0 || config.TileDim.X > 0 || config.TileDim.Y > 0)
            {
                result = new SpriteAnimationData()
                {
                    Config = config
                };
                result.Frames.Capacity = config.TileCount;
                int numCols = atlas.Width / config.TileDim.X;
                int numRows = atlas.Height / config.TileDim.Y;
                result.TileSheet = atlas;
                int spriteIndex = 0;
                for (int row = 0; row < numRows; row++)
                {
                    for (int col = 0; col < numCols; col++, spriteIndex++)
                    {
                        if (spriteIndex >= config.TileCount)
                        {
                            goto DONE_LABEL;
                        }

                        SpriteAnimationFrame frame = new SpriteAnimationFrame
                        {
                            Offset = new Point(col, row) * config.TileDim
                        };
                        result.Frames.Add(frame);
                    }
                }

                DONE_LABEL :;
            }

            return(result);
        }
Пример #2
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);
        }
Пример #3
0
        public static SpriteAnimationData CreateAnimation(ref SpriteAnimationConfig config)
        {
            Texture2D atlas = _content.Load <Texture2D>(config.TileSheetName);

            return(CreateAnimation(atlas, ref config));
        }
Пример #4
0
 public static SpriteAnimationData CreateAnimation(SpriteAnimationConfig config)
 {
     return(CreateAnimation(ref config));
 }