File dialog requests can now specify the share and access mode they want out of the opened file. This means read-only access is now possible.
While doing this I noticed that the SDL3 backend had a memory leak *and* didn't match the behavior of the other backends. Cleaned up the code to avoid that.
In-engine commands that *can* specify read-only access on file open now do.
* Combine TileChangedEvents in SetTiles
* Raise event after regenerating collision
* continue, not return
* No need for GetComponent
* Swap TileRef for Tile + Vector2i
* Estimate size of tileChanges
* Initial commit
* Add tile rotation/mirror perms
* Nicer UI for the rotation
* Review fixes (also seemed to have missed applying the serialization reading oops)
* One less byte, one less struct size!
* Pretty sure it goes here too
* Fix error
* Fix warnings in SharedJointSystem
* Fix reference to EC TransformComponent method
Replaces call to TransformComponent.GetMapUid with SharedTransformSystem.GetMap
* Fix obsolete calls in SharedPhysicsSystem.Contacts.cs
Fixes a couple calls to obsolete varients of SetAwake and an obsolete call to RegenerateContacts by converting them to their Entity<T> varients
* Fix obsolete call in SharedPhysicsSystem.Components.cs
Adds one set of parenthesis to convert a 'uid, comp, comp, comp' call to an 'Entity<T, T, T> call.
* Removes unused local var
Removes an unused list of broadphases that was being allocated in TryCollideRect
* One-line fixes in SharedPhysicsSystem.Islands.cs
Fixes all of the easy warnings regarding physics island processing, the rest require more complicated changes than a simple argument rearrangement
* Fix obsolete method call in SharedMapSystem
* Fix a few obsolete ToMap calls in EntityLookup.Queries
* Fix calls to obsolete EntityCoordinate methods in SharedMapSystem.Grids
* Fix calls to obsolete EntityCoordinate methods in SharedLookupSystem.ComponentQueries
* Fix a few obsolete method calls in entity spawning
* Fix obsolete method calls in MapLoaderSystem
* Fix obsolete method call in GridFixtureSystem
* Fix obsolete IsMapInitialized call in SaveMap command
* Fix obsolete MapPosition reference in Client.EyeSystem
* Fix obsolete EntitySystem.Get<TSystem> references in DebugLightTreeSystem
* Fix obsolete EntitySystem.Get<TSystem> reference in DebugEntityLookup command
* Fix obsolete method calls in SpriteBoundsOverlay
Slightly more complicated than the rest, but it's really just changing an unused dependency over to use SharedTransformSystem
* Remove unused IClyde references from controls
LineEdit and TextEdit never use their IClyde dependencies and it generates a warning so yeet
* Remove use of EntitySystem.Get from lightbb command
* Fix DebugDrawingSystem
Removes a bunch of unused private IEntityManager vars
Also removes an obsolete use of TransformComponent.GetWorldPositionRotation
* Removes duplicate position set when splitting grids
There's nothing saying why this is this way and the blame looks like it was an oversight when replacing a bit where they set position and then rotation
Please, oh Chesterton's Fence, spare me your wrath
* Fix obsolete method use in PlacementMode
* Fix obsolete method use in Placement Modes
* Removes unused local var in gamestate management
* Fix unreachable code warnings in gamestate management
Use #else sections to make sure they don't complain about being on the wrong side of a throw
* Fix obsolete ToMap use in EyeManager
* Make InputManager use a sawmill to log
* Fix obsolete ContainerManagerComponent method calls in ContainerSystem
* Make ClientPrototypeManager use a sawmill for logging
* poke tests
* Use LocalizedEntityCommands for SpriteBoundsOverlay toggle
* Use LocalizedEntityCommands for system toggles
---------
Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
* Fix ResPath CanonPath
Apparently this is supposed to standardise to / but this isn't always the case. Alternatively we could just assert for performance reasons I'm good with either. The comment as written says this should happen.
* Fixes
* change
* assert
* Fix bad respath input
* Buffer
* Merge conflicts
* review
* Fix
* feat: shaders now can accept array of Color as parameter
* fix: Clyde.SetUniformDirect for Color[] doesn't mutate original array, removed invalid 'in' keyword on SetUniform
---------
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
* Start converting SDL2 backend to SDL3.
Game starts, but a lot of stuff is broken. Oh well.
* Fix text input
SDL3 changed the API somewhat, for the better. Changes all over UI/Clyde/SDL3 layer.
* Fix mouse buttons being broken
* Remove records from SDL3 WSI
The fact that this shaved 2-3% off Robust.Client.dll is mindboggling. Records are so bad.
* Set Windows/X11 native window properties
* Fix window resize events getting wrong size
oops
* Remove "using static" from SDL3 WSI
Seriously seems to hurt IDE performance, oh well.
* Apparently I never called CheckThreadApartment().
* Add STAThreadAttribute to sandbox
Necessary for content start
* Set window title on creation properly.
* Load window icons
* Fix GLFW NoTitleBar style handling
Yeah this PR is supposed to be about SDL3, so what?
* Implement more window creation settings in SDL3
Mostly the ones that need a lot of platform-specific stuff to work.
* Make fullscreen work properly in SDL3.
* File dialogs with SDL3
Removes need for swnfd.
* Fix some TODOs
* Fix WebView build
* OSWindow rework
OSWindow now created ClydeWindow and WindowRoot immediately, but non-visible in the background
Also added the ability to programatically resize an open window
* Implement window resizing on SDL2
* Revert OSWindow changes
* Split `Show()` into `Create()` and `Show()`
* Formatting
Pulling entity systems into direct fields in Clyde to make it now painful. This required adding an event to ClientEntityManager when these become available, as they are only available when the client is in a server/single player.
* Add MapSystem.GetMapOrInvalid
This is effectively the same exact behavior as IMapManager.GetMapEntityId. Adding this so I don't have to consider whether warning fixes using MapSystem.GetMap() instead would change behavior.
* Warning fixes around IMapManager.GetMapEntityId
* Fix tests
* Add load parameter support to RSIs.
Currently only supports turning sRGB off. RSIs with custom load parameters are not thrown into the meta-atlas.
As part of this, TextureLoadParameters and TextureSampleParameters has been made to support equality.
* Add UV2 channel to vertices.
This is a bad hack to make displacement maps work in Robust. The UV2 channel goes from 0 -> 1 across the draw and can therefore be used by displacement maps to map a separate displacement map layer on top of the regular meta-atlas RSI texture.
This creates float inaccuracy issues but they weren't bad enough to completely void the feature. I'm thinking I learn from this experience and completely re-do how UVs work with the renderer rewrite, so that hopefully won't happen anymore.
This required dumping the optimized PadVerticesV2 because the changed struct size made it impractical. RIP.
I don't like this approach at all but the renderer is slated for a rewrite anyways, and all shaders will need to be rewritten regardless.
* Add CopyToShaderParameters for sprite layers.
This effectively allows copying the parameters of a sprite layer into another layer's shader parameters. The use case is to copy texture coordinates for displacement maps, as the exact map used changes depending on orientation. It also enables animations to be used though I didn't use that personally.
Wow this API is bad. Well the API is just terrible for perf for multiple reasons but not fixing that...
1. Was using DSA GetTextureImage() instead of GetnTexImage() so only worked if DSA was available.
2. Was using stackalloc with a potentially huge amount of memory (original bug).
3. Had an off-by-one for the vertical coordinate.
All fixed now.
Fixes#5001