Repository navigation
v1.18.0
Cluster scenarios reach every followed scope, servers report per-connection view hashes, damaged save slots read as missing, and 3D views gain portals, runtime emissive and opacity, frame timing in the overlay and camera/pick on hand-filled scenes. RecursiveAI.OneGame.Physics ships as 1.18.0-preview.1.
Added
- Cluster scenarios can command a followed scope:
command: { entity: Arena, name: Hit, scope: 2 }on a client node (and thecommand_sendop's newscopeargument) looks the entity up in that scope's replica and forwards the command to its authority, whose trust checks apply as for any player. Unfollowed scopes fail withnot_found. net_status.followedlists every other scope the client's node is subscribed to, including ones the game subscribed to itself, and each entry carriesfullHashandfiltered; for a filtered replicahashis the view hash the authority computes for that connection.- Server
hash_atnames the connection of each view (clients) and takes an optionalclient, returning that connection's view hash asview;ServerHost.HashesAt(tick, client)is the API form. - A 3D view can be shown inside another (portal windows, monitors, mirrors):
new Offscreen3D(renderer, w, h, format, sampled: true)renders anotherScene3Dinto a target thatMaterial3D.SetTexture(MaterialSlot3D, texture)binds to any material texture slot, with no model re-upload.ResetTexturerestores the file's texture. - Runtime material changes without reloading a model:
Material3D.Emissive,EmissiveStrengthandOpacity, andModelInstance3D.Opacity(plusLabel). Translucent surfaces use the existing blended path (far to near, no depth write, no shadow or outline). - The debug overlay shows per-frame timing: CPU frame, simulation and draw times with a history bar chart, and GPU pass times where the backend has timestamps. The
overlayandinfooperations return the same numbers astiming.GameInstance.Timings,GameInstance.ReadGpuTimingsandRenderGraph.ReadPassTimesare the API; timing runs only while the overlay is shown. camera,pickandprojectwork for aRender3DStagethat has noSceneView3D:Render3DStage.Manual(ManualScene3D,IScene3DProbe) answers over the stage'sScene, and games with their own stage implementIScene3DStage.Manual.
Fixed
SaveSlots.Existsis false for a slot whose save bytes are damaged (truncated or garbled): it now checks the recorded payload hash, without restoring a world.Listleaves such slots out too.