Example #1
0
        public override void Draw(SpriterAnimationPlayer player, SpriterObject obj, SpriteBatch sb)
        {
            Texture2D texture = Loader[obj.@ref];
            Vector2   flip    = new Vector2(obj.Scale.X < 0f ? -1.0f : 1.0f, obj.Scale.Y < 0f ? -1.0f : 1.0f);

            float newPivotX = texture.Width * obj.Pivot.X;
            float newPivotY = texture.Height * (1f - obj.Pivot.Y);

            Point   x           = obj.Position;
            Vector2 playerPos   = new Vector2(player.X, player.Y);
            Vector2 objPosition = new Vector2(x.X, x.Y);


            // normal case scenario
            Vector2 diff = objPosition - playerPos;

            diff.Y = -diff.Y;


            Vector2 origin = new Vector2(newPivotX, newPivotY);

            SpriteEffects effects = SpriteEffects.None;

            bool flipx = flip.X < 0f;
            bool flipy = flip.Y < 0f;

            float rotation = -MathHelper.ToRadians(obj.Angle);

            if (flipx)
            {
                effects  = SpriteEffects.FlipHorizontally;
                origin.X = texture.Width - origin.X;

                diff = playerPos - objPosition;
            }

            // TODO EI TOIMI
            if (flipy)
            {
                effects |= SpriteEffects.FlipVertically;
                origin.Y = texture.Height - origin.Y;
                diff.Y   = Math.Abs(diff.Y);
            }

            Vector2 position = playerPos + Vector2.Multiply(diff, flip);

            sb.Draw(
                texture,
                position,
                null,
                null,
                origin,
                rotation,
                new Vector2(Math.Abs(obj.Scale.X), Math.Abs(obj.Scale.Y)),
                Color.White * obj.Alpha,
                effects,
                0f
                );
        }
Example #2
0
        private void LoadObjectOrBone(ContentReader input, TimelineKey key, Timeline timeline)
        {
            string name = input.ReadString();
            Point  pivot = new Point(input.ReadSingle(), input.ReadSingle());
            Point  scale = new Point(input.ReadSingle(), input.ReadSingle());
            Point  position = new Point(input.ReadSingle(), input.ReadSingle());
            float  angle = input.ReadSingle();
            int    folder = -1, file = -1;
            float  alpha = 1f;

            if (name == "object")
            {
                if (timeline.ObjectInfo.Type == Entity.ObjectType.Sprite)
                {
                    folder = input.ReadInt32();
                    file   = input.ReadInt32();
                    alpha  = input.ReadSingle();


                    File f = data.GetFolder(folder).GetFile(file);
                    // TODO objectilla voi olla kans pivot, pitäs kirjottaa?
                    pivot = new Point(f.Pivot.X, f.Pivot.Y);
                    timeline.ObjectInfo.Size.Set(f.Size);
                }
            }
            SpriterObject obj;

            if (name == "bone")
            {
                obj = new SpriterObject(position, scale, pivot, angle, alpha, new FileReference(folder, file));
            }
            else
            {
                obj = new SpriterObject(position, scale, pivot, angle, alpha, new FileReference(folder, file));
            }
            key.Object = obj;
            timeline.AddKey(key);
        }