- 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
- Renamed CrashReportGenerator.makeCrashReport to .crash for convenience
- Split .crash into subroutines
- Documented Analyzer and ContextProvider
- Both are now supposed to have names In Title Case
- CRG.export now assumes PrintStream does not fail and assumes Log can
fail
Also added entity logic, moved test content to a separate package,
changed ImplementedChangeTracker a bit, added PacketEntityChange, made
entity IDs longs instead of UUIDs, and changed a whole bunch of minor
stuff.
Damn, this took CENTURIES to write. And it's still incomplete and crap.
Like, we've got object allocation all over the place in the tick cycle,
stateful changes are potentially super inefficient and we might have
concurrency problems down the line. AND I'll still have to write 10000
primitive wrappers. Urgh. I don't even feel like writing a coherent
commit message. Screw you, potential future reader of this commit
message.
- Camera now uses anchor objects to obtain position and direction
- Replaceable at runtime
- Anchor supplies info about camera modes (switch with F5)
- Only Entity anchor implemented ATM
- Added PacketSetLocalPlayer
- EntityRenders now produce EntityRenderable
- Holds reference to EntityData
- Has getViewPoint() to use with camera anchors
- Added Matrices (like Vectors)
- Added FloatMathUtils for all those pesky math functions that are only
implemented for double. Curse you double!
- Added EntityData, EntityRender and EntityLogic
- Added QuadripedModel
- Added ComplexTexture to simplify syntax when working with complex
models
- Added the most adorable creature in the universe (as a test feature)
- Camera is now 3rd person (temporary)
- Direction can now be switched with F5
- Blocks are now in packages *.world.block
- Tiles are now in packages *.world.tile
- Renamed WorldRenderable to Renderable
- GraphicsInterface now exposes frame counter
- ...which is now a long
- Removed leftover debug FPS console spam
- Added server
- Managed with ServerState
- Added BlockLogic (no TileLogic yet)
- Added ticking
- Added server-client communication API (only local implemented, no net)
- Added controls system (not fully implemented)
- Added Client class
- Contains most game-related references for client: WorldRender,
Camera, ...
- Managed with ClientState
fjckign finally~