- Add PlayerMovement, child node
of Player which handles movement
- PlayerMovement and Camera are
added through code when spawned
- Add Player.IsLocal property
- Move Velocity property to Player
- Remove ResetPosition, instead just
use RsetId on Position and Velocity
Only chunks that are close to players
are sent to them, as well as actions
occuring in those chunks.
- Add Chunk and ChunkLayer classes / nodes
In the future, chunks could make use of multiple
layers such as terrain, building, interior, liquids,
pipes and wires, ...
- Add PlayerVisibilityTracker
Used on the server to keep track of which
chunks a player can see, firing events when
chunks go in or out of range.
- Add RPC extension methods which accept
an IEnumerable<int> for players to send to
- Add GetPlayersTracking extension method
- Use GlobalPosition instead of Position where needed
- Update WorldSave to save Chunks
(Incremented WorldSave.LATEST_VERSION)
- Add methods to BlockPos relating to chunk position
- Improve upon Facing with BlockPos.Add/Subtract
- Add generic GetChildren extension method
- Add GetOrCreateChild extension method
- Add Health HUD element
- Add Damage to weapons
- Bullet does damage to players
- Players die and respawn
- Hit decal spawned by server
- Disable various processing
when player is not alive
- Send appearance to server on connect
- Server now sends held items
to newly connected players
- Simplify World.SpawnPlayer/Block
- Add Items property to Player
- Can't exceed weapon's fire rate
- Automatic weapons fire automatically
- Require reloading after running out of rounds
- Reload on demand with key
- Add WeaponInfo HUD
Pressing middle mouse now shows a
radial menu HUD element that allows
selecting active controlled element.
At the moment there only is "Creative
Building" but in the future you may be
able to select weapons and such.
Currently not networked.
- Add IntegratedServer to ClientScene
- Prevent _Draw from being called by
making Player invisible on server
- Use _UnhandledInput in CreativeBuilding
- Add Cursor.ScreenPosition property
- Remove DeSerialization, RPC and Sync code
- Use Godot's built-in Rpc and Rset methods
- Use built-in Multiplayer with Root set to World
- Add World class, handles spawning,
getting players and blocks
- No more custom packets
- No more reflection or attributes
- Reintroduce LocalPlayer scene
- Keep it simple, stupid!
- Add SaveRegistry and SaveAttribute
- Add Save, which handles Saving / Loading
- Add SpawnRegistry and SpawnAttribute
Allows spawning objects by ID or Type
- PropertyDeSerializer handles de/serialization
of any [Sync] and [Save] properties
- Removing objects now done by
removing it from the scene tree
- Add "World" tab to EscapeMenu
- Modify Heartbit font's 1 and V characters
. Add ObjectHolder which does just that
- ObjectHolder is accessible though Game.Objects
- UniqueID replaces "sync ID"
- Move DeSerializer classes to IO folder
- New attribute name: Sync
- No longer provide Scene or Container
information to Sync attribute
- Scene name comes from Type name
- Container node is simply /Game/World
- Remove unnecessary container
properties from Game class
Splits NetworkSync into 4 distinct classes.
- SyncRegistry handles attribute related lookups
- Sync is now an abstract instance class
available through the Game instance
- Specialized implementations are available
for the Server and Client, one handling
changing and setting of synced objects,
the other simply handling Sync packets
- In OnSyncPacket, check if object was
already spawned if Special == Spawn
- In ProcessDirty, reset Special.Spawn state
- Split status storage between Server & Client
- Can now re-open singleplayer server
so other players can join over internet
- Multiplayer menu supports all this
- Fix issue where players would also
send other players' position as RPCs
"Singleplayer" now connects to an integrated server
which runs in a completely separate scene tree
- Update to Godot 3.3.0
- Reorganize code into multiple subfolders & files
- Add Client and Server scenes & scripts, extend Game
- Add NetworkSync, syncs state for networked objects
- Add NetworkRPC, allows for C#-friendly RPC by
adding attribute to instance and static methods
- Replace most packets with RPC
- Allow de/serialization of Node / synced objects
- Remove LocalPlayer for now, add IsLocal to Player
- Add BlockPos and Facing structs
- Add CreativeBuilding node / script,
handles placing and breaking of blocks
- Move spawn block packets to static
BlockPackets class, add destroy packet
- Move Cursor to its own canvas layer so
its position can be used in other scripts
- Use viewport transform instead of
camera position in Background script
- Allow registering de/serializer "generators"
- Add generators for arrays, lists and dictionaries
- Move de/serialization code into extra file
(still part of NetworkAPI thanks to "partial")
- Synchronize existing blocks to new players
- No more Rpc or Rset calls!
- Custom packet handling and de/serialization
- Lots of useful SendTo* methods!
- Appearance change in multiplayer
waits for confirmation from server
- By default, process everything when paused
- PlayerContainer.PauseMode is set
to Stop when the game starts up
- When multiplayer is on, its
PauseMode is set to Process
- Add background which scrolls with viewport
- Remove box made of blocks, use simple platform
- Players below y > 9000 are teleported back
- Add a couple of Network shorthand properties:
- IsMultiplayerReady - Is multiplayer fully ready?
- IsAuthoratative - Is singleplayer or server?
- Players - Enumerable of all current players
- Make LocalPlayer.Velocity public
- Add LocalPlayer.ResetPosition call
- Rpc and Rset extension methods now use
Network shorthands and Player instances