- Added GravityModel
- can specify gravity varying by location and time
- Added GravityModelRegistry
- Stored in WorldData
- Removed Minecraft gravity mode
- Re-added localization
- Currently en-US, ru-RU
- Switch with L
- Used in LayerTestGUI and the new LayerAbout
- Added LayerAbout
- Contains game named and version
- Localized
- TestLayerGUI is hidden by default
- Switch visiblity with F3
- Fixed alignment of text inside Labels
- Fixed crash reports not showing suppressed exceptions and causes
- Added Painting to demonstrate "HD" texture support
- Added RoughPaint and DecorativeBricks to decorate a house outside
- Added WhitePaint to create windows
- Added TilesSmall and TilesLarge
- Updated Glass texture to make it brighter and add streaks
- Made sure texture names had correct case
- Renamed Test:Wood to Test:Log
- Renamed Test:Time to Test:Clock
- Links in crash reports are now clickable from Eclipse
- Updated/prettified README.md
- Wrote extensive building guides
- Removed pictures/
- Removed music samples
- Made sure that git creates run/ when cloning
- Eclipse is now able to detect native dependencies correctly
- `buildPackages.sh debian' exits with correct exit code
- Renamed `require*Dependencies' to `request*Dependencies'
- Added the following Gradle tasks:
- buildLocal (alias for build)
- buildCrossPlatform (builds with all natives)
- packageDebian
- packageWindows
- Gradle no longer downloads or packages natives for wrong platforms
(unless buildCrossPlatform or require*Dependencies is run)
- Gradle should no longer complain about deprecated features
- buildPackages.sh is now a lot more robust
- Removed the following dependencies:
- Apache Commons Math
- Everything in LWJGL except OpenGL/AL, GLFW, STB and core
- Added text outlining
- Shrunk and moved compass bar (it no longer pretends to be a hotbar)
- Changed cross to match text proportions
- Refactored TileRenderSimple into TileRender{Opaque,Transparent}Surface
- Also renamed OpaqueTile into OpaqueSurface
- Added about and version info
- Added GuavaEventBusHijacker to access an inexplicably package-private
constructor in EventBus
- Added and utilized ReportingEventBus that reports caught exceptions
- Different blocks can now be placed
- Select block with (vertical) mouse wheel scrolling when block
placing is active
- All blocks except Test:Air are available
- Different tiles can now be placed
- Select tile with (vertical) mouse wheel scrolling when tile placing
is active
- Switch between placing blocks and tiles with middle mouse button,
horizontal mouse scrolling or Shift + (vertical) mouse scrolling
- Changed Test GUI text color to white to increase readability on blocks
- Recolored Test:Stones to better match granite textures
- Selection box restored
- Controls no longer get stuck after player entity is reloaded
- Moved test spawn location a little down so chunks would load
conveniently
- Moved test spawn variable into TestContent
- ShapeFragment.glsl now declares uniformColorMultiplier, which is used
as an additional fragment color multiplier (independent from VBAs)
- Managed with a new stack by ShapeRenderHelper
- Fixed dynamic font colors
- Added granite (monolith, cracked and gravel variants)
- Generates as a random combination of the variants instead of stone
on mountain cliffs
- Added snow (opaque, half and quarter variants)
- Generates at altitudes above 1500 m
- Distribution is bad atm, not fixing until proper worldgen is
introduced
- Reduced cliff areas
- Hotfixed texture flickering
- Changed dirt texture
- TickerCoordinator.pendingChanges is now a HashSet
- TickerCoordinator now makes some best-effort checks to make sure the
world does not change during evaluation phase
- Extracted Cached{Block,Tile}Change
- these classes implement hashCode() and equals() based on the
location of the block/tile they affect, thus ensuring that only one per
block/tile remain in the aforementioned set
- Similarly extracted PacketAffect{Block,Tile,Entity}
- Renamed a bunch of packets
- Moved PacketSendEntity to correct package (.common.world.entity)
- Temporarily added position, velocity and direction to EntityData
read/write methods
- Increased view distance to 150 m
- Squashed visible area vertically (to load less underground and air
chunks)
- A custom Object can be appended to any ChunkData to save its
generation status
- Handled by WorldGenerator
- Persistent
- Used to determine whether a chunk is ready to be sent to client
- ChunkIO now requires an IOConext
- ChunkIO now requires Data{In,Out}putStreams (as a combination of
Data{In,Out}put and {In,Out}putStream)
- Fixed some minor bugs
- At most 1 chunk is updated (previously known as 'buildModel') every
frame
- 3x3x3 chunks closest to the player are updated in real-time without
the aforementioned limit
- Entities are no longer internally bound to chunks
- Entity visibility for a player is now unique for each entity
- Entities are send/revoked just like chunks by EntityManager
- LocalPlayer no longer stores an entity; instead it stores entity ID
and looks up the entity on demand
- Removed CommsChannel Roles
- Replaced with Client class hierarchy on the server
- Added ClientPlayer
- Added Player (a new server class holding all objects related to a
player)
- Player class in common renamed to PlayerData
- Added PlayerManager for the server
- Added PacketLoadChunk
- Added ChunkIO to handle converting ChunkData to/from bytes
- Client no longer generates chunks by default
- It still does generate them on request by server
- DataBuffer now exposes InputStream and OutputStream
- Faces are now grouped by texture primitive they use
- Massive FPS increase
- TexturePrimitive receive an additional unique ID immediately upon
instantiation
- Hacked dynamic (quickly changing) text support into Typeface
- No formatting for now
- Requires a proper rewrite later
- Added DynamicLabel to display dynamic text
- Movement friction and player controls no longer depend on framerate
- Added FPS and TPS display
- Now each block possesses its own set of 6 tile stacks; two tile stacks
occupy each block boundary
- As consequence, top tiles of block (0;0;0) are now different from
bottom tiles of block (0;0;1)
- Tiles are now stored in and managed with TileStacks
- TileLocations were removed in favor of TileReferences
- Added tile tags to address individual tiles within TS in a way that
persists thru tile insertions are removals (used internally)
- Reworked TickContexts:
- Changed and expanded interfaces significantly
- Added TSTickContext
- Replaced Mutable*TickContexts with TickContextMutable
- Split AddOrRemoveTile into two separate actions
- Renamed EdgeTileLogic to HangingTileLogic
- Moved tmp_generate into TestContent
- Removed Forwarding*TickContexts for now
- Fixed TileTriggeredUpdate triggering ticks instead of updates
- Fixed an error message in Ticker
- Random ticks now happen
- Ticking* interfaces now have a single getTickingPolicy method instead
of two doesTick* methods. This makes more sense since an object cannot
both tick randomly and regularly.
- Added Server.stop
- Added some convenience methods related to setting blocks and tiles
- Documented some stuff
These are just convenience methods: instead of writing
float g = 9.8f * Units.METERS_PER_SECOND_SQUARED;
we can write
float g = Units.get("9.8 m/s^2");
and it'll actually work fast.
Benchmarking showed that using LOC gave a whopping 5% speed advantage at
the cost of terrible readability. In the worst case. Decided that having
clear, laconic and Java-style code is worth the drop in performance.
No regrets.
- Pretty much everything related to ticking changed
- Ticking is now capable of running in parallel (other code - not so
much)
- Implemented world updates
- Broke some stuff
- Added ChunkDataListener and WorldDataListener
- Moved chunk render update requests to clientside ChunkDataListeners
- Moved ChunkRender and ChunkLogic initialization into WDListeners
- Packaged everything related to block selection into Selection class
- Selection box is a bit less obnoxious
- Added the ability to place Test:Stone blocks
- This is technically a Minecraft clone now. I don't know how to feel
about this tbh
- Blocks can be broken by pointing at them at pressing LMB
- Rewritten ControlTriggers
- Rewritten KeyMatcher
- CollisionPathComputer now has a 0.5 margin
- Namespaced now takes full ID in constructor
- Changed the rest of source accordingly
- Moved everything related to Namespaced into .util.namespaced package
- Errors are now reported with IllegalIdException instead of IAE
- Error checking is optimized
- NamespacedUtil exposes more of its requirements
- Added StringUtil.splitAt
- Added ArrayUtil.isSorted
- Extracted NPedModel out of QuadripedModel
- Both are now configurable
- Added HumanoidModel
- Added human model
- Changed NPedModel animation logic
- Added a few skins including first sketch of Pyotr by WarDreg
- Decreased walking speed
- Added gravity (still testing)
- Two modes: realistic (9.8 m/s^2) and Minecraft (32 m/s^2)
- Switch with G
- Changing (0; 0; 0) rebound to H
- Added walking controls
- Minecraft-style
- WIP
- LayerTestGUI now displays dev options
- Added Units
- Interface of AABB (getOrigin(), getSize() and getWall(int)) now
extracted into AABBoid interface
- Same with Walls
- Collection<Wall> getWalls() replaced with Wall getWall(int)
- Added TranslatedAABB extends AABBoid
- CollisionClock replaced with direct reference to WorldData
- Reorganized tmp code in LayerWorld, so as to decrease cRiNgE_ levels