Skip to content

Beta release - #81

Draft
Armored-Dragon wants to merge 33 commits into
betafrom
alpha
Draft

Beta release#81
Armored-Dragon wants to merge 33 commits into
betafrom
alpha

Conversation

@Armored-Dragon

Copy link
Copy Markdown
Member

This is the first beta release of the OpenMinerva client!

The issue was player controllers had collisions. When they were spawned on the client, they were inside of the client on the client side. This caused the client to clip into the floor due to the client-side collision.
Previously, only the host could see everyone. This means a third person could join and the two non-hosts could not see each other.
This fixes the clients spawning into the ground due to collider issues. This also changes how the client spawning functions so that an unlimited number of clients can connect and see each other.
* Basic http manager.
Basic login functionality.

* Created basic credential store.

* Updated url for device authentication.

* Device authentication.
* Work.
Just saving progress.

* Disconnect when JWT verification fails.
* Refactored JWT script.

* Refactored files.gd.
Log to a file.
Changed Global log function name.
Print_stack on error.

* Refactored account_servers.gd

* Moved credential_store.

* Moved the other files.

* RPC Manager.
This contains a lot of dev functions. Another round of refactoring is required.

* Removed multiplayer_manager and merged into network_manager.
* Basic handling for multiple accounts.
Improve security by utilizing two unique keys. One for Client to AS, the other for Client to Client/Server.

* Refactored signin.gd.

* Properly send public key to identity server.

* Multi Account support.

* Base work for libraries.

* Remove dead code.

* Account authentication status.

* Passport handling.
Changes how passports are obtained.
Select an account to use.
Remove dead code.

* Dashboard current account selection.

* Created placeholder jwt lib file.

* Changed how responses are verified.
Fixed passport sending to server.
Fixed timing issue requesting passport from account server.

