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 ); }
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); }