Commit Graph

334 Commits

Author SHA1 Message Date
CrushedPixel
de07811229 Created GuiReplayInstanceChooser which allows users to define whether they want to load their modified version of an online replay or load the original 2015-07-16 16:21:05 +02:00
CrushedPixel
5b78f82116 In GuiAssetManager, directly modify the ReplayHandler's Asset Repository instance, as ReplayImage#loadFromStream uses this instance to determine whether it has to notify Custom Image Objects about an image change 2015-07-16 13:37:15 +02:00
CrushedPixel
d45fcb8a34 Only register changes in ReplayFileAppender if something changed - this applies to GuiKeyframeRepository, GuiObjectManager, GuiPlayerOverview, GuiAssetManager
Added equals method to ReplayImageAsset which is based on the BufferedImage's hash code (which is calculated only once)
2015-07-16 13:37:15 +02:00
CrushedPixel
7790aee3cb Replaced lossless encoding with high quality ( -qp 1 instead of -qp 0 ) because (quote ffmpeg.org): Most non-FFmpeg based players will not be able to decode lossless (but YouTube can), so if compatibility is an issue you should not use lossless. 2015-07-15 23:59:23 +02:00
CrushedPixel
57100735a4 Filed GuiFileChooser opening an "Open" dialog when a "Save" dialog should be opened 2015-07-15 23:57:58 +02:00
CrushedPixel
5816ff1f80 Fix GuiAdvancedButton drawing a Tooltip if the Hover Text String is empty 2015-07-15 23:57:30 +02:00
CrushedPixel
936f242b4c Added Encoding Presets to GuiRenderSettings and removed Checkbox for Custom Resolution 2015-07-15 16:50:58 +02:00
johni0702
7ee5f86b4e Prevent rendering with invalid resolution 2015-07-15 15:43:01 +02:00
johni0702
7fd429e25f Rework rendering pipeline to make better use of multithreading
Move OpenGL frame to ARGB conversion to processing threads
Move video exporting to processing threads
Skip creation of BufferedImage and instead use ByteBuffer with ARGB content directly
2015-07-15 14:23:43 +02:00
CrushedPixel
3a2c35cb22 Added Api Call checking if the Mod has the latest version and Message in Main Menu if not up-to-date
Removed unused GuiConstants Fields
2015-07-15 14:08:28 +02:00
CrushedPixel
1aa2c8e02b Made Keyframes in GuiObjectManager draggable 2015-07-15 12:24:38 +02:00
CrushedPixel
62073d6351 In the GuiObjectManager, Keyframes can be deleted using the DELETE Key on the Keyboard 2015-07-15 12:20:24 +02:00
CrushedPixel
d057553223 Added "inclusive" parameter to getPreviousKeyframe() and getNextKeyframe() in KeyframeList to define whether the next/previous keyframe may have the same timestamp as the realTime parameter
Fixed a bug in KeyframeList#getPositionOnPath where a non-inclusive getPreviousKeyframe call resulted in an incorrect position value
2015-07-14 13:48:48 +02:00
CrushedPixel
af305b4063 Play Camera Path button graphically didn't turn into pause button while playing 2015-07-14 12:08:07 +02:00
CrushedPixel
534007b9c8 Executes JFileChooser activities in Swing Thread
If Minecraft is fullscreen, exit fullscreen when using GuiFileChooser
2015-07-14 02:07:24 +02:00
CrushedPixel
654c2200d5 Replaced AWT FileDialog with Swing JFileChooser in GuiFileChooser 2015-07-14 01:36:00 +02:00
CrushedPixel
0d7065d45d Disabled remove button in GuiAssetManager if no element is selected in List 2015-07-14 01:01:35 +02:00
CrushedPixel
9cf3f426aa Renamed setEnabled() method in GuiElementInterface to setElementEnabled() to workaround this Forge Bug: http://www.minecraftforge.net/forum/index.php/topic,32063 2015-07-14 00:25:17 +02:00
CrushedPixel
0f024a9de9 Cleaned up ReplayHandler by unifying selectedKeyframe and selectedMarkerKeyframe into selectedKeyframe, thus only being able to select one Keyframe at once 2015-07-13 22:08:41 +02:00
CrushedPixel
a7590ce384 Rendering: Deletes destination File if it already exists to prevent ffmpeg from crashing | https://trello.com/c/Ozlp5Sts/ 2015-07-13 21:07:29 +02:00
CrushedPixel
3f12019288 Created CameraPathValidator to validate Camera Paths before playing them and uses its static validateCameraPath() method whenever a Camera Path is to be started
Camera Paths can't start if negative movement through time would be required
2015-07-13 15:47:57 +02:00
CrushedPixel
9d2c371398 GuiKeyframeTimeline now draws a red stroke between two time Keyframes if the second has a smaller timestamp value than the first | https://trello.com/c/a4xZs085/ 2015-07-13 15:26:20 +02:00
CrushedPixel
3eca70fea4 Fixed blue stroke on GuiKeyframeTimeline possibly exceeding the Timeline's bounds | https://trello.com/c/IfTtmwso/ 2015-07-13 15:18:32 +02:00
CrushedPixel
ff5481822a Added support for Time Keyframes in GuiEditKeyframe | https://trello.com/c/h33v5cSQ/ 2015-07-13 15:11:13 +02:00
johni0702
35bc9f7fae Remove preferred size and default button size
Replace alignment data in horizontal and vertical layout with double value
Add convenient size(GuiElement, ReadableDimension) method to custom layout
2015-07-13 08:11:15 +02:00
CrushedPixel
39558701bf Reworked GuiEditKeyframe to use ComposedElements
Made GuiArrowButton a subclass of GuiAdvancedButton
Added consistency to ReplayHandler by renaming getMarkers() to getMarkerKeyframes() and removing redundant methods which can be accessed via KeyframeList class
2015-07-13 02:03:19 +02:00
CrushedPixel
66c595eb04 Marker Keyframes are now being saved in a KeyframeList in the ReplayHandler
Made MarkerKeyframes names editable in GuiEditKeyframe
Shows "Unnamed Marker" if Marker name is empty
2015-07-13 01:21:48 +02:00
CrushedPixel
f55f169d01 Removed MarkerKeyframe and replaced it with generic type of Keyframe using the new Marker POJO 2015-07-13 00:17:29 +02:00
CrushedPixel
b0429fcf44 Fixed NPE in GuiFileChooser if selected file is null 2015-07-12 22:23:33 +02:00
CrushedPixel
ac3474f2bc The output file can now be specified in GuiRenderSettings 2015-07-12 22:13:18 +02:00
CrushedPixel
ac79eef077 Added support for Save File Dialogs to GuiFileChooser 2015-07-12 22:12:51 +02:00
CrushedPixel
34e3e3c407 Sets a new CustomImageObject's default position to the player's position 2015-07-12 21:08:06 +02:00
CrushedPixel
e9a73cb028 use List interface instead of ArrayList implementation in several places 2015-07-12 20:55:13 +02:00
CrushedPixel
45f64faa77 Created CustomObjectRepository which can be serialized by Gson, storing all CustomImageObjects created
CustomObjectRepository is now being saved to and loaded from the ReplayFile
The CustomObjectRenderer uses the GuiObjectManager's timeline cursor position as interpolation timestamp for the CustomImageObjects which are drawn if a GuiObjectManager is open (instant preview)
KeyframeList's add() method now removes Keyframes with the same timestamp before adding the new Keyframe
Transformations class now holds default values to prevent NullPointerExceptions in methods calling getTransformationForTimestamp()
Added Javadoc to Transformation POJO
Created NumberValueChangeListener which can be applied to GuiNumberInput objects
Made step size customizable in GuiDraggingNumberInput
Changing a ReplayImageAssets image now notifies the CustomImageObjects linked to that asset
Modified RoundUtils to provide a round() method which uses the DecimalFormat class instead of Math.round which is unstable
2015-07-12 16:21:11 +02:00
CrushedPixel
28f7d77800 GuiObjectManager now allows users to set Keyframes for Transformations
Fixed a bug in KeyframeList#getClosestKeyframeForTimestamp that made it only work with AdvancedPosition Keyframes
2015-07-11 14:26:43 +02:00
CrushedPixel
a218c13b44 GuiElement interface's mouseClick method returns a boolean which is handled by ComposedElement to prevent mouse clicks on multiple elements at once
ComposedElement's entries are sorted so that GuiDropdown are always drawn on top
Modified thrown UnsupportedOperationExceptions in CustomImageObject to not be thrown if asset is null
2015-07-10 14:26:51 +02:00
CrushedPixel
ef39c7466d Renamed the commonly used Position POJO into AdvancedPosition, as it also hold pitch, yaw and roll
Made GuiDropdown only accept instances of GuiEntryListEntry to avoid unneccessary toString() methods returning the name
Added GuiEntryListValueEntry which holds a Value and a Name to be displayed
Continued work on GuiObjectManager
2015-07-10 04:27:15 +02:00
CrushedPixel
30ebfe96bd Allowed GuiTimeline instances to have any height (instead of fixed 22px height) and updated draw() method accordingly
Added HSV noise to GuiTimeline's textures to somewhat hide the repeating body texture
Implemented GuiTimeline in GuiObjectManager's GuiObjectKeyframeTimeline
Added asInt() method to TimestampValue, to avoid int casts of value field
2015-07-10 03:37:13 +02:00
CrushedPixel
5828b04596 "The Commit that properly implements the disabling of Gui Elements"
Added enabled Field to DelegatingElement, which every instance can handle itself
Made isEnabled Field in GuiAdvancedTextField protected for subclasses to access
Made GuiDraggingNumberInput only draggable while enabled
Made GuiDropdown check enabled field before accepting mouse clicks
Properly tints GuiTexturedButton if disabled
2015-07-10 03:37:13 +02:00
johni0702
59e6b87935 Use new Gui API for GuiReplayDownloading 2015-07-09 18:30:31 +02:00
johni0702
d4e04feaeb Use new Gui API for GuiLoginPrompt and GuiRegister 2015-07-09 18:24:15 +02:00
CrushedPixel
4ebf6c5b21 GuiKeyframeRepository always loads the Presets from its current Data set (to respect removed/newly added presets) 2015-07-09 16:41:13 +02:00
CrushedPixel
16b74d9824 Included Path Interpolation methods in KeyframeList and uses it in PathPreviewRenderer
Created newInstance() method in KeyframeValue interface
2015-07-08 23:55:48 +02:00
CrushedPixel
2d19b17626 Finished Layout of GuiObjectManager 2015-07-08 16:54:14 +02:00
CrushedPixel
80a47a61c8 Made GuiDropdown a subclass of GuiAdvancedTextfield, updating the Constructor and removing the now redundant GuiConstants entries 2015-07-08 15:50:12 +02:00
CrushedPixel
e26e09a264 Made GuiDraggingNumberInput fully functional
Linked GuiObjectManager to new Keybinding
Renamed RoundUtils#round to RoundUtils#round2Decimals for easier understanding
2015-07-08 12:13:23 +02:00
CrushedPixel
54f35eca03 Made GuiNumberInput a subclass of GuiAdvancedTextField and removed unneccessary IDs from Constructor and GuiConstants 2015-07-08 11:54:47 +02:00
CrushedPixel
901b175efe Created GuiMarkerTimeline to display Markers again
Created helper methods in ReplayHandler to provide information about MarkerKeyframes
2015-07-08 04:46:44 +02:00
CrushedPixel
5100b63964 Warning, GIGANTIC COMMIT!
Replaced Keyframe subclasses with Generic Types of Keyframe and replaced all instanceof calls
Replaced implementations of Linear and Spline interpolation to interpolate any Object that extends KeyframeValue and contains at least one public double Field. I'll need this for Keyframe interpolation in CustomImageObject Transformations
Made MarkerKeyframe *no* subclass of Keyframe to avoid conflicts with PositionKeyframe in instanceof checks for Keyframe#getValue
Created KeyframeList which extends ArrayList to provide some helping functions which DRY up the ReplayHandler
Split up ReplayHandler's keyframeList into timeKeyframeList and positionKeyframeList
2015-07-08 04:13:24 +02:00
CrushedPixel
89cc6938f8 Reworked AssetRepository to link every Asset to a UUID
UUIDs are now being stored in the Replay File and loaded
2015-07-07 20:14:40 +02:00