* Change the dashboard to something more presentable. (#64)

* New dashboard work.

* Changed sessions icon.
Added instance option to manage the current instance.

* Disable dashboard buttons when page is not present.

* Storage display.

* Add account list page.
Improved display_dashboard... function.

* Created placeholder theme for panels.

* Basic account list haneling.

* Better create account functionality.

* Account login.

* Replaced original dashboard.
Scroll to bottom of messages when contacts are open.

* Use OAuth authentication for the game client. (#67)

* Initial work.
Lots of hard coded values, but this is functional ground work for OAuth support from the game client.

* Generate a random key for the pkce.

* Made the auth code non-global.

* Refresh token and access token.

* Added TODOs.

* Added file header.
psioniq File Header extension config.

* Reimplemented JWT library.

* Set oauth variables.

* Removed hardcoded authentication server values.

* Use existing random_string in random library.

* Base64 to Base64uri function in jwt library.

* Token introspection and refreshing.

* Placeholder TCPResponse to successful token capture.
The browser will no longer hang continuiously.

* Cleanup.

* Added multiple login options.
This changes the login flow to have the user specify which login they are intending on using.

* Created url library.
This will centralize url parsing making it easier to handle urls.

* Removed passport handling.
This will likely be reimplemented later.

* Improved create account flow.

* Disabled usernamepassword login.

* Use URL Parser library.

* Removed unused AES file.
Right now I do not need this here.

* Removed duplicate library.
Removed unused references.

* Stop checking OAuth server after successful connection.

* Change the dashboard handling to use a singal bus. (#78)

* Dev upload public key to the server.
I need to make some changes to the UIX so I am making a checkpoint here.

* Change structure of hut to use signalbus.

* OAuth flow.

* Go back from account creation page.

* Refresh account list on change.

* Move to account list after creating a local account.

* Check to see if account is valid before logging in.

* Remove unused account data display.

* Disable navigation to unknown pages.

* Exit page.

* Removed old dash files.
* Change movement to always calculate vector.
This change makes it so that when the menu is opened, the player will stop being able to control the player, but the player can still slow down to a stop.

* Remove movement FOV.

* Fix dashboard not opening sometimes, or getting stuck.

* Removed placeholder url.
@Armored-Dragon Armored-Dragon self-assigned this Apr 1, 2026
@Armored-Dragon Armored-Dragon added enhancement New feature or request om-client Issues relating to the OpenMinerva client. labels Apr 1, 2026
* Session listing function.

* Basic session querying.

* Fixed text capturing.

* Instance HUD.

* Added active session display.
New network_manager to manage multiple sessions at once.

* Added debug bug fix for crashing the game when not logged in when viewing the sessions tab.

* Session advertising.

* New application manager files. (#83)

* Created new manager files.

* Created base server scene.
Created create_master_scene function.

* Start multiplayer server.

* Fixed dashboard error.
Could not find active sessions because there was not a function.

* Load scene root.

* Force spawn the host.

* Start server managers.

* Added function name to logger.

* Removed old files.

* Fixed port finder bug.
The function would never find a port, woopsie!

* Initial session advertising work.

* Removed unneeded Enum.

* Initial heartbeat work.

* Session Updating.
Sessions can now update settings on the fly.

* Session delisting.
Remove sessions from the session server.

* Settings placeholder.
List session servers.

* Remove session server from config.

* Add session servers.

* Don't add empty session servers.

* Hide session server dialog in settings.

* Use session server list to advertise sessions to.

* Error fixes.
Makes the debugger not angry with me.

* Properly destroy master scene when creating a server failed.

* Error handling.
Removed some out of date TODOs.

* Stop scene when replacing root.

* Removed hardcoded localhost values used for debugging and development.

* Moved TODO to it's own issue.
#85

* Fixed heartbeats using incorrect ID.

* Fixed port issues.

* Remove dead code.

* Attempt fix for rare network issue.

* Do not request new key if we have key already.

* Basic connection to multiplayer sessions.

* Bootstrap for managing startup and shutdown.

* Close and leave servers on shutdown.

* Moved functions from app manager to session manager.

* Add multiplayer support (#89)

* Spawn player on connect.

* Basic connected session switching.

* Synchronization testing.

* Maybe fix desync of loaded players?

* Removed interaction ray from player controller.

* Set active session from network.

* Kick players when a session is closing.

* Fixed all loggers to use Enums instead of magic numbers.

* NetworkCompression autoload instead of hard referenced library.

* Removed now unused RPC handlers.

* Made HTTP library a global.

* Fix errors.

* Added session disconnect button.
Fixed leaving world.

* Minor refactor.

* Fix player losing control of other sessions when connecting.

* Clean up peer when they disconnect.

* Changed node IDs.
This was causing errors or something?

* Change module active variable name from "active" to "module_active" to
prevent confusion.

* Fix controlling incorrect player when joining session.
* Remove local oauth library.
Use Godot-OAuth2 library.

* Adjustments with the current Alpha of godot-oauth2client library.

* Added warning label to warning log.

* Adjusted README.md to center Discord invite.
* Removed legacy media.
Updated names.

* Added branding icons.

* Changed physics settings.
I guess I forgot to include the actual license in the file.
* Moved existing dashboard into subfolder.

* Navigation buttons.

* Lots of partials and scaffolding.

* Account listing.

* Create account page.

* Remove accounts.

* Session list page.

* Session listing.
This also temporarally added some dev settings due to the settings page not being implemented yet.

* Settings page.
Changed from logs to log().

* Added joined server listing.

* Added exit page.

* Replaced 'logs' with 'log' as the logger function name.

* Adjust modules used in the dashboard. (#93)

* Change account database structure.

* Added response builder.

* Changed account handling and database storage.

* Changed Session Server api key handling.
Now instead of only a single API key per application, each account has its own api set for any given number of session servers.

* Fixed active account in the header bar.

* Removed unused legacy function.

* Show "Anonymous" as user when not using an account.

* Changed name of "GlobalAccount" to "Accounts".

* Moved dashboard from "/dashv2/" to "/dash/".

* Added debug.gd.
* Added POC physics and physics networking

This is largely how physics and spawnables will be handled. There is
still a lot of syncing issues relating to building a scene after a user
has joined.

* Client join syncing.

Client syncing testing. This will have the host send the server
_database variable and the _id to the joining client so the host and the
client are on the same page.

* Sync all positions to all users when a user joins.

* Debug entity spawn menu initial work

This menu is non-functional beyond being opened and closed.

* Debug spawn menu allow capsule spawning

This is made to test the client handling of spawning different types of
spawnables. Currently this works as expected.

* Test model loading

Reference for spawning in models.

* I could have sworn I fixed this dashboard name issue before?

* Dynamic model drag and dropping

This makes it so that any model can be dragged and dropped onto the
window to load the model into the scene. This breaks multiplayer
syncing, though proper asset handling will need to be created anyways
for the internet.

* Asset handling (#97)

* GLB model handling.

Tear apart a GLB model into base components and reassemble them using a
GLTF file.

* Added placeholder assethandling lib

* Fixed several UI errors.

The Assets page now functions!

* Changed "Assets" dashboard page to "Spawnables"

Assets are defined as parts of a spawnable. This change is to avoid
internal confusion.

* Client Editor Mode (#103)

* Basic "GodMode"

GodMode will likely be renamed to "ClientEditorMode (CEM)"

* Generic node spawning.

Use a nodes "pretty_name" when available.

* Node selection popup.

Adds the ability to add from a list of valid nodes.

* Added Gizmo3D addon library.

This addon will allow the transformation of nodes in-app.
There is also now a crosshair to help line everything up.

* Select nodes

* Minor networking fix.

* Use spawnablemanager delete node when deleting a node.

Also changes the baseplate to use a MeshInstance3D that has been
subdivided.

* Created schema builder to manage spawnables.

This cleans up a lot of the code in some of the files, and centralizes a
lot of the building.

* Minor networking fixes.

Clients can load in without crashing again.

* Better Gizmo handling

Gizmos are now handled through the spawn manager.
Session wide node_added and node_created signals.

* Spawnable.create abstraction.

This makes the code a touch cleaner as now either the host or a client
can spawn nodes using a single function call.

* Test syncing of node position and rotation.

Testing implimentation of node transform syncing across clients.

* Fix colliders from interacting with eachother on other servers.

Quick fix for colliders being active across sessions.

* Added scale to networked transforms.

Added crosshair.
Fixed node reference for network transformation.

* Removed unused function.

* Removed debug prints.

* Renamed developer functions.

These were originally test functions. These tests were successful so
they were promoted.

* Improved inspector handling.

Fail guards for interacting with invalid nodes.
Interacting with an invalid node forces a refresh of the inspector.

* Updated inspector icons.

Added fallback to try to get the correct type of icon for the node by
its class.

* Subviewport view.

This changes the primary game window to use a subviewport.

* Client Editor Mode.

This adds a start to the Client Editor Mode (CEM) for desktop.

* Destroy node network abstraction.

This abstracts the destroy node similar to the spawn node.

* Move event emitters.

Moves the event emitters to the spawnable manager instead of the cem
inspector.

* Gizmo management for the Client Editor Mode. (#104)

* Gizmo work.

* Hide gizmos when out of CEM.

When you are not in CEM, you can not see gizmos anymore.

* Fixed scale gizmo not reapearing after hiding.

* Light refactoring

* Gizmos parented under root.

Before they were parented under the first selected node, but this caused
selection box issues so the gizmo was moved.

* Single active gizmos.

This changes the gizmos so that you can only have one active gizmo
selection at a time. I think this will prevent confusion.

* Don't allow selecting root.

Also adds a fail-check to see if a node is valid before selecting.

* Better parent/child gizmo support.

When selecting a parent node, the gizmo selection system will target the
parent node instead of the child(ren). If you select the children again,
a new gizmo will be created.

* Fix multi-selection parent-child relationship for gizmos.

I have no idea why this worked, but sure.

* Spawnable saving and loading (#106)

* Basic foundation.

Commit before I go to bed. Adds basic saving functionality and almost
functional loading functionality.
Loading does not preserve scene heierarchy.

* Loading spawnables.

This refactors the loading code to persist the node hierarchy.

* File Browser (#108)

This adds a basic file browser to the "Spawnables" menu. This allows navigating the inventory screen and create or remove folders. 

* Added file traversal through the local spawnables inventory.

* Fixed icon size in CEM.

* Moved local file management to dedicated file lib.

* Rename nodes in CEM.

* Load saved spawnables from files.

* Test externalizing assets before saving to inventory.

* Use file name for imported model.

* Support Skeleton3D node.

* Creating and deleting folders.

* Delete items.

* UI fixes.

* Font adjustments.

* Update view when creating or deleting a file or folder.

* Easily see which files or folders are selected.

* Hide file extension in the file browser.
This removes the trailing `.tscn` at the end of files in the browser
view.

* Use pretty name when spawning node.

* Delete confirmation.
Adds a confirmation window when deleting something.

* Fixed inspector icons.
The fallback code forced Node3D

* Removed leftover print.

* Client Editor Mode Refactor (#115)

* Removed subviewport.
This added extra complexity for not much benefit.

* New blur shader for canvas element.

* Removed gizmo selection groups.
This might be a good idea, but the implementation was bad and is too
much to deal with at this point in development.

* Dashboard uses new blur effect.
Minor changes to buttons to allow direct icon usage.

* Fixed focus issue with the node search in the inspector.

* Adjustable inspector width.

* Remove focus from search area when clicking out of search area.

* Change mouse escape keybind to tab.

* Capture or uncapture mouse when swapping edit mode.

* CEM Toolbar.
Change the gizmo type to toggle translation, rotation, and scale.
Added placeholder counters.

* Toggle translation space between local and global.

* List spawnable count in the toolbar.

* Refactor Inspector.gd work.
Added custom popup menu.

* Basic Gizmo interaction.

* Select node by selecting it in the inspector tree.

* Gizmos respect settings again.

* When renaming a node, start editing immedately.

* Custom Add Node window.

* Spawnable count updating.

* Fixed var name.

* Removed and replace original inspector.gd.
This completes the major refactor.

* Toggle gizmo visibility when toggling CEM.

* Updated icon getter.
Icons are now packed into the metadata of the nodes when they are
created, which is prioritized.

* Hide nodes not intended to be spawned directly.

* Node reparenting.

* Deletion queue: Fix crashes with Gizmo and deleted nodes.

* Better metadata handling.
This will stop some console spam of useless errors.

* Windows can not be dragged out of bounds.

* Only deselect if we have a gizmo.

* Added missing LICENSE file to rpc-await addon.
Moved LICENSE for Godot icons to the Godot folder.
* Basic CEM camera.
Rewrote player.gd as player_new.gd.

* Fix camera rotations.

* Build a physical camera in the scene.
Instead of ripping the playeer camera out of the player, a new camera is
created and used for the camera.
The camera now has a visible model.

* Network player positions.
player.gd rewrite now syncs player positions.

* NSB force cameras to start disabled.

* Fixed multiple cameras in multiplayer.

* Fixeed network spawning.

* Replace player.gd with refactored version.

* Fixed header info.

* Removed unused event listener.
* Network CEM camera transform.

* Network node transformations.
* Save the collapsed state of the inspector nodes on a refresh.

* Basic node filtering.
There are some design changes that need to happen but this is functional
code. Style will follow.

* Fixed variable typo.

* Rewrote filtering.

* Added text searching to the inspector filters.
You can now find nodes by their pretty_name.

* Inspector selected state.
After the inspector tree is rebuilt, it will automatically persist the
selected tree node.

* Changed inspector colors to be blue.

* Added state_manager.
This will handle the active states of the application. For this PR it
will handle the mouse captured state by comparing the active states of
the client.

* Prevent controlling camera when interacting with inspector.
This will add a quick check to see if you are right clicking on the
inspector area before telling the CEM camera to rotate.
* Fix naming regression.
I seriously do not know how this happened. When I fixed this, the commit
somehow vanished or something.

* Schema rewrite.
Moves schema dictionary to dedicated schema.json file.
Reevaluated and removed "spawnable_type" int. This was intended to be a
memory optimization but in effect it causes more development stress than
the actual performance impact. In addition, the implementation caused
future-proofing issues.
Remove references to "CEM_Camera" and made the node into a generic
Camera3D node.
Added three more nodes to the schema "CharacterBody3D",
"DirectionalLight3D", and "WorldEnvironment". These nodes currently do
nothing, and were only added to fix errors present in the debug world.
They can be added but will not do anything useful until CEM gets the
Node Property Editor window.

* Changed how icons are stored in the schema.

* Added node icon fallback.

* Removed out of date comment.
* Added Discord RPC addon.
Added basic Discord RPC functionality.

* Removed export_presets.
* Transform properties.

* Use rotation degrees.

* Added visibility toggle.

* Initial sub-property support.

* Rewrote node property reader.

* Fixed early exist bug in for loop.
Added float and int value fields.

* Network property change.

* Fix function name mixup.
Whoopsie.

* Color picker.
Abstracted moveable_window.gd for future windows.

* Removed transparency from color picker popup.

* Hide the NPE when invalid node selected or no node selected.

* Session player count.
This hooks up the player cound in the CEM to show the current amount of
connected players.

* Minor change in the default grid skybox.
* Here we go...
What I thought was going to be a quick 10-minute change is going to
become a week-long escapade to fix a race condition.
Player controllers are now a spawnable.
Added "CollisionShape3D" and "RayCast3D" as spawnable nodes for the
player controller.
Changed player position sender to use spawnable native transform calls.
Major refactor in spawnable_manger to help address race condition, and
lots of comments for my sanity.
Player database is now synced as well when joining a server.
Player auto respawning. When a player node is destryoed, it is respawned
after a short time.

* Fixed the problem.
It was not a race condition, it was me unexpectedly modifying the
database_id in the middle of syncing.
* Removed unusued JWT library.
This will be moved to https://github.com/OpenMinerva/godot-jwt at a
later time.

* Removed dead code, added notes.

* Remove account_server libs.
This will be reimplemented at a later time.

* Removed NetworkCompression lib.
I have sense discovered Godot 4 has built-in compression utilities.
https://docs.godotengine.org/en/stable/classes/class_enetconnection.html#enum-enetconnection-compressionmode.
If more compression becomes required, I can try again at a later date.
This networking path also would have bypassed the spawnable transform
networking.

* Removed unused and/or unimplemented crypto libraries.
As with everything else so far, these will be reimplemented at a later
time.

* Removed "Enum" global Autoload.
"Enum" is now a global class.

* Removed session_query from the autoload.
Right now this is only used for UI elements. If this functionality ever
becomes required elsewhere, it can return to the scene tree.

* Removed unusued "Assets.gd" file.

* Removed unusued "response_builder.gd".
This might return at some point.

* Removed (mostly) unusued time library.

* Removed @warning_ignore inside of signal_bus.
I just disabled the warnings for the whole project. This seems more
reasonable.

* Removed legacy debug menu.
So long old friend!

* Removed Random from autoload.
Refactored Random as a class. Now uses more preformat method of
generating a random string. Right now this is an insignificant
improvement, but the little wins go a long way.

* Explicitly typed the variables in "random.gd"

* Added more explicit types.
Refactored node syncing on join. The handshake process no longer jumps
between files.

* Refactored and removed dead functions.

* Fixed two errors.
Incorrect signal listeners.
Removed reference to non-existent node.

* Fixed host specific issue when starting a world.

* Removed duplicate listener declaration.

* Fixed schema references.

* Quieted warnings.
Some of them were not "fixed", but can be worked through and addressed
later as needed.

* Simplified server / client connection flow.
Extracted basic Multiplayer API code into class for better readability,
pending more refactoring.
Created function to streamline creating a database entry.
Removed complex status tracking in favor of simple boolean check to see
if task was successful.

* Moved some reused code to another sub-function.

* Slight simplification of internal session database.

* Fixed formatting issues.
In the future, files will be required to only have single spacing
between functions.

* Nevermind, two newlines are the standard.
https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html#blank-lines
* Mitigate hard crash when closing application.

* Add ad-icons library.

* Added "Create World" button to the dashboard.

* Added "Home" base scene type.
Home scene is now the scene loaded into at boot.

* Fixed multi-session handling for advertising servers.
New Empty scene.
When joining a server, the client will load the Empty scene, and
populate the world based upon the database provided by the host.

* Mitigated player spawning duplication on clients.

When a client connects to a server, they try to spawn themselves twice,
this adds a bandage fix for this issue.

* Rewrite of spawnable loading.

This rewrites the entirety of the spawnable loading procedure. In this
state the world loading is not fully functional, but I need a checkpoint
so that I can revert back to this state later if needed.
The next step is to handle reconstruction of the sub_resources.

* Loading a TSCN file now parses the properties and applies them
client-side.
This is not multiplayer safe yet, but this is functional. I am making a
checkpoint for functional code.

* Set transforms on newly spawned nodes.

* Sync asset database on connection.
This makes it so that the asset database on the server is synced to the
client. However the client does not yet know how or where to use these
resources.

* Added resource / asset relation syncing on client join.
This fixes several issues and now makes the joining process feature-compatible from before worlds were hard-coded and hard-loaded from disk. Sparing all bugs and other issues.

* Remove the empty node from the scene when loading the world from file.

* Only preform the reparenting step if there is anything to reparent.
This is more of an enforcement change so that only the host when
initializing the world needs to reparent the nodes.

* Added error check for resource in set_resource.

* Removed older TODOs.

* Remove commented code.

Not needed now!

* More comment housekeeping.

More outdated TODOs / HACKS removed.

* Save world as spawnable.

This is the rough initial implimentation of saving a world. Right now
the app will dump it into the spawnable folder instead of separating it
to a dedicated folder.

* Name worlds before saving.

When saving a world, the copy of the world that is saved will use the
current instance name.

* Set the name of the session when posting to the session server.

* Remove more invalid nodes from the save.

This expands the "remove player controller" function to strip out more
nodes before saving the file to disk.
Introduce the "persistent" metadata field to easily prevent saving
nodes.

* Change grid shader.

I didn't like the previous shader, and I forgot where it came from. This
shader I can source and I like it more.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request om-client Issues relating to the OpenMinerva client.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant