As of Revision 198, 2018-12-29
– Finished code audit for data.standard.
– Added permanent run configurations.
– Revised LWJGL to no longer include source jars because they fail to generate javadocs.
– Corrected javadocs for IMatrix
– Finished code audit for data.net package.
– Working on the data object code audit still.
– Added the start of a Job system for event scheduling.
– Still working on adding features to the game calendar.
– Modified day phase enum to provide details on when the phases fall in the day.
– Reworked game calendar. No longer tracks game ticks. Different number of months.
– Reworked calendar tests to match and put them in the right package.
– Minor fixes to MathHelper and the associated tests.
– Added OpenJFX to libs.
– Updated LWJGL to 3.2.1
– Switched all code to use the generics diamond operator instead of specific types.
– Refactored the resources/jars directory into the resources/lib directory.
– Removed old version of LWJGL3
– Switched from main line Java SDK and JavaFX to their open source counterparts due to Oracle license changes.
– Switched to use OpenJDK.
– Incorporated OpenJFX for windowing toolkit.
– Added IMatrix to the math package to unify the two matrix classes a little.
– Removed the now duplicate math helper for converting matrices to strings.
– Converted Stack and Queue to have LinkedLists instead of being one. Allowed me to hide useless methods.
– Renamed isomorphicScale to scale for 4×4 Matrix. There was no reason to name it differently than the other scale methods.
– Added an enumeration for biomes.
– Added more block types. Revised the test that checks for block type duplicate Ids.
– Created MathConstants and moved default epsilon there from DataConstants to better constrain the math package.
– Directly modified the LWJGL sources jar file to correct JavaDoc generation warnings for JNINativeInterfaces.java.
– A bit of refactoring in prep for building a graphics engine.
– Upgraded from LWJGL 3.0 to 3.1.5 (removed everything for old version too).
– Added graphics package and child packages for OpenGL and Vulkan (removed now inaccurate versions of the same from the client package).
– Added latest version of LWJGL 3.
– Further changes to the Block structure were made.
– Slightly more formal support for block expanded storage at the chunk level.
– Revised the data structure for Block. It’s now smaller (9 bytes instead of 12) and hopefully more useful.
– Corrected all the things that changing the Block broke.
– Changed a couple of BlockSpatialTypes and added a new type.
– Updated the helpers for processing both spatial data and extra data for blocks.
– Added or updated more block data related enumerations.
– Added helpers for retrieving values from block data.
– Cleaned up some JavaDoc warnings.
– Added enumerations to better detail block spatial data.
– Refactored transmission of electric components to set a flag to indicate it has done so.
– A few more new components were added. Several components were renamed.
– Test circuit return data classes were renamed.
– Test circuit creation methods were moved to a single class.
– a bit of renaming inputs and outputs to try to make electric components a little more consistent.
– added more to the electric component documentation.
– added circuit traversal tests for simple, branched, ungrounded, and looped. (half of which do not yet work correctly.)
– Practically all of the conduit connections were backwards.
– Working on adding the concepts behind conduits.
– Started an HTML page for documenting electric components.
– Added the idea of a wire conduit with 4 conductors. The idea is that it can go though blocks and connect to components as a single mapped connection (not complete).
– Refactored how components are set up with their inputs and outputs again. This time to make a cleaner pattern for the constructors of child classes.
– Made the timer test circuit helper more general purpose. Now called component circuit helper.
– Added several more electrical components.
– Added a bunch more tests for electrical components.
– Corrected resetVisits() in Circuit to actually reset visits. (Don’t ask.)
– Adjusted how input and output parts are gathered by electric components.
– Added matching getDelay() and getLength() to TimerVariable so it’s similar to Timer. Values are updated by transmit().
– TimerVariable tests are now working correctly.
– Added electric packages the build batch file for non-IntelliJ compiling.
– Got rid of the 2 layer transmit + doTransmit and the clearing of inputs after transmission.
– Revised setLink to verify that the link being set is actually valid before making it. Now returns whether or not it was made.
– Added tests to confirm the behavior when you change the timing of a timer mid-cycle.
– Started working on tests for variable timer.
– Refactored ElectricComponent transmit method to clear input visits.
– Got the timer tests to work. At least the ones I’ve written so far.
– All switches now default to be in an “off” state (where possible).
– Added 2 more types of switches.
– Started writing test cases for more switches.
– 4-way switch was named wrong, so I fixed it and made an actual 4-way switch.
– Added several other kinds of switches.
– Built a switch test circuit similar to the logic gate test Circuit.java
– Added the concept of timers.
– Logic gates with “not” in them now all use a “base” line to define “true” to avoid free power. (Nand, Nor, Xnor, Not)
– Logic gate test circuit was revised to reflect the need for a base line.
– Wire split components were removed in favor of a single configurable Wire Junction.
– ElectricException was added to prevent misconfigurations of wire junctions.
– Electrically controlled Potentiometer was created.
– Logic gates are now fully covered with tests.
– Another massive refactor of the electric components. This time to fix several rather horrible inefficiencies.
– Actually got the logic gate test circuit to prove that an and gate works in one case (true && true == true) in that circuit.
– Working on adding the idea of keeping track of visiting connection points.
– Moved traverse into the Circuit class directly so there is a place to manage visits better.
– Refactored ElectricConnection to ConnectionPoint to reduce my confusion between connections and graph links.
– Refactored electric components. Moved name to the connection, now use integer constants as connection keys.
– Built a test circuit helper that builds a circuit for testing logic gates.
– Added more components to the electric related packages.
– Fleshed out the JavaDocs for the electric packages.
– Added the test.electric packages (no test classes yet).
– Heavily revised the layout of things in the electric package.
– Implemented 10 electric components. (Wire (3 kinds), And, Nand, Or, Nor, Xor, Xnor, Not)
– Added the broken beginnings of the electric package and started the concepts of an electric component graph.
– Added Server Details request and response objects.
– Added concept of tinting things requiring 12 bits of “extra data” to provide 4096 tints.
– Added clamp methods to the Math Helper for each useful data type and tests for them.
– Client ID requesting pattern now works correctly.
– Started a very broken attempt at a plugin framework. Like before, it’s basically just broken code in a big comment.
– Several revisions to the networking system in preparation of supporting client ID requests. These are especially tricky because the only identifying feature of one of these requests at the time it is received is the channel it was actually received from.
– First successful ping! The network code works well enough to have pinged the server from the client.
– Minor revision to the types supplied to watchers and handlers for the network so they match to avoid confusion.
– Did a bit of JavaDocs clean up.
– Since Logger had log types I added verbosity options to it to filter appropriately.
– Eliminated timeouts from polls or selects in the network code. Now handles thread interruption correctly.
– A bunch of work on the network engine. This time trying to correct 3 second delays during connection.
– Added the network event processor so the selector states can be adjusted in a separate thread from the main engine thread.
– Probably need to remove various delays. Already solved how to remove them from the engines. Likely need to keep and interrupt the threads for workers.
– More work on the network engine.
– Discovered and fixed several problems with various serializable objects and missing bits in the factory. (Added a test to help identify these in the future.)
– Reworked the server engine interface a bit to do the same sort of of things related to network engine as was done for the client.
– Started the basic network worker that provides basic networking services like ping.
– Split network constants out of data constants (where they never really belonged in the first place).
– Removed the concepts of handlers from the server code since I decided that servers will never send a message to clients that require a response.
– Changed the logging of exceptions to provide the type of exception instead of just the message (which is often empty anyway).
– Added a few network related data objects.
– Fixed the position of the DeserializationStreamer’s buffer after compacting it. (Compacting puts the position in a place that is not useful to me.)
– Completed the massive refactor of ContainerMessage and NetworkEnvelope.
– Removed ContainerMessage as no longer needed since the concept of it is now part of NetworkEnvelope.java
– Reorganized SerializedTypes a little to make them better line up with the actual package structure.
– Added new data.game package and moved game state and calendar to it.
– Preparing to refactor NetworkMessage into a true network transmission envelope instead of a network related base class.
– Started wiring the chat client UI to the client network engine.
– Added network watcher concept so things can receive network data (but not really for doing any serious work on it).
– Network client can now connect to server, but doesn’t really work properly so far.
– Added log type concept to the logger.
– More work on the network client.
– Added logger that allows the caller to bundle in a context appropriate message when logging a throwable.
– Started work on the NioClientEngine (finally).
– Added handler for network response handlers.
– Removed the idea of an unknown opaque id.
– Revised NetworkMessage to remove opaque id from the standard set of setters and constructors, also revised child classes to match.
– Added tests for container message and revised it to throw serialization exception if an attempt to serialize it is done before a message is set on it.
– I shouldn’t code when I have a really bad headache. Fixed where I put the assert last night and the test that I messed up for it.
– Removed the net.old project as no longer needed since I’m approaching useful with my network engine.
– Added an assertion to help prevent calling deserializeData() on deserialization streamer when data is not ready.
– Added tests for binary data and deserialization streamer.
– There is a problem with deserialization that prevents it from indicating a problem when there is a large buffer of incorrect data available. No idea how to detect this problem or prevent it.
– Created a binary data object for storing serializable arbitrary binary data (and associated tests).
– Cleaned up some of the output being generated by tests.
– Added several serialization related data constants.
– Added an opaque ID to network messages to be used by clients to match handlers to server responses.
– Added a container network message that wraps any IByteBufferSerializable object.
– Still working on streaming deserialization support. Need to finish buffer shifting in deserialization.
– Added use of the deserialization streamer to the network server.
– Added method to get default objects by type (and a test to confirm I didn’t miss any).
– Started building the structure for tracking data from multiple streaming sources for deserialization.
– Added code that allows network engine and worker to stop running within roughly 3 seconds of being shut down.
– Complete removal of System.out.println and exception.printStackTrace in favor of Logger.log
– Did a little work on JavaDocs.
– Added ThreadSafe related files.
– Added configuration for newly purchased tool ThreadSafe by Contemplate Ltd.
– Fixed the one multithreading issue it found in the network server code. (Only 1! Awesome.)
– Removed ILogger interface since it proved to be worthless.
– Altered Logger to appear as static access, but with singleton state so I can stop coding .getInst() everywhere when using it.
– Moved a few functions around in the Network Server related interfaces.
– Added another method to the serialization of child network messages. (Was still breakable by child classes.)
– Still fine tuning the NioServer and related classes for threading and arrangement.
– Removed mocked ArtificialNetworkEngine as more work than it was worth.
– Bit of work on the various data structures for giving credit where credit is due.
– A little refactoring of the network related interfaces.
– Refactored Network message to a slightly different serialization pattern.
– Fixed a bug in the write function for network server.
– NioServerEngine is almost done and I think the threading is even sane.
– Time to move on to the worker for the chat server.
– More work on switching the Nio Server Engine code from synchronized blocks to the concurrent package approach.
– Logger now includes a timestamp in the log records.
– A bit more work on the network code.
– Creation of a simple logger class (in the log package) so I can have a little more control over output than with rogue System.out.println calls everywhere.
– Working on the rewrite of the Network Server related code.
– Added concept of connection registry for containing connection details.
– Added exception package for exceptions that can be thrown from multiple other packages. Exceptions that only get thrown by a single package should be located in that package. This package may prove to have nothing in it in the end, but for now I’m leaving it around.
– Added settings to source control because IntelliJ keeps resetting mine on an upgrade and I want to be able to just import them to fix it.
– More work on the network related code.
– Created a NetworkMessage base class for extending by things that want to be able to be sent over the network in a targeted fashion.
– Cleaned up the code a little in the chat server and client so it’s easier to find the bits I want to change. (Split the scenes into methods that create them.)
– Got the network client working the way I would expect it to with the artificial network engine.
– Continued retooling of network engine. Working on the client side first. Concurrency issues to resolve in ArtificialNetworkEngine.
– Moved all existing network code into net.old.
– Created new interfaces to represent a network server and a network client.
– Started work on an ArtificialNetworkEngine that implements both so I can have a back end for both sides.
– Hope this approach will finally unblock me on the network related code. (Long way to go though.)
– Unrefactored the network server and client from the base class.
– A bit more work on networking. Not sure I’ll ever get this to work without a brain transplant. :P
– More network coding is in place now. Effectively nothing is useable or works correctly, but at least there is a lot of it.
– Partial network code checkin prior to refactoring it to a better object oriented layout.
– Started working on the network engine code (again).
– Refactored the data package to include a sub package for world data structures.
– Started to subdivide the data package for better categorization.
– Added a ChatMessage to the new com.qubekwest.data.net package, which will become a part of the network engine tester for chatting.
– Prep to start the network code over again has begun.
– Created a basic simple UI for both a Chat Server and a Chat Client with JavaFX.
– They aren’t wired to do anything with the network yet.
– Added more enumeration tests. This should help to prevent dupe IDs within an enumeration in the future.
– Little bit of refactoring, little bit of adding data package test coverage.
– Continued refactor of chunk proxy objects into other things that used to use ChunkParents.
– Fixed the DeserializationFactory test that was previously failing.
– Added ChunkVolume for defining a collection of chunks without Block resolution.
– Refactored ChunkProxy to Chunk.
– Still failing a test in the DeserializationFactory.
– Started refactor of Chunk to FullChunk
– Next ChunkProxy will be refactored to Chunk but I wanted to do it as two different checkins.
– Started the refactor needed to use ChunkProxy instead of ChunkParent so there is a place to do object promotion.
– Cluster now uses ChunkProxy, but the tests of deserialization factory fail for now.
– Added the idea of chunks that use a palette of blocks.
– Still a bit of serialization and test work to do for PalettizedChunk and BlockPalette.
– Deserialization of variable sized headers corrected.
– DeserializationFactory for Cluster now passes tests.
– Started writing data object tests.
– Found problems with how chunks are indexed in clusters.
– Working on the DeserializationFactory to help with deserialization of complex nested objects.
– This is a broken checkin (code doesn’t compile).
– Started to create the Texture Atlas related data structures.
– Need to revisit serialization to make handling variable sized objects that contain variable sized objects easier to deal with.
– Added new version of AvlTree that holds Key Only nodes instead of the typical Key Value nodes.
– Refactored the Priority Queue to use the new Key Only Avl Tree.
– Added Key only iterators and tests.
– Updated build batch file.
– Added tests for PriorityQueue.
– Cleaned a few JavaDocs.
– Refactored LinkedList to have Queue and Stack as children instead of just methods.
– Fleshed out standard data structures tests a bit.
– Added PriorityQueue as a wrapper around an AVL tree.
– Finished AvlTree and tests.
– Previous commit added linked list iterators.
– Removed Left Leaning Red Black Tree (and tests).
– Removed tree node parent class (can’t override fields).
– Got inserts to work correctly for AVL Tree.
– Checking in standard data structures because I haven’t in a while.
– Still struggling with how to properly do binary search tree things.
– Added a couple of interfaces, refactored some things.
– Moved various data structures from com.qubekwest.data to com.qubekwest.data.standard to separate them from game data.
– Added the beginnings of tree iterators. (PostOrderTreeIterator doesn’t work properly.)
– Added tree related tests. (LLRBT delete operations don’t work correctly, will probably make a different kind of tree.)
– added the ability to convert linked lists to and from arrays.
– Unlocked OpenGL shader tutorial appendix for printing. (No idea why it was locked in the first place since the other 4 chapters were unlocked.)
– Added a doubly linked list and tests for it.
– Removed the BinarySearchTree (and Node and Test) classes.
– Created start of tests for LeftLeaningRedBlackTree.
– Added Xlint compile options for unchecked and deprecated.
– Added Left Leaning Red Black Tree (LLRB) implementation.
– Added LLRB docs.
– Added a simple binary search tree (non-balancing).
– Hope to change it to something that will self-balance in the future.
– Started work toward being able to build a texture atlas.
– Added texture index (maps textures to UvMapTypes) and file parser for them.
– Added another tutorial.
– Removed several obsolete meshes.
– Finished the UVMap parsing and seasonal and animated data deriving.
– Moved mesh file format details to the MeshFileParser class JavaDocs.
– Refactored Constants to DataConstants so it’s easier to have constants in other packages without namespace conflicts.
– Added constants to the client package (that would have conflicted with the data constants class).
– Working on the MeshFileParser still. (Sort of in clean up mode.)
– Fleshed out the mesh file format details document.
– Started working on the UV support for the mesh file parser.
– Working on classes that help with handling multiple UV maps for a single mesh.
– Added a little JavaDocs to places that were missing them.
– Created the mesh for block.
– Removed extra 3d test meshes.
– Loads of work on defining UV spaces for blocks.
– Added text textures for UV spaces.
– Added enums for various game concepts.
– Added test cube mesh
– Created generator package.
– Moved cursors to generator package.
– Started process of eliminating the current structure of the plugin packages.
– Fleshed out the drawing methods on cursors to include lines, planes, and boxes.
– More work on the WorldLoader and added constants for file extensions.
– Sample world directory structure.
– Reworked configuration file support to simplify it.
– Moved most drawing functions for cursors into new abstract BlockCursor.java
– Rewrote lineNorth, lineSouth, lineDown, lineUp, lineEast, lineWest as lineX, lineY, lineZ.
– Wrote a cursor based 3D implementation of Bresenham’s line algorithm for arbitrary lines.
– Started a little work on the concept of a World object.
– Updated Rox NIO license file.
– Started to port a C++ Bressenham line plotting algorithm to Java and QK’s Feature structure.
– Another revision to how I handle licenses. Now they are resources instead of in the code directly.
– Removed specialized 1D code from OpenSimplexNoiseGenerator.
– Brought the math package back up to 100% test coverage.
– Math package code audit progress. Still need to get code coverage back up to 100% for it.
– More code audit progress.
– Revision to noise generation to allow parameters.
– Added serialization for strings.
– Removed the “old” packages and merged the game package into the data package.
– Revisited how the credits and related things work.
– Added serialization to all of the math package classes.
– Total refactor of the serialization system.
– Redesigned Helper, Interface, and new package for serialization.
– Updated almost all the data package serialization.
– Updated data package serialization tests.
– More data package code audit work.
– Added MatterType and several additional BlockTypes.
– Need to rework serialization functions again related to size.
– Still progressing on the code audit.
– Replaced StringBuffer with StringBuilder.
– Added ChunkHelper for promoting and merging chunks.
– Started adding missing functions.
– Removed description from BlockType.
– Renamed ByteBufferSerializationHelper to SerializationHelper.
– Added more useful functions to SerializationHelper.
– IByteBufferSerializable now has version function.
– Type reduced to a short, version added as second short for serialization headers. (No net change to serialized size.)
– Started code audit on math and data packages.
– Applied code reformatting.
– DirectionType and tests.
– More work on Cursors.
– More work on Feature and the associated cursor code.
– Refactored block indexing to be correctly byte based.
– Updated code style to make JavaDoc comments the way I like them.
– Checked in my code style rules.
– Refactored ChunkType into ChunkParent
– Added ChunkType enumeration for rapid identification of ChunkParent types
– Started work on Feature
– Beefed up the code on several data objects.
– Added Math Luts class.
– Added tests for loads of data objects.
– Added tests for Luts
– Probably need to make Luts load data from a file to get around java 64k function size limit.
– Known error in conversion between WorldAddress and BlockAddress.
– Temporary move of network code into “old” packages. (Hopefully to be replaced with new network code soon.)
– Lots of new data objects.
– Lots of changes to serialization. (Now supports variable sized objects.)
– Added serialization to many data objects.
– Added serialization helper.
– NIO Server updates. Now works correctly for echo server.
– Added automatic code formatting settings. (IntelliJ)
– Modified code to adjust for changes to LWJGL.
– Switched to IntelliJ IDEA as the IDE.
– Checked in IntelliJ project related files.
– Upgrading to latest LWJGL3 (part 2: add new version back in)
– Upgrading to latest LWJGL3 (part 1: delete the old version)
– Added command line file loading for a few different types of files. (mesh, vshader, fshader)
– Bunch of work on how Meshes work including the beginnings of a mesh file format and a parser for that.
– Added mesh directory to configuration
– Added meshes resource folder and serveral .mesh files.
– Math library is now complete and 100% test covered.
– Added several more transform functions to Matrix44.
– Still fleshing out the tests for the math package.
– More methods you can do with quaternions.
– More tests added for math classes.
– Added static versions of most of the vector functions.
– Added tons of tests for the various vector classes.
– Added the beginnings of a quaternion class.
– Completely removed double precision math classes.
– Fleshing out the math package and tests for it.
– Matrix classes in a broken state. Checkin for transfer to desktop.
– Refactored matrix and vector classes:
– Normal ones are now float based.
– Normal ones now have two implementations (Array and Buffer)
– Previous double based ones are now named Double*
– Added MathHelper for equal checks on floating point values
– Done porting Matrix44 from Swugl.
– Tests for Matrix44 ported and working except for vector multiply because Vector classes don’t have simple comparison functions yet.
– Started adding Matrix math classes ported from Swugl.
– Finally have a few triangles showing up. Need to work on projections, math classes, and more complex geometry.
– Added shader related bits and pieces, looking for a “win”
– tweaked build batch for easier inclusion of third party jars
– tweaked test textures and shaders, created concept of a mesh, and started trying to prep the geometry test to draw an indexed vertex cube with a texture.
– Started to work on setting up a cube for display with LWJGL.
– Added another tutorial. Added credits for the tutorial. Added another shader set.
– Fleshed out the ability to confirm the availability of required capabilities.
– In process of switching from JavaFX to LWJGL
– reorganized resources (part 2: revert and delete old)
– reorganized resources (part 1: add new)
– Checkin to prepare for moving things around in the resources directory to better organize it.
– Added math module and test.math module.
– Updated build batch file accordingly.
– MandelbrotNoiseGenerator now uses com.qubekwest.math.ComplexNumber instead of a private inner class by the same name.
– Added a screwed up stab at a MandelbrotNoiseGenerator.
– Added test for noise generators to confirm the seed returned by getter is the one set by setter.
– Fixed how OpenSimplexNoiseGenerator is seeded. (It failed the seed test.)
– Changed the bump map texture I am using for my GeometryPractice
– Added an image showing the pixels in dirt in Minecraft
– Added concept of credits to the game. (Primarily for 3rd party resources/libraries/etc.)
– Added Perlin Noise Generator and tests.
– Added 1D noise to INoiseGenerator and implemented with all.
– Corrected output range expectations for all Noise Generators (now -1.0 to 1.0).
– Refactored IRandomNoise to INoiseGenerator
– Updated implementation class names to match the new pattern.
– Updated test classes accordingly.
– Added the random and test.random packages.
– Created a few random interfaces and implementations for noise.
– Created tests for noise.
– Another partial server checkin.
– Added several NIO tutorials.
– Revised server write side to be incorporated into server again.
– Added documentation on Apache Oltu (Java OAuth server)
– Spent a bit of time fleshing out tests and docs.
– dropped the idea of IntSerializable (removed interface and helper) in favor of using java.nio.ByteBuffer for that purpose.
– fixed block and chunk accordingly
– fixed related tests
– Refactored test packages to be test.* instead of *.test (for better organization and easier finding of code)
– Added client side graphics practice program (stand alone)
– Added calendar concepts.
– More QK stuff added. I utterly fail at getting svn to ignore things though.
– Added a few more skeleton bits for the QK plugin packages.
– Way more tests. More of Chunk implemented. Collection of BlockTypes (probably to be moved to plugins eventually).
– Initial Add of the QubeKwest project.