Skip to content

NodeEditorAPI value editor additions #20

Closed
QuackCola wants to merge 897 commits intoFacepunch:masterfrom
QuackCola:nodeeditor-valueeditor-additions
Closed

NodeEditorAPI value editor additions #20
QuackCola wants to merge 897 commits intoFacepunch:masterfrom
QuackCola:nodeeditor-valueeditor-additions

Conversation

@QuackCola
Copy link
Copy Markdown
Contributor

@QuackCola QuackCola commented Nov 26, 2025

Added both IntEditor & GradientEditor for their respective value types.

OpenGradientEditorPopup in GradientEditor.cs could probably be added to its own class as a static method or just be an extension method like Gradient.PaintBlock is but ill save that for another PR.

@QuackCola QuackCola changed the title Added both IntEditor & GradientEditor for their respective value types. NodeEditorAPI Add both IntEditor & GradientEditor for their respective value types. Nov 26, 2025
@QuackCola QuackCola changed the title NodeEditorAPI Add both IntEditor & GradientEditor for their respective value types. NodeEditorAPI Add both IntEditor & GradientEditor ValueEditors for their respective value types. Nov 26, 2025
@QuackCola QuackCola changed the title NodeEditorAPI Add both IntEditor & GradientEditor ValueEditors for their respective value types. NodeEditorAPI value editor additions Nov 26, 2025
@QuackCola QuackCola force-pushed the nodeeditor-valueeditor-additions branch 3 times, most recently from 01c181c to 5f15cd2 Compare December 5, 2025 12:38
@CarsonKompon
Copy link
Copy Markdown
Contributor

You should post some pictures/videos of what these are so I know what I'm looking for when I sit down and test it myself

@QuackCola QuackCola force-pushed the nodeeditor-valueeditor-additions branch from 5f15cd2 to 2f40a39 Compare December 5, 2025 13:17
@QuackCola
Copy link
Copy Markdown
Contributor Author

You should post some pictures/videos of what these are so I know what I'm looking for when I sit down and test it myself

@CarsonKompon Ive slapped together two test nodes in shader graph as an example to show what they would look like.

2025-12-05_09-05-19.mp4

@QuackCola QuackCola force-pushed the nodeeditor-valueeditor-additions branch from 2f40a39 to 9895d48 Compare December 5, 2025 15:52
@QuackCola QuackCola force-pushed the nodeeditor-valueeditor-additions branch from 7ebc4f5 to aac1cdb Compare January 7, 2026 14:14
Copilot AI review requested due to automatic review settings January 13, 2026 18:38
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds two new value editors for the node graph system: IntEditor for integer values and GradientEditor for gradient values. These editors follow the existing pattern established by FloatEditor and ColorEditor, providing interactive UI controls for editing node parameter values.

Changes:

  • Added IntEditor.cs with range-based slider and drag-to-edit functionality for integer values
  • Added GradientEditor.cs with popup-based gradient editing
  • Both editors integrate with the node graph's value change notification system

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 8 comments.

File Description
game/addons/tools/Code/NodeGraph/IntEditor.cs Implements an integer value editor with slider and drag-to-edit modes, similar to FloatEditor but for integer types
game/addons/tools/Code/NodeGraph/GradientEditor.cs Implements a gradient value editor that opens a popup with GradientEditorWidget for detailed gradient editing

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread game/addons/tools/Code/NodeGraph/IntEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/GradientEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/GradientEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/GradientEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/IntEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/IntEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/IntEditor.cs
Comment thread game/addons/tools/Code/NodeGraph/GradientEditor.cs
@handsomematt
Copy link
Copy Markdown
Member

These look good to me @CarsonKompon

lolleko and others added 14 commits March 2, 2026 11:50
Keep temp list so we can sort in place

Cache occlusion sort predicate in static to avoid action allocation
Fixes timing scopes to more accurately represent a per-frame main thread breakdown, and prevents spikes when GC is executed.

- **GcPause**
  - New separate timing scope showing time spent in GC per frame
  - GC pause time is subtracted from all other scopes, so each scope now only tracks its own code execution and no longer includes GC overhead
  - e.g. when GC occurs during the audio scope, the audio scope no longer spikes to 20ms
- **AudioMixingThread** removed from the main scopes
  - Runs on a separate thread, so its timings are effectively meaningless in the main thread view
  - All other scopes are main thread only
  - No longer relevant given the audio optimisation work done over the past months
- **Scene** scope removed
  - Didn't make much sense as it was an aggregate wrapping many other timing scopes
  - Replaced with a finer `Update` scope that tracks `Component.FixedUpdate`/`Update`
- **Editor** scope no longer shows in-game
- Scopes reschuffled
  - e.g. verlet rope physics traces are now tracked under the physics scope
  - Audio occlusion queries are now tracked under the audio scope

https://files.facepunch.com/lolleko/2026/March/02_12-59-QuixoticMarten.png
* Move duplicated ProjectInfo building to extension methods
* Add moviemaker package reference to editor packages
- Fix last child not getting correct `:last-child` pseudo-class until a frame late
- Run UpdateChildrenIndexes right away instead of deferring to next frame
- Add some tests
…Facepunch#4180)

* Make it easier to unit test movie compilation
* Fix track compilation leading to invalid blocks
https://files.facepunch.com/lolleko/2026/March/02_19-27-PlushGalapagosalbatross.png

Co-authored-by: darkfated <darkfated@icloud.com>
Co-authored-by: Lorenz Junglas <4759511+lolleko@users.noreply.github.com>
* added commandlist at root panel level so we dont have 1 commandlist per panel

* added codepath where panel renderer write to the panel roots commandlist instead of their one

* added rcon to toggle between both at runtime

* cache transform

* Build flat commandlist for panels

* added globalcommand list in UI system

each rootpanel command list will be appended to this global commandlist so we reduce overhead while drawing.

* removed debug Ui

* gather children command lists

* use Count instead of Count()

- remove some other code

* renamed FlatCommandList to PanelCommandlist

removed more unused code

* removed ref to cached transform

* simply loop

* remove useless line, remve unsafe keyword, remove should early cull

* added separate profiling scope for building, gathering and executing command lists

* forgot this

* check if yoga layout rect has changed before setting is render dirty

* dont need to draw this quad

* Dont append scissor every frame as we cache them.

* add seaprate scissor function that does append ot attributes only on rebuild

* only update scissor attributes if it has changes, otherwise used cached commandlist

* panel renderer check if panel has layer

* only build transform commandlist if transform has changed, otherwise used the cached transforms

* fixed some UI widgets not updating due to their opacity correctly. This is the bug where widgets wouldnt be visible until you hovered them

* use span for iterating commandlists

* dotnet format

* async SVG and texture loading mark as dirty once loading is done

* dont render UI panels flagged as render manually
…ture, let the CommandList handle our RTs for us
Adds left/right scroll buttons to content block rows as an alternative to drag scroll
QuackCola and others added 26 commits March 30, 2026 18:49
* Fix GCN/Polaris crash when averaging clusters, snap positionSs to the top-left pixel of the 2x2 quad to avoid cluster divergence without QuadLaneReadAt

* update shaders
)

**Broadcast**
now encodes the wire payload just once and sends the same bytes to
every recipient, before we did one redundant compression per connection.
This primarily reduces CPU load on the server/host.

**Chunking**
Large messages are now compressed before chunking rather than after.
Resulting in slightly smaller payloads.
The receiver now decompresses a single reassembled payload instead of
decompressing every chunk independently, significantly reducing CPU load
on receiving clients.

**Refactor**
Chunking and compression are now low-level wire concerns handled by
Connection rather than being mixed into the high-level message types.
The old `InternalMessageType.Chunk` enum is removed; chunk framing uses
a dedicated wire flag byte alongside `FlagRaw` and `FlagCompressed`.

**Results (Chunking changes)**

Synthetic data, results on real payloads may differ.

Benchmarks (1000 GOs / 2000 components, ~1MB payload, 500 iterations):

Wire size (chunk-first-then-compress):    275KB
Wire size (compress-first):               259KB  (5.7% smaller)

Send  chunk-first:                        0.85 ms/op  (old)
Send  compress-first:                     0.88 ms/op  (new)

Recv  chunk-first:                        1.16 ms/op  (old)
Recv  compress-first:                     0.34 ms/op  (new, 3.4x faster)
…al key names (Facepunch#4429)

* InputRouter uses scan codes (make AZERTY not shit), UI related input remains key codes
* Input.GetGlyph and Input.GetButtonOrigin return the local key name e.g if forward is bound to "W" it will show as "Z" on azerty layouts
…isbands while you're joining, fixes "Lobby Disbanded" spam, lingering socket, and getting stuck in a loading screen (Facepunch#4431)
* Menu: PartyMember hover over opens friend popup, so you can leave party again
* Menu: Fix News component
…acepunch#4434)

* RadiusDamage: batch and parallelize LOS traces, reduce allocations

- Reduce LINQ usage
- Deduplicate LOS traces per root GameObject (one trace instead of per-RB + per-damageable)
- Run all LOS traces via Parallel.For
- Rent temporary arrays from ArrayPool instead of heap allocating
- Pass through Occlusion flag to skip traces entirely when disabled

* Fix dmg fallof being inverted
* Add Component.DontExecuteOnServer to PanelComponent
* Add more headless checks to input system to prevent native crashes trying to access inputsystem
…because Bodies and BodyTransforms are two independent syncs and one may arrive before the other (Facepunch#4439)
* add glass footsteps

* add step launch

* adjust volume
* Some dead config vars

* ShadowMapper work directly with SceneLight, we can't reliably create derived light types from native because the lightdesc is modified later

* Unused on light_environment
…re before (Facepunch#4447)

* Remapped a few other inputs to fix their glyphs to match what they were before

* whitespace fix
…punch#4435)

Previously, we would call GPUBuffer.SetData many times through a loop.
This is now replaced by a single call after all sprite groups have been processed.

This reduces GPU fencing and CPU -> GPU transfer overhead.
* Upload SpriteBatchSceneObject buffer inside render context

* Bump particle pool size
…nually set `LoadingScreen.IsVisible` now (Facepunch#4412)

This means games can pop up a LoadingScreen of their own without it getting stomped immediately.
@sboxbot sboxbot closed this Apr 15, 2026
@QuackCola QuackCola deleted the nodeeditor-valueeditor-additions branch April 15, 2026 16:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.