. 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
The high-level multiplayer API in Godot appears
to introduce ways for players to cheat too easily.
As a precaution, players can now hopefully only
send messages to the server, which relays them to
each player, after potentially validating them.
- Player's Name is set to their network ID,
DisplayName accessible through new property
- Add Authenticating NetworkStatus:
This is where new players will send data
about themselves, currently appearance.
- Use _Ready instead of _EnterTree where applicable
- Add Init extension method:
Allows initializing members before the
node has been added to the scene tree.
- Add Rpc/RsetExcept extension methods
- Appearance (name and color) can be changed
- Appearance is synced to other players
- Split tabs into multiple scripts
- Use nameof() where applicable
The escape menu pauses the game and
will allow for creating and connecting to
multiplayer games.
- Move scenes to scene/ folder
- Move scripts to src/ folder
- Add Hearbit font and CREDITS.md
- Remove git integration (we have VS Code)
Game now uses the default viewport instead of
a separate one that's then drawn as a texture.
This makes anything involving mouse position
much easier to deal with.
- Disable camera moving depending on cursor position
- Start work on an "escape menu" with
controls to join multiplayer sessions
- Move player to scene, instanciate on start
- Change application icon