Releases: fastjengine/FastJ
FastJ 1.3.0 - The Logo Update
🎉 We are now officially FastJ 🎉
Thank you to everyone who has supported the project so far -- you've helped us get this far, and we'll be getting even further on very soon.
This update sparks the official change of the repository name and the addition of a logo! We are no longer FastJ-Game-Library... we are FastJ. The repository name and URL have been changed to reflect this, as well as the addition of the logo.
In Other News...
This update brings you more unit test coverage, Javadoc cleaning, package redistribution, and numerous improved engine features.
Classes Moved
systems.render → graphics
- all classes undersystem.render
have been moved to thegraphics
package.- This affects
Camera.java
andDisplay.java
- This affects
New Unit Tests
Camera.java
Drawable.java
GameObject.java
New Additions
Camera.java
- Added
equals
,hashCode
, andtoString
implementations - Added constants for translation and rotation
DrawUtil.java
- Added method
DrawUtil#randomFont()
to generate random fonts
Keyboard.java
Keyboard#stop()
method to reset the keyboard and close all of its threads.
Maths.java
- Added method
Maths#randomInteger()
to generate random integers - Method
Maths#randomBoolean()
to generate psuedorandom booleans. - Added
Maths#floatEquals
-- checks for 'equality' by ensuring the difference between two floats is less than the value ofMaths#FloatingPrecision
.- All methods in FastJ checking for equality between floating-point values have been converted to use this method.
Model2D.java
- Added
toString()
override - Added constant defining default
show
value. - Added constructor
Model2D(Polygon2D[])
that sets theshow
variable to the defaultshow
value (the one mentioned above).
Mouse.java
Mouse#stop()
method to reset the mouse and close all of its threads.
Polygon2D.java
- Added
toString()
override
Text2D.java
- Add default
color
andshow
constants
Bug Fixes
Camera.java
- Added checks to
Camera#getTransformation()
to ensure rotation/translation doesn't happen when the camera hasn't been moved. - Fixed issue in default
Camera
constructor where the translation would be set to a reference to the default Camera translation, causing checks to fail ingetTransformation
DrawUtil.java
- Fixed issue in constructor
Model2D(Polygon2D[], Pointf, float, Pointf, boolean)
where translations were attempted to be performed before the collision object was made, resulting in a null pointer exception. - Fixed issue where font string choice would occasionally be larger than the length.
FastJEngine.java
- Fixed issue where some environments would return
0
for the default refresh rate, causing the default FPS to be set to 0. Now, it will set to be at least1
.
General Changes
Display.java
- Changed return value of
Display#getJFrame
-- The method now returnsJFrame
instead ofFrame
.
FastJEngine.java
- Changed
FastJEngine#exit()
in two key ways:- Removed the call of
System.exit(0)
- Reset all the data contained in the engine.
This allows the game engine to be reused after closing a game instance.
- Removed the call of
FastJEngine#exit()
now callsKeyboard#stop()
andMouse#stop()
rather than their respectivereset()
methods, and no longer exits the VM.- Simplified the
FastJEngine#error(...)
method - no longer closes the JVM instance. Instead, it closes the game and throws the provided exception with the provided error message.
Keyboard.java
- Made key constants follow PascalCase rather than camelCase
Maths.java
- All methods in the
Maths
class that previously returneddouble
values now returnfloat
values. - Lowered float precision delta (
Maths.FloatPrecision
) to0.00001f
- Fixed issue with incorrect random generation where the
trueMin
value in therandom(min, max)
method would be set totrueMax
no matter what.
Model2D.java
- Renamed
Model2D#getObjects()
toModel2D#getPolygons()
Keyboard#reset()
no longer closes the keyboard threads.- This now sets its rotation and scale to the default values provided by
GameObject
.
Polygon2D.java
- This now sets its rotation and scale to the default values provided by
GameObject
. - Changed
Polygon2D#modifyPoints
to set translation, rotation, and scale to, if requested, the defaultGameObject
translation, rotation, and scale.
Text2D.java
- Changed constant
Text2D#DEFAULT_FONT
toText2D#defaultFont
.
Package Redistribution
FastJ will consist of 4 main packages:
Engine
This package contains the game loop on which the game engine runs, as well as engine-related configurable settings.
Graphics
This package contains all non-rendering graphical content -- game objects, UI, and helper methods to simplify the general process of working with graphics, as well as handling rendering to the screen.
Math
This package contains all mathematics-related content -- Point
and Pointf
, as well as a secondary math class called Maths
are defined here.
Systems
This package contains FastJ's numerous features which make it a viable choice for game development.
Currently, it contains the following features:
- Scene System -- a way to divide logic and loading of the game into different sections, or scenes, as well as switching between them.
- Behavior System -- a way to control the updating of game objects outside the
update
method - Input System -- a way to recieve and process keyboard and mouse inputs. Input values can be statically accessed.
- Tag System -- FastJ provides a tagging system for all renderable content that allows for further distinction between two graphical objects.
Changed Packages:
src/main/java/io/github/lucasstarsz/fastj/graphics/GameObject.java → src/main/java/io/github/lucasstarsz/fastj/graphics/game/GameObject.java
src/main/java/io/github/lucasstarsz/fastj/graphics/shapes/Model2D.java → src/main/java/io/github/lucasstarsz/fastj/graphics/game/Model2D.java
src/main/java/io/github/lucasstarsz/fastj/graphics/shapes/Polygon2D.java → src/main/java/io/github/lucasstarsz/fastj/graphics/game/Polygon2D.java
src/main/java/io/github/lucasstarsz/fastj/graphics/text/Text2D.java → src/main/java/io/github/lucasstarsz/fastj/graphics/game/Text2D.java
src/main/java/io/github/lucasstarsz/fastj/ui/EventCondition.java → src/main/java/io/github/lucasstarsz/fastj/graphics/ui/EventCondition.java
src/main/java/io/github/lucasstarsz/fastj/ui/UIElement.java → src/main/java/io/github/lucasstarsz/fastj/graphics/ui/UIElement.java
src/main/java/io/github/lucasstarsz/fastj/ui/elements/Button.java → src/main/java/io/github/lucasstarsz/fastj/graphics/ui/elements/Button.java
src/main/java/io/github/lucasstarsz/fastj/systems/game/DrawableManager.java → src/main/java/io/github/lucasstarsz/fastj/systems/control/DrawableManager.java
src/main/java/io/github/lucasstarsz/fastj/systems/game/LogicManager.java → src/main/java/io/github/lucasstarsz/fastj/systems/control/LogicManager.java
src/main/java/io/github/lucasstarsz/fastj/systems/game/Scene.java → src/main/java/io/github/lucasstarsz/fastj/systems/control/Scene.java
src/main/java/io/github/lucasstarsz/fastj/io/keyboard/Keyboard.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/keyboard/Keyboard.java
src/main/java/io/github/lucasstarsz/fastj/io/keyboard/KeyboardActionListener.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/keyboard/KeyboardActionListener.java
src/main/java/io/github/lucasstarsz/fastj/io/keyboard/Keys.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/keyboard/Keys.java
src/main/java/io/github/lucasstarsz/fastj/io/mouse/Mouse.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/mouse/Mouse.java
src/main/java/io/github/lucasstarsz/fastj/io/mouse/MouseAction.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/mouse/MouseAction.java
src/main/java/io/github/lucasstarsz/fastj/io/mouse/MouseActionListener.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/mouse/MouseActionListener.java
src/main/java/io/github/lucasstarsz/fastj/io/mouse/MouseButtons.java → src/main/java/io/github/lucasstarsz/fastj/systems/input/mouse/MouseButtons.java
src/main/java/io/github/lucasstarsz/fastj/render/Camera.java → src/main/java/io/github/lucasstarsz/fastj/graphics/Camera.java
src/main/java/io/github/lucasstarsz/fastj/render/Display.java → src/main/java/io/github/lucasstarsz/fastj/graphics/Display.java
FastJ 1.2.0
The "Unit Test" Update
A new version arises! And this one's coming in with the fact that I've begun to write unit tests for FastJ! Generally speaking, this decision came about because Slope-ECS has been on hold until Gradle 7.0 releases (more on that later).
Highlights
Unit Testing with JUnit 5
In the meantime, I've been working on getting all of FastJ unit tested! The project will use JUnit 5 for unit testing rather than JUnit 4, specifically because I need ordered test support. Sorry to anyone who's used to JUnit 4 😅
Currently, the project has all of the following unit tested:
fastj.math
fastj.graphics.DrawUtil
- Constructors of
fastj.graphics.shapes.Polygon2D
As the project progresses, more unit tests will be added.
Bug Fixes
DrawUtil.java
- Fixed issue in
writeToPSDF()
where newlines were not being added aftershow (s)
or afterPointf (p)
. - Fixed inconsistency between
writeToPSDF()
andparseModelFile()
where models were being written withfill (f)
andshow (s)
values as boolean values. As of now, all models will be written and read as boolean values. - Nearly complete re-write of the
createCollisionOutline()
method -- a proper outline is now generated and sorted to be displayed clockwise.- Uses intersection counting to weed out points on the inner sections of the array of Polygon2Ds.
- Shifts results counter-clockwise to ensure the resulting
Pointf[]
matches the original orientation of the Polygon2Ds.
- Fixed issue in
lengthOfPath()
where path close (which connects the last point to the beginning, effectively another line in the path) did not count towards the line path count. Now, that extra line is accounted for.
Polygon2D.java
- Fixed issue in constructor
Polygon2D(Pointf[] pts, Pointf setLocation, float setRotation, Pointf setScale, Color color, boolean fill, boolean show)
where scale and rotation were not being set to the correct values.
Additions
Drawable.java
- Added method chaining to
setShouldRender()
DrawUtil.java
- Added
createBox(float, float, Pointf)
method to round out the box creation methods
GameObject.java
- Added default translation constant
- Added default scale constant
- Added default rotation constant
- Added method chaining to
setTranslation()
,setRotation()
,setScale()
Model2D.java
- Added
Object#equals()
,Object#hashCode()
Point.java
- Added
Object#equals()
,Object#hashCode()
- Added
equalsPointf()
for comparing against aPointf
object - Added
origin
constant
Pointf.java
- Added
Object#equals()
,Object#hashCode()
- Added
equalsPoint()
for comparing against aPoint
object - Added
origin
constant
Polygon2D.java
- Added
Object#equals()
,Object#hashCode()
- Added default color constant
- Added default "should fill" constant
- Added default "should show" constant
General Changes
DrawUtil.java
- changed
lengthOfPath()
to accept allPath2D
objects - made
Polygon2D#createPath()
publicly available asDrawUtil#createPath()