示例#1
0
        public void LoadSpriteGroups()
        {
            Loaded = true;

            for (int i = 0; i < 144; i++)
            {
                SpriteGroup sg = new SpriteGroup(romData, spriteRequirementsCollection, i);

                SpriteGroups.Add(sg);
            }
        }
示例#2
0
        public void Write(Stream stream)
        {
            stream.MustWriteAndSeek();

            var header = new Header
            {
                MagicCode  = MagicCodeValidator,
                Unknown04  = Unknown04,
                SpriteDesc = new Section()
                {
                    Count = Sprites.Count
                },
                SpritePartDesc = new Section()
                {
                    Count = SpriteGroups.Sum(x => x.Count)
                },
                SpriteGroupDesc = new Section()
                {
                    Count = SpriteGroups.Count
                },
                AnimationDesc = new Section()
                {
                    Count = AnimationGroups.Sum(x => x.Animations.Count)
                },
                AnimationGroupDesc = new Section()
                {
                    Count = AnimationGroups.Count
                },
            };

            var index        = 0;
            var basePosition = stream.Position;

            stream.Position          = basePosition + MinimumLength;
            header.SpriteDesc.Offset = (int)(stream.Position - basePosition);

            header.SpritePartDesc.Offset = stream.WriteList(Sprites.Select(x => new RawSprite
            {
                Left         = x.Left,
                Top          = x.Top,
                Right        = x.Right,
                Bottom       = x.Bottom,
                UTranslation = x.UTranslation,
                VTranslation = x.VTranslation,
                ColorLeft    = x.ColorLeft,
                ColorTop     = x.ColorTop,
                ColorRight   = x.ColorRight,
                ColorBottom  = x.ColorBottom,
            })) + header.SpriteDesc.Offset;
            header.SpriteGroupDesc.Offset = stream.WriteList(SpriteGroups.SelectMany(x => x)) + header.SpritePartDesc.Offset;

            index = 0;
            foreach (var spriteGroup in SpriteGroups)
            {
                BinaryMapping.WriteObject(stream, new RawSpriteGroup
                {
                    Start = (short)index,
                    Count = (short)spriteGroup.Count
                });

                index += spriteGroup.Count;
            }
            header.AnimationDesc.Offset      = SpriteGroups.Count * 4 + header.SpriteGroupDesc.Offset;
            header.AnimationGroupDesc.Offset = stream.WriteList(AnimationGroups.SelectMany(x => x.Animations)) + header.AnimationDesc.Offset;
            index = 0;
            foreach (var animGroup in AnimationGroups)
            {
                BinaryMapping.WriteObject(stream, new RawAnimationGroup
                {
                    AnimationIndex = (short)index,
                    Count          = (short)animGroup.Animations.Count,
                    DoNotLoop      = animGroup.DoNotLoop,
                    Unknown06      = animGroup.Unknown06,
                    LoopStart      = animGroup.LoopStart,
                    LoopEnd        = animGroup.LoopEnd,
                    Unknown10      = animGroup.LightPositionX,
                    Unknown14      = animGroup.TextPositionY,
                    Unknown18      = animGroup.TextScale,
                    Unknown1C      = animGroup.UiPadding,
                    Unknown20      = animGroup.TextPositionX,
                });

                index += animGroup.Animations.Count;
            }

            var endPosition = stream.Position;

            stream.Position = basePosition;
            BinaryMapping.WriteObject(stream, header);
            stream.Position = endPosition;
        }