Assignment 9: Superior Ex  CELlence
1 Level 1:   Scrubbing
2 Level 2:   Add a new animation:   rotation
3 Level 3:   Shapes in Layers
4 Evaluation
5 Grading standards
7.1

Assignment 9: Superior ExCELlence

Due: by Wed 12/12 via a scheduled demo with instructors

There is no self-eval for this assignment, though you will still submit it on the handin server. For evaluation, you will schedule a 10-minute demo with one of the instructional staff. Available time slots will be posted on a Google document with a link on Piazza.

We prefer you complete this assignment with your partner, but if you need to work on it on your own, contact us in advance. We strongly prefer that you present your work together with your partner. If only one of you can attend, you must let us know in advance.

This assignment asks you to implement 3 sets of features for 3 tiers of extra credit. These tiers are mostly independent, i.e. you can choose to attempt any subset of them in any order. Each tier is all-or-none: either it works perfectly or it doesn’t. However there are points in each tier for designing well, in addition to working correctly.

All of these changes are to be made using your own code (from Assignment 7). If you had not finished Assignment 7 functionality at that time, but finished it during Assignment 8, you may use the latter code.

1 Level 1: Scrubbing

Scrubbing usually refers to the ability to manually drag a slider on the UI to make an animation (or music) rapidly move as you drag it (e.g. playing a movie rapidly backwards and forward by dragging the progress slider on YouTube). In this tier you have to add the ability in your editor view to scrub the animation.

Completion of this feature will be evidenced by the following features in your program:

  1. The ability for a user to scrub by dragging a slider (or scrollbar) on the UI.

  2. The ability of your program being able to show the animation as the user scrubs.

  3. Your UI should keep pace with the user, regardless of how rapidly the scrubber is moved around, for files at least as big as the samples we’ve given you.

  4. If the user lets go of the slider, the program may continue playing or have the user explicitly start playing. That is, how this functionality interacts with the existing play/pause/rewind/loop functionality is up to you.

2 Level 2: Add a new animation: rotation

In this tier you will add a new type of animation to shapes: rotation. The rotation must happen about the center of the shape. You may find the Java tutorial on shape transformations useful. Completion of this feature will be evidenced by the following features in your program:

  1. The ability to add a rotate animation in the input file, and changes to the file reader to support such files.

  2. The continued ability to use the file format we gave you: this must be an extension, not a replacement, of the existing file format.

  3. Demonstrate a shape that only rotates.

  4. Demonstrate a shape that simultaneously rotates and changes size, position, and/or color.

  5. The ability to export the animation to an SVG file that includes rotation. You may find this SVG documentation helpful.

NOTE: We do not require you to get rotation and translation to work together simultaneously in your SVG output, though you’re welcome to try! You should still be able to visually animate this combination, though.

3 Level 3: Shapes in Layers

In this tier your program will support an animation that divides the shapes into layers. An animation can be thought of as a stack of see-through layers, with shapes added to each layer.1In fact, these are the cels of classic hand-drawn animation! Layers determine visibility: shapes in the front layer will always hide overlapping shapes in the layers below, irrespective of the order in which they are added to the animation. Shapes within the same layer overlap each other in the usual way: the order in which they were specified in the input.

Completion of this feature will be evidenced by the following features in your program:

  1. The ability of an input file to take in layer information. If no layers are specified, all shapes are assumed to be in the same layer. How the file will specify this is up to you.

  2. The ability of your program being able to successfully parse such an input file.

  3. The continued ability to use the file format we gave you: this must be an extension, not a replacement, of the existing file format.

  4. The ability of your program to render correctly such a layered animation in its editor view.

  5. At least one example of each of the following:

    • an input file with no layering information (any of those provided to you by us earlier),

    • an input file with two non-empty layers such that the shapes in different layers will overlap at some point in the animation,

    • an input file with at least three non-empty layers such that the shapes in different layers will overlap at some point in the animation.

    All these files should successfully work in your program during the demo.

  6. The ability to add new layers, add shapes to a specific layer, delete layers (and all the shapes in them), and to reorder layers. (Editing keyframes should continue to work as before.)

4 Evaluation

You will demo your work to the instructional staff. Please come to your demo slot prepared. You should not have to modify your source code during the demo to demonstrate features (e.g. if you have all three levels working, but you must comment them in or out to demonstrate them, that is not acceptable).

You will explain the architectural changes you made to the instructor or TA who is grading you.

You will submit your code to the handin server before you are scheduled for your demo. Please include a readme file explaining which features you implemented and which files were affected, so the grader can quickly orient themselves when you arrive.

5 Grading standards

This assignment will be graded out of 5 points:

Each of these individual grade items are awarded either fully or not at all. In particular, clean code that is not well tested will not receive those points; likewise well-tested code that is poorly designed will not receive those points. As stated above, to receive credit for a feature, it must work completely. Two half-finished feature levels are worth zero points. Focus your attention on making each part of this assignment work well, rather than spreading yourselves too thin across several incomplete features.

1In fact, these are the cels of classic hand-drawn animation!