* Avoid destroying and recreating record list on every update message
* Add early-out on nullptr input
* Remove sussy null suppress
---------
Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
(cherry picked from commit d0a2187a9bf11de9c1d7bcde62f403e0cb845c07)
* Add fill level sprite support for equipped items
* Add fill sprites for held/equipped spears
(cherry picked from commit ed4ae1628c1fbea528dd4a320efc6fd402a7ccfd)
* Character menu asks if you want to save your character on exit
* Fix
* Another fix, little mistake by me
* Update Content.Client/Lobby/UI/CharacterSetupGuiSavePanel.xaml.cs
---------
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
(cherry picked from commit adcbe8d0be2ccdc76dd5e17af0206c623786874b)
* unhardcode thief MaxSelectedSets
* we do a little copy paste :trollface:
* :trollface:
---------
Co-authored-by: deltanedas <@deltanedas:kde.org>
(cherry picked from commit 0910983c4b538caf1445b56ca74bb4082de484f3)
* randomize iconSmoothing
* Revert "randomize iconSmoothing"
This reverts commit 094356f975737c0af24ce39d849aec7852b9af6e.
* try 2
* trying work with client-server communication
* still dont work
* Tayrtahn good suggestion
* remove outdated code
* Fix!
* move data to Appearance
* Update RandomIconSmoothComponent.cs
(cherry picked from commit d6e0114126f778c298763d05fa59ee62c28f595a)
* Syndicate thief, spy, medic
* Fixes description for nukies
* update description for uplink
* Implement the radial menu
* forgot these were necessary to push lol
---------
Co-authored-by: plykiya <plykiya@protonmail.com>
(cherry picked from commit aded74a88afd5f6ef0b0aef3eb9e60b630179e12)
* Deploy foldable
* Add NetworkedComponent and access to the component
* Add handled to afterinteract
* Use drop target location instead of setcoordinates
* Put back in hand after failed deploy
This prevents dropping the bed when clicking while inside a locker.
* Created BaseDeployFoldable for folding chairs, body bags, and rollerbeds
* Add dragdrop to fold rollerbed to hand
(cherry picked from commit 6a5cc883cebd20f87144e3f8f37086d7efb042de)
* GET WORLD POSITON, ROTATION
* Missing parentheses
* ui system depndency
* the issue
* Unused
* Let the function do the transform
---------
Co-authored-by: plykiya <plykiya@protonmail.com>
(cherry picked from commit a87efd7d0157a0c4074e639b1da923f5c335f663)
* Add a PointLight to firelocks when warnings are active
* Remove power requirement for lights
(cherry picked from commit 789453adf0cf1b3310f75ef3ac5b1240a09be9b8)
* Get rid of a bunch of obsolete usages
* position
---------
Co-authored-by: plykiya <plykiya@protonmail.com>
(cherry picked from commit a03b88979e25a9778a30f30612790f6966369fca)
This may be a breaking change for some stuff, I only tested basic combat stuff + throwing.
This fixes the coordinates setting an off-screen position to the top-left pixel and blocks throw attempts as a result.
(cherry picked from commit aca878c9f753538d64372f380df536098701f747)
* Change from obsolete method in ExplosionOverlay
* Send AppearanceSystem through constructor
(cherry picked from commit 7da2fb1218fb745506919a39d553ca63265cb4ca)
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->
# Excerpt
<!--
Explain this PR in as much detail as applicable
Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->
thou shall be thy axe that continues the work - to behead all
`EntityQueryEnumerator`s, and thus i require it. 'tis imperative i have
at thee and perform the duties. if the plague bearing shitcode is not
cut at thy roots, it shall only nest a deeper grave and spread locusts.
---
# Description
It has been a reoccuring theme that someone irresponsibly uses
`EntityQueryEnumerator` and then suddenly server performance is worse. A
lot of these cases involve using EQE to iterate a timer on a component,
to start or stop an effect after a delay. Rather than iterating `frames
* n` times per second FOR EVERY UNIQUE SYSTEM THAT DOES THIS (QUITE A
FEW), we instead iterate `frames` per second regardless of systems using
the Event Scheduler.
The Event Scheduler itself is a list of events that wait to be triggered
after a delay. Rather than iterating through all of them, they are
sorted in order of occurance using a PriorityQueue. I love priority
queues because they sort as you enqueue to them, and apparently the sort
complexity is logarithmic? But mostly because of the former.
I chose to write the scheduler the way I did because the choice to use
async seems too big for me alone. So this system is synchronous and
updates on game time.
This is mostly a practical optimisation. The code which I have written
is almost certainly not optimal, but the simple act of replacing EQE
delays will significantly improve server performance anyway. Rust
monsters feel free to rewrite the event scheduler to be more performant.
NOTE: For some reason PriorityQueue is banned on the client, and
configuring it requires editing a RobustToolbox file. So for now this
system is restricted to Content.Server until we start using our engine
fork.
---
# TODO
<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's
good to leave future references
-->
- [x] Working queue of events ordered by execution times
- [x] A function to enqueue any-event-defined-ever into the scheduler
with a delay
- [x] Delay the event, and then fire it
- [x] Implement retroactive schedule cancelling
In a future PR:
- Add ```System.Collection.Generic.PriorityQueue`2``` to whitelist in
`RobustToolbox/Robust.Server/ContentPack/Sandbox.yml`
- - Shared files had to be relocated to server because they were banned
on the client and would cause an exception.
- Investigate insert performance as more systems are added to use the
EventScheduler
- - MLGTASTICa rose the idea of 'buckets' as an optimisation.
- - I theorise multiple priority queues for different types of events
might also work.
---
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->
<details><summary><h1>Media</h1></summary>
<p>
Demonstration:
https://youtu.be/CGB6SDWGc-Q
Response to MLGTASTICa, stress testing:
https://youtu.be/30OA06Pzhtk
</p>
</details>
---
# Changelog
<!--
You can add an author after the `🆑` to change the name that appears
in the changelog (ex: `🆑 Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->
- add: Added the EventScheduler system that lets you raise an event at a
certain time or after a delay without killing performance.
- fix: Optimised EMP by migrating from EQE to the new EventScheduler
system.
Removed all unused variables i could find, built and tested on a simple
upstart and clicking trough most systems.
Change Loc references to localization.
<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->
<details><summary><h1>Media</h1></summary>
<p>
"using Robust.Shared.Prototypes;"
to
""
"[dependency] private readonly ISpriteComponent"
to
""
</p>
</details>
---
No CL this isn't player facing.
---------
Co-authored-by: ilmenwe <no@mail.com>
My previous code for melee weapon range modifiers was missing, this PR
restores and adds actual functionality for weapon range modifiers in all
instances of weapon range, as well as adds specific range modifiers for
light attack and disarm attack.
🆑
- fix: Fixed melee weapons "Bonus range for heavy attacks" not
functioning correctly.
- add: Added support for melee weapons having bonus range on disarms or
light attacks.
* Added the ability for blood to track DNA using ReagentData; Forensic Scanner now accounts for solution DNA, non-DNA holders have "Unknown DNA"
* Removes touch DNA for puddles, adds DNA to vomit
* DNA now leaves traces in containers and those marked without don't show DNA on scan (except for puddles), gibbed parts have DNA
* Fix stupid metamorphic glass bug grrr
* Removed SpillableComponent since DnaSubstanceTraceComponent is used instead
* Removes data field from maps, adds DNA tracking for some missed items
* Give default value, fix missing values.
* Fixes recipe bug
* Review changes
* Make the Data list into a nullable type
* Revert map changes
* Move gibbed unknown DNA to forensicssystem
(cherry picked from commit 07174d0aaf2832bc6ecc3a6baba21bc0aa5e0556)