Releases: IsmAvatar/LateralGM
Releases · IsmAvatar/LateralGM
1.8.189
Secondary Property Link Factory Ownership This addresses the disposal of the remaining secondary property link factories by redefining the exception listener given to the factory to also double as having an "ownership" concept over the factory. That allows the base resource frame class to mass dispose of all primary and secondary property links created by factories it has ownership of. It does so through a static API now provided by the factory class which keeps track of the owned factories using a WeakHashMap. We have to remove property links when the frames close for the same reasons we have to stop sound and sprite playback because garbage collection is never guaranteed to run and you can not rely on it for cleanup. This solution was chosen because it's the cleanest and required the least changes to the existing API and classes. This should hopefully resolve all remaining cyclical exceptions related to lapsed property links.
1.8.188
Sprite Frame Close Animation Stop The preview playback timer is now stopped when closing the sprite frame. This prevents it from continuing to utilize CPU after the frame is closed and before it is garbage collected. Extracted a helper method to stop the animation during the frame dispose. The playback stop was not put in the existing cleanup method, like the sound frame, because then adding subimages would stop the animation. GM continues to play the preview while you add more subimages.
1.8.187
Sprite Frame Close External Editor Concurrent Modification Fix Changes the cleanup loop which stops all of the external subimage editors to remove the editors using an iterator first. This gets rid of the concurrent modification exception when you have edited more than one subimage at the time you save or close the frame. I chose to do it this way because I didn't want to copy the entire collection. Later the editors map could possibly be changed to a WeakHashMap which would automatically remove the keys when the editors are no longer reachable and eligible for garbage collection. It could also be changed to a ConcurrentMap which would make it thread safe too.
1.8.186
Spritesheet Deep Copy Splicing Changes the spritesheet dialog splicing to create deep copies of the subimages so the original (usually much larger) spritesheet image is not retained and becomes eligible for garbage collection. The technique used was benchmarked to be quite fast using source composition which is basically the same as a bitblt. This fixes the out of bounds errors in the dialog because the subimage rectangle is intersected by the graphics clip. The behavior is now the same as GM except for subimage rectangles that lay on the edge or outside the spritesheet which will not contain parts of the previous subimage (arguably a bug in GM). Later if the editor were changed to use texture paging this would be needed anyway to copy directly into the texture.
1.8.184
Fix PropertyLink Regression Fixes a small oopsie from f0a0da7bd310cc87d9398b599774b7e723666057 I had made the map change method that I originally added to PropertyLink call the virtual remove which the subclass property links override. The subclasses remove the action listener in addition to removing the map listener super behavior. This effectively caused the control to be completely unlinked when changing maps, which was not intended, and the reason game settings wasn't detecting/saving changes. I now made a map change remove only the correct map listener which fixes everything. So stiell's original typo in PropertyLink.remove is still fixed and map changing works correctly again. Also added comments for clarification so this doesn't break in the future.
1.8.183
Vacuum Shader Editor * Use token marker cache for efficiency. * Add missing localization tags. * Remove precompile checkbox but leave in the model. * ENIGMA plugin may still be depending on precompile in the model. * Precompile was never supported by GMSv1.4 at all. * Move shader type combo after name like GMSv1.4 for consistency.
1.8.182
Tune Instance/Tile Default Name Put the default name in the map before installing the update listeners. Obviously this is more consistent because none of the default properties in the map should fire when initializing to the default value.
1.8.181
Fix BinPlane Integer Deprecation Warning The Integer.valueOf method can be safely used since reference equality is not needed or relied upon. The Integer.compareTo method compares the Integer objects numerically, not referentially.
1.8.180
Clean GMK Tree Reading * Use Integer.valueOf instead of deprecated Integer constructor. * Safe because reference equality was not being relied upon for stack. * Simplify a ternary assignment branch for hasRef boolean. * Move localization tag to correct line for translated message.
1.8.179
More Vestigial Cleanup * Add some missing localization tags to Listener class. * Rewrite the Listener.addNode method for clarity. * Add a TODO about checking the tree model for changes at close. * Clarify TODO comment about instance creation ordering.