Compare commits

..

2000 Commits

Author SHA1 Message Date
DrSmugleaf
dbb45f1c13 Version: 148.4.0 2023-08-21 23:19:25 -07:00
Leon Friedrich
6284e16b64 Add recursive PVS overrides and remove IsOverride() (#4262) 2023-08-21 23:17:53 -07:00
DrSmugleaf
f6c55085fe Version: 148.3.0 2023-08-21 19:01:15 -07:00
DrSmugleaf
30eafd26e7 Fix test checking that Robust's and .NET's colors are equal (#4287) 2023-08-21 16:26:06 -07:00
Pieter-Jan Briers
63423d96b4 Fixes for new color PR (#4278)
Undo change to violet color

add to named color list
2023-08-21 23:06:20 +02:00
Morb
474334aff2 Make DiscordRichPresence icon CVars server-side with replication (#4272) 2023-08-21 10:44:40 +02:00
Leon Friedrich
be102f86bf Add IntegrationInstance fields for common dependencies (#4283) 2023-08-21 14:35:27 +10:00
Tom Leys
d7962c7190 Add implementation of Random.Pick(ValueList<T> ..) (#4257) 2023-08-21 13:56:18 +10:00
Leon Friedrich
7fe9385c3b Change default value of EntityLastModifiedTick from zero to one. (#4282)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2023-08-21 13:55:41 +10:00
Kara
a9d9d1348a Tile texture reload command (#4268) 2023-08-21 13:46:58 +10:00
Leon Friedrich
4eaf624555 Allow pre-startup components to be shut down. (#4281) 2023-08-21 13:45:57 +10:00
Leon Friedrich
e37c131fb4 Prevent invalid prototypes from being spawned (#4279) 2023-08-21 12:29:02 +10:00
PrPleGoo
9df4606492 Added colors (#4278) 2023-08-20 18:48:00 +02:00
Pieter-Jan Briers
3be8070274 Happy eyeballs delay can be configured. 2023-08-20 17:45:43 +02:00
metalgearsloth
8a440d705f Version: 148.2.0 2023-08-20 15:53:35 +10:00
metalgearsloth
5849474022 Add IsPaused to EntityManager (#4277) 2023-08-20 15:50:11 +10:00
c4llv07e
b7d67c0ece Fix UserInterface.SetActiveTheme didn't update theme (#4263) 2023-08-20 03:36:38 +10:00
Pieter-Jan Briers
b04cf71bc0 Expose SpinBox.LineEditControl 2023-08-19 16:32:05 +02:00
Leon Friedrich
ea87df649a Add readonly VV attributes to various fields. (#4265) 2023-08-20 00:13:18 +10:00
metalgearsloth
dab7a9112f Version: 148.1.0 2023-08-16 19:19:46 +10:00
DrSmugleaf
d3dc89832a Add component that lets entities ignore BUI range checks (#4264) 2023-08-16 15:41:01 +10:00
Leon Friedrich
3ade9ca447 Add support for f16-f24 keys (#4261) 2023-08-13 22:15:18 +10:00
Leon Friedrich
149e9a2613 Fix a gamestate bug. (#4260) 2023-08-13 11:22:15 +10:00
ElectroJr
d164148ce2 Version: 148.0.0 2023-08-12 19:40:55 -04:00
/ʊniɹɑː/
d898b52449 more richtext (#4187) 2023-08-13 09:34:44 +10:00
TemporalOroboros
dcf7a1e580 PixelToMap (#4188) 2023-08-13 09:34:33 +10:00
Pieter-Jan Briers
65c6bb74eb Mark a bunch of NuGet dependencies as private compile assets (#4258) 2023-08-13 07:22:14 +10:00
Leon Friedrich
d6d88bea91 Fix replay handling of bad prototype uploads (#4259) 2023-08-13 07:07:47 +10:00
Pieter-Jan Briers
d6467f768a Fix Logger calls in ComponentRegistrySerializer 2023-08-11 23:50:54 +02:00
ElectroJr
4f0f020f56 Version: 147.0.0 2023-08-10 00:40:01 -04:00
Leon Friedrich
5ce8369fb9 Rename a Dirty() proxy method to DirtyEntity() (#4253) 2023-08-10 14:17:57 +10:00
Pieter-Jan Briers
2446e64033 entitysystemupdateorder debug command 2023-08-08 21:36:14 +02:00
metalgearsloth
bdd65cda4b Version: 146.0.0 2023-08-08 17:26:42 +10:00
Leon Friedrich
77e949bfe8 More serialization related changes, (#4250) 2023-08-08 17:22:10 +10:00
metalgearsloth
d4171351f4 Metadata + cancollide stuff (#4247) 2023-08-08 12:03:27 +10:00
metalgearsloth
e67d0ad3d6 Xform stuff (#4246) 2023-08-08 11:55:56 +10:00
Artur
aff5711fde Add missing CultureInfo.InvariantCulture in angle validaton (#4248) 2023-08-08 11:52:24 +10:00
ElectroJr
a886222946 Version: 145.0.0 2023-08-06 21:45:09 -04:00
Leon Friedrich
5843f1087e Add ContentFileRead test and fix file reading on windows (#4242) 2023-08-07 11:39:09 +10:00
Leon Friedrich
93c0ce815f Add IPrototypeManager.EnumerateKinds() (#4244) 2023-08-07 11:24:34 +10:00
Leon Friedrich
1c64fa1f28 Fix TransformSystem.SetCoordinates() error logs. (#4245) 2023-08-07 11:24:26 +10:00
Leon Friedrich
c825c1e413 Remove IoCManager.Resolve calls in Resource.Load (#4243) 2023-08-07 11:24:15 +10:00
Chief-Engineer
f30fb47834 Add GetActorFromUserId to actor system (#4239) 2023-08-07 11:24:00 +10:00
Leon Friedrich
5d255e06c8 Fix SpriteSpecifier yaml validator (#4241) 2023-08-06 22:14:02 +10:00
metalgearsloth
80357c8ec4 Version: 144.0.1 2023-08-06 15:07:48 +10:00
metalgearsloth
ac3a434bdf Shrink entitylookup tile enlargement even further (#4240) 2023-08-06 15:06:08 +10:00
metalgearsloth
21719b8884 Version: 144.0.0 2023-08-06 12:45:49 +10:00
metalgearsloth
dbb6b90654 Tile enlargement + new flag for lookups (#4205) 2023-08-06 12:41:27 +10:00
ElectroJr
4b92be5324 Version: 143.3.0 2023-08-05 21:16:11 -04:00
Leon Friedrich
95169b7a71 Add temporary debug logs (#4237) 2023-08-06 11:11:23 +10:00
Leon Friedrich
b699e22c85 More serialization fixes (#4224) 2023-08-06 11:08:48 +10:00
Leon Friedrich
e48cc62d0b Clamp audio offset in ApplyAudioParams() (#4221) 2023-08-06 10:38:53 +10:00
Leon Friedrich
aade062a49 Allow replay loading to ignore some errors (#4236) 2023-08-06 10:33:31 +10:00
Chief-Engineer
e02166d5c4 add placement events (#4235) 2023-08-06 10:32:04 +10:00
Leon Friedrich
8037bfae14 Remove an incorrect assert (#4238) 2023-08-06 10:29:30 +10:00
metalgearsloth
49781791af Version: 143.2.0 2023-08-05 12:43:34 +10:00
metalgearsloth
92719aa29f Shutdown grid rendering events (#4234) 2023-08-05 11:38:16 +10:00
Chief-Engineer
1d47a9677d fix named toolshed command (#4230) 2023-08-04 14:51:06 +10:00
Leon Friedrich
14fe8eba6d Remove unnecessary dummy test prototypes (#4233) 2023-08-04 14:50:53 +10:00
Leon Friedrich
2ff99d4a62 Add support for tests to load extra prototypes from multiple "files" (#4232) 2023-08-04 14:50:08 +10:00
metalgearsloth
ce8b2d82a3 Version: 143.1.0 2023-08-04 12:40:21 +10:00
Leon Friedrich
f8f99450db Error on duplicate broadcast subscriptions (#4231) 2023-08-04 12:34:10 +10:00
metalgearsloth
a3cf4877e4 Don't raise contact events for qdel ents (#4126) 2023-08-04 12:22:59 +10:00
metalgearsloth
6ab08f7dc1 Add BodyStatus readwrite (#4227) 2023-08-04 12:22:50 +10:00
Vordenburg
819f6921cf Add locale support for grammatical measure words (#4064) 2023-08-03 20:00:47 +10:00
moonheart08
cf91369d27 Version: 143.0.0 2023-08-02 16:07:25 -05:00
Moony
0e1328675c Toolshed (#4197)
* Saving work

* Move shit to engine

* lord

* merg

* awa

* bql is kill

* forgot the fucking bike rack

* bql is kill for real

* pjb will kill me

* aughfhbdj

* yo ho here we go on my way to the MINES

* a

* adgddf

* gdsgvfvxshngfgh

* b

* hfsjhghj

* hbfdjjh

* tf you mean i have to document it

* follow C# standards

* Assorted cleanup and documentation pass, minor bugfix in ValueRefParser.

* Start porting old commands, remove that pesky prefix in favor of integrating with the shell.

* Fix valueref up a bit, improve autocomplete for it.

* e

* Toolshed type system adventure.

* a log

* a

* a e i o u

* awa

* fix tests

* Arithmetic commands.

* a

* parse improvements

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
2023-08-02 16:06:16 -05:00
metalgearsloth
a7315b1c95 Version: 142.1.2 2023-08-02 13:43:19 +10:00
metalgearsloth
c8f2a55cbe Don't log error on relay resolve (#4223) 2023-08-02 13:42:07 +10:00
ElectroJr
7812502b0b Version: 142.1.1 2023-08-01 22:42:01 -04:00
Leon Friedrich
3149f99954 Fix bad DetachParentToNull() assert (#4222) 2023-08-02 12:40:59 +10:00
ElectroJr
ef8c6379cd Version: 142.1.0 2023-08-01 20:54:36 -04:00
KIBORG04
f932e023ee Configurable Discord Rich Presence icons and some localization (#4174) 2023-08-02 10:36:45 +10:00
Leon Friedrich
a137c839fc Add prototype serialization validation methods. (#4210) 2023-08-02 10:29:55 +10:00
Leon Friedrich
3e43b88518 Fix bad disconnects in tests (#4217) 2023-08-02 10:29:17 +10:00
metalgearsloth
3d974e0305 Fix entitylookup recursion (#4218) 2023-08-02 10:28:10 +10:00
deathride58
b3682017ac Enables lightsample manipulation shenanigans (#4201) 2023-08-02 04:52:38 +10:00
metalgearsloth
194743a9b0 Set sawmill default to info on release (#4198) 2023-08-02 04:33:31 +10:00
Vera Aguilera Puerto
34d65a7960 Use engine font instead of SS14-specific font in a few places. (#4206) 2023-08-02 04:32:31 +10:00
metalgearsloth
6cd4a37a8f Add VV readwrite to physics stuff (#4220) 2023-08-02 04:31:53 +10:00
Vordenburg
40d879fddc Read Artist and Title tags from Ogg Vorbis files (#4207) 2023-08-02 04:31:20 +10:00
Leon Friedrich
df398c5b13 Truncate discord rich presence strings (#4213) 2023-08-02 04:30:22 +10:00
Leon Friedrich
804b698172 Improve DetachParentToNull() debug asserts (#4194) 2023-08-02 04:27:18 +10:00
metalgearsloth
346514c6e0 Allow overriding joint relays (#4219) 2023-08-02 04:27:01 +10:00
Leon Friedrich
d65e2eb169 Fix test IoC error (#4216) 2023-08-01 18:57:14 +10:00
Leon Friedrich
ff41329ad7 Add DataNode.ToString() (#4209) 2023-08-01 12:13:46 +10:00
Leon Friedrich
6151a26622 Remove unnecessary component fetch in AnyComponentsIntersecting (#4215) 2023-08-01 12:13:32 +10:00
Pieter-Jan Briers
1c7ae13bfa Happy Eyeballs for HttpClient use.
All HttpClient usages in the engine now use Happy Eyeballs, same implementation as the launcher.

Makes a IHttpClientHolder type so content can profit from this technology too. Didn't make use of this in all HttpClient usages in the engine itself, due to varying circumstances making it annoying to refactor.
2023-07-31 22:51:25 +02:00
metalgearsloth
cb6645aebe Version: 142.0.1 2023-07-31 14:33:25 +10:00
Leon Friedrich
fffe3c56e9 Fix enum serialization (#4208) 2023-07-30 20:17:22 +10:00
ElectroJr
204e881690 Version: 142.0.0 2023-07-29 13:42:33 -04:00
metalgearsloth
161b1874c2 Some comp query optimisations (#4203) 2023-07-30 03:34:35 +10:00
metalgearsloth
7c3634f1f5 Add better GetAssemblyByName debug (#4192) 2023-07-30 03:32:02 +10:00
Leon Friedrich
9969899f38 Add method to validate prototype ids in c# fields (#4189) 2023-07-30 03:31:17 +10:00
Leon Friedrich
ed35839942 Add warning for unhandled replay messages (#4199) 2023-07-29 18:04:56 +10:00
metalgearsloth
380ccfacd8 Version: 141.2.1 2023-07-29 16:19:20 +10:00
Leon Friedrich
cc0cc6afb1 Don't recreate _entTraitDict on disconnect (#4200) 2023-07-29 16:16:25 +10:00
Pieter-Jan Briers
8cc2a17444 Version: 141.2.0 2023-07-28 22:16:59 +02:00
Pieter-Jan Briers
9c64fbfce2 Fix protocol abuse exception. 2023-07-27 19:30:39 +02:00
metalgearsloth
0218c4b969 Version: 141.1.0 2023-07-27 18:22:48 +10:00
Vordenburg
cd72523701 Add CollisionLayerChangeEvent (#4147) 2023-07-27 18:20:29 +10:00
metalgearsloth
76bb9b4b19 Run MapInit on pmanager entities (#4196) 2023-07-27 06:49:09 +12:00
metalgearsloth
afdfbba312 Version: 141.0.0 2023-07-26 22:41:12 +10:00
metalgearsloth
8b4925863e Cull Component.Initialize (#4191) 2023-07-26 22:37:45 +10:00
Pieter-Jan Briers
e1597da4c7 Enable EXCEPTION_TOLERANCE on Tools.
This wasn't the case yet??? Whoops.
2023-07-24 20:52:39 +02:00
Pieter-Jan Briers
8375a4038b Throw error if creation of buffered audio source fails.
This can happen if we're out of audio streams. Before, we just kinda pretended like everything was OK, which easily caused crash bugs in e.g. MIDI.

Ideally the audio engine would be less terrible and this could be handled better than "throw new Exception()", but I'm fixing a stack overflow here alright?
2023-07-24 20:52:11 +02:00
Pieter-Jan Briers
8270442d66 Hard exit server on double ^C. 2023-07-23 17:44:20 +02:00
Pieter-Jan Briers
85e1920b95 Version: 140.0.0 2023-07-23 15:41:44 +02:00
Pieter-Jan Briers
5347eb3350 Replay recording API improvements. (#4193) 2023-07-23 15:36:35 +02:00
metalgearsloth
e4a14d1ec8 Start MapGrid ECS (#4185) 2023-07-23 20:50:23 +10:00
metalgearsloth
c52db4d3f2 Version: 139.0.0 2023-07-23 16:13:06 +10:00
metalgearsloth
89f78d76ab Cull Component.Startup (#4190) 2023-07-23 16:04:37 +10:00
metalgearsloth
bbc4668f9c Version: 138.1.0 2023-07-18 21:41:40 +10:00
metalgearsloth
ce4016965e Add NoLerp methods for rotation (#4186) 2023-07-18 21:40:09 +10:00
Pieter-Jan Briers
21e74c9881 Fix ordering of control AnimationCompleted event.
This was changed recently, and it caused exceptions in SS14 (wire hacking animations).
2023-07-18 01:04:49 +02:00
Vera Aguilera Puerto
aa52e8c2ef Version: 138.0.0 2023-07-16 21:09:48 +02:00
Vera Aguilera Puerto
e106d3f72b MidiRenderer master/puppet and various improvements/cleanup (#4184) 2023-07-16 21:08:57 +02:00
metalgearsloth
8eae802fb6 Version: 137.1.0 2023-07-17 00:57:35 +10:00
Pieter-Jan Briers
681feaf0c7 Use relative time in PrecisionSleepWindowsHighResolution
Duh.
2023-07-15 23:38:12 +02:00
Pieter-Jan Briers
0a5a214a06 Precision sleep implementation for Linux (nanosleep). 2023-07-15 23:28:55 +02:00
Pieter-Jan Briers
d80be16f6c Fix sys.precise_sleep being interpreted the wrong way around. 2023-07-15 23:28:26 +02:00
Pieter-Jan Briers
d967bc9fdc Speed up DirLoader.DirLoader on Windows.
New FileHelper.TryOpenFileRead that doesn't throw if the file doesn't exist.

Also used it in a couple other spots.
2023-07-15 19:08:37 +02:00
Pieter-Jan Briers
177ca6b627 Sandboxing performance improvements.
Don't leave file handles dangling.
Prefetch verifying assembly images to speed stuff up.
2023-07-15 18:09:57 +02:00
Pieter-Jan Briers
3c262afaa4 Why would you put an attribute inside an ifdef like that, god. 2023-07-15 16:14:03 +02:00
Pieter-Jan Briers
bce2901b0f Remove manual Windows P/Invokes in favor of TerraFX. 2023-07-15 15:41:34 +02:00
Pieter-Jan Briers
c392d4f996 Precise, time period-independent timing for Windows game loop. 2023-07-15 15:22:52 +02:00
Pieter-Jan Briers
d7ee2bccd7 Use TerraFX.Interop.Windows in Shared. 2023-07-15 15:20:32 +02:00
Pieter-Jan Briers
4e816fa5e7 Add ModUpdateLevel.InputPostEngine 2023-07-15 15:09:17 +02:00
Pieter-Jan Briers
545e55055e BQL paused handling changes (#4099) 2023-07-15 19:21:36 +10:00
metalgearsloth
6b059ed356 Version: 137.0.0 2023-07-13 20:22:47 +10:00
metalgearsloth
b69b4fd8fe Kill comp getstate / handlestate (#4183) 2023-07-13 20:19:58 +10:00
metalgearsloth
cb63499ec9 Add EntityQuery<MetaDataComponent> to EntityManager (#4166) 2023-07-13 20:14:47 +10:00
Vera Aguilera Puerto
dd12110c34 Version: 136.0.1 2023-07-12 08:55:01 +02:00
Vera Aguilera Puerto
a811cfc1a1 Changelog for CEF bugfix 2023-07-12 08:53:51 +02:00
Amy
229a45bea2 Enables debugging and error handling on Linux with CEF enabled (#4181)
Co-authored-by: amylizzle <amylizzle@users.noreply.github.com>
2023-07-12 08:42:30 +02:00
metalgearsloth
78376ccca1 Fix grid fixture warnings (#4180) 2023-07-10 18:09:18 +10:00
metalgearsloth
e4a1415627 Fix erroneous Vector2.Length call (#4178) 2023-07-10 17:53:54 +10:00
metalgearsloth
69589195e0 MapLoader perf stuff (#4179) 2023-07-10 17:53:46 +10:00
Leon Friedrich
ce3b92aea2 Try prevent infinite measure/arrange loops (#4176) 2023-07-10 17:36:22 +10:00
Leon Friedrich
5dc980ae92 Revert #3827 (#4177) 2023-07-10 17:35:55 +10:00
ElectroJr
6edeafeed1 Version: 136.0.0 2023-07-08 22:22:28 -04:00
Leon Friedrich
623aa6a0ae More StyleBox UiScale fixes. (#4175) 2023-07-09 12:19:42 +10:00
ElectroJr
1399b71572 Version: 135.0.0 2023-07-08 15:02:31 -04:00
eoineoineoin
bbf8827efd Make StyleBoxTexture respect UI zoom level (#4165) 2023-07-09 04:49:25 +10:00
ElectroJr
591c261ff5 Version: 134.0.0 2023-07-08 12:10:13 -04:00
TemporalOroboros
75f0cf9dd7 Ecs's UserInterfaceComponent. (#4079) 2023-07-09 02:02:28 +10:00
metalgearsloth
bde8c2c6e8 Version: 133.0.0 2023-07-08 14:12:59 +10:00
metalgearsloth
7d1ad527d9 Replace Robust Vector2 with System.Numerics (#4092) 2023-07-08 14:08:26 +10:00
Morb
6da708f285 Fix ContentGetDirectoryEntries (#4162) 2023-07-06 15:28:38 +10:00
Leon Friedrich
f6a5e0ed93 Fix doc comments & typos (#4170) 2023-07-06 15:28:09 +10:00
Leon Friedrich
21534e7568 Block some parent-child collisions (#4171) 2023-07-06 15:26:20 +10:00
Pieter-Jan Briers
e7aa2cbc7d AssetPassPipe can detect and block duplicates. 2023-07-05 23:56:15 +02:00
Pieter-Jan Briers
5ddba87487 ACZ fix edge case with Accept-Encoding header parsing
This could throw if the requester sent specific headers.
2023-07-05 23:55:43 +02:00
metalgearsloth
a69573178f Version: 132.2.0 2023-07-06 00:02:23 +10:00
metalgearsloth
1ac39cc65f Add recursive joint clearing (#4169) 2023-07-06 00:01:04 +10:00
Pieter-Jan Briers
70897b6ea9 Reduce default MTU even more.
Yeah I think this might still be causing issues.
2023-07-02 17:01:17 +02:00
metalgearsloth
e763d59617 Remove some unnecessary EntityQuery<T> and warns (#4167) 2023-07-02 01:12:45 +10:00
metalgearsloth
d4902a9714 Version: 132.1.0 2023-07-01 22:05:39 +10:00
metalgearsloth
23a40e58e4 Pause animations on ent pause (#4117) 2023-07-01 22:02:33 +10:00
Pieter-Jan Briers
e71f1cc8a5 Warning fixes (#4160)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2023-07-01 22:02:12 +10:00
metalgearsloth
b82d246988 Fix ComponentTreeSystem warnings (#4164) 2023-07-01 19:23:37 +10:00
metalgearsloth
d309872334 Version: 132.0.1 2023-06-27 20:13:29 +10:00
metalgearsloth
e33c37ed09 Return map first for grid queries (#4161) 2023-06-27 20:09:58 +10:00
ElectroJr
3ee95b1a71 Version: 132.0.0 2023-06-25 16:44:40 -04:00
metalgearsloth
9a4721a3ee Add prototype counts to IPrototypeManager (#4158) 2023-06-26 06:35:21 +10:00
Leon Friedrich
8fd1e9047f Rejig time offset serializer (#4154) 2023-06-26 06:29:45 +10:00
metalgearsloth
e44e4ac7ed Version: 131.1.0 2023-06-25 22:00:17 +10:00
metalgearsloth
581ef074a0 Add method to get random variant tile (#4153) 2023-06-25 21:52:31 +10:00
metalgearsloth
9bb61b8a35 Add NextByte to random methods (#4151) 2023-06-25 21:52:15 +10:00
Leon Friedrich
e7497c7e4f Fix replay component state bug (#4157) 2023-06-25 21:51:15 +10:00
rene-descartes2021
7bc54d8f73 Cleanup redundant parentheses (#4155) 2023-06-25 21:51:00 +10:00
Pieter-Jan Briers
1631d93e41 Remove AggressiveOptimization attributes.
This isn't a magic "make code go fast" button, none of these usages were correct.
2023-06-25 09:33:10 +02:00
moonheart08
a32ff39516 Version: 131.0.0 2023-06-24 18:57:48 -05:00
Pieter-Jan Briers
2715581f48 Replays: final boss (#4156)
* Add ISawmill.Verbose log helpers

* Verbose logs for server-side networking handshake.

* Replays: final boss

It does zippies now. It fucking works. Amazingly, in fact.

* Add ZipArchive to sandbox
2023-06-24 18:56:37 -05:00
metalgearsloth
061c4352c6 Add SpawnEntities to entitymanager (#4152) 2023-06-23 10:55:28 +10:00
Leon Friedrich
8c5a34f538 Fix bad gamestate asserts (#4149) 2023-06-23 09:48:06 +10:00
Leon Friedrich
55d99155e0 Better deserialization error messages (#4150) 2023-06-21 09:43:49 +10:00
ElectroJr
4c994eb599 Version: 130.0.0 2023-06-18 17:03:02 -04:00
ElectroJr
25fa6b2b2e Change default engine version cvar 2023-06-18 17:00:39 -04:00
ElectroJr
530321bcb6 Version: 0.129.0.1 2023-06-18 15:39:47 -04:00
ElectroJr
da860d4f56 Update Version.py to remove leading zero. 2023-06-18 13:43:32 -04:00
ElectroJr
33702b10f3 Version: 129.0.0 2023-06-18 13:42:47 -04:00
wixoa
b035159de5 Add StyleBoxOverride to LineEdit (#4138) 2023-06-19 03:27:56 +10:00
Leon Friedrich
ad1b9b1d2b Make ActorSystem.Attach() detach from existing entities. (#4146) 2023-06-19 03:24:17 +10:00
Leon Friedrich
9d4105abc7 Add support for client-side replays (#4122) 2023-06-19 03:23:46 +10:00
Pieter-Jan Briers
35902ad839 Update Lidgren to fix Linux socket error reporting. 2023-06-18 18:19:08 +02:00
Julian Giebel
f5b8c8813f Cange richtext tags to be overridable by content (#4141) 2023-06-18 03:20:43 +10:00
Leon Friedrich
a9eafd4025 Add new Dirty() override for Component.Owner removal (#4144) 2023-06-18 03:19:40 +10:00
metalgearsloth
3bd7309536 Version: 0.128.0.0 2023-06-17 11:56:10 +10:00
Leon Friedrich
f5b87b5140 Remove static ILocalizationManager resolves. (#4145) 2023-06-17 11:52:45 +10:00
metalgearsloth
05e38e0880 Version: 0.127.1.0 2023-06-16 12:41:20 +10:00
metalgearsloth
2bcb457786 Add Frame0 method for entity prototypes (#4142) 2023-06-15 20:29:51 +10:00
metalgearsloth
e11cef3335 Version: 0.127.0.0 2023-06-15 12:15:30 +10:00
metalgearsloth
b15b800535 Contact stuff (#4140) 2023-06-15 12:14:06 +10:00
Leon Friedrich
8345cfea60 Automatically create a sawmill for each entity system. (#4137) 2023-06-15 12:09:48 +10:00
Leon Friedrich
497674f306 Change capitalization of PVS to Pvs (#4139) 2023-06-15 12:08:34 +10:00
Pieter-Jan Briers
fd5e5471be Oops, didn't do the IPAddress sandbox properly. 2023-06-11 16:21:24 +02:00
Leon Friedrich
1c90be0abc Make BoxContainer's MesureOverride account for stretching (#4114) 2023-06-11 16:13:20 +02:00
Pieter-Jan Briers
b895da5fda Add launch.launcher and launch.content_bundle CVars 2023-06-11 16:12:08 +02:00
ElectroJr
0ae409a795 Version: 0.126.0.0 2023-06-10 16:01:16 -04:00
Leon Friedrich
2c529510e7 Maybe fix random test failures (#4135) 2023-06-11 05:45:05 +10:00
metalgearsloth
33cdc0d31f Obsolete some metadata stuff (#4110) 2023-06-11 05:44:36 +10:00
metalgearsloth
8dec3ea922 More MM stuff (#4136) 2023-06-10 19:03:55 +10:00
metalgearsloth
60f9ffb423 Physics stuff (#4125) 2023-06-10 18:54:01 +10:00
metalgearsloth
f2c2750f8c Gridtree ECS (#4109) 2023-06-10 18:15:04 +10:00
Vera Aguilera Puerto
00e8afe8fa Fix ClydeAudio sawmill when using the fallback audio proxy 2023-06-10 05:06:22 +02:00
Vera Aguilera Puerto
4cde4abbb8 Remove many more static Logger usages from client. 2023-06-10 01:12:22 +02:00
Pieter-Jan Briers
1da229549d Remove some Logger usages from client.
About all I could muster before I got bored.
2023-06-10 00:19:09 +02:00
Vera Aguilera Puerto
3160437e0f Remove static Logger usages from GameController. (#4132) 2023-06-10 00:10:30 +02:00
Vera Aguilera Puerto
82e1a1003f Remove static Logger usages from GameStateProcessor. (#4131) 2023-06-10 00:10:13 +02:00
Vera Aguilera Puerto
3c7b3bd653 Remove static Logger usages from NetManager (#4130) 2023-06-10 00:09:38 +02:00
Vera Aguilera Puerto
c993c24284 Remove static Logger usages from ClientConsoleHost (#4133) 2023-06-10 00:08:09 +02:00
Vera Aguilera Puerto
720740ce0c Remove static Logger usages from StatusHost. (#4129) 2023-06-10 00:07:48 +02:00
Vera Aguilera Puerto
1959f6f328 Remove static Logger usages from BaseServer and BaseClient. (#4134) 2023-06-10 00:07:27 +02:00
Vera Aguilera Puerto
596b8e5538 Remove static Logger usages from ViewVariables (#4128) 2023-06-10 00:06:44 +02:00
Vera Aguilera Puerto
ce703223b5 Deprecate IPlayerSession methods to attach/detach entities to a player. (#4127)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2023-06-10 00:06:15 +02:00
Pieter-Jan Briers
b1e594858a Add System.Net.IPAddress to sandbox.
For https://github.com/space-wizards/space-station-14/pull/14228
2023-06-09 23:37:42 +02:00
Leon Friedrich
c09800fe5d Prevent scrollbar overlap in OutputPanel (#4113) 2023-06-09 10:20:09 +10:00
Julian Giebel
add8771d1f Fix richtext inline controll scaling (#4121) 2023-06-09 10:19:42 +10:00
metalgearsloth
40833ce35b Mark static loggers as obsolete (#4124) 2023-06-09 01:10:13 +10:00
metalgearsloth
de81199037 Version: 0.125.0.1 2023-06-07 20:43:58 +10:00
metalgearsloth
4af1728da4 use ISawmill on mapmanager (#4123) 2023-06-07 20:40:01 +10:00
Leon Friedrich
11fed18c47 Fix mapped strings serializer not properly checking string size. (#4115) 2023-06-06 10:55:57 +02:00
ElectroJr
bdb781d680 Version: 0.125.0.0 2023-06-05 00:40:37 -04:00
Leon Friedrich
e08dac2be9 Add support for replay playback. (#4107) 2023-06-05 14:36:18 +10:00
moonheart08
7a04c81fe1 Version: 0.124.0.1 2023-06-04 15:40:19 -05:00
Nemanja
035b1a510d Add NumberFormatInfo to shared sandbox (#4111) 2023-06-04 15:35:34 -05:00
Pieter-Jan Briers
4a27df0166 Add clientAssemblies list to resource manifest.
Allows whitelisting only certain assemblies to be loaded. Intended to be used with the new content bundle stuff that's incoming launcher-side.
2023-06-03 13:48:34 +02:00
Pieter-Jan Briers
478fa8e6de Oops I accidentally committed the VFS command thing. Better commit the rest now. 2023-06-03 12:27:23 +02:00
Pieter-Jan Briers
23abb6177d Fixes for resource manager, roots and ResPath.
`ResPath.RelativeTo()` now considers non-rooted paths relative to `.`
This fixes some things like `MemoryContentRoot`'s `FindFiles()` implementation.

Fix `IContentRoot.GetEntries()` default implementation (used by all content roots except `DirLoader`) not working at all.

Made `ResourceManager.ContentGetDirectoryEntries()` report content root mount paths as directories.

Added tests for all of the above.
2023-06-03 12:23:28 +02:00
Pieter-Jan Briers
7b23729f94 Fix bare ">" command exception. 2023-06-02 22:59:28 +02:00
canvas123
cf86c7a8b5 Fixed some coding mistakes (#4105)
Co-authored-by: Canvas123 <lunarfury6@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2023-06-02 20:12:11 +02:00
metalgearsloth
e2830c9ad8 Version: 0.124.0.0 2023-06-02 22:19:13 +10:00
Leon Friedrich
d95c1aef05 Add EntityUid fields to some physics events (#4103) 2023-06-02 22:16:37 +10:00
metalgearsloth
46ae16718e Physics query stuff (#4102) 2023-06-02 16:37:51 +10:00
metalgearsloth
102c24d5d8 Version: 0.123.1.1 2023-06-02 15:49:47 +10:00
metalgearsloth
9dacf63e36 More joint cloning (#4104) 2023-06-02 15:48:39 +10:00
Leon Friedrich
cec071f907 Add ability to reset loaded prototypes. (#4097) 2023-06-01 14:56:36 +10:00
Leon Friedrich
5e08553af6 Add method to clear networked resources. (#4096) 2023-06-01 14:55:27 +10:00
metalgearsloth
540febc75b Version: 0.123.1.0 2023-06-01 12:01:14 +10:00
metalgearsloth
0f8231b069 Box2 stuff (#4101) 2023-06-01 12:00:15 +10:00
ElectroJr
7e912cf4ce Version: 0.123.0.0 2023-05-30 23:59:21 -04:00
metalgearsloth
467914e115 Add RemoveSwap to ValueList (#4093) 2023-05-31 13:50:57 +10:00
ShadowCommander
5d67041a0c Add EntityQueryEnumerator comments on EntityQuery and .Owner (#4095) 2023-05-30 21:34:09 +02:00
Leon Friedrich
52fc800398 Make version related cvars not server-only (#4086) 2023-05-30 21:33:48 +02:00
Pieter-Jan Briers
3164b58300 Fix keyboard events always propagating to default viewport if devwindow is open. 2023-05-30 21:29:43 +02:00
metalgearsloth
1ca68a89e7 MM + poly shape fixes (#4094) 2023-05-30 14:43:51 +10:00
metalgearsloth
8ad25f2a9f 2 more mapmanager things (#4091) 2023-05-29 02:14:41 +10:00
metalgearsloth
6dc33e4fe0 Version: 0.122.0.0 2023-05-28 23:24:03 +10:00
metalgearsloth
0ebdd4ac1d MapManager query changes (#4090) 2023-05-28 23:22:39 +10:00
metalgearsloth
24be915ef1 Container minor stuff (#4089) 2023-05-28 21:41:51 +10:00
metalgearsloth
8b48b54575 Version: 0.121.0.0 2023-05-28 14:55:01 +10:00
metalgearsloth
d389e30c87 Changes for audio (#4087) 2023-05-28 14:50:21 +10:00
Leon Friedrich
f8f14dc817 Add IWritableDirProvider.OpenOsWindow() (#4084) 2023-05-28 09:28:23 +10:00
Leon Friedrich
d9a5f9c4dd Add replay loading/reading. (#4077) 2023-05-28 04:32:35 +10:00
metalgearsloth
fbcbcecae6 Version: 0.120.0.0 2023-05-27 14:14:24 +10:00
metalgearsloth
768377f59b Add joint relays (#4081) 2023-05-27 14:10:55 +10:00
Leon Friedrich
34adf454c5 Slight map manager cleanup (#4083) 2023-05-24 11:25:16 +10:00
Leon Friedrich
9af00eea03 Fix spriteview scaling (#4082) 2023-05-23 15:32:42 +10:00
Leon Friedrich
a6c487f8b7 Fix upload folder command (#4076) 2023-05-21 16:23:30 +10:00
metalgearsloth
5b7d686de9 Version: 0.119.0.1 2023-05-20 13:33:36 +10:00
metalgearsloth
3a42e8e07a Fix fire collisions (#4074) 2023-05-20 13:32:10 +10:00
metalgearsloth
115a3f12c7 Version: 0.119.0.0 2023-05-20 11:57:03 +10:00
Leon Friedrich
ccec1cbdf3 Move upload commands to engine (#4072) 2023-05-20 11:53:05 +10:00
Leon Friedrich
36a124a3aa Add IContentRoot.FileExists() (#4071) 2023-05-20 11:10:05 +10:00
moonheart08
7836130bef Version: 0.118.0.0 2023-05-19 15:42:08 -05:00
Moony
06f5c78152 Allow specifiying overrides for components when spawning an entity. (#4068)
* Oh goddamnit this is a refactor now.

* aaaaaaaaaaa

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
2023-05-19 15:38:45 -05:00
metalgearsloth
57ddf81fc4 Version: 0.117.0.0 2023-05-19 17:14:31 +10:00
Leon Friedrich
0e7863650b IconComponent cleanup & linter inheritance (#4070) 2023-05-19 17:12:36 +10:00
metalgearsloth
a04ad5eeab Version: 0.116.0.0 2023-05-19 16:23:09 +10:00
TemporalOroboros
435b252c86 Removes AppearanceVisualizers (#4069) 2023-05-19 07:15:06 +10:00
Leon Friedrich
4e72ddffbd Modify replay recording directory selection (#4066) 2023-05-18 21:33:06 +10:00
ElectroJr
c99059e8ba Version: 0.115.0.0 2023-05-17 22:08:07 -04:00
Leon Friedrich
d8aa0b68c9 Change default state reset behaviour (#4065) 2023-05-17 17:31:26 -05:00
metalgearsloth
ebfa44cc2c Version: 0.114.1.0 2023-05-18 00:48:51 +10:00
metalgearsloth
a3ef7fa3c9 Add API to remove joint by ID (#4041) 2023-05-18 00:21:29 +10:00
Leon Friedrich
f398ad8a22 Slightly speed up entity deletion (#4061)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2023-05-18 00:00:51 +10:00
Leon Friedrich
f06beeb6f6 Remove static logs from EntityManager (#4062) 2023-05-17 14:18:49 +10:00
ElectroJr
3e2e764f89 Version: 0.114.0.0 2023-05-16 20:36:18 -04:00
ElectroJr
a42d6f51a8 Automatically append .png for fallback texture resolves 2023-05-16 20:35:40 -04:00
Leon Friedrich
7cb01b8a85 Update theme on child add (#4059) 2023-05-17 10:19:08 +10:00
Leon Friedrich
022a668266 Revert "Fix hidden action numbers by updating UI theme" (#4057) 2023-05-17 05:51:38 +10:00
Leon Friedrich
529b529073 Fix PVS reconnect error (#4056) 2023-05-17 04:13:15 +10:00
metalgearsloth
46b4d57a8c Add non-generic comp lookups (#4054) 2023-05-17 03:47:37 +10:00
metalgearsloth
369b2de052 Version: 0.113.0.3 2023-05-16 21:22:30 +10:00
metalgearsloth
c86ab63010 Use sawmill for pvs log (#4051) 2023-05-16 21:02:28 +10:00
ElectroJr
b692ed2437 Version: 0.113.0.2 2023-05-15 02:15:44 -04:00
ElectroJr
c077bbc2fd Remove last bad assert 2023-05-15 02:15:26 -04:00
Leon Friedrich
7ccef97287 Remove another bad assert (#4046) 2023-05-15 16:02:53 +10:00
Leon Friedrich
905ace3681 Remove some asserts (#4045) 2023-05-15 15:31:09 +10:00
Leon Friedrich
004b185e73 Fix deletion networking (#4044) 2023-05-15 15:27:28 +10:00
Leon Friedrich
a1dd01a23c Fix f3 menu debug assert when mouse is off-screen (#4043) 2023-05-15 13:35:55 +10:00
metalgearsloth
8d25792752 Version: 0.113.0.1 2023-05-15 13:35:01 +10:00
Skye
4335f00e28 Use theme resolve (#4042) 2023-05-15 13:33:04 +10:00
metalgearsloth
0b14aec199 Version: 0.113.0.0 2023-05-15 13:14:33 +10:00
Leon Friedrich
eceefa1308 Fix pulling prediction issues (#4036) 2023-05-15 12:51:17 +10:00
Skye
109e685d55 Fix hidden action numbers by updating UI theme (#3973) 2023-05-15 12:50:01 +10:00
Leon Friedrich
b87d1a0a73 Move JobQueue & Job to engine (#4037) 2023-05-15 12:47:09 +10:00
Leon Friedrich
b422d8d3ca Make map-grids set TransformComponent.GridUid (#4040) 2023-05-15 12:39:45 +10:00
Leon Friedrich
5f5a2bade0 Make InitializeEntity() and StartEntity() public (#4039) 2023-05-15 12:38:16 +10:00
Leon Friedrich
45135eb416 Fix some joint bugs (#4038) 2023-05-15 12:37:26 +10:00
Leon Friedrich
eb7886bff4 Fix sprite debug assert (#4033) 2023-05-15 00:52:46 +10:00
Raphael Bertoche
f08344f60e Fix duplicate yaml validation error exception (#4032) 2023-05-14 10:37:05 +10:00
metalgearsloth
b37f9e827c vv perm tweaks (#4026) 2023-05-14 10:33:28 +10:00
metalgearsloth
bbd8cd3cf9 Remove joint log (#4029) 2023-05-14 10:29:11 +10:00
DrSmugleaf
ce086833b6 Fix log for adding duplicate component reference (#4031) 2023-05-14 10:28:56 +10:00
eoineoineoin
f7eebce14e Add padding to glyphs in atlas (#4011) 2023-05-14 04:19:31 +10:00
DrSmugleaf
394bfda92f Version: 0.112.0.1 2023-05-13 01:08:34 -07:00
DrSmugleaf
c70a3d6f4b Fix crash from UIScreens not having dependencies injected (#4030) 2023-05-13 01:04:08 -07:00
Leon Friedrich
12237db4d7 Move tpto command to shared. (#4025) 2023-05-13 11:15:07 +10:00
Leon Friedrich
9526bb773b Use local session for local client-side shells. (#4024) 2023-05-13 10:44:38 +10:00
Menshin
ff35b921aa Add option for norot/snapping sprite layers (#3808) 2023-05-13 08:14:03 +10:00
metalgearsloth
8511fe4d3b Version: 0.112.0.0 2023-05-13 00:08:58 +10:00
Leon Friedrich
dea195be4a Change prof tree style & add basic stylesheet support (#4021) 2023-05-13 00:04:35 +10:00
Leon Friedrich
945c3dada9 Try fix collision mispredicts (#4016) 2023-05-13 00:02:42 +10:00
Leon Friedrich
3d3d6d38e0 Move default theme directory (#4022)
* Move default theme directory

* missed one
2023-05-11 22:50:58 -05:00
jicksaw
7bc65a38fc Fix JSON Serialization of ResPath (#4020) 2023-05-12 13:26:18 +10:00
moonheart08
2aaa41252a Version: 0.111.0.0 2023-05-11 06:40:23 -05:00
Moony
538535db9a Engine default stylesheet + debug connect screen (#4017)
* Debug connection screen

* [ContentAccessAllowed] so I can use IStateManager on engine types.

* Implement a default engine stylesheet.

* awa

* Fix an issue that can cause hangs when resolving a color.

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
2023-05-11 06:38:50 -05:00
metalgearsloth
c4c2e84936 Version: 0.110.0.0 2023-05-09 17:25:03 +10:00
Leon Friedrich
1678a26d0c Remove obsolete Fixture.Body references (#4014) 2023-05-09 17:21:14 +10:00
Leon Friedrich
6afd67acea Fix EntityLookup not properly adding nested contained entities. (#4015) 2023-05-09 12:26:51 +10:00
Leon Friedrich
e2bac1b3df Sort serializable types (#4012) 2023-05-08 16:05:23 +10:00
metalgearsloth
474f4f09b9 Remove name + author from map file (#3992) 2023-05-07 17:22:14 +02:00
AJCM-git
e979673d54 Fixes Omnisharp failing to analyze the client by default. (#3203) 2023-05-07 17:21:57 +02:00
metalgearsloth
048e01e409 Version: 0.109.1.0 2023-05-08 01:01:44 +10:00
metalgearsloth
071e211cfe Crude IsDefault checks for entities (#3945) 2023-05-08 00:58:27 +10:00
ElectroJr
f0211ca445 Version: 0.109.0.0 2023-05-06 19:44:10 -04:00
Leon Friedrich
5d9d47a2a5 Fix screen overlay bug (#4010) 2023-05-07 09:39:16 +10:00
Vera Aguilera Puerto
25c1346dd9 Allow loading an "override" soundfont from an environment variable. (#4004) 2023-05-07 09:38:12 +10:00
Leon Friedrich
af1fc3cf6b Add BeforeSaveEvent (#4005) 2023-05-07 09:37:20 +10:00
Leon Friedrich
99cd739b39 Fix unset EndCollideEvent fields (#4009) 2023-05-07 09:36:47 +10:00
Leon Friedrich
ccffd44f40 Add method to clear all scheduled midi events. (#4007)
* Add method to clear midi events.

* Rename method
2023-05-07 09:36:32 +10:00
metalgearsloth
7c4303c9a4 Version: 0.108.0.0 2023-05-06 16:27:58 +10:00
metalgearsloth
a52719b53f Refactor fixture serialization (#3923) 2023-05-06 16:26:06 +10:00
Leon Friedrich
1449302701 Small shader code cleanup (#3990) 2023-05-06 11:52:27 +10:00
Leon Friedrich
d2b3fc737b Fix circular transform hierarchy crash (#4002) 2023-05-05 14:54:04 +10:00
metalgearsloth
dc5d9a881e Version: 0.107.0.1 2023-05-04 23:35:11 +10:00
metalgearsloth
ee8f95650b Fix maploader logs (#4001) 2023-05-04 23:32:45 +10:00
deltanedas
ebc12410d4 fix wrong attribute name in autogen state errors (#4000) 2023-05-03 17:00:05 -07:00
metalgearsloth
89b4062eb6 Version: 0.107.0.0 2023-05-03 10:13:04 +10:00
Leon Friedrich
6846b71e43 Remove texture IoC resolves (#3999) 2023-05-02 15:02:57 +10:00
metalgearsloth
5697800922 Remove LocalPlayer static resolves (#3995) 2023-05-02 14:59:50 +10:00
Leon Friedrich
37b8c49a44 Light query/transform changes (#3998) 2023-05-02 14:46:18 +10:00
ElectroJr
4577d5d3d5 Version: 0.106.1.0 2023-05-01 21:11:24 -04:00
Leon Friedrich
4a65111dda Make screen-space overlays use BeforeDraw() (#3997) 2023-05-02 10:36:20 +10:00
metalgearsloth
b24e6d0673 Add comp to loaded maps (#3994)
Easiest way to tell how MapLoader loaded a map (i.e. did it use the existing map or did it overwrite it).
2023-05-01 19:32:23 -04:00
Pieter-Jan Briers
1ce5be2774 Remove finalizer from GameShared.
Incorrect copy pasting of disposable pattern, gone.
2023-05-01 18:00:01 +02:00
metalgearsloth
6ea8e5fae1 Version: 0.106.0.0 2023-05-01 14:52:07 +10:00
metalgearsloth
45734a2bdd TimeOffsetSerializer fixes (#3985) 2023-05-01 14:47:16 +10:00
metalgearsloth
b5ebc11d26 Update map file schema validator (#3991) 2023-05-01 14:16:09 +10:00
Leon Friedrich
b8081a335a Fix queued deletion error log (#3982) 2023-05-01 14:11:51 +10:00
Leon Friedrich
381c856dd4 Add transform recursion check (#3983) 2023-05-01 14:11:21 +10:00
Leon Friedrich
2efed72eba Fix respath null errors (#3989) 2023-05-01 14:11:07 +10:00
metalgearsloth
4d26202cf5 Version: 0.105.1.0 2023-05-01 13:40:31 +10:00
Leon Friedrich
3aa4bd1448 Add basic map loader support for entity renaming (#3975) 2023-05-01 13:35:47 +10:00
Leon Friedrich
179da34be8 Add comment to rga.yml (#3988) 2023-05-01 06:21:35 +10:00
metalgearsloth
0581dbe99f Add CompOrNull to entityquery struct (#3986) 2023-04-30 19:03:16 +10:00
metalgearsloth
1b5c5befa9 Version: 0.105.0.0 2023-04-30 16:28:10 +10:00
Leon Friedrich
c5ecc426d0 Remove server and shared sprite component (#3981) 2023-04-30 16:09:07 +10:00
Tom Leys
2618bc7a36 Check for Sprite layer's existance (#3984) 2023-04-30 09:08:42 +10:00
Leon Friedrich
4c282b00d1 Fix error placement overlay error + add overlay exception tolerance (#3980) 2023-04-30 03:44:42 +10:00
metalgearsloth
c5282afbb7 Version: 0.104.1.0 2023-04-29 20:15:57 +10:00
metalgearsloth
5e276d3112 Fix completionhelper paths (#3979) 2023-04-29 20:13:51 +10:00
Leon Friedrich
d7d22d9cd4 Make VV auto-dirty components (#3969) 2023-04-29 19:28:47 +10:00
metalgearsloth
adca56b111 Version: 0.104.0.0 2023-04-29 16:08:55 +10:00
Leon Friedrich
69cdf6f727 Generalize sprite view (#3978) 2023-04-29 16:06:30 +10:00
metalgearsloth
a65ccd7c24 Add debug assert for data defs (#3977) 2023-04-29 15:53:02 +10:00
metalgearsloth
4f840da5d6 Version: 0.103.0.0 2023-04-29 14:12:47 +10:00
metalgearsloth
96ef013095 Save entities by prototype in map data (#3913) 2023-04-29 14:08:52 +10:00
deepCurse
4efc04a167 Add sf3 support (#3955) 2023-04-28 23:01:37 +02:00
metalgearsloth
7cdd45b4ff Obsolete comp references (#3900) 2023-04-29 03:54:24 +10:00
James Simonson
365fad488c Adjust center point on non 32px Sprites if SpriteOffset == false (#3865) 2023-04-29 03:52:50 +10:00
metalgearsloth
c1e7aca3fe Make RobustServerSim public (#3835) 2023-04-29 03:31:27 +10:00
pali
3f7fce2f02 Fix prob definition inequality (#3976) 2023-04-29 03:15:47 +10:00
ElectroJr
105aa13eb1 Version: 0.102.1.0 2023-04-28 03:14:23 -04:00
ElectroJr
7d8d6ebd20 release notes 2023-04-28 03:14:12 -04:00
Leon Friedrich
1bb2d39d71 Fix _windowIconPath null error (#3974) 2023-04-28 16:22:06 +10:00
Pieter-Jan Briers
0a5375d1c7 Oh huh I don't need P/Invoke for everything huh?? 2023-04-26 22:58:49 +02:00
Pieter-Jan Briers
c9042f188c Console output fixes.
Make it not assume UTF-8 when it's not.
Try to set the console output to UTF-8 on Windows.
Remove UTF-16 output code cuz who needs it.
2023-04-26 22:51:52 +02:00
metalgearsloth
cea74c63cd Add force / torque API for physics (#3965) 2023-04-26 14:17:45 +10:00
ElectroJr
37420b253b Version: 0.102.0.0 2023-04-25 00:06:20 -04:00
ElectroJr
c4dead2c99 Release notes + tiny map saving fix 2023-04-25 00:06:05 -04:00
Leon Friedrich
f917748809 Make map loading log errors on invalid UIDs (#3970) 2023-04-25 13:58:10 +10:00
Leon Friedrich
f25a728a36 Revert "Fix map serialization error log" (#3968) 2023-04-24 17:32:17 +10:00
Leon Friedrich
be9f0a988a Fix map serialization error log (#3967) 2023-04-24 17:29:57 +10:00
metalgearsloth
eae1e7c108 'fix' transform coordinates assert (#3964)
Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
2023-04-24 16:17:29 +10:00
metalgearsloth
6f4e31d6c4 Add dupe prototype ID validation (#3966) 2023-04-24 15:55:43 +10:00
Leon Friedrich
d52759f4fb Fix interp overlay (#3963) 2023-04-23 18:33:16 +10:00
Leon Friedrich
4242591b56 Fix pvs chunk update bug (#3961) 2023-04-23 16:23:24 +10:00
metalgearsloth
276c1f6ff8 Version: 0.101.1.1 2023-04-23 15:12:47 +10:00
metalgearsloth
19df65188b Fix poly deserialization (#3959) 2023-04-23 15:08:24 +10:00
metalgearsloth
9223c79ca3 Version: 0.101.1.0 2023-04-23 13:13:27 +10:00
Moony
693a73549d Reorder initialization slightly. (#3940) 2023-04-23 13:09:01 +10:00
metalgearsloth
c7c21a34e7 Add replacement to entity placement (#3857) 2023-04-23 13:07:53 +10:00
metalgearsloth
d8ba637502 Version: 0.101.0.0 2023-04-22 17:01:45 +10:00
metalgearsloth
b638a784cf Fix distance output for overlapping circles (#3958) 2023-04-22 17:00:10 +10:00
metalgearsloth
733c0e7a45 Box2D updates (#3957) 2023-04-22 16:41:05 +10:00
metalgearsloth
62aa9bfb49 Mouse joint damping fix (#3956) 2023-04-22 15:56:40 +10:00
ElectroJr
fcb34ed8c6 Version: 0.100.0.0 2023-04-21 00:16:36 -04:00
ElectroJr
e718e119f4 release notes 2023-04-21 00:16:17 -04:00
Leon Friedrich
eb711e44b5 Make GetAABBNoContainer actually raise the event (#3954) 2023-04-21 14:13:41 +10:00
Leon Friedrich
ac66038bb5 Make Resolve() fail on deleted components. (#3952) 2023-04-21 14:02:06 +10:00
Leon Friedrich
17ca016791 Fix PVS concurrent update exception (#3953) 2023-04-21 13:45:28 +10:00
DrSmugleaf
4c8be516cf Remove ILookupWorldBox2Component component reference (#3914) 2023-04-20 23:41:30 +10:00
metalgearsloth
2089e9b749 Version: 0.99.0.0 2023-04-20 20:36:24 +10:00
metalgearsloth
9f9900751d Delete some entity init code (#3947) 2023-04-20 20:33:32 +10:00
metalgearsloth
8a6cadd38f Revert "Revert "Replace ResourcePath with ResPath (#3926)" (#3949)" (#3950) 2023-04-20 20:15:57 +10:00
metalgearsloth
b582b317c1 Contact changes (#3946) 2023-04-20 20:07:31 +10:00
metalgearsloth
e84523359a Version: 0.98.0.0 2023-04-20 11:45:19 +10:00
metalgearsloth
d646403068 Revert "Replace ResourcePath with ResPath (#3926)" (#3949) 2023-04-20 11:43:51 +10:00
metalgearsloth
6fb8df41e5 Version: 0.97.1.1 2023-04-20 11:21:09 +10:00
metalgearsloth
2a7980965e Hotfix assembly paths (#3948) 2023-04-20 11:20:09 +10:00
metalgearsloth
c458892467 Version: 0.97.1.0 2023-04-20 10:40:11 +10:00
Leon Friedrich
c67151b9c9 Improve PVS metrics & multithread ack processing. (#3936) 2023-04-20 10:37:18 +10:00
metalgearsloth
ef64828613 Make FastNoiseLite serializable (#3944) 2023-04-20 10:30:39 +10:00
Leon Friedrich
c82364df7b Make NetGraph logarithmic (#3941) 2023-04-20 00:12:56 +10:00
Leon Friedrich
f89d6fc73f Add invalid broadphase check (#3939) 2023-04-20 00:12:18 +10:00
metalgearsloth
9fb28b5f2a Version: 0.97.0.0 2023-04-19 23:38:56 +10:00
Ygg01
d6a3e1e286 Replace ResourcePath with ResPath (#3926) 2023-04-19 23:37:46 +10:00
Leon Friedrich
8958b2123e Add stack trace to transform log. (#3938) 2023-04-17 11:36:10 +10:00
ElectroJr
6550ece258 Version: 0.96.9.0 2023-04-16 19:56:37 -04:00
ElectroJr
fc9526092b Release notes 2023-04-16 19:56:09 -04:00
Leon Friedrich
bb26e243d6 Allow integration tests to raise gui events. (#3937) 2023-04-17 09:52:58 +10:00
Leon Friedrich
ad66e31d6e Fix PVS bug (#3935) 2023-04-16 10:54:42 +10:00
Pieter-Jan Briers
e357330409 Version: 0.96.8.2 2023-04-15 18:05:15 +02:00
Pieter-Jan Briers
f3877f3d6a Sandboxing: load from launcher engine before loading from disk load paths.
Robust.Client.WebView includes Robust.Client.dll and such now, so sandboxing was loading the Robust.Client.dll from there instead of from the running engine itself.
2023-04-15 18:03:53 +02:00
Leon Friedrich
2705e2a56a Allow PrototypeLayerData to clear shaders (#3934) 2023-04-15 11:56:38 +10:00
DrSmugleaf
4fd5f2bb64 Make AutoGenerateComponentState partial class compilation error clickable (#3932) 2023-04-13 19:33:21 -07:00
metalgearsloth
1163a445cd Version: 0.96.8.1 2023-04-14 10:30:19 +10:00
metalgearsloth
56d15c8ef0 Fix mapinit in some instances (#3931) 2023-04-14 10:26:54 +10:00
metalgearsloth
abd3a8b47e Version: 0.96.8.0 2023-04-13 21:12:11 +10:00
Leon Friedrich
c21a062bcb Add BroadphaseNetworkingTest (#3930) 2023-04-13 15:40:36 +10:00
metalgearsloth
0ff270c625 Create entities before applying entity states. (#3919) 2023-04-13 02:08:39 +10:00
metalgearsloth
7a35a859d9 Set paused before ent startup when loading (#3806) 2023-04-12 19:51:26 +10:00
ElectroJr
23f397fd6b Version: 0.96.7.0 2023-04-11 13:18:03 -04:00
ElectroJr
2ac3c0824b Release notes 2023-04-11 13:17:30 -04:00
Leon Friedrich
c90907ba92 Add dependency injection option to IDynamicTypeFactory (#3911) 2023-04-12 03:05:31 +10:00
Amy
5032c883b8 Adds normal blend mode (#3908)
* adds normal blend mode

* error message update

---------

Co-authored-by: amylizzle <amylizzle@users.noreply.github.com>
2023-04-11 15:12:16 +02:00
Ygg01
951e01af5a Adds a new ResPath struct that will replace ResourcePath (#3663) 2023-04-11 11:18:42 +10:00
Leon Friedrich
42a4227efe Fix container out-of-bounds bug (#3922) 2023-04-10 12:34:01 +10:00
Leon Friedrich
ebb2a65e6d Maybe fix audio IndexOutOfRange exceptions (#3910) 2023-04-10 12:33:21 +10:00
Leon Friedrich
6cf0756f27 Replace assert with warning (#3921) 2023-04-10 08:00:20 +10:00
DrSmugleaf
40c8a3ccf7 Version: 0.96.6.0 2023-04-08 19:14:57 -07:00
DrSmugleaf
a9a3af320e Update RELEASE-NOTES.md 2023-04-08 19:06:51 -07:00
metalgearsloth
410957be46 Random shuffle overrides (#3912) 2023-04-09 11:56:42 +10:00
Skye
ff4bebd806 UI: Close window hotkeys (#3918)
Looks good to me!
2023-04-08 18:13:04 -07:00
Leon Friedrich
ff276a3c9f Improve some container asserts (#3916) 2023-04-09 03:38:38 +10:00
moonheart08
93dca22ee5 Version: 0.96.5.0 2023-04-06 12:35:22 -05:00
Kara
85547a9be7 Auto-componentstate source generator (#3684)
* dog what am i doing

* finish gen source part from class symbol

* we are dangerously close to things happening

* generation fixes

* oh? on god?

* stop autogenerating the attribute for no reason + diagnostics

* testing diagnostics

* proper type name handling + clonedata bool

* thank you material storage for making me realize this

* forgot to commit

* p

* fixes for afterautohandlestate

* make it work with access
2023-04-06 12:32:57 -05:00
moonheart08
b31876ff03 Version: 0.96.4.0 2023-04-05 20:57:49 -05:00
Leon Friedrich
6092e39303 Support implicit delta comp states. (#3909) 2023-04-05 20:51:35 -05:00
Pieter-Jan Briers
9ad9fccb22 Version: 0.96.3.0 2023-04-05 20:09:44 +02:00
Pieter-Jan Briers
f5cf39907a Update server SQLitePCLRaw to 2.1.4 2023-04-05 20:05:36 +02:00
Kara
dae4761b72 Version: 0.96.2.0 2023-04-03 00:29:25 -05:00
Kara
2fdb4e30ac Revert "Don't draw text contents over scrollbar for outputpanel" (#3905) 2023-04-02 22:28:27 -07:00
metalgearsloth
07192c4294 Version: 0.96.1.0 2023-04-03 12:55:41 +10:00
Visne
eb65a45ed4 Implement deleting a full word at a time (#3725) 2023-04-03 12:50:30 +10:00
metalgearsloth
68fe69ef24 Invalid OutputPanel entries upon tree enter (#3875) 2023-04-03 06:35:09 +10:00
Leon Friedrich
42e50798b9 Fix empty container (#3902) 2023-04-03 06:34:18 +10:00
Leon Friedrich
d570bcef9a Fix content test workflow (#3903) 2023-04-03 06:34:04 +10:00
metalgearsloth
7b60f5bd06 Don't draw text contents over scrollbar for outputpanel (#3876) 2023-04-03 05:49:23 +10:00
Leon Friedrich
9b0139032b Fix container networking bugs (#3901) 2023-04-03 03:16:09 +10:00
metalgearsloth
d4ccbfc72b Version: 0.96.0.4 2023-04-01 13:37:35 +11:00
Leon Friedrich
fe8a1d2632 Fix implicit appearance state data (#3896) 2023-04-01 12:20:10 +11:00
metalgearsloth
fde8a4a91a Revert "Adjust InRange entity lookups" (#3897) 2023-04-01 12:19:15 +11:00
metalgearsloth
a7b41b3457 Version: 0.96.0.3 2023-03-31 16:52:00 +11:00
metalgearsloth
179845d9b1 Add many more audio logs (#3879) 2023-03-31 16:50:10 +11:00
metalgearsloth
de837b1b03 Adjust InRange entity lookups (#3868) 2023-03-31 16:49:12 +11:00
Leon Friedrich
4f0daa8143 Fix discord null errors (#3895) 2023-03-30 22:11:14 -05:00
metalgearsloth
400bdb43aa Fix log length (#3894) 2023-03-31 12:30:26 +11:00
Leon Friedrich
69bb4f9237 Fix sprite error log. (#3892) 2023-03-31 12:05:35 +11:00
DrSmugleaf
dc5f9302cd Remove Vera from CODEOWNERS (#3891) 2023-03-29 17:37:44 -07:00
metalgearsloth
58b8e27eea Version: 0.96.0.2 2023-03-29 23:43:28 +11:00
metalgearsloth
23d827e4ef Fix adding mapgrid to a map (#3890) 2023-03-29 23:02:31 +11:00
metalgearsloth
2d51bf4d1b Version: 0.96.0.1 2023-03-29 18:44:40 +11:00
metalgearsloth
26efbb4b81 Adjust QDel log (#3888) 2023-03-29 18:38:55 +11:00
metalgearsloth
0ff5bb862a Revert "Move dependencies off of physics contacts (#3867)" (#3887) 2023-03-29 18:38:18 +11:00
metalgearsloth
7d98e5cea5 Bandaid contact length issue (#3885) 2023-03-28 19:11:48 +11:00
wixoa
0d04200c55 Set blend function for shaders with ShaderBlendMode.None (#3877) 2023-03-27 12:12:01 -05:00
metalgearsloth
6983f3b1a1 Version: 0.96.0.0 2023-03-27 22:40:42 +11:00
Leon Friedrich
a284159a18 Remove MapId serializer and rename WorldMap to MapId (#3872) 2023-03-27 22:38:36 +11:00
Leon Friedrich
521a97939d Suppress invalid map saving warnings (#3873) 2023-03-27 22:37:24 +11:00
metalgearsloth
795dd6149c Add temp physics contact logs (#3882) 2023-03-27 22:26:11 +11:00
metalgearsloth
27877820ed Add QueueDel logs (#3878) 2023-03-27 10:41:48 +11:00
metalgearsloth
2cbb1a17e7 Add showrot command (#3874) 2023-03-27 08:05:44 +11:00
faint
605d9737f0 Improve Discord Rich Presence (#3816) 2023-03-25 16:58:22 -07:00
ElectroJr
2662985ce2 Version: 0.95.0.0 2023-03-25 19:24:04 -04:00
ElectroJr
b31836f674 release notes 2023-03-25 19:23:40 -04:00
Leon Friedrich
231d08ae1a Revert "Make PauseTime a DataField (#3863)" (#3871) 2023-03-26 10:20:38 +11:00
Visne
d8b97ee242 Refactor NextWordPosition to EndWordPosition (#3724) 2023-03-24 17:29:44 +11:00
metalgearsloth
71e84d82f8 Version: 0.94.0.0 2023-03-24 17:24:05 +11:00
metalgearsloth
dc30e35615 Move dependencies off of physics contacts (#3867) 2023-03-24 17:17:50 +11:00
Leon Friedrich
eb3dfeaa7b Set IsFirstTimePredicted to false during state application (#3866) 2023-03-24 17:14:01 +11:00
Leon Friedrich
124c627fe2 Make PauseTime a DataField (#3863) 2023-03-24 17:00:25 +11:00
metalgearsloth
0b3a4821fa Use a list for active contacts (#3864) 2023-03-24 16:55:26 +11:00
metalgearsloth
1aec754308 Update release notes
Forgot to save my changes in vs code.
2023-03-24 13:22:52 +11:00
metalgearsloth
dbf01e6b75 Version: 0.93.3.0 2023-03-24 13:21:07 +11:00
metalgearsloth
c10b00fc1b Add a field to disable grid splitting per-grid (#3848) 2023-03-24 13:19:13 +11:00
metalgearsloth
e2b7c11750 Don't write unnecessary tilemap (#3824) 2023-03-24 13:18:34 +11:00
metalgearsloth
105dc0ac1f Add temp logs around contacts (#3862) 2023-03-24 13:18:11 +11:00
metalgearsloth
69dc5aaad4 Version: 0.93.2.0 2023-03-23 23:50:14 +11:00
metalgearsloth
2e5ba99d5f Add some completionhelpers (#3860) 2023-03-23 23:48:00 +11:00
moonheart08
014dd37594 Version: 0.93.1.0 2023-03-22 04:41:04 -05:00
metalgearsloth
14a9583a3e Add playpredicted for entitycoordinates audio (#3856) 2023-03-22 04:39:13 -05:00
Skye
07ad8cf4ed Fluidsynth3 compat (#3850) 2023-03-19 12:32:25 +01:00
Leon Friedrich
bfa9965056 Fix map saving bug (#3852) 2023-03-17 17:28:51 +11:00
Leon Friedrich
9a06a5727e Make DataDefinitions check for private constructors (#3845) 2023-03-17 12:49:02 +11:00
metalgearsloth
4e02f12e19 Add PlayPvs for EntityCoordinates (#3849) 2023-03-15 14:25:40 +11:00
08A
471da9aace Add method prepare placement prototype entity (#3826) 2023-03-15 14:25:08 +11:00
Flipp Syder
5924d9d017 Ensures SplitContainer children have measured sizes when clamping split center (#3827) 2023-03-15 14:22:57 +11:00
Morb
443664fc3f Add SetFallbackCluture to interface (#3846) 2023-03-15 14:21:09 +11:00
ElectroJr
4ecd58dbfe Version: 0.93.0.0 2023-03-14 20:21:36 -04:00
ElectroJr
cfdd9862df Update release notes 2023-03-14 20:21:29 -04:00
Leon Friedrich
302af71764 EmptyContainer tweaks (#3819) 2023-03-15 11:12:04 +11:00
Leon Friedrich
e851cea6b2 Fix audio IoC errors (#3851) 2023-03-15 11:11:32 +11:00
Leon Friedrich
b4df9c49d8 Fix map validator (#3847) 2023-03-15 10:49:19 +11:00
Pieter-Jan Briers
477e7820cd hub_advertise_now command. 2023-03-13 23:03:49 +01:00
Pieter-Jan Briers
80b6f5e01f Add DoesNotReturn annotations to DebugTools.Assert* methods.
These allow Assert(Foo != null) to suppress nullability warnings. No way to configure it for AssertNotNull though.
2023-03-13 23:02:57 +01:00
Leon Friedrich
0a4813225d Add readonly to Box2Rotated methods (#3844) 2023-03-13 03:39:23 +11:00
Leon Friedrich
d9280fdd1c Fix colour slider recursion. (#3838) 2023-03-13 03:39:06 +11:00
DrSmugleaf
52ba22f645 Add benchmark for archetype indexing by handle vs array access vs field direct access (#3801) 2023-03-11 11:44:16 -08:00
Leon Friedrich
357755a65e Fix RSI loading error tolerance (#3841) 2023-03-11 13:42:25 +11:00
Leon Friedrich
466f565e44 Fix sprites sometimes not updating IsInert when changing state. (#3842) 2023-03-11 13:42:12 +11:00
metalgearsloth
ba97f9c116 Version: 0.92.2.1 2023-03-11 12:48:20 +11:00
metalgearsloth
4c81bf164c Revert "Shrink tile bounds slightly (#3831)" (#3837) 2023-03-11 12:45:23 +11:00
metalgearsloth
2e9f0275d7 Version: 0.92.2.0 2023-03-10 13:47:45 +11:00
metalgearsloth
f9042b3c9f Add methods for vector2i lengths (#3829) 2023-03-09 16:05:23 -06:00
metalgearsloth
1688b2d9c3 Use preset matrices for 90 degree angles (#3830)
I was getting rounding issues doing matrix transforms for tiles.
2023-03-09 16:05:04 -06:00
metalgearsloth
9b438620ee Shrink tile bounds slightly (#3831)
Problem was I was getting overlap on other tiles due to the poly skin. Box2d 3.0 is looking at removing it but for now I just want 1 tile.
2023-03-09 16:04:37 -06:00
metalgearsloth
2f7a652e22 Add helper methods for System.Random (#3832)
This might be a maint thing but look, I just want seeded RNG and IRobustRandom doesn't have it so not sure what is easier considering IRobustRandom is also registered as a depdency but constructing it manually is weird aaaa
2023-03-09 16:04:23 -06:00
metalgearsloth
abecc554f4 Add a completion helper for MapIds (#3833)
* Add a completion helper for MapIds

* oop
2023-03-09 16:03:42 -06:00
metalgearsloth
8a827b37e6 Add enumerator for box2i edges (#3834)
Will write a test later don't @ me.
2023-03-09 16:03:29 -06:00
metalgearsloth
460b7c9804 Version: 0.92.1.0 2023-03-10 00:55:53 +11:00
ShadowCommander
fb949730ba Add option to SplitContainer for which split expands on parent resize (#3730) 2023-03-10 00:53:41 +11:00
Pieter-Jan Briers
3bce8d82e5 Update Lidgren to v0.2.4. 2023-03-07 22:47:50 +01:00
DrSmugleaf
bbe034173f Version: 0.92.0.0 2023-03-06 11:34:34 -08:00
DrSmugleaf
9df78f5e11 Update RELEASE-NOTES.md 2023-03-06 11:26:54 -08:00
DrSmugleaf
b83aca188f Revert "Update RELEASE-NOTES.md"
This reverts commit 220bc49488.
2023-03-06 11:24:27 -08:00
DrSmugleaf
220bc49488 Update RELEASE-NOTES.md 2023-03-06 11:23:37 -08:00
Morb
4cbe50c33d Add fallback culture for localization (#3766) 2023-03-06 11:14:17 -08:00
metalgearsloth
d6f70857d1 Fix noise DD and expose more fields (#3823) 2023-03-06 11:13:20 -08:00
Pieter-Jan Briers
23fd4e1843 Refactor MSBuild spaghetti, new configurations. (#3807) 2023-03-06 11:12:08 -08:00
DrSmugleaf
fb3c783fc4 Version: 0.91.0.0 2023-03-06 10:00:56 -08:00
DrSmugleaf
c713b6e062 Update RELEASE-NOTES.md 2023-03-06 09:47:22 -08:00
DamianX
4601f67ebc Made ColorSelectorSliders use SpinBox instead of FloatSpinBox (#3731) 2023-03-06 09:40:29 -08:00
Pieter-Jan Briers
de00d2aca2 Integration test logging improvements (#3814) 2023-03-05 22:52:31 +01:00
metalgearsloth
674fc0d1c0 Version: 0.90.0.0 2023-03-05 12:19:32 +11:00
metalgearsloth
7521ed060b Add tile edge rendering support (#3613) 2023-03-05 12:16:53 +11:00
Leon Friedrich
e56501649b Fix rounding in GetGridOrMapTilePosition() (#3813) 2023-03-03 00:21:32 +11:00
Leon Friedrich
7d412985ec Fix pvs bugs (#3812) 2023-03-01 10:29:26 +11:00
08A
e711b71fe9 Fix AnchorEntity replication when the coordinate doesn't change (#3810) 2023-02-28 14:22:20 +11:00
metalgearsloth
049efad065 Add AsUint for ValueDataNode (#3804) 2023-02-26 13:35:19 +01:00
Pieter-Jan Briers
6bdb7c040f Fix some warnings. (#3803) 2023-02-25 11:20:29 +11:00
Pieter-Jan Briers
48874b2773 Version: 0.89.1.0 2023-02-24 20:51:29 +01:00
Pieter-Jan Briers
d6cbdd221c WebView fixes and improvements.
Re-organize initialization so that User-Agent CVar actually works.

Add web.headless CVar to not load CEF even on graphical client.

Clean up init logic to not rely on static IoC, and clean up loggers used too.
2023-02-24 00:29:31 +01:00
Pieter-Jan Briers
59a8a98703 Basic fixes for WebView in 2023.
Launcher works again with this.
2023-02-24 00:05:31 +01:00
Zandario
ecc673b972 Updated Lighting Doc Link (#3802) 2023-02-22 11:30:36 -08:00
metalgearsloth
06c64b3be8 Version: 0.89.0.0 2023-02-22 12:44:02 +11:00
metalgearsloth
211dfb4b11 Cull some .Owner calls around transforms (#3791) 2023-02-22 12:40:29 +11:00
metalgearsloth
357a6ba1ad Make new-grids from pman actually start at 0,0 (#3794) 2023-02-22 12:39:42 +11:00
Pieter-Jan Briers
00814e8608 out EntityUid overloads for entity queries. (#3797) 2023-02-22 12:39:24 +11:00
Leon Friedrich
fae26daf3b Add option to hide scrollbars (#3798) 2023-02-22 12:00:40 +11:00
DrSmugleaf
6e6c18e31c Add by-ref event analyzer (#3795)
* Create ByRefEventAnalyzer.cs

* Implement ByRefEventAnalyzer for subscribe and raise
2023-02-21 09:24:08 -06:00
DrSmugleaf
ae27023283 Fix concurrent update error in SerializationManager._copyByRefRegistrations (#3796) 2023-02-21 16:07:16 +01:00
Pieter-Jan Briers
3fa7d25ecd Fix exception on server shutdown. 2023-02-18 21:53:34 +01:00
Pieter-Jan Briers
69ccacbd50 Console command to dump NetSerializer type map. 2023-02-18 21:51:45 +01:00
ElectroJr
82c31e5710 Version: 0.88.1.0 2023-02-18 12:23:18 -05:00
ElectroJr
4c9f4a4a11 release notes + MinDraggableWidth tweaks 2023-02-18 12:22:12 -05:00
Visne
24cca86813 Minimum draggable area for SplitContainers (#3733) 2023-02-19 04:13:31 +11:00
Leon Friedrich
f00b568c9c UserInterfaceManager tweaks (#3781) 2023-02-19 04:07:07 +11:00
Pieter-Jan Briers
ed6b73c413 Fix C# interactive outside content-start. 2023-02-18 15:49:55 +01:00
Pieter-Jan Briers
7bf493f127 Rename benchmark migrations to fix CS8981. 2023-02-18 15:44:32 +01:00
Moony
224a5e024d Merge pull request #3790 from juliangiebel/2023.1.28-rich-text
Fix FormattedMessage#IsEmpty
2023-02-17 14:23:25 -06:00
juliangiebel
00a2916da5 Fix FormattedMessage#IsEmpty 2023-02-17 19:46:46 +01:00
Pieter-Jan Briers
1a8c5ed6d4 Use the new epic UTF-8 literals in WAV parsing.
Please this file has been on the back of my mind since this feature came out.
2023-02-17 00:38:23 +01:00
metalgearsloth
70d0d7d1a1 Network paused maps (#3783) 2023-02-16 14:32:11 +11:00
Pieter-Jan Briers
a2822f78ab Fix mapped string serializer max size check.
Check assumed string length == UTF-8 length... Sight...
2023-02-16 00:52:29 +01:00
Pieter-Jan Briers
82035524b9 Fix custom MIDI soundfonts on Windows.
Hasn't ever worked, as far as I can tell.
2023-02-16 00:16:49 +01:00
moonheart08
efe7bd9dfd Version: 0.88.0.0 2023-02-15 17:06:08 -06:00
Moony
f29f57aa7c Merge pull request #3742 from juliangiebel/2023.1.28-rich-text
Rich Text refactor
2023-02-15 16:41:33 -06:00
juliangiebel
ef6a34e1a7 Update engine changelog 2023-02-15 21:29:35 +01:00
juliangiebel
c7ef3dda4e Implement MarkupNode CompareTo method
Fix MarkupNode equals
2023-02-15 20:38:52 +01:00
juliangiebel
5d5348abca Implement font prototype 2023-02-15 20:02:01 +01:00
Moony
6a9cbe1f1b Merge pull request #3784 from Altoids1/better-matrix-support
Allows YML parsing of shaders with `mat4` or `mat3` default values
2023-02-15 12:27:27 -06:00
metalgearsloth
f569f8e334 Version: 0.87.1.1 2023-02-16 01:09:59 +11:00
metalgearsloth
04590f8723 Fix PVS debug assert (#3789) 2023-02-16 01:06:59 +11:00
ElectroJr
b95f37f93c Version: 0.87.1.0 2023-02-14 23:50:31 -05:00
ElectroJr
c0472b8aff release notes 2023-02-14 23:50:12 -05:00
Leon Friedrich
4980d00a67 Fix commands not syncing on reconnect (#3786) 2023-02-15 15:44:24 +11:00
Gary Lafortune
c549ae34e8 Allows YML parsing of shaders with mat4 or mat3 default values
Previously there was no easy way of passing matrices onto shaders, with the current setup.

Now, matrices can be defined for the shader in the same way that vectors can, as a series of numbers parsed as floats.
2023-02-14 02:02:19 -06:00
Leon Friedrich
84676a9346 Fix PVS bug (#3782) 2023-02-14 13:30:55 +11:00
Visne
37b4378a06 Fix exception on right arrow key at second to last character (#3721) 2023-02-14 00:28:44 +11:00
metalgearsloth
d7f239f40b Use sprite offset for SpriteView (#3708) 2023-02-14 00:27:06 +11:00
Leon Friedrich
d52cbca984 Fix multi viewport sprite update (#3773) 2023-02-14 00:21:52 +11:00
ElectroJr
d165a93fbe Version: 0.87.0.0 2023-02-13 01:32:37 -05:00
ElectroJr
d06832c473 release notes 2023-02-13 01:32:18 -05:00
Leon Friedrich
af1b3c956b Fix PVS bug (#3780) 2023-02-13 17:29:02 +11:00
metalgearsloth
206a0d488f Allow entrypoints to shutdown (#3778) 2023-02-13 17:28:50 +11:00
Leon Friedrich
807bf3ff10 Add TryGetWidget() and replace GetOrNewWidget() functions. (#3776) 2023-02-13 17:28:39 +11:00
Leon Friedrich
9aea0ed78c Fix RegisteredCommand() & replay bugs (#3774) 2023-02-13 13:45:37 +11:00
Leon Friedrich
b587052396 Add IWritableDirProvider.OpenSubdirectory() (#3775) 2023-02-13 13:45:28 +11:00
metalgearsloth
2e7193b11e Fix sprite sync desync (#3771) 2023-02-13 04:36:55 +11:00
ElectroJr
ce86891741 Version: 0.86.0.0 2023-02-12 12:02:15 -05:00
ElectroJr
e99fadf501 add missing release note 2023-02-12 12:01:58 -05:00
Leon Friedrich
41990fd4a9 Add support for singleplayer commands (#3694) 2023-02-13 03:54:08 +11:00
Leon Friedrich
10dea3f3a3 Modify light rendering cvars (#3765) 2023-02-13 03:51:45 +11:00
metalgearsloth
9ee754720e Don't yield mapgrid maps for comptreesystem (#3770) 2023-02-12 22:12:46 +11:00
metalgearsloth
0dfa754c59 Add FastNoiseLite (#3761) 2023-02-12 16:37:26 +11:00
metalgearsloth
0dbd2e139c Synchronised sprite animations (#3672) 2023-02-12 16:37:12 +11:00
Leon Friedrich
d80522633d Add basic gamestate / replay recording. (#3509) 2023-02-12 16:16:30 +11:00
Pieter-Jan Briers
024b6ef16d Correctly initialize SDL_SysWMinfo structures.
This is apparently something I forgot. The X11 driver seems less forgiving than the Win32 or Cocoa drivers.
2023-02-12 02:42:51 +01:00
metalgearsloth
72b5735349 Add a cvar for FOV color (#3741) 2023-02-12 08:56:45 +11:00
Pieter-Jan Briers
0d8032e3df Warn on startup if .yaml files detected. (#3764) 2023-02-12 08:12:27 +11:00
Leon Friedrich
de20ad8a8f Add csi proxy methods (#3745) 2023-02-12 08:06:28 +11:00
Leon Friedrich
49e4fe8c4c Warn on repeated component deletion (#3728) 2023-02-12 08:05:44 +11:00
Leon Friedrich
7040d75687 Make HistoryLineEdit invoke OnTextChanged (#3743) 2023-02-12 07:34:18 +11:00
Pieter-Jan Briers
1aa9ced157 Removed OpenTK DllMap code.
Wasn't necessary anymore.
2023-02-10 22:57:28 +01:00
Pieter-Jan Briers
579e2bf3d7 SDL fix client starting in fullscreen 2023-02-10 16:19:30 +01:00
Pieter-Jan Briers
a0a0601b2a Log SDL2 log category. 2023-02-10 16:02:50 +01:00
Pieter-Jan Briers
bf18ee5ef0 Log SDL2 video driver backend. 2023-02-10 15:51:31 +01:00
Pieter-Jan Briers
2f6333ff89 Bump SpaceWizards.Sodium to 0.2.1
Transiently gives us osx-arm64 natives.
2023-02-09 14:36:55 +01:00
Pieter-Jan Briers
87c9f77b5a Handle SDL_QUIT event. 2023-02-09 13:42:34 +01:00
Pieter-Jan Briers
46e6413b40 SDL_GL_GetDrawableSize -> SDL_GetWindowSizeInPixels
Old function is deprecated.
2023-02-09 13:30:22 +01:00
Pieter-Jan Briers
2bb6c826c9 Replace ResourceManager content root RWLock with atomic array swap. 2023-02-08 14:18:18 +01:00
Pieter-Jan Briers
1f1f58a182 Revert .yaml file extension changes.
This reverts commit d8d2993d7f.
This reverts commit a7d79eed2d.
This reverts commit 58c79b2c7b.

See https://github.com/space-wizards/space-station-14/pull/13971
2023-02-07 22:27:37 +01:00
metalgearsloth
f143ee6358 Version: 0.85.2.0 2023-02-07 17:31:31 +11:00
metalgearsloth
67a34a142d Box2i serializer (#3748) 2023-02-07 17:25:46 +11:00
metalgearsloth
9a73e78540 Don't wrap prototype reload event under full_release (#3609) 2023-02-07 17:21:56 +11:00
metalgearsloth
dffd28a31c Fix mapgrid rendering (#3722) 2023-02-07 17:20:57 +11:00
DrSmugleaf
42c17faa98 Support ImmutableHashSet, ISet and IReadOnlySet for prototypes (#3752) 2023-02-07 17:08:51 +11:00
Paul
d8d2993d7f properly implements .yaml handling in the codebase 2023-02-07 00:55:59 +01:00
eoineoineoin
0eba350eb1 Fix bug where ScrollContainer could cause layout engine to loop forever. (#3723)
Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
2023-02-06 23:37:26 +01:00
Paul
a7d79eed2d we done a lil goof 2023-02-06 23:22:05 +01:00
Pieter-Jan Briers
a4a7e754af GetKeyName improvements
Rewrote most of the related code, moved code out of windowing API backends.
SDL2 backend now handles key map change events correctly.
2023-02-06 23:11:53 +01:00
Pieter-Jan Briers
4c48a2b378 keyinfo command completions. 2023-02-06 23:11:53 +01:00
Paul
58c79b2c7b fix prototypemanager ignoring yaml files with the .yaml ending 2023-02-06 23:00:40 +01:00
Pieter-Jan Briers
fa0d852286 Changelog entries for last couple commits. 2023-02-05 17:51:07 +01:00
Pieter-Jan Briers
9a1ad8ee5a List UI scale in DebugCoordsPanel. 2023-02-05 14:00:00 +01:00
Pieter-Jan Briers
7983a523de Fix SDL2 content scale calculations outside Windows.
The previous logic used SDL_GetDisplayDPI. This is a broken API however that doesn't return consistent results between platforms. On Windows it returns the configured scale DPI value, on other platforms it returns the actual raw monitor DPI.

The new code is what you should do, namely dividing window size with size in pixels.
2023-02-05 13:51:29 +01:00
Pieter-Jan Briers
8223df3486 SDL_WINDOW_ALLOW_HIGHDPI on macOS 2023-02-05 13:48:02 +01:00
Pieter-Jan Briers
d33f26e503 Re-enable threaded windowing on Windows & Linux 2023-02-04 16:59:20 +01:00
Pieter-Jan Briers
4b6ad732b1 CVar to disable threaded windowing API 2023-02-04 16:55:55 +01:00
Pieter-Jan Briers
1ebc485e14 GetProcessorModel() for Apple Silicon
uses sysctl(3)
2023-02-04 13:21:13 +01:00
AJCM-git
250ebd71f6 Merge pull request #3737 from AJCM-git/2023-01-obsoleteanchor 2023-02-02 13:56:39 -04:00
Leon Friedrich
e939e5a18c fix occluder tree error (#3735)
Fixes https://github.com/space-wizards/RobustToolbox/issues/3734
2023-02-02 12:05:55 +11:00
metalgearsloth
a9e0d9d629 Vector2i / Box2 helpers (#3746) 2023-02-01 12:20:41 +11:00
juliangiebel
dd3c96b81c Fix exception when markup draw context font stack is empty
Implement font tag
Implement italic tag
2023-01-31 11:46:30 +01:00
juliangiebel
1bd1409192 I fucked up amending the previous commit lol 2023-01-31 10:54:48 +01:00
juliangiebel
12980a6437 Change b tag name to bold to not clash with OpenDreams eventual html like implementation 2023-01-31 10:53:04 +01:00
juliangiebel
2bfd149fd4 Fix rich text ignoring font context
Implement the b tag for bold text
2023-01-31 00:09:48 +01:00
juliangiebel
67eeb75231 Add doc comments 2023-01-30 20:19:42 +01:00
juliangiebel
b139394020 Fix crash when text boxes get to small 2023-01-30 19:20:33 +01:00
juliangiebel
b1e184bfec Implement inline controls 2023-01-30 19:19:59 +01:00
juliangiebel
77c3566d9b Fix test failures 2023-01-28 21:58:13 +01:00
juliangiebel
1e89ff95e4 Remove wrong todo 2023-01-28 21:49:37 +01:00
juliangiebel
893d6a7e94 Fix issues from replacing FormattedMessage
Finish implementing rendering the new FormattedMessage implementation
2023-01-28 21:34:26 +01:00
juliangiebel
ae2dfdffcb Implement improved markup parser
Implement MarkupTagManager for getting markup tags
Implement IMarkupTag interface
Implement markup node classes
Prepare switching out FormattedMessage with new implementations
2023-01-28 09:15:35 -05:00
deathride58
0cb1cd4896 Implements blend modes (#3740)
Closes https://github.com/space-wizards/RobustToolbox/issues/3739
2023-01-28 12:56:31 +01:00
Amy
b8a254db3b Fix Texture.GetPixel() (#3738)
Co-authored-by: amylizzle <amylizzle@users.noreply.github.com>
2023-01-27 20:31:49 +01:00
AJCM
0a9c428ad2 Obsolete TransformComponent.Anchored setter 2023-01-26 16:31:21 -04:00
Leon Friedrich
35b2649c06 Small state/pvs cleanup. (#3736) 2023-01-26 15:09:43 +11:00
ElectroJr
2440eb168b Version: 0.85.1.1 2023-01-23 22:19:01 -05:00
ElectroJr
0ddcadbdbc release notes 2023-01-23 22:18:45 -05:00
Leon Friedrich
fc985f07bf fix ClientGameStateManager bug (#3727) 2023-01-24 14:16:48 +11:00
ElectroJr
f8ba9fe517 Version: 0.85.1.0 2023-01-23 19:08:35 -05:00
ElectroJr
9e40ec8869 release notes 2023-01-23 19:08:18 -05:00
metalgearsloth
b562fba520 Minor gamestatemanager stuff (#3709) 2023-01-24 11:04:37 +11:00
Leon Friedrich
06fba240b7 RSI meta atlas (#3545) 2023-01-24 10:53:33 +11:00
Leon Friedrich
8495011f29 Fix mouse joint error (#3716) 2023-01-21 18:44:32 +11:00
Leon Friedrich
fc2931a1f6 Remove bad PlayAudioPositionalMessage error. (#3715) 2023-01-21 17:29:45 +11:00
metalgearsloth
e729f71aa9 Version: 0.85.0.1 2023-01-21 13:47:42 +11:00
metalgearsloth
f0e77b49f9 Fix fixture mispredict (#3714)
Fixes https://github.com/space-wizards/space-station-14/issues/13616
2023-01-21 13:44:53 +11:00
metalgearsloth
21873459fe Use prototype for placementmanager (#3682) 2023-01-20 14:25:04 +11:00
metalgearsloth
e479b85dbb Version: 0.85.0.0 2023-01-20 11:27:37 +11:00
metalgearsloth
b969cee2a6 Fix slipping mispredict (#3713) 2023-01-20 11:16:28 +11:00
metalgearsloth
895cd6e03e Bandaid grid placement (#3678) 2023-01-19 14:00:25 +11:00
metalgearsloth
3d039118c6 Ensure DestroyContacts is called on fixture deletion (#3658) 2023-01-19 13:59:43 +11:00
metalgearsloth
884ac75e42 Remove Component.Name (#3711) 2023-01-19 13:57:41 +11:00
metalgearsloth
5df840db2d Remove comp shutdown method (#3710) 2023-01-19 11:57:03 +11:00
Nemanja
9a89c3d352 set awake on physics on regenerate contacts (#3706) 2023-01-17 15:25:33 +11:00
ElectroJr
d21883d6c3 Version: 0.84.0.0 2023-01-16 03:16:34 -05:00
ElectroJr
b106672228 update release notes 2023-01-16 03:16:19 -05:00
Leon Friedrich
76e5269716 Add Pidgin to sandbox whitelist (#3668) 2023-01-16 19:11:28 +11:00
Leon Friedrich
4a8be4fc9e Try fix cvar toml type parsing (#3681)
fix https://github.com/space-wizards/RobustToolbox/issues/3680
2023-01-16 19:11:09 +11:00
Leon Friedrich
d79ad9717b Alternative SpriteComponent.CopyFrom() fix (#3705) 2023-01-16 17:34:38 +11:00
metalgearsloth
525e1d56c1 using for collapsible enumerator (#3699) 2023-01-16 05:52:04 +11:00
metalgearsloth
4daf199aa5 Don't set global audio every tick (#3698) 2023-01-16 05:18:10 +11:00
metalgearsloth
6cc8fb8aa5 Delete effectsystem (#3702) 2023-01-16 04:45:10 +11:00
Zoldorf
ca3fdcb294 Adds Logging to Joint Add/Clear/Remove (#3695) 2023-01-16 00:16:53 +11:00
metalgearsloth
35d4a5c255 Use parallel options for solver (#3701) 2023-01-15 22:36:23 +11:00
metalgearsloth
32c8a36164 Version: 0.83.0.0 2023-01-15 15:42:50 +11:00
metalgearsloth
1c36d919e4 Physics ECS 2 (#3648) 2023-01-15 15:38:53 +11:00
ElectroJr
cdefd3051b Version: 0.82.0.0 2023-01-14 22:11:37 -05:00
ElectroJr
39920f5fd3 update release notes 2023-01-14 22:11:03 -05:00
metalgearsloth
9528d6dc8f Remove ISpriteComponent (#3692) 2023-01-15 13:38:46 +11:00
Zoldorf
8400c827fd Rename Box2Rotated centre to center
fixes #3637
2023-01-14 18:39:57 -07:00
Pieter-Jan Briers
2a957f1423 Fix prototype hot reloading. 2023-01-14 21:08:27 +01:00
Leon Friedrich
87ce6dd4b5 Allow EnsureComp to override deferred deletion (#3691)
Fixes https://github.com/space-wizards/RobustToolbox/issues/3690
2023-01-14 15:40:58 +11:00
Leon Friedrich
f5c06a9c3b Add mapuid check to velocity calculation (#3689) 2023-01-14 15:40:23 +11:00
Leon Friedrich
81e02c3baa Fix null tooltip error (#3693) 2023-01-14 15:39:48 +11:00
ElectroJr
f83153e0cc Version: 0.81.0.0 2023-01-13 19:53:13 -05:00
ElectroJr
6f789ea870 Update release notes 2023-01-13 19:52:56 -05:00
Leon Friedrich
91f1edfc81 Cache MapUid (#3687) 2023-01-14 11:50:32 +11:00
Leon Friedrich
fff8a7b9d8 Add Popup.OnPopupOpen event (#3685) 2023-01-14 11:49:18 +11:00
Leon Friedrich
da378ea15f Obsolete TransformComponent.WorldXYZ (#3686) 2023-01-14 11:43:08 +11:00
Leon Friedrich
0fd9b8236a Remove TransformComponent.Parent (#3688) 2023-01-14 11:38:08 +11:00
Jezithyr
fd2a0f97eb Version: 0.80.2.0 2023-01-13 03:11:43 -08:00
Jezithyr
eaf74f11d1 Allowing UI controllers to subscribe to broadcast events by ref (#3683)
Co-authored-by: Jezithyr <Jezithyr@gmail.com>
2023-01-13 11:58:44 +01:00
wixoa
64a6fc9b03 Add string HttpUtility.JavaScriptStringEncode(string) to the sandbox (#3679) 2023-01-13 12:08:15 +11:00
metalgearsloth
8e6bc1651e Add tooltip tracking (#3665) 2023-01-13 11:40:35 +11:00
metalgearsloth
fde83f0838 Fix note typos 2023-01-12 13:49:09 +11:00
metalgearsloth
c67d8ba795 Version: 0.80.1.0 2023-01-12 13:44:38 +11:00
metalgearsloth
08d47feb97 Obsolete .Owner (#3373) 2023-01-12 13:39:55 +11:00
ike709
4c2ea93624 Adds a WCvar to override the CEF user-agent (#3676) 2023-01-12 13:33:44 +11:00
Jacob Tong
d430df07f7 Change RadioOptions so that buttons can be customized (#3673) 2023-01-12 12:56:47 +11:00
Leon Friedrich
3f0dfe7f73 Add CC-BY to RSI.json (#3667) 2023-01-12 12:50:35 +11:00
TemporalOroboros
95ef1853b6 Fix fixtures (#3677) 2023-01-12 12:50:18 +11:00
eoineoineoin
2e456a6bc0 Fix incorrect size of second window in split container (#3675) 2023-01-12 12:49:16 +11:00
ElectroJr
50de6b4866 Add missing release notes 2023-01-11 00:07:59 -05:00
DrSmugleaf
191519932e Add location of compile errors to XAML UI (#3674) 2023-01-10 17:44:15 +01:00
metalgearsloth
cb11afd777 Version: 0.80.0.0 2023-01-11 00:03:00 +11:00
metalgearsloth
3ef6af58da Physics shape serializer (#3643) 2023-01-10 23:57:28 +11:00
TemporalOroboros
8a1d092af5 Increase granularity of ShouldCollide (#3585)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2023-01-10 22:57:56 +11:00
metalgearsloth
90708000f5 Check grid traversal when grids overlap entities (#3601) 2023-01-10 22:38:14 +11:00
Leon Friedrich
45295d4b49 Split container layout changes. (#3656) 2023-01-10 22:38:05 +11:00
metalgearsloth
59d40eb56c Remove manual comp registrations from client / server (#3626) 2023-01-10 22:32:07 +11:00
metalgearsloth
18a579947f Move gravity to a controller (#3617) 2023-01-10 22:23:49 +11:00
DrSmugleaf
c74c99d3e3 Version: 0.79.0.1 2023-01-10 10:33:29 +01:00
metalgearsloth
cfd7e5575b Add helper for SnapGridPosAt (#3655) 2023-01-09 21:43:24 +11:00
Jezithyr
74445de12b Adding Event helpers to UIControllers (#3671)
Co-authored-by: Jezithyr <Jezithyr@gmail.com>
2023-01-09 15:34:50 +11:00
metalgearsloth
8361162959 Fallback to mapgrid for query (#3659) 2023-01-09 15:10:03 +11:00
metalgearsloth
8ec32eb6bb Don't use current broadphase for physics contacts (#3653) 2023-01-09 15:06:02 +11:00
Leon Friedrich
9bbd1d28b1 Fix & update window position constraints (#3660) 2023-01-09 14:27:23 +11:00
Leon Friedrich
3d1ca2eed9 Add RichTextLabel.GetMessage() (#3669) 2023-01-09 14:10:49 +11:00
metalgearsloth
4cff5774d2 Version: 0.79.0.0 2023-01-09 13:44:28 +11:00
metalgearsloth
d9c0c84efa Deprecate TileChangedEventArgs (#3670) 2023-01-09 13:39:45 +11:00
Leon Friedrich
a323f2ef84 Grid delta states (#3635) 2023-01-08 16:43:49 +11:00
eoineoineoin
987d76b53d Style box texture scaling (#3632) 2023-01-08 16:42:46 +11:00
metalgearsloth
2776b4caa4 Remove some resolves on IsMapPaused (#3654) 2023-01-08 16:29:00 +11:00
keronshb
d90a365fa5 Adds TCS to Sandbox (#3662) 2023-01-08 16:27:09 +11:00
metalgearsloth
0c9fe010b1 Fix tooltips being incorrect for a frame (#3664) 2023-01-08 16:22:16 +11:00
metalgearsloth
af7e9150bb Don't predict sleeping on disallowed bodies (#3661) 2023-01-06 20:39:08 +11:00
metalgearsloth
fb0907a1a4 Remove EntityInitializedMessage (#3657) 2023-01-05 20:00:47 +11:00
metalgearsloth
7522737d90 Optimise TryFindGridAt (#3651) 2023-01-04 19:48:31 +11:00
metalgearsloth
ec5f07b372 Purge IPhysicsManager (#3652) 2023-01-04 19:18:53 +11:00
Leon Friedrich
a015e8722e Better debug assert message. (#3650) 2023-01-04 15:30:54 +11:00
ElectroJr
8cf3b519e7 Version: 0.78.0.0 2023-01-03 16:02:06 -05:00
ElectroJr
d56bf7739b update release notes 2023-01-03 16:01:37 -05:00
Leon Friedrich
084cc1a073 Add NoLocalRotation check to map saving (#3649) 2023-01-04 08:01:10 +11:00
metalgearsloth
9125d99ec1 Fix RotateVec rounding (#3638) 2023-01-04 07:29:17 +11:00
metalgearsloth
d9f602ee91 Minor joints cleanup (#3647) 2023-01-03 18:53:07 +11:00
metalgearsloth
d518d55897 Remove IPhysBody (#3646) 2023-01-03 17:45:36 +11:00
metalgearsloth
01e96ebcb9 Make FastNoise docs public (#3639) 2023-01-03 16:40:13 +11:00
Leon Friedrich
cb69facebf Fix broken click bound checks in Tree controls. (#3641) 2023-01-02 23:32:01 +11:00
Leon Friedrich
c9b942635a Audio frame update cleanup (#3630) 2023-01-01 15:53:18 +11:00
Leon Friedrich
7857e3a195 NoLocalRotation fixes (#3634) 2023-01-01 11:39:52 +11:00
Leon Friedrich
e0cfb24f1b Add missing null forgiving operator (#3636) 2023-01-01 09:23:28 +11:00
Leon Friedrich
24622eb548 Remove bad debug assert (#3633) 2023-01-01 05:24:55 +11:00
Leon Friedrich
66577acd1f Expose more net serializer stuff to content (#3476) 2022-12-31 04:07:33 +11:00
Leon Friedrich
f3364a196c Client-, shared-, and server-side ConfigurationManager (#3477) 2022-12-31 04:04:49 +11:00
Leon Friedrich
504f3f16d8 Add tickrate to debug monitor (#3631) 2022-12-31 04:04:38 +11:00
metalgearsloth
0a2735a60d Version: 0.77.0.2 2022-12-28 14:00:39 +11:00
metalgearsloth
6c4b71e06b Make phys contacts per-world rather than per-map (#3619) 2022-12-28 13:54:36 +11:00
Leon Friedrich
360db24f0a Fix invisible entity spawn menu buttons (#3628) 2022-12-28 13:52:18 +11:00
metalgearsloth
e0878096f4 Add AttachToGridOrMap test (#3625)
Closes https://github.com/space-wizards/RobustToolbox/issues/3624
2022-12-27 14:33:04 +11:00
metalgearsloth
f73babd869 Version: 0.77.0.1 2022-12-27 14:10:19 +11:00
metalgearsloth
61e193466c Hotfix AttachToGridOrMap (#3623) 2022-12-27 14:08:41 +11:00
metalgearsloth
6836816649 Version: 0.77.0.0 2022-12-27 13:38:07 +11:00
Leon Friedrich
054a908efd Generalize component trees (#3598) 2022-12-27 13:33:46 +11:00
metalgearsloth
ace8500240 Remove client/server split on sharedphysicsmap (#3618) 2022-12-27 13:17:54 +11:00
Leon Friedrich
d8d68480c3 Remove DeferredUpdates (#3622) 2022-12-27 12:27:43 +11:00
metalgearsloth
5284f3c2fb Version: 0.76.0.0 2022-12-26 10:57:11 +11:00
metalgearsloth
5c1d753a8d Physics solver refactor (#3479) 2022-12-26 10:51:00 +11:00
Leon Friedrich
27e0c22fe2 Somewhat improve sprite processing (#3587)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-12-26 10:48:08 +11:00
keronshb
b9f7733c67 Physics Substepping (#3156)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
closes https://github.com/space-wizards/RobustToolbox/issues/3116
2022-12-25 23:26:08 +11:00
Leon Friedrich
b09ddf986c Remove nullspace logic from CreateEntityUninitialized (#3600) 2022-12-25 22:37:09 +11:00
metalgearsloth
589d56fe67 Remove some more warnings (#3610) 2022-12-25 22:36:40 +11:00
DrSmugleaf
fdbb85dfe0 Add benchmarks for entTraitArray and class components (#3616) 2022-12-25 07:15:14 +01:00
DrSmugleaf
d33076b782 Add archetype enumerator benchmark (#3615) 2022-12-25 05:23:45 +01:00
Moony
91f5cfdf35 Please give me fast noise (#3612) 2022-12-24 16:31:50 -08:00
DrSmugleaf
037f702097 Fix missing refs and make consumer static in archetype benchmarks (#3608) 2022-12-23 12:29:07 +01:00
DrSmugleaf
e5dde1c7ad Add archetype iteration and has component benchmarks (#3607) 2022-12-22 23:31:05 +01:00
DrSmugleaf
272c3f8e84 Add archetype component access benchmark (#3606) 2022-12-22 21:39:58 +01:00
DrSmugleaf
9c831b3bda Add type switch matching benchmark (#3599) 2022-12-22 18:09:34 +01:00
Pieter-Jan Briers
9573e4e6c7 Improve UPnP logging. 2022-12-21 21:49:33 +01:00
ElectroJr
3330870a43 Version: 0.75.1.0 2022-12-21 14:27:03 -05:00
ElectroJr
1c86d2a6ea update release notes 2022-12-21 14:26:40 -05:00
Leon Friedrich
5ec72082bb Fix tests (#3605) 2022-12-22 06:26:03 +11:00
Leon Friedrich
ce4a0eb8bb Revert "Don't defer dirty matrices" (#3604) 2022-12-22 05:38:58 +11:00
metalgearsloth
fdfe0949ab Hotfix generic visualizers (#3602) 2022-12-21 16:28:31 +11:00
Paul Ritter
bafbdb6363 Analyzer to check that notnullableflag is being properly used (#3569) 2022-12-21 00:11:04 +01:00
Pieter-Jan Briers
a0b067a062 Add command to dump injector cache list.
To allow me to figure out how big it is.
2022-12-21 00:03:22 +01:00
Paul Ritter
ef0c0d0082 Analyzer to warn about using a boxing variant (#3564) 2022-12-20 23:53:02 +01:00
Kara
3393658953 Version: 0.75.0.0 2022-12-20 16:22:16 -06:00
AJCM-git
78a75daea2 SharedAppearanceSystem.TryGetData() generics support and small VisualizerSystem tweak (#3583) 2022-12-20 14:21:10 -08:00
Leon Friedrich
1bbfd6b38f Change default value for outsidePrediction (#3596) 2022-12-20 14:21:03 -08:00
Pieter-Jan Briers
20bbe30a23 Minor config default changes (#3543)
Co-authored-by: Kara <lunarautomaton6@gmail.com>
2022-12-20 14:20:52 -08:00
Leon Friedrich
8c5e790cb5 Don't defer dirty matrices (#3586) 2022-12-20 14:14:31 -08:00
Vera Aguilera Puerto
ddbd34aee2 VVRead command attempts to serialize objects before printing them. (#3591) 2022-12-20 14:14:26 -08:00
metalgearsloth
7e2a05ab65 Set movebuffer pool to default (#3592) 2022-12-20 14:13:23 -08:00
Leon Friedrich
e3108d22ac Fix RenderingTreeSystem move update (#3597) 2022-12-20 14:11:20 -08:00
Pieter-Jan Briers
4f7f43e193 Version: 0.74.0.0 2022-12-20 22:56:56 +01:00
Pieter-Jan Briers
84733a335c Prototype load parallelization (#3502) 2022-12-20 22:46:30 +01:00
metalgearsloth
2aafb21772 Version: 0.73.0.0 2022-12-20 22:23:17 +11:00
Pieter-Jan Briers
20c8eca6bf Use ConcurrentDictionary in SerializationManager.
Better GC behavior.
2022-12-19 02:39:28 +01:00
Pieter-Jan Briers
be72dd4107 Don't watch for prototype reload in integration tests. 2022-12-19 02:39:28 +01:00
Pieter-Jan Briers
187c158e6b Remove finalizer dispose from Overlay.
This should never have been on here what the hell.
2022-12-19 02:39:28 +01:00
metalgearsloth
53fb9d01e0 Grid helper methods (#3580) 2022-12-19 04:52:47 +11:00
Pieter-Jan Briers
bcf825d112 Mapped strings don't need IoC context anymore. 2022-12-18 17:40:17 +01:00
Pieter-Jan Briers
ab07c75966 Changelog for #3590 2022-12-18 15:50:28 +01:00
eoineoineoin
b5747f7003 Fix bug where config files could be corrupted (#3590)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
2022-12-18 15:49:17 +01:00
Pieter-Jan Briers
44da2fe738 Log breaking change from DependencyInjection thread-safety stuff 2022-12-18 12:58:05 +01:00
Pieter-Jan Briers
2995baca6f Optimize Clyde QuadBatchIndexWrite a bit. 2022-12-18 12:28:41 +01:00
Pieter-Jan Briers
a86a539c15 Move to .NET 7 SIMD intrinsics (#3584) 2022-12-18 11:44:57 +01:00
Pieter-Jan Briers
de486207b3 .NET 7 (#3582) 2022-12-17 14:15:58 +01:00
Pieter-Jan Briers
d1eb70da07 DependencyCollection is now thread safe.
We can now safely run stuff in parallel with registrations and all that goodness.
2022-12-17 00:38:34 +01:00
Pieter-Jan Briers
52588bee92 Fix ConfigurationManagerTest 2022-12-16 23:32:41 +01:00
Pieter-Jan Briers
ec26ef1e42 Check for CVar typos in server startup.
We now check the list of CVars to see if there's any unregistered CVars specified (i.e. in config, but not actually registered by the code). This would probably indicate a typo.

Only doing this on the server for now. The client may share config files from multiple codebases and end up with unknown CVars from there. This is probably fine, since those would be applied more automatically and not prone to config file typos as much.
2022-12-16 23:24:53 +01:00
AJCM-git
67381c369c Obsolete AnimationPlayerComponent E/C methods (#3581) 2022-12-17 02:13:57 +11:00
AJCM-git
b05b9949e6 Obsolete TimerComponent and TimerExtension (#3579) 2022-12-16 16:39:53 +11:00
Leon Friedrich
89ac6f0a43 Remove LookupFlags.Anchored (#3578) 2022-12-15 15:30:03 +11:00
metalgearsloth
3bcd53d7c5 Bandaid mapgrid loading (#3577) 2022-12-14 23:38:56 +01:00
ElectroJr
248e9240c1 update release notes 2022-12-13 20:01:54 -05:00
ElectroJr
e64d499000 Version: 0.72.0.0 2022-12-13 20:00:03 -05:00
metalgearsloth
5f03465879 Add pause time to pause events (#3570) 2022-12-14 11:56:11 +11:00
Pieter-Jan Briers
2a7920adaf Version: 0.71.1.4 2022-12-14 00:09:10 +01:00
Pieter-Jan Briers
a16731c957 Make config write exception safe.
Also changelog for 0688cd0202
2022-12-14 00:08:09 +01:00
Errant
0688cd0202 Fix Configuration write error (#3576) 2022-12-13 23:51:50 +01:00
Leon Friedrich
0c5b43d5af Fix sprite inert update (#3574) 2022-12-13 15:24:29 +11:00
metalgearsloth
8e70afd235 Fix pause map serialization for time offsets (#3507) 2022-12-13 13:09:21 +11:00
Leon Friedrich
7623c8357b Stop audio when audio system shuts down. (#3562)
fixes https://github.com/space-wizards/space-station-14/issues/12905
2022-12-13 12:42:22 +11:00
Pieter-Jan Briers
2e7dce5f08 validate_rsis.py chmod +x 2022-12-12 22:23:44 +01:00
Moony
2b03a2c550 Commits an unholy sin (PJB approved) (#3566) 2022-12-12 22:13:24 +01:00
metalgearsloth
b39adf0095 Fix some build warnings (#3573) 2022-12-12 22:12:51 +01:00
metalgearsloth
3c168f5a31 Replace GridEntityId with Owner (#3530) 2022-12-12 14:58:41 +11:00
ShadowCommander
fef963e77a Version: 0.71.1.3 2022-12-11 15:28:23 -08:00
Paul
b39f92f1fa Revert "removes a serializationhook"
This reverts commit 9a844ae413.
2022-12-12 00:24:33 +01:00
Paul
f6d4389f52 Revert "hotfixes an oopsie (#3572)"
This reverts commit 23233c59df.
2022-12-12 00:24:15 +01:00
Paul Ritter
23233c59df hotfixes an oopsie (#3572) 2022-12-12 00:18:23 +01:00
ShadowCommander
a243c4c795 Version: 0.71.1.2 2022-12-11 14:51:31 -08:00
ShadowCommander
349438358c Version: 0.71.1.1 2022-12-11 14:10:12 -08:00
Paul
9a844ae413 removes a serializationhook 2022-12-11 22:58:35 +01:00
metalgearsloth
6b076645db Kill NetworkedMapManager (#3516)
Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
Co-authored-by: Paul <ritter.paul1@googlemail.com>
2022-12-11 22:00:31 +01:00
Leon Friedrich
445a3aa8fb Adds basic delta state support (#3492) 2022-12-11 21:36:49 +01:00
Leon Friedrich
ca83543f9e Fix scroll bars being visible when they shouldn't be (#3568) 2022-12-11 11:06:31 -08:00
Pieter-Jan Briers
9b42527de3 Changelog for integration test improvements. 2022-12-10 12:47:08 +01:00
Pieter-Jan Briers
f98d8707c9 Move ShaderInstance finalizer around so DummyShaderInstance isn't finalized.
Maybe help a bit with test GC performance.
2022-12-10 12:35:05 +01:00
Pieter-Jan Briers
55fd79eb36 Fix GameController exception logging memory leak in tests. 2022-12-10 12:27:23 +01:00
metalgearsloth
509aca8c03 Version: 0.71.1.0 2022-12-10 20:16:47 +11:00
metalgearsloth
1e2756e4f7 Add API to get hard layer / mask (#3565) 2022-12-10 14:47:41 +11:00
Leon Friedrich
7175f49fa6 Physics solver tweaks (#3553) 2022-12-10 14:39:08 +11:00
metalgearsloth
31c4a331ab Swap entities when a map is loaded onto an existing map (#3511) 2022-12-10 14:37:23 +11:00
Pieter-Jan Briers
e71cab167b Don't run GC collect in startup in integration tests.
Oof.
2022-12-09 21:22:23 +01:00
Leon Friedrich
c2de890441 Add try-catch to window rendering (#3555) 2022-12-09 12:51:15 +11:00
Morb
6fe3d7cff5 Correct removal of PVS state for players without inGame status (#3531) 2022-12-08 11:28:31 +01:00
Pieter-Jan Briers
f51b7bbd99 Better RSI validator script. (#3558) 2022-12-07 23:50:29 +01:00
KIBORG04
a3e9dea8d8 Fix max_connections category in config (#3557) 2022-12-06 21:13:54 +01:00
metalgearsloth
6db41a05c2 Fix non-filled circle drawing (#3559) 2022-12-06 22:08:03 +11:00
metalgearsloth
ea2aab739f Remove some glass code (#3560) 2022-12-06 03:07:29 -08:00
metalgearsloth
17a623222d Version: 0.71.0.0 2022-12-06 13:19:20 +11:00
Leon Friedrich
55d2c4a066 More broadphase fixes (#3556) 2022-12-06 13:16:37 +11:00
Pieter-Jan Briers
db1e85e69d Warmup system to speed up startup. 2022-12-05 00:44:50 +01:00
Pieter-Jan Briers
22fe99ac99 Pass stream directly to JsonSerializer.Deserialize in RSI load.
This function didn't use to exist in a synchronous form, it does now.
2022-12-05 00:43:34 +01:00
Pieter-Jan Briers
be46a97849 Warn about loading raw PNGs inside RSIs. 2022-12-04 23:42:58 +01:00
Pieter-Jan Briers
9307298313 Disallow trailing commas in RSIs.
These are generally a mess and incompatible with tons of JSON parsers (e.g. Python's). Furthermore they can't be used with S.T.J source generators.
2022-12-04 23:38:54 +01:00
Pieter-Jan Briers
a12233ea4a Fix csi NRE. 2022-12-04 23:10:47 +01:00
Pieter-Jan Briers
3f86f5f5dd Rename game.maxplayers to net.max_connections, raise to 256. (#3552) 2022-12-03 11:51:37 +01:00
Pieter-Jan Briers
342d9ed2cd System debug panel in F3. 2022-12-03 00:28:33 +01:00
Pieter-Jan Briers
36f781d05b Add windowing API to ClydeDebugPanel. 2022-12-03 00:27:56 +01:00
Pieter-Jan Briers
1799ecaa68 Stop waiting on Godot, re-add 2px DebugMonitors separation. 2022-12-03 00:20:20 +01:00
Pieter-Jan Briers
f573143e29 Move Debug monitor (F3) panels to their own folder. 2022-12-02 23:05:21 +01:00
Kevin Zheng
5e08ef69aa Use correct native GLFW library name on FreeBSD (#3535) 2022-12-02 17:51:03 +01:00
Leon Friedrich
5d2cfcff66 Add scrollbar to dropdown options (#3550) 2022-12-02 17:31:05 +01:00
Leon Friedrich
e112938998 Remove unnecessary IoC resolves from audio system (#3551) 2022-12-02 17:28:44 +01:00
ElectroJr
5aa8aa120c Version: 0.70.0.0 2022-12-01 18:39:23 -05:00
ElectroJr
dd2697fbe5 update release notes 2022-12-01 18:39:00 -05:00
Mervill
fa94ef0df2 Warn about invalid placement type (#3467) 2022-12-02 10:22:06 +11:00
Leon Friedrich
af7d8c4601 Fix broadphase/lookup bugs (#3538) 2022-12-02 10:21:06 +11:00
Leon Friedrich
c0f384ac96 Add IDependencyCollection.FromParent() (#3541) 2022-12-02 10:19:51 +11:00
Leon Friedrich
6c1f8a86d7 Remove extra list index while y-sorting sprites. (#3544) 2022-12-02 10:19:26 +11:00
Morb
5cdae85e9f Call OnConnect method for player session (#3547) 2022-12-02 10:19:02 +11:00
Leon Friedrich
89331f6948 Queue serializer (#3546) 2022-12-02 10:16:35 +11:00
Ben Velie
cf6f52c1fa Fix simple typo (#3549) 2022-12-01 22:43:09 +01:00
Pieter-Jan Briers
86ffed9afb LoadDefaultsFromTomlStream to load CVars as CVar default overrides. 2022-12-01 22:40:19 +01:00
Pieter-Jan Briers
cb29e6e19d Add DEVELOPMENT define constant, equal to !FULL_RELEASE. 2022-12-01 22:39:10 +01:00
Pieter-Jan Briers
5fed38fecd Give GameShared an IDependencyCollection.
Death to IoCManager.
2022-12-01 00:14:11 +01:00
Leon Friedrich
ada056dcdf Fix rootUid returning all loaded entities (#3540) 2022-11-29 15:20:23 +11:00
metalgearsloth
3a05a82934 Fix pre init map loads on postinit maps (#3542) 2022-11-28 15:03:39 +11:00
Leon Friedrich
e6f2d36d50 Public state reset function. (#3539) 2022-11-28 12:12:07 +11:00
Leon Friedrich
f856ac0efa Misc replay related engine changes (#3508) 2022-11-28 12:11:44 +11:00
Pieter-Jan Briers
c34cbcdfa7 Server descriptions & info links. 2022-11-27 19:56:38 +01:00
Paul
b791a5e815 Version: 0.69.0.0 2022-11-27 19:25:05 +01:00
Paul Ritter
be8147a722 serv4 (#3527)
Co-authored-by: Paul <ritter.paul1@gmail.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
2022-11-27 19:23:58 +01:00
Leon Friedrich
c5ebe2c252 Two small bugfixes (#3534) 2022-11-26 16:03:38 +11:00
metalgearsloth
e418ab96b9 Version: 0.68.0.0 2022-11-26 14:03:15 +11:00
metalgearsloth
025fa95854 Remove dupe grid serialization (#3522) 2022-11-26 13:55:48 +11:00
Pieter-Jan Briers
32bdc152d7 Remove restart command. 2022-11-25 23:20:42 +01:00
Moony
fef46f7856 bug fix moment (#3533)
Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
2022-11-25 13:08:21 +01:00
Moony
11492ff62f Map editor engine changes. (#3532)
Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
2022-11-25 12:34:26 +01:00
metalgearsloth
b7d460cee6 Audio position fixes (#3459) 2022-11-25 20:00:11 +11:00
metalgearsloth
c62d0ecfd0 Update yml schema validator (#3521) 2022-11-25 09:21:05 +01:00
metalgearsloth
1dfa6587b1 Version: 0.67.2.2 2022-11-24 16:23:09 +11:00
Leon Friedrich
78bea7312e Fix grid chunk double subscription (#3526) 2022-11-24 13:38:09 +11:00
metalgearsloth
03363296db Fix grid contact ordering (#3525) 2022-11-24 12:28:55 +11:00
Leon Friedrich
7e9f3dd5e6 Fix replicated & archived client-settable cvars (#3454) 2022-11-23 11:11:19 +11:00
metalgearsloth
54a29a030e Version: 0.67.2.1 2022-11-23 11:04:38 +11:00
metalgearsloth
733097c1f4 Fix chunk event sub (#3520) 2022-11-23 11:02:51 +11:00
metalgearsloth
187d8865db Version: 0.67.2.0 2022-11-22 22:43:42 +11:00
Amy
9841b74936 Add submenu support to the menubar control (#3500) 2022-11-22 22:41:29 +11:00
metalgearsloth
d5faceca21 Fix dupe gridtree returns (#3517) 2022-11-22 22:33:30 +11:00
metalgearsloth
5b62ddeca4 Version: 0.67.1.3 2022-11-22 21:02:26 +11:00
metalgearsloth
8a4f186fd5 Fix map mapgrids again (#3515) 2022-11-22 20:58:16 +11:00
metalgearsloth
b14d461e9b Version: 0.67.1.2 2022-11-22 20:27:48 +11:00
metalgearsloth
3bfb23f35d Fix deserialized grid networking (#3514) 2022-11-22 20:24:58 +11:00
metalgearsloth
846cc3fa48 Version: 0.67.1.1 2022-11-22 14:07:50 +11:00
metalgearsloth
01673fb155 Mapgrid fixes (#3513) 2022-11-22 14:04:22 +11:00
metalgearsloth
15d30eacd0 Version: 0.67.1.0 2022-11-22 13:30:31 +11:00
metalgearsloth
615b1ae2af Changes for MapGrid support (#3491) 2022-11-22 13:28:10 +11:00
metalgearsloth
85f99e6303 Version: 0.67.0.0 2022-11-22 13:11:33 +11:00
metalgearsloth
5e3a5a0d0c Merge MapGrid into MapGridComponent (#3468) 2022-11-22 13:04:51 +11:00
ElectroJr
8dfc779611 Version: 0.66.0.0 2022-11-21 19:57:32 -05:00
ElectroJr
3ba7238076 Release notes 2022-11-21 19:56:57 -05:00
Leon Friedrich
7b59fbd3ef Audio and other misc replay related changes (#3471) 2022-11-22 11:49:59 +11:00
Paul Ritter
d87963206c im back 2022-11-22 00:07:13 +01:00
metalgearsloth
9dd13245ef Add lookup reparenting tests (#3421) 2022-11-21 23:14:08 +11:00
Leon Friedrich
1c3905a8f4 Fix mapload positions (#3510) 2022-11-21 14:43:11 +11:00
Pieter-Jan Briers
762cd786ea Fix dependency injecting missing on script globals. 2022-11-20 14:50:08 +01:00
metalgearsloth
120c90862b Version: 0.65.2.1 2022-11-20 12:51:53 +11:00
Pieter-Jan Briers
4e0deb2e42 Enable server GC by default on server. 2022-11-19 19:23:39 +01:00
Pieter-Jan Briers
6bc831eb05 Emitted GLSL uniform arrays have size after name.
We're dropping GLES2 but I already wrote the code so.
2022-11-19 18:08:37 +01:00
metalgearsloth
e0be355707 Fix metadata dupes on maps (#3505)
Fixes https://github.com/space-wizards/RobustToolbox/issues/3504
2022-11-20 03:06:32 +11:00
Paul Ritter
ec3485e741 my bad bb 2022-11-19 12:24:44 +01:00
metalgearsloth
fb0ed471a0 Set map as uninitialized on loadmap (#3503) 2022-11-19 14:33:53 +11:00
metalgearsloth
509ba2ec4b Remove some resolves from filters (#3498) 2022-11-19 10:53:37 +11:00
Pieter-Jan Briers
8121c3c41b Move freetype font data to POH.
Avoids stuff getting stuck in gen0.
2022-11-18 00:50:20 +01:00
Pieter-Jan Briers
4a003eaec0 Try to fix publishing self-contained executable issues. 2022-11-17 23:19:17 +01:00
Paul Ritter
47f7b73ea0 Update CODEOWNERS 2022-11-17 11:58:39 +01:00
metalgearsloth
8a898adaa2 Version: 0.65.2.0 2022-11-17 19:08:47 +11:00
metalgearsloth
031dceeb48 Parallel physics broadphase (#3483) 2022-11-17 19:01:29 +11:00
Pieter-Jan Briers
bf6928703f Custom YAML -> DataNode parser. (#3496) 2022-11-16 22:17:30 +01:00
Pieter-Jan Briers
75288ba5e7 More clarity in glibc bug warning. 2022-11-16 21:59:31 +01:00
DrSmugleaf
96938ca85a Remove redundant read-only VV from datafields (#3494) 2022-11-16 21:02:39 +01:00
metalgearsloth
a60011d612 Use static lambda for pvs grid query (#3490) 2022-11-16 21:02:16 +01:00
Leon Friedrich
60e0c0b804 Expose more state/tick logic to content (#3474) 2022-11-16 20:56:02 +01:00
Leon Friedrich
a0c23c7fee Add ClydeAudio.StopAllAudio() (#3473) 2022-11-16 20:44:01 +01:00
Pieter-Jan Briers
46183aa41a Add WebView to solution.
This makes sure it will be built by CI
2022-11-16 20:33:28 +01:00
Pieter-Jan Briers
3f175a8d2a Add Robust.Packaging to solution 2022-11-16 20:27:00 +01:00
Amy
fac1b2c469 Fix bad reference (#3484)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
2022-11-16 20:15:15 +01:00
DrSmugleaf
bb137d69a2 Version: 0.65.1.0 2022-11-16 19:55:52 +01:00
Jezithyr
1723be3d5b Implementing value protoIds for dictionary serializers (#3470)
Co-authored-by: Jezithyr <Jezithyr@gmail.com>
2022-11-16 12:03:16 +01:00
DrSmugleaf
a35632d89e Add test for (de)serializing data record structs (#3493) 2022-11-16 07:14:50 +01:00
Leon Friedrich
f956ad2008 Fixes lerping clean up issue added in #3472 (#3489) 2022-11-16 12:39:41 +11:00
Pieter-Jan Briers
1646297039 Remove most static IoCManager. accesses from engine. (#3466)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-11-15 22:00:28 +11:00
metalgearsloth
c26c8fb81e Version: 0.65.0.1 2022-11-15 11:58:59 +11:00
DrSmugleaf
38f2808816 Fix responses and error in tpgrid command (#3486) 2022-11-14 20:41:40 +01:00
metalgearsloth
7994935b23 Use field for setlocalposrot (#3482) 2022-11-15 01:07:08 +11:00
metalgearsloth
7120000ef5 Version: 0.65.0.0 2022-11-14 22:02:30 +11:00
metalgearsloth
7c3fd3eaa9 Destroy non-colliding contacts (#3481) 2022-11-14 21:58:29 +11:00
Leon Friedrich
8bd47cd7f8 Misc lerping changes (#3472) 2022-11-14 21:42:30 +11:00
metalgearsloth
1068458beb Force grids to be collidable (#3480) 2022-11-14 21:38:53 +11:00
metalgearsloth
54db524e53 Fix testbeds (#3478) 2022-11-14 17:38:53 +11:00
Pieter-Jan Briers
9265af75bf Automatically update release notes in version.py
General cleanup to the script too.
2022-11-13 18:47:57 +01:00
Pieter-Jan Briers
037bff9099 RichTextEntry uses ValueList, OutputPanel list refs. 2022-11-13 16:09:43 +01:00
Pieter-Jan Briers
6de1b41d9c Changelog for 0.64.1.0 2022-11-13 15:53:14 +01:00
Pieter-Jan Briers
0ab9f34046 Version: 0.64.1.0 2022-11-13 15:51:32 +01:00
Pieter-Jan Briers
2746dccfc6 Fix RichTextEntry wrapping. 2022-11-13 15:51:11 +01:00
DrSmugleaf
eae54d0327 Fix help string for server ProfileEntitySpawningCommand and doc for UserInterfaceManager._dependencies (#3469) 2022-11-13 10:56:52 +01:00
metalgearsloth
c1195d1f1d Version: 0.64.0.0 2022-11-13 17:32:50 +11:00
metalgearsloth
5a02c5c03f 0.64.0.0 release notes 2022-11-13 17:32:37 +11:00
metalgearsloth
d9c59164f2 Refactor maploader to a system (#3385) 2022-11-13 17:29:57 +11:00
metalgearsloth
72a952fbdd ECS grid methods and map partials (#3441) 2022-11-13 15:37:01 +11:00
metalgearsloth
45e58c1ed8 Fix release notes
oop
2022-11-13 15:02:31 +11:00
metalgearsloth
127d1d7eaf Release notes for 0.63.0.0 2022-11-13 14:59:55 +11:00
metalgearsloth
18c9c6bf0a Version: 0.63.0.0 2022-11-13 14:59:39 +11:00
Leon Friedrich
89ec06468f Fix map saves sometimes not including new components (#3461) 2022-11-13 14:49:40 +11:00
Leon Friedrich
9920e409ca Add support for saving missing prototype components (#3462)
Fixes https://github.com/space-wizards/RobustToolbox/issues/2824
2022-11-13 14:49:18 +11:00
Pieter-Jan Briers
f1681b2128 Fix hot reload unit tests 2022-11-12 15:09:54 +01:00
Pieter-Jan Briers
490a4efff8 IoCManager.InitThread now returns new IDependencyCollection. 2022-11-12 12:24:31 +01:00
Pieter-Jan Briers
a416eedff0 Fix some bad doc comment links to IoCManager.Resolve{T}() 2022-11-12 12:23:12 +01:00
Pieter-Jan Briers
2fe0c94d84 Register<T> extension for IDependencyCollection. 2022-11-12 12:12:05 +01:00
Pieter-Jan Briers
2f22de4eff Make IoC Register have where TInterface : class 2022-11-12 12:11:19 +01:00
Pieter-Jan Briers
2017d943fb Move entity prototype reload logic to entity system.
Removes dependency of IPrototypeManager -> IEntityManager.
2022-11-12 12:03:15 +01:00
Pieter-Jan Briers
e34935c9e2 TextEdit control & a bunch of other stuff (#3436) 2022-11-12 03:12:49 +01:00
Pieter-Jan Briers
db95c6284b Oops I forgot to commit a file 2022-11-12 00:31:09 +01:00
Pieter-Jan Briers
6255ee6e96 Cache JsonSerializerOptions in benchmarks exporter. 2022-11-12 00:30:17 +01:00
Pieter-Jan Briers
d1b16d9a52 Engine HttpClient usage fixes.
Properly pool them.
Extend keep-alive timeout for hub advertisements.
Proper user-agents
2022-11-12 00:28:37 +01:00
Pieter-Jan Briers
708b3b2acf Remove unnecessary IoC resolve from new theming system. 2022-11-11 01:25:17 +01:00
Pieter-Jan Briers
2e471366b7 Profile group for UIRefactor controllers 2022-11-11 01:25:11 +01:00
metalgearsloth
ca9ce7c7ed Allow render targets to not clear (#3457) 2022-11-10 23:33:18 +01:00
metalgearsloth
81cd43f988 Random timespan support (#3458) 2022-11-10 23:32:52 +01:00
Mervill
cf5c72e7ea CVar game.type is obsolete (#3460) 2022-11-10 23:32:28 +01:00
Mervill
2629fd3efb LoadFromDocument properly detects duplicate entities (#3448)
I circled back around to this and discovered that the fix is (probably?) easy.

Closes #3079

I tested this locally but I'm pushing the change via the web editor so I don't have to go to the trouble of setting up a Robust fork of my own.
2022-11-10 09:37:47 +01:00
Pieter-Jan Briers
338fcd5fcb Read Lidgren status change from data message. 2022-11-10 01:48:16 +01:00
Pieter-Jan Briers
b5395c0bc0 New version of Robust.LoaderApi to remove warning on .NET 7 2022-11-10 01:45:31 +01:00
Pieter-Jan Briers
97bdc1edee Fix bad \n in DebugClydePanel. 2022-11-10 01:41:58 +01:00
Pieter-Jan Briers
8a0464ed35 Use shared target framework for Avalonia.Base project. 2022-11-10 01:39:34 +01:00
Pieter-Jan Briers
31d68dcd49 .NET 7 compilation fixes. 2022-11-10 01:26:05 +01:00
ElectroJr
3b337bf88d Version: 0.62.1.0 2022-11-08 19:37:03 -05:00
ElectroJr
f3e0706488 release notes 2022-11-08 19:36:51 -05:00
Leon Friedrich
3378f1ff98 Add new anchoring test (#3447) 2022-11-09 11:14:51 +11:00
Leon Friedrich
f160508da3 Fix PVS error (#3452)
Fixes https://github.com/space-wizards/RobustToolbox/issues/3413
2022-11-09 11:14:10 +11:00
Leon Friedrich
1ba5c9120f Remove redundant client-side error (#3450) 2022-11-09 10:56:10 +11:00
Leon Friedrich
701606c75a Better client state exception tolerance (#3451) 2022-11-09 10:55:56 +11:00
Leon Friedrich
efa0fa3f1b Remove more "real" nullspace maps (#3449) 2022-11-08 13:29:56 +11:00
ElectroJr
63b9b56006 Version: 0.62.0.1 2022-11-06 16:22:56 -04:00
ElectroJr
4b082baf37 release notes 2022-11-06 16:22:45 -04:00
Leon Friedrich
698d65c5af Fix sprite animations not updating (#3446) 2022-11-07 07:20:40 +11:00
Leon Friedrich
c9dd27658e Fix anchoring bug (#3445)
Fixes https://github.com/space-wizards/RobustToolbox/issues/3444
2022-11-07 06:35:42 +11:00
ElectroJr
266223c3fd Version: 0.62.0.0 2022-11-06 12:28:11 -04:00
ElectroJr
521e4746c6 update release notes 2022-11-06 12:27:33 -04:00
Leon Friedrich
72efbe543c Better ResetPredictedEntities error handling (#3442) 2022-11-07 03:20:53 +11:00
metalgearsloth
b69ccc2241 Remove obsolete map event handlers (#3440) 2022-11-07 03:18:52 +11:00
Leon Friedrich
656992ae5f More lookup fixes (#3438) 2022-11-06 18:15:08 +11:00
Moony
947f04ebb9 Remove SAO mode from the engine (makes sure the client actually gets its command permissions) (#3439) 2022-11-06 01:20:09 +01:00
Leon Friedrich
603b88c77a Client entity deletion error tolerance (#3435) 2022-11-06 03:45:28 +11:00
Ygg01
108e270f9e Localize commands (#3374) 2022-11-06 03:00:57 +11:00
metalgearsloth
d3edd10714 Entity query struct enumerators (#3334) 2022-11-04 11:46:43 +11:00
ElectroJr
125d138e16 Version: 0.61.0.0 2022-11-03 19:38:18 -04:00
ElectroJr
f5c210b990 release notes 2022-11-03 19:38:04 -04:00
metalgearsloth
4521dc37f5 Remove IMap / IMapGrid comps (#3434) 2022-11-04 10:12:36 +11:00
Jacob Tong
adcdb9f736 Clean up audiosystem (#3251) 2022-11-04 09:48:33 +11:00
ElectroJr
2116230f58 Version: 0.60.0.0 2022-11-02 21:56:52 -04:00
ElectroJr
dd0d186314 release notes 2022-11-02 21:56:30 -04:00
Paul Ritter
329e2b0cdc removes beforeserialization hook (#3422) 2022-11-03 12:50:40 +11:00
Paul Ritter
a562675553 misc optimizations in pvs (#3427) 2022-11-03 12:39:11 +11:00
metalgearsloth
89a1d32e1d Remove some redundant physics calls (#3425) 2022-11-03 12:33:41 +11:00
metalgearsloth
05fb110f40 Fix client fixture state handling (#3431) 2022-11-03 12:32:07 +11:00
Leon Friedrich
c6896e9bd9 More broadphase fixes (#3429) 2022-11-03 12:30:14 +11:00
DrSmugleaf
2678fad629 Call GC.Collect before running profileEntitySpawning (#3428) 2022-11-02 15:53:10 +01:00
Rane
7d0e9f9635 method to return all open uis on a session (#3424) 2022-11-01 14:44:11 +11:00
ElectroJr
7a5df9a718 Version: 0.59.0.0 2022-10-31 20:40:00 -04:00
ElectroJr
856fbd0480 release notes 2022-10-31 20:39:57 -04:00
metalgearsloth
828ac48f7c Remove transform methods from MapGrid (#3382) 2022-11-01 11:27:41 +11:00
Leon Friedrich
d0e11a755c Fix PVS exception (#3423) 2022-11-01 09:49:14 +11:00
Leon Friedrich
b637967163 Remove some duplicate code in DetachParentToNull() (#3417) 2022-11-01 00:53:23 +11:00
Leon Friedrich
50dce4d56b Make Resolve<TComp> protected (#3411) 2022-10-31 21:26:05 +11:00
Leon Friedrich
e9af594448 PVS tweaks (#3419) 2022-10-31 21:24:22 +11:00
Leon Friedrich
b5662007d5 Fix GetEntitiesIntersecting bug (#3420) 2022-10-31 21:22:41 +11:00
ElectroJr
03acded657 Version: 0.58.1.1 2022-10-30 21:57:54 -04:00
ElectroJr
6b0e2deede release notes 2022-10-30 21:57:36 -04:00
Leon Friedrich
ffe1689be6 Fix misc container and lookup bugs (#3418) 2022-10-31 12:54:37 +11:00
Leon Friedrich
2f3f7976f1 Fix containers not force ejecting (#3416) 2022-10-31 11:11:28 +11:00
ElectroJr
df7933b890 Version: 0.58.1.0 2022-10-30 19:52:26 -04:00
ElectroJr
5778ca87e7 release notes 2022-10-30 19:52:14 -04:00
Leon Friedrich
af8a21df53 Don't raise physics events before initialization (#3415) 2022-10-31 10:48:59 +11:00
ElectroJr
cd02dddd5d Version: 0.58.0.0 2022-10-30 19:14:52 -04:00
ElectroJr
e44805cd20 Update release notes 2022-10-30 19:14:18 -04:00
Leon Friedrich
635387a23e Disable collision for fixtureless entities. (#3412) 2022-10-31 10:06:47 +11:00
Leon Friedrich
2b594f6356 Cache broadphases and container rejig (#3407) 2022-10-31 10:06:08 +11:00
Leon Friedrich
cec14ae861 Add exception for infinite loop in Balance() (#3398) 2022-10-30 19:15:08 +11:00
metalgearsloth
a12a973a26 Mark component.Dirty() as obsolete (#3409) 2022-10-30 19:14:50 +11:00
DrSmugleaf
45a315bb69 Add command to profile entity spawning (#3404) 2022-10-30 14:09:30 +11:00
Leon Friedrich
1e843bf3a2 More Transform ECS (#3368) 2022-10-30 03:36:23 +11:00
Vera Aguilera Puerto
26c85725a5 Version: 0.57.0.4 2022-10-29 18:14:00 +02:00
Vera Aguilera Puerto
467d391ec8 Extra-graceful entity deletions. (#3405) 2022-10-29 18:10:19 +02:00
Leon Friedrich
601feb7cc0 Optimize DeparentAllEntsOnTile (#3401) 2022-10-29 14:26:04 +11:00
Leon Friedrich
cd1466cdc0 Replaces ContainsEntity() with metadata flag check (#3392) 2022-10-29 11:37:43 +11:00
Leon Friedrich
94aeb309b2 Add additional container assert (#3397) 2022-10-29 10:53:29 +11:00
Leon Friedrich
3fba59eb6c Lookup movement handling changes. (#3369) 2022-10-29 10:44:48 +11:00
metalgearsloth
508754f4bc Disable kinematic controller collisions (#3358) 2022-10-29 05:05:36 +11:00
Leon Friedrich
3f4ae0f02a Better AddComponent error (#3394) 2022-10-28 17:16:11 +11:00
ElectroJr
b0daf64d94 Version: 0.57.0.3 2022-10-27 23:07:44 -04:00
ElectroJr
c4223f015d release notes 2022-10-27 23:07:23 -04:00
Leon Friedrich
33ebb99b9c Fix lookups for StaticSundriesTree (#3393) 2022-10-28 14:04:54 +11:00
Leon Friedrich
dad176aca1 fix pvs parent change (#3386) 2022-10-28 12:35:36 +11:00
metalgearsloth
cac1f3e018 Version: 0.57.0.2 2022-10-28 12:25:57 +11:00
Leon Friedrich
49dfb2d2f1 Lookup fixes (#3390) 2022-10-28 11:23:23 +11:00
Leon Friedrich
4e0821c6c1 Replace some GetAABB() with GetAABBNoContainer() (#3391) 2022-10-28 11:16:03 +11:00
ElectroJr
39800d57d1 Version: 0.57.0.1 2022-10-27 10:49:20 -04:00
ElectroJr
52b9729bb8 update release notes 2022-10-27 10:49:04 -04:00
metalgearsloth
5a49ce1812 Don't raise rotation event before parent change (#3384) 2022-10-28 01:46:38 +11:00
metalgearsloth
c3d27fb338 Update engine CL (#3383) 2022-10-28 00:10:12 +11:00
metalgearsloth
07378f4503 Version: 0.57.0.0 2022-10-27 23:37:49 +11:00
metalgearsloth
ae2f3fe70c Remove EntityLookupComponent and de-dupe AABBs (#3367)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-27 23:36:01 +11:00
Leon Friedrich
6edd5d8a63 Slight movement PVS performance improvement (#3381) 2022-10-27 14:59:28 +11:00
metalgearsloth
08c6e52806 Pool contact pairbuffer (#3344)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-27 13:55:26 +11:00
metalgearsloth
f13a066bdd Use static lambdas for sprites / lights (#3335) 2022-10-27 13:52:04 +11:00
metalgearsloth
c478ef3a4b Re-use contact linkedlist nodes (#3343)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-27 13:50:59 +11:00
ElectroJr
1d3bf8d072 Version: 0.56.1.1 2022-10-26 22:31:48 -04:00
ElectroJr
12f40d951d Update release notes 2022-10-26 22:31:17 -04:00
Leon Friedrich
c98e409ad8 PVS bugfix (#3380) 2022-10-27 13:21:06 +11:00
metalgearsloth
ef6efd3c68 Fix parent change velocity (#3378) 2022-10-26 18:46:21 +02:00
ElectroJr
c4b0534240 Version: 0.56.1.0 2022-10-25 21:54:44 -04:00
ElectroJr
ff0dbecbee Update changelog 2022-10-25 21:54:11 -04:00
Leon Friedrich
b0d59e5e3f PVS budget tweaks (#3360) 2022-10-26 12:31:29 +11:00
Leon Friedrich
e3d29ae28f Change PVS parent-change handing (#3362) 2022-10-25 23:44:35 +11:00
estacaoespacialpirata
9aebaa3749 Update pt-BR locale (#3372)
Co-authored-by: zero <ribeirolucasdev@gmail.com>
2022-10-24 15:35:04 -07:00
Leon Friedrich
2bae6abbc0 Entity deletion changes (#3355) 2022-10-24 03:50:58 +11:00
Vera Aguilera Puerto
880160e7af Fix VV type handler removal. 2022-10-23 14:51:27 +02:00
DrSmugleaf
801b513cde Make Box2Serializer split on a span (#3365) 2022-10-23 13:03:39 +02:00
Leon Friedrich
bd284cc945 Improve GetOccluderTree() (#3366) 2022-10-23 18:42:37 +11:00
metalgearsloth
c481b50a8b Remove IEnumerable abuse from entitylookup (#3333) 2022-10-23 15:48:38 +11:00
DrSmugleaf
c889c2b2aa Optimize client entity spawning by 15% (#3364) 2022-10-23 15:46:46 +11:00
Leon Friedrich
60c150269e improve rendering tree movement handling (#3361) 2022-10-23 13:55:08 +11:00
metalgearsloth
8dffeef261 Nuke grid enumeration allocs (#3342)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-23 13:54:48 +11:00
Leon Friedrich
6943693d3f Add trace to mid-deletion reparenting error logs. (#3356) 2022-10-21 15:39:34 +11:00
metalgearsloth
964ab60020 Fix a bunch of warnings (#3289) 2022-10-21 00:17:29 +11:00
Paul Ritter
8fad4d291f fixes heaps of build warnings (#3329)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-10-20 23:36:32 +11:00
Kara
d3adcb83db Version: 0.56.0.2 2022-10-19 16:05:16 -07:00
Kara
3c046b5f6f Rename _lib.ftl to _engine_lib.ftl to avoid overwriting
Engine and content locales get merged into the same folder. This is causing two files named the same thing to be in the same place, presumably causing extracting the build to fail? Hopefully?
2022-10-19 16:04:48 -07:00
Kara
dd567a4cc8 Version: 0.56.0.1 2022-10-19 15:22:06 -07:00
DrSmugleaf
fe78883a93 Fix instantiation of data records containing value types (#3352) 2022-10-19 16:04:03 +02:00
Kara
1d0c9e9512 notes 2022-10-18 19:48:12 -07:00
Kara
1a61f1925c Version: 0.56.0.0 2022-10-18 19:35:48 -07:00
estacaoespacialpirata
18567c7051 Add the pt-BR locale (#3168)
Co-authored-by: zero <ribeirolucasdev@gmail.com>
2022-10-18 19:01:22 -07:00
Kara
4932487859 Partially move content _lib.ftl to engine + CONJUGATE-BASIC (#3262) 2022-10-18 18:57:31 -07:00
metalgearsloth
506f0b0a1e Fix audio fallback coords (#3306) 2022-10-18 18:49:35 -07:00
Vera Aguilera Puerto
ae2e6bca82 Add new helpers to TypeHandlers, fix bug with TypeHandler listing. (#3348) 2022-10-18 18:48:30 -07:00
Paul Ritter
0b19d04c1c makes some loops for in pvs for free perf (#3338) 2022-10-18 18:47:41 -07:00
metalgearsloth
8344e8ba10 Fix inverse vec2 allocations (#3341)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-18 18:30:34 -07:00
Kevin Zheng
5dd1b58357 Move CastShadows to SharedPointLightComponent (#3346) 2022-10-19 10:10:30 +11:00
metalgearsloth
537e1ab4f9 Update release-notes + version (#3347) 2022-10-17 15:48:07 +11:00
metalgearsloth
7247171b4b TryGetNearest update to allow passing in transforms (#3330)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-17 15:34:58 +11:00
Francesco
155a35ab06 Adds a getter to AnimationHelper (#3345) 2022-10-17 03:54:10 +11:00
metalgearsloth
3c50db8b5e Don't allocate a list per physics contact (#3332) 2022-10-16 11:53:32 +11:00
Ygg01
78ba02432e Fix obsolete warnings in tests (#3340) 2022-10-16 11:12:11 +11:00
Leon Friedrich
32f8b6f4b8 Prevent singular sprite matrices (#3339) 2022-10-16 11:04:53 +11:00
Leon Friedrich
97d52393ed Add a new Logger.Info() to MapLoader (#3320) 2022-10-16 11:03:36 +11:00
Leon Friedrich
576abe7adb Enable release mode PVS debug commands (#3337) 2022-10-15 16:18:16 +11:00
Vera Aguilera Puerto
d404494018 ViewVariables Exorcism Part 1: Of paths and commands (#3214) 2022-10-14 19:03:44 +02:00
Игорь Спичкин
80e390a74b Use invariant culture in serialization (#3323) 2022-10-12 14:10:04 +02:00
ElectroJr
cf912d8c07 Version: 0.55.4.1 2022-10-11 20:51:36 -04:00
Leon Friedrich
ae8a7481bc Fix eye networking (#3328) 2022-10-12 11:50:38 +11:00
Paul
dbcb9bde3d Version: 0.55.4.0 2022-10-12 01:41:24 +02:00
Paul
6dc06e7690 fixes statistics crash 2022-10-12 01:40:52 +02:00
Paul
f2cbfbf705 fixes typo 2022-10-12 01:20:28 +02:00
Paul
ca79d1fc13 overhauls benchmarks 2022-10-12 01:15:30 +02:00
Paul
2bcfca3d78 makes benchmarks use subfolders 2022-10-11 20:48:54 +02:00
Paul
74c86bf08c Version: 0.55.3.0 2022-10-11 20:19:39 +02:00
Paul Ritter
b8397a1a27 required changes for content benchmarks (#3327) 2022-10-11 20:16:09 +02:00
metalgearsloth
4c2da94a58 Fix Saltern in default config (#3326) 2022-10-11 13:18:55 +02:00
metalgearsloth
42c6b9976a Version: 0.55.2.0 2022-10-11 16:17:37 +11:00
Leon Friedrich
cd40916df0 Remove Dirty(comp) on component init. (#3303) 2022-10-11 16:14:08 +11:00
Leon Friedrich
95525a549a Make TransformComponent._localMatrix public (#3325) 2022-10-11 16:13:10 +11:00
ElectroJr
07c5c0ca0e Version: 0.55.1.0 2022-10-10 21:19:14 -04:00
Leon Friedrich
c8e36eadf7 Fix mapfile validator (#3324) 2022-10-11 12:18:04 +11:00
Paul Ritter
b3df54d2bb fixes benchmark names (#3322) 2022-10-10 19:27:02 +02:00
Paul Ritter
007bfe4447 fixes the benchmark db schema and adds a json variant of params (#3321) 2022-10-10 16:48:25 +02:00
ElectroJr
ea1691c7f5 Version: 0.55.0.0 2022-10-09 21:31:03 -04:00
Leon Friedrich
f82e3e8432 Fix error in HandlePhysicsMapRemove (#3319) 2022-10-10 12:19:52 +11:00
Paul Ritter
59d8cb37f0 re-enables running all benchmarks (#3318) 2022-10-10 03:09:19 +02:00
Paul Ritter
cf52985eaf fixes benchmark db write (#3317) 2022-10-10 02:28:10 +02:00
Paul Ritter
aa412c2b47 temporarily makes benchmarks only run one benchmark (#3316) 2022-10-10 02:17:59 +02:00
Paul Ritter
917280b4d7 reworks benchmarks db stuff (#3314) 2022-10-10 02:11:24 +02:00
ElectroJr
51c6ff934e Version: 0.54.0.0 2022-10-09 17:44:23 -04:00
Leon Friedrich
e534fcd800 Unrevert "Remove obsolete GridId and all references to it" (#3279) 2022-10-10 08:41:58 +11:00
Leon Friedrich
6105be4b14 Fix saving entities without prototypes (#3312) 2022-10-10 06:58:34 +11:00
metalgearsloth
205147c0f0 Store paused time on entities (#3288) 2022-10-10 04:58:08 +11:00
Leon Friedrich
f6d722f7c3 Make InitializeAndStartEntity public (#3305) 2022-10-10 04:57:41 +11:00
keronshb
d1c1bffc4f Got Inserted Event for containers (#3311) 2022-10-10 04:57:04 +11:00
metalgearsloth
54316b7255 Version: 0.53.0.1 (#3310)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-09 21:51:02 +11:00
metalgearsloth
2d7cd49dbc Revert "Container tweaks (#3293)" (#3309)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-09 21:42:12 +11:00
metalgearsloth
5832cb3866 Version: 0.53.0.0 2022-10-09 17:34:07 +11:00
metalgearsloth
818ea1a629 Revert "Remove obsolete GridId and all references to it" (#3308) 2022-10-09 17:32:54 +11:00
metalgearsloth
58c0f7796b Version: 0.51.0.1 2022-10-09 16:47:01 +11:00
metalgearsloth
55217c982d Fix build (#3307) 2022-10-09 16:45:22 +11:00
metalgearsloth
036951ae62 Version: 0.51.0.0 2022-10-09 16:25:23 +11:00
SpaceManiac
ebaa8d9ac3 Remove obsolete GridId and all references to it (#3279) 2022-10-09 16:23:40 +11:00
Leon Friedrich
e222f82059 Fix map loader entity dirtying (#3301) 2022-10-09 16:19:32 +11:00
Leon Friedrich
d867661c24 Add MetadataComponent argument to Dirty() (#3302) 2022-10-09 16:19:09 +11:00
Alex Evgrashin
ac7c44ab2e Grid line enumerator (#3278) 2022-10-09 13:27:05 +11:00
themias
b861182846 Fix EmptyContainer and CleanContainer (#3300) 2022-10-09 04:30:46 +11:00
Vera Aguilera Puerto
1f3e42b013 Use our own NFluidsynth NuGet package. (#3304) 2022-10-08 12:29:53 +02:00
Leon Friedrich
7b0c4dd7fb Fix component removal / PVS bugs (#3275) 2022-10-08 13:22:32 +11:00
Kevin Zheng
2898e1413b Add build property to use system SQLite3 (#3298) 2022-10-08 00:15:49 +02:00
metalgearsloth
ba3525c0c0 Version: 0.50.2.1 2022-10-07 11:31:08 +11:00
metalgearsloth
5ff11980b7 Fix nearest check for non-hard bodies (#3297) 2022-10-07 11:30:38 +11:00
metalgearsloth
29274986f8 Version: 0.50.2.0 2022-10-07 00:35:56 +11:00
metalgearsloth
57d862f9fc Add API to get nearest distance for 2 entities (#3291)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-07 00:35:25 +11:00
metalgearsloth
31da2557d5 Container tweaks (#3293) 2022-10-06 13:12:43 +02:00
Kevin Zheng
9752996497 Update OpenTK.OpenAL to 4.7.5 (#3296) 2022-10-06 13:00:35 +02:00
metalgearsloth
7c7c8d23fb Version: 0.50.1.0 2022-10-04 16:10:31 +11:00
metalgearsloth
e1dc83a573 Add method to get velocity from a point (#3239) 2022-10-04 16:09:58 +11:00
metalgearsloth
520461ff95 Version: 0.50.0.0 2022-10-04 15:30:56 +11:00
metalgearsloth
7c2a010c71 Change mass to density (#3282) 2022-10-04 15:30:33 +11:00
metalgearsloth
c17faedccf Version: 0.49.0.0 2022-10-03 20:28:58 +11:00
metalgearsloth
36495fe81b Add time offset serializer (#3287)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2022-10-03 20:28:28 +11:00
Leon Friedrich
9e3851b847 Allow EyeComponent to centre on other entities. (#3292) 2022-10-03 20:03:22 +11:00
Pieter-Jan Briers
582e705088 Update Lidgren to v0.2.2 2022-10-01 00:06:55 +02:00
Pieter-Jan Briers
cf893c3c32 Avoid rogue obj/ folders breaking Lidgren build. 2022-10-01 00:06:55 +02:00
Pieter-Jan Briers
3a5cc20a88 Compile Lidgren net6.0, change assembly name. 2022-10-01 00:06:55 +02:00
Pieter-Jan Briers
cb209df0e5 Add MTU-related CVars for Lidgren. 2022-10-01 00:06:55 +02:00
Pieter-Jan Briers
eb64f55ce5 Release notes template 2022-10-01 00:06:55 +02:00
metalgearsloth
00ab9c6474 Version: 0.48.2.0 2022-09-30 15:28:00 +10:00
Pieter-Jan Briers
26eaa38e89 Improve MsgState ReliableThreshold
Explain real reason for it (I didn't know it at the time). Make the constant pegged to Lidgren's.
2022-09-30 01:43:00 +02:00
metalgearsloth
42bc16d4c9 Add some more types to type reflection (#3283) 2022-09-29 13:00:33 +02:00
metalgearsloth
498ce86176 Add API to get text dimensions (#3290) 2022-09-29 12:50:06 +02:00
metalgearsloth
3104678140 Version: 0.48.1.0 2022-09-29 16:04:50 +10:00
metalgearsloth
c63984eaca Add alt use key (#3253) 2022-09-29 16:04:27 +10:00
Leon Friedrich
078b81d495 Better sprite errors (#3285) 2022-09-28 16:32:37 +10:00
Leon Friedrich
4c341f0289 Replace Logger.Error with IRuntimeLog (#3267) 2022-09-28 11:07:45 +10:00
Leon Friedrich
bb4461587e Mark server-side SpriteComponent as obsolete. (#3276) 2022-09-28 11:07:25 +10:00
SpaceManiac
fe45af151a Allow startup to continue if prototype watching fails (#3273)
* Allow startup to continue if prototype watching fails

* Move _watchers.Add inside try, so dud watchers are not saved
2022-09-26 16:18:07 +02:00
wrexbe
ae2b0e9d8f Version: 0.48.0.1 2022-09-25 21:53:39 -07:00
wrexbe
ddf4828bf9 UI popup size fix (#3281) 2022-09-25 21:51:23 -07:00
DrSmugleaf
b1d0dbf03c Make UIControllers available to each other through IoC (#3277) 2022-09-25 07:54:58 +02:00
metalgearsloth
a91b134c5d Version: 0.48.0.0 2022-09-23 13:57:17 +10:00
Leon Friedrich
660b0b05d3 Remove RotateEvent (#3270) 2022-09-23 13:56:13 +10:00
Paul Ritter
e14493246e moves generic pooling policies out of pvssystem and adds listpolicy (#3272) 2022-09-22 15:44:50 -07:00
Leon Friedrich
d93a35b620 Replace some obsolete physics function calls (#3271) 2022-09-22 15:25:02 +10:00
Paul Ritter
2e12a712fa removes unused property (#3269) 2022-09-22 08:46:45 +10:00
metalgearsloth
29a84a6621 Version: 0.47.1.0 2022-09-21 20:45:26 +10:00
metalgearsloth
51f00d4b3b ECS 90% of physics component (#3256) 2022-09-21 20:44:49 +10:00
Leon Friedrich
a67b22cce8 Add get-matrix functions to IViewportControl (#3264) 2022-09-21 20:42:17 +10:00
metalgearsloth
cfbfdbf420 Don't sleep initialised items (#3259) 2022-09-21 20:35:17 +10:00
Leon Friedrich
a76d053818 Prevent PVS error spam and add more debugging asserts (#3263)
Co-authored-by: Jacob Tong <10494922+ShadowCommander@users.noreply.github.com>
2022-09-21 09:49:14 +10:00
Leon Friedrich
1587ee3c93 Store username inn player data (#3265) 2022-09-19 17:44:00 -07:00
Vera Aguilera Puerto
662808d0d3 Adjust MIDI logging to prevent log spam on RELEASE. 2022-09-17 09:54:31 +02:00
metalgearsloth
9d88857b55 Version: 0.47.0.2 2022-09-16 00:14:47 +10:00
metalgearsloth
3c92794aed Revert "Don't do any splitting when disabled" (#3257) 2022-09-16 00:14:21 +10:00
wrexbe
527879c048 Version: 0.47.0.1 2022-09-14 17:27:56 -07:00
Jacob Tong
d2494bcdc7 Allow Content to use InitializeTesting (#3019)
* Allow Content to use InitializeTesting

* Remove internal redefinition

Co-authored-by: ElectroJr <leonsfriedrich@gmail.com>
2022-09-14 17:25:22 -07:00
metalgearsloth
486aa1423b Version: 0.47.0.0 2022-09-14 19:39:23 +10:00
Pieter-Jan Briers
20659789b0 Robust.Packaging system (#3016)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-09-14 19:39:00 +10:00
Leon Friedrich
d87d6f7f8c Session specific state support (#3249) 2022-09-14 19:29:46 +10:00
Leon Friedrich
fa5fdcb5a5 Move appearance state to shared (#3252)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-09-14 18:20:44 +10:00
metalgearsloth
e6af084c22 Version: 0.46.0.0 2022-09-14 17:24:32 +10:00
metalgearsloth
de01b9d8cb Raise collision events by-ref (#3201) 2022-09-14 17:23:35 +10:00
Leon Friedrich
c9aa2c61bd Pass IRobustSerializer to NetMessage (#3220) 2022-09-14 17:23:17 +10:00
metalgearsloth
8200f1d942 Version: 0.45.8.0 2022-09-14 16:49:51 +10:00
Leon Friedrich
1af0ebca6c Make RaisePredictiveEvent check IsPredictionEnabled (#3246) 2022-09-14 16:39:49 +10:00
Leon Friedrich
fe5957bb91 RemoveComponentDeferred changes (#3245) 2022-09-14 15:53:50 +10:00
Leon Friedrich
be08f1787f Allow appearance to ignore PVS state (#3250) 2022-09-14 15:53:00 +10:00
metalgearsloth
ea35e6c03f Version: 0.45.7.0 2022-09-14 12:57:16 +10:00
metalgearsloth
a6c6b22393 Add entitylookup for components (#3065) 2022-09-13 19:52:46 +10:00
Leon Friedrich
5e6e5cb5ea Fix container debug assert (#3244) 2022-09-13 07:44:26 +10:00
Jacob Tong
64d2a3ca28 Fix non-map or grid coordinate returns for most cases (#3241) 2022-09-11 08:01:46 +10:00
Pieter-Jan Briers
bee4e499a8 Fix Rider analysis complaints 2022-09-10 10:57:30 +02:00
metalgearsloth
55da2dc5e5 TryGet for moved grids (#3238) 2022-09-08 13:09:30 +10:00
metalgearsloth
177eca0f90 Version: 0.45.6.1 2022-09-07 22:18:25 +10:00
metalgearsloth
ae229a03d8 Don't do any splitting when disabled (#3172) 2022-09-07 21:48:21 +10:00
metalgearsloth
2dc8093660 Fix fixture clearing on SetTiles (#3235) 2022-09-07 21:47:55 +10:00
metalgearsloth
071acbc818 Move MoveBuffer to the physicsmapcomponent (#3199)
Co-authored-by: Kara <lunarautomaton6@gmail.com>
2022-09-07 21:44:41 +10:00
metalgearsloth
3f5982cac0 Version: 0.45.6.0 2022-09-07 18:48:33 +10:00
Leon Friedrich
6f387402fe Fix OnParentChange bug (#3237) 2022-09-07 15:33:37 +10:00
Leon Friedrich
363e28561c Sprite direction bias (#3232)
* Sprite direction bias

* cvar
2022-09-06 21:54:07 -07:00
Jacob Tong
4d63b54259 Fix construction ghost rotation on entities without directional sprites (#3206) 2022-09-06 17:58:10 -07:00
Leon Friedrich
7fa05c7db3 make /tpto use AttachToGridOrMap() (#3234) 2022-09-05 22:21:26 -07:00
Leon Friedrich
c466f5f17f Don't update appearance while applying states (#3233) 2022-09-06 14:18:28 +10:00
metalgearsloth
b6f302b71e Version: 0.45.5.0 2022-09-06 13:11:50 +10:00
Leon Friedrich
7d9db6f7b2 NetSyncEnabled & animation changes (#3228) 2022-09-06 13:10:59 +10:00
Leon Friedrich
8bedba2da7 Fix initial tile & entity spawn menu sizes (#3230) 2022-09-05 20:00:35 -07:00
Leon Friedrich
837dde78c9 Fix interp overlay (#3229) 2022-09-05 20:00:19 -07:00
metalgearsloth
a01629969d Version: 0.45.4.0 2022-09-05 23:14:22 +10:00
metalgearsloth
15e13c7f92 Fix yml reflection (#3227) 2022-09-05 23:11:31 +10:00
metalgearsloth
3dd80b90eb Allow !type:float and !type:double in yml (#3176) 2022-09-05 22:47:24 +10:00
metalgearsloth
cb8e295ad9 Use TryComp instead of GetComp for animation playback (#3224) 2022-09-05 22:29:03 +10:00
Leon Friedrich
909163a923 Fix awake bodies in containers (#3219) 2022-09-05 15:04:37 +10:00
ElectroJr
6aa2408364 Version: 0.45.3.1 2022-09-04 20:04:23 -04:00
Leon Friedrich
afc1eed7ae QueueUpdateIsInert fixes (#3221) 2022-09-05 10:02:48 +10:00
wrexbe
85c8dc05fe Version: 0.45.3.0 2022-09-04 16:13:16 -07:00
Jezithyr
710371d7d1 UI refactor and UITheme implementations (#2712)
* UIControllerManager


Implemented UI Controller Manager

* added fetch function

* added note

* Hiding some internal stuff

* Implemented event on gamestate switch for ui

* Fix serialization field assigner emit

* fixing issues with ILEmitter stuff

* AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

Blame Smug

* fixing nullref

* Add checking for no backing field / property for ui system dependencies

* fixes Gamestate detection

* Implemented event on UIControllers on system load

* Updated systemload/unload listeners

* Had this backwards lol

* Fix nulling systems before calling OnSystemUnloaded, broke InventoryUIController.Hands.cs

* Created UI Window management system

- A manager that allows for easy creation and access of popup or gamestate windows

* Changing to use basewindow instead of default window

* Implemented UI Theming that isn't ass

* Updated default theme loading and validation

* Added path validation for themes

* Implemented UI Themes

* Implemented UI Theme prototypes

* Implementing theming for texture buttons and Texturerects

* fixing server error

* Remove IUILink

* Implemented default theme overriding and theme colors

* Fixing sandbox lul

* Added error for not finding UITheme

* fixing setting default theme in content

* Move entity and tile spawn window logic to controllers

* Add 2 TODOs

* Merge fixes

* Add IOnStateChanged for UI controllers

* Fix inventory window being slow to open
Caches resources when the UI theme is changed

* Remove caching on theme change
The real fix was fixing the path for resources

* Remove test method

* Fix crash when controllers implement non generic interfaces

* Add controllers frame update

* Split UserInterfaceManager into partials

- Created UI screen

* Converted more UI managers into partials

* Setup UIScreen manager system

* Added some widget utility funcs


updated adding widgets

* Started removing HUDManager

* Moved UiController Manager to Partials


Finished moving all UIController code to UIManager

* Fixed screen loading

* Fixed Screen scaling

* Fixed Screen scaling


cleanup

* wat

* IwantToDie

* Fixed resolving ResourceCache instead of IResourceCache

* Split IOnStateChanged into IOnStateEntered and IOnStateExited

* Implemented helpers for adjusting UIAutoscale for screens

* Fixed autoscale, removed archiving from autoscale

* Implemented popups and adjusted some stuff

* Fixing some popup related shinanegans

* Fixing some draw order issues

* fixing dumb shit

* Fix indentation in UserInterfaceManager.Input.cs

* Moved screen setup to post init (run after content)

* Fix updating theme

* Merge fixes

* Fix resolving sprite system on control creation

* Fix min size of tile spawn window

* Add UIController.Initialize method

* https://tenor.com/view/minor-spelling-mistake-gif-21179057

* Add doc comment to UIController

* Split UIController.cs and UISystemDependency.cs into their own files

* Add more documentation to ui controllers

* Add AttributeUsage to UISystemDependencyAttribute

* Fix method naming

* Add documentation for assigners

* Return casted widgets where relevant

* Fix entity spawner scroll (#1)

* Add CloseOnClick and CloseOnEscape for popups

* Remove named windows and popups

* Cleanup controller code

* Add IOnStateChanged, IOnSystemChanged, IOnSystemLoaded, IOnSystemUnloaded

* Add more docs to state and system change interfaces

* Fixing Window issues

* Fixing some window fuckery

* Added OnOpen event to windows, updated sandbox window

Sandbox windows now persist values and positions

* Recurse through controls to register widgets (#2)

* Allow path to be folder

* Fix local player shutdown

* Fixing escape menu

* Fix backing field in DataDefinition.Emitters

* Ent+Tile spawn no crash

* Skip no-spawn in entity spawn menu

Co-authored-by: Jezithyr <jmaster9999@gmail.com>
Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com>
Co-authored-by: Jezithyr <Jezithyr@gmail.com>
Co-authored-by: wrexbe <81056464+wrexbe@users.noreply.github.com>
Co-authored-by: Flipp Syder <76629141+vulppine@users.noreply.github.com>
Co-authored-by: wrexbe <wrexbe@protonmail.com>
2022-09-04 16:10:54 -07:00
ElectroJr
9f651646d7 Version: 0.45.2.0 2022-09-04 13:13:08 -04:00
Leon Friedrich
d2860c80a9 Predict component adding and removal (#2876) 2022-09-05 03:09:42 +10:00
Alex Evgrashin
e1b9ae22b6 Box2 from two points (#3211) 2022-09-05 02:49:16 +10:00
Leon Friedrich
5d64f35c96 Sprite BB fixes (#3217) 2022-09-04 16:20:15 +10:00
Flipp Syder
5cfea0cd97 Includes paused for user interface updates (#3215) 2022-09-03 17:20:20 -07:00
Jacob Tong
a165556bf5 Make AudioSystem.PlayingStream public (#3208) 2022-09-03 09:32:23 +10:00
Kara
dee2881203 Fix loadmap command typo (#3209) 2022-09-01 06:27:54 -07:00
DrSmugleaf
da0891a5f4 Add element picker to dev window (#3180) 2022-09-01 06:18:30 +02:00
DrSmugleaf
1ed9796700 Add DataRecordAttribute to turn a whole record into a data definition (#3207)
Co-authored-by: Paul <ritter.paul1@googlemail.com>
2022-09-01 01:13:43 +02:00
Leon Friedrich
578a967a31 Misc PVS error logging / debugging changes (#3197) 2022-08-30 10:17:11 +10:00
Paul Ritter
14c0c58e87 adds includedatafields to serv3 (#3101)
* adds includedatafields to serv3

* fixes some stuff and adds tests

* checks for circular include

* fix writing

* this one should fix it frfrf

* ok now this one is gonna be it i swear

* we can save a few operations here

* goofy string

Co-authored-by: Paul <ritter.paul1@gmail.com>
2022-08-29 17:16:04 +02:00
Vera Aguilera Puerto
766d909a08 Fixes MIDI bank selection not working. (#3182) 2022-08-29 11:52:29 +02:00
metalgearsloth
9c50a217da Version: 0.45.1.0 2022-08-29 15:13:31 +10:00
Leon Friedrich
4f9db0cdb7 Fix bug in spin command (#3198) 2022-08-29 14:37:59 +10:00
Leon Friedrich
3c19937750 Update sprite bounds for SnapCardinals (#3195) 2022-08-29 13:52:23 +10:00
metalgearsloth
c509764014 Add camera reset rotation key (#3185) 2022-08-29 11:09:32 +10:00
wrexbe
75e06e4060 Version: 0.45.0.3 2022-08-28 15:34:15 -07:00
wrexbe
1b909f71a1 Fix some test issues (#3196) 2022-08-28 14:04:14 -07:00
metalgearsloth
1a8764f54b Add support for snapping sprites to south (#3186) 2022-08-29 05:02:50 +10:00
metalgearsloth
9152c97de7 Make mapload errors more obvious (#3193) 2022-08-29 04:08:14 +10:00
Paul Ritter
45cb04f928 makes all serv3 null checks use the proper logic (#3128) 2022-08-27 21:37:38 +02:00
Pieter-Jan Briers
a700750d9e Make ALC context not current before destroying it.
Let's hope this fixes the hangs.
2022-08-27 00:32:05 +02:00
wrexbe
07d327eb8b Version: 0.45.0.2 2022-08-25 21:31:36 -07:00
wrexbe
2275ec9573 Update YamlDotNet (#3082) 2022-08-25 21:28:12 -07:00
wrexbe
5848b449f6 Expose way to test sandbox (#3166) 2022-08-25 21:27:42 -07:00
metalgearsloth
67aa32e694 Version: 0.45.0.1 2022-08-26 12:21:45 +10:00
Leon Friedrich
dbd2961b9f Fix client state handling bug (#3192) 2022-08-26 12:00:40 +10:00
Pieter-Jan Briers
b77b49c667 Mapped string serializer hit/miss stats.
Fixes #3190
2022-08-26 01:58:17 +02:00
Leon Friedrich
0eabe62bdb Fix prototype reloading debug assert failure (#3188) 2022-08-26 09:57:58 +10:00
Leon Friedrich
31e2ea2770 Fix AudioParams deserialization (#3191) 2022-08-25 16:46:44 -07:00
metalgearsloth
7a636b3b87 Version: 0.45.0.0 2022-08-25 23:33:10 +10:00
Leon Friedrich
98ce017b4a Physics get-colliding tweaks (#3183) 2022-08-25 23:29:46 +10:00
Leon Friedrich
26b04f0d66 Fix container init IDs (#3184) 2022-08-25 23:28:48 +10:00
Leon Friedrich
f4f2dea688 Fix load grid errors (#3181) 2022-08-25 23:28:29 +10:00
metalgearsloth
e9a0f9a4c1 Bandaid maploader for loading onto an existing one (#3160) 2022-08-24 15:49:46 +10:00
Leon Friedrich
de438ae94c Prevent players from attaching to terminating entities (#3175) 2022-08-24 01:42:48 +10:00
metalgearsloth
9ec77f20ee Version: 0.44.0.0 2022-08-23 16:35:59 +10:00
Leon Friedrich
da01040b52 Hopefully fix container issues? (#3174) 2022-08-23 16:35:02 +10:00
metalgearsloth
dce2a5ddb2 Fix physics grid reparent crash (#3122) 2022-08-23 11:33:36 +10:00
Acruid
5c99fbabf2 Map serialization postmapinit bugfix (#3165) 2022-08-23 10:52:23 +10:00
Leon Friedrich
9d0846c0e9 Add PVS/entity-state debug commands (#3169) 2022-08-23 10:50:23 +10:00
metalgearsloth
035ecfb098 Fix joint collision (#3161)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-08-23 10:48:19 +10:00
metalgearsloth
3693f5aee7 Physics component cleanup (#3158) 2022-08-23 10:45:28 +10:00
ElectroJr
b859815b07 Version: 0.43.1.1 2022-08-22 17:03:25 -04:00
Leon Friedrich
3701ca83e4 Only request full state on missing metadata. (#3170) 2022-08-23 07:01:41 +10:00
Leon Friedrich
1473f1d34c Fix entity state exception tolerance (#3171) 2022-08-23 07:01:31 +10:00
ElectroJr
889c140fb9 Version: 0.43.1.0 2022-08-22 13:32:57 -04:00
metalgearsloth
c8259915f8 LoadBP completion results (#3159) 2022-08-23 02:58:56 +10:00
Leon Friedrich
a2a25fb296 Add session info for client-side ToPrettyString() (#3162) 2022-08-23 02:56:09 +10:00
Leon Friedrich
938a9929ea Fix deferred component remove error (#3163) 2022-08-23 02:55:59 +10:00
wrexbe
7726075b9b Fix gamestate debug display (#3167) 2022-08-23 02:55:41 +10:00
Leon Friedrich
03b3d1bbe7 Maybe fix PVS bug (#3164) 2022-08-23 02:54:50 +10:00
wrexbe
17ec51b74c Add reusing username+id in tests (#3143) 2022-08-22 05:57:07 +10:00
Leon Friedrich
e92998d1ec Remove a PVS warning on full release (#3154) 2022-08-22 05:50:52 +10:00
metalgearsloth
6691512136 Version: 0.43.0.2 2022-08-21 17:10:05 +10:00
metalgearsloth
a80f4ad76c Add broadphase AABB back in (#3157) 2022-08-21 16:56:01 +10:00
Leon Friedrich
2c6f4cd80c Fix PVS/container bug (#3155) 2022-08-21 16:06:44 +10:00
ElectroJr
51a4c6dcf2 Version: 0.43.0.1 2022-08-20 19:49:03 -04:00
Leon Friedrich
1f402e581a Fix state interpolation (#3153) 2022-08-21 09:47:15 +10:00
ElectroJr
17ea92bfda Version: 0.43.0.0 2022-08-20 18:31:48 -04:00
Leon Friedrich
6a8266af7e Revert "Revert "PVS & client state handling changes"" (#3152) 2022-08-21 08:30:28 +10:00
ElectroJr
f6b7606648 Version: 0.42.0.0 2022-08-20 15:28:34 -04:00
Leon Friedrich
9cd8adae93 Revert "PVS & client state handling changes" (#3151) 2022-08-21 05:27:16 +10:00
ElectroJr
c5ba8b75c8 Version: 0.41.0.0 2022-08-20 13:42:20 -04:00
Leon Friedrich
3d73cc7289 Make AudioSystem accept nullable SoundSpecifier (#3133) 2022-08-21 03:40:49 +10:00
Leon Friedrich
11aa062ee0 Un-revert BUI PRs (#3139) 2022-08-21 03:40:29 +10:00
Leon Friedrich
b4358a9e33 PVS & client state handling changes (#3000) 2022-08-21 03:40:18 +10:00
Leon Friedrich
0cce4714a1 Make a specific EntityUid error more descriptive (#3132) 2022-08-20 16:30:11 +10:00
metalgearsloth
9c4e6a6595 Hotfix tile placement brrrrt (#3140) 2022-08-20 16:29:38 +10:00
DrSmugleaf
1ddd541fe9 Add IEntityManager.Systems proxy methods (#3150) 2022-08-20 16:28:36 +10:00
Leon Friedrich
e45aa3f2fe Assert that components are not added to terminating entities (#3144) 2022-08-20 16:28:09 +10:00
Leon Friedrich
99efdb6061 Include stack trace in deletion errors (#3145) 2022-08-20 16:27:54 +10:00
DrSmugleaf
32f0ffdc79 Move ContainerHelpers methods to SharedContainerSystem (#3149) 2022-08-20 07:57:56 +02:00
DrSmugleaf
cf166483c9 Change state manager methods to return the new state (#3137) 2022-08-15 22:05:48 +02:00
Pieter-Jan Briers
49631867f4 Fix sRGB conversion in WindowRoot background color. 2022-08-15 16:51:23 +02:00
metalgearsloth
9f56eaec9a Obsolote EntitySystem.Get<T> (#3142) 2022-08-15 16:22:06 +02:00
DrSmugleaf
04f2b732a5 Add TryFirstOrNull and TryFirstOrDefault without predicates (#3141) 2022-08-15 16:21:40 +02:00
metalgearsloth
b8cfabc339 Version: 0.40.3.3 2022-08-15 14:06:22 +10:00
metalgearsloth
1cdd39202f Make tile grid placement somewhat bearable (#3131)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-08-15 14:05:27 +10:00
Leon Friedrich
3290720b4c Don't error on missing entity suffixes (#3124) 2022-08-15 14:04:50 +10:00
Leon Friedrich
49badb06cb Fix fixture init/state bug. (#3125) 2022-08-15 14:03:57 +10:00
Visne
2c6941e73b Version: 0.40.3.2 2022-08-15 02:49:34 +02:00
wrexbe
5e5883cb88 Fix map schema (#3138) 2022-08-15 02:40:56 +02:00
ElectroJr
02c504445e Version: 0.40.3.1 2022-08-14 19:21:42 -04:00
wrexbe
4d5075a792 Update mapfile_validators.py (#3136) 2022-08-15 09:20:12 +10:00
ElectroJr
25212cbb4d Version: 0.40.3.0 2022-08-14 17:20:31 -04:00
Leon Friedrich
c56cc24804 Update RGA validator (#3134) 2022-08-15 07:17:36 +10:00
Paul
cf9250f25d Version: 0.40.2.0 2022-08-14 11:19:59 +02:00
Paul
a105e02131 fixes mapfile schema 2022-08-14 11:18:43 +02:00
Paul
cebdca87df Version: 0.40.1.0 2022-08-14 01:35:56 +02:00
Paul Ritter
bbabee3949 fixes struct instantiation (#3129) 2022-08-14 01:34:51 +02:00
Paul
f16d41704b Version: 0.40.0.0 2022-08-13 23:13:17 +02:00
Paul Ritter
6f557ac821 cleans up copy and removes ipopulatedefaultvalues (#3085)
Co-authored-by: Paul <ritter.paul1@gmail.com>
2022-08-13 23:12:04 +02:00
wrexbe
ba70a7c95e Fix ResourcePath serialize copy (#3127) 2022-08-13 22:19:56 +02:00
Leon Friedrich
f3796ee69d Fix nested container insert bug (#3062) 2022-08-13 10:30:07 +10:00
metalgearsloth
b2a71e5ef8 Version: 0.39.1.0 2022-08-11 09:47:26 +10:00
metalgearsloth
c253130c4a Add private ctor for ResourcePath (#3118) 2022-08-11 09:46:21 +10:00
Paul Ritter
f03826b5ec defines yaml schemas for robust generic attribution files and mapfiles (#3089)
Co-authored-by: ike709 <ike709@users.noreply.github.com>
Co-authored-by: Paul <ritter.paul1@gmail.com>
2022-08-10 12:48:24 +02:00
metalgearsloth
69cf93a425 Version: 0.39.0.0 2022-08-10 17:04:56 +10:00
metalgearsloth
a4ea7fed6a Make tiledefinitions use spritespecifier (#3113) 2022-08-10 17:04:12 +10:00
metalgearsloth
7046152ec8 Version: 0.38.1.0 2022-08-10 13:06:28 +10:00
Leon Friedrich
f6f1f76980 Fix nullable yaml validation (#3106) 2022-08-10 01:00:47 +02:00
Rinkashikachi
a98a214fa3 Fix issue with Fluents ??? for empty suffix. (#3114) 2022-08-10 01:00:21 +02:00
metalgearsloth
faadb70de7 Overlay shader cleanup (#3112) 2022-08-10 00:52:32 +02:00
Pieter-Jan Briers
7a6d6c83b1 CVar.CONFIDENTIAL flag.
Hides CVar values from completion results.
2022-08-10 00:40:30 +02:00
Julian Giebel
9e32eb46e5 Update ImageSharp and fix incompatibilities (#3092) 2022-08-09 13:15:55 +02:00
Leon Friedrich
bea91d119e Fix CustomHashSetSerializer bug (#3087)
* Fix CustomHashSetSerializer bug

* Create a copy of source if target is null

* null !
2022-08-08 18:05:23 +02:00
metalgearsloth
9ec725d848 Version: 0.38.0.0 2022-08-08 11:43:52 +10:00
Leon Friedrich
790d523ebd Remove string keys from appearance component (#3086) 2022-08-08 11:43:17 +10:00
metalgearsloth
147ca286ea Version: 0.37.0.0 2022-08-07 13:56:27 +10:00
Leon Friedrich
bc25f5d727 Allow entities to be spawned directly in null-space (#3107) 2022-08-07 13:54:06 +10:00
Pieter-Jan Briers
c65740eba6 Version: 0.36.0.0 2022-08-07 00:31:55 +02:00
Pieter-Jan Briers
59e6a797f1 Revert "Move BUI logic to the UI system (#3102)"
This reverts commit 53c496fe27.
2022-08-07 00:25:20 +02:00
Pieter-Jan Briers
663d901e6b Version: 0.35.0.0 2022-08-07 00:18:03 +02:00
Pieter-Jan Briers
585126bf52 Fix race conditions with handshake messages.
MsgMapStrServerHandshake was being sent as unordered, meaning that it  could actually arrive on the client before the handshake-finished messages. Whoops.
2022-08-07 00:14:55 +02:00
metalgearsloth
e27ed228ad Revert "More BUI changes (#3104)" (#3109) 2022-08-06 16:58:45 +10:00
metalgearsloth
ef35187624 Version: 0.34.0.0 2022-08-06 14:58:38 +10:00
metalgearsloth
1cf31fbea6 Non-generic GetEntityQuery (#3103) 2022-08-06 14:52:32 +10:00
Leon Friedrich
c7a3c43a4f More BUI changes (#3104) 2022-08-06 14:51:23 +10:00
ElectroJr
01b55494e8 Version: 0.33.0.1 2022-08-04 18:31:43 -04:00
ElectroJr
be9ab89b29 Fix serializer copy-ref error 2022-08-04 18:30:44 -04:00
ElectroJr
d4c8631587 Version: 0.33.0.0 2022-08-04 18:18:50 -04:00
Paul Ritter
3d43fc510e refactors copy api to use ref (#3093) 2022-08-05 08:17:02 +10:00
wrexbe
931c38a97d Allow ignore missing to specify postfix (#3035) 2022-08-05 07:37:14 +10:00
Leon Friedrich
53c496fe27 Move BUI logic to the UI system (#3102) 2022-08-05 07:18:22 +10:00
metalgearsloth
c696ac1c73 Version: 0.32.1.0 2022-08-04 12:48:27 +10:00
Leon Friedrich
57e5ceef1a BUI range check changes (#3099) 2022-08-04 09:00:38 +10:00
Leon Friedrich
b5279f3f89 Fix awake-physics map change bug (#3088) 2022-08-04 08:58:50 +10:00
metalgearsloth
fc424309c1 Don't IoC resolve in appearancevisualizerserializer (#3100) 2022-08-03 09:24:37 +02:00
Leon Friedrich
19aac6c461 Wake physics on container removal (#3098) 2022-08-02 01:34:13 +10:00
Paul
2decf31a78 Version: 0.32.0.0 2022-08-01 14:29:28 +02:00
Paul
f33ba17148 Version: 0.34.0.0 2022-08-01 14:24:45 +02:00
Paul Ritter
752d4dfe8b prototype composition (#3070)
* prototype composition

* oops

* better

* fixes build

* should fix

* misc fixes & circle test

* moar circle checks

* adds tests

Co-authored-by: Paul <ritter.paul1@gmail.com>
2022-08-01 14:22:46 +02:00
Júlio César Ueti
92d40cded3 Adds a check to HandleContainerRemoved to handle different canCollide states. (#3072)
* Checks the canCollide of the entity and passes it to SetCanCollide, defaults to true

* Remove added new line

* Requested changes
2022-08-01 01:45:02 +10:00
Leon Friedrich
11f8bf794a More joint fixes (#3091)
* More joint fixes

* Punctuation
2022-08-01 00:09:31 +10:00
Vera Aguilera Puerto
0604464dcc Bandaid MIDI crash involving malicious/malformed MIDI events.
Temporary fix until I have enough time to fix this proper.
2022-07-31 01:13:36 +02:00
ElectroJr
9f25c14707 Version: 0.31.1.0 2022-07-29 12:19:01 -04:00
Leon Friedrich
2c50e4f219 Pitch scale variation fix (#3090) 2022-07-30 02:16:39 +10:00
metalgearsloth
e97d8b9b14 Use scale with placementmanager (#3058)
Bandaid until it gets refactored.
2022-07-29 13:30:41 +10:00
metalgearsloth
f129bd45c5 Fix linear velocity cap rounding (#3051)
Here we use it as a hard cap.
2022-07-29 13:30:05 +10:00
Jacob Tong
f812b307b5 Toggle button updates (#3018)
* Change toggle button to only trigger on UIClick

* Add tests for toggle buttons
2022-07-29 13:28:59 +10:00
ElectroJr
436cb98d53 Version: 0.31.0.0 2022-07-28 22:16:31 -04:00
Leon Friedrich
1c1ced0f8a Joint changes (#3068) 2022-07-29 12:14:21 +10:00
Leon Friedrich
97015569f6 AudioSystem Rejig (#3038) 2022-07-29 12:14:05 +10:00
Leon Friedrich
ee2d266d6b Validate sprite specifier states (#3075) 2022-07-28 09:17:40 +10:00
Leon Friedrich
786ecdb8b1 More window open overrides (#3073) 2022-07-26 06:56:28 -07:00
Pieter-Jan Briers
488260cc64 Windows 11 immersive dark mode.
Dark window titles
2022-07-25 23:53:06 +02:00
metalgearsloth
6ee96873a4 Version: 0.30.0.1 2022-07-25 20:15:16 +10:00
metalgearsloth
2220f3e346 Fix broadphase desync (#3078) 2022-07-25 20:09:07 +10:00
metalgearsloth
137723357c Version: 0.30.0.0 2022-07-25 15:30:50 +10:00
metalgearsloth
db3f3e5b32 Allow maps to be saved (#3055)
* Allow maps to be saved

* I hate myself

* fix?

* Fix maybe?
2022-07-25 15:30:20 +10:00
Leon Friedrich
fc10adfb03 Fix a WorldSpaceEntities overlay bug (#3074) 2022-07-24 19:10:07 -07:00
Pieter-Jan Briers
812809bbfd Fix ILocValue.Format getting invalid LocContext 2022-07-24 02:28:58 +02:00
Pieter-Jan Briers
ec70abe928 Analyzer to make Task`1.Result scary. (#3069) 2022-07-23 12:33:55 +02:00
Vera Aguilera Puerto
0ec6995542 MIDI refactor part 1: MidiRendererState (#3015) 2022-07-23 11:56:33 +02:00
Pieter-Jan Briers
1c28782d5d Fix some grid-related warnings 2022-07-21 17:35:09 +02:00
Leon Friedrich
45472fa342 Make unknown component errors more helpful (#3063) 2022-07-21 16:54:04 +02:00
20kdc
18a5335373 Provide a generic way to expose tags on the status endpoint (#2769)
* Provide a generic way to expose tags on the status endpoint for Launcher to presumably later consume.

* Switch to a JSON array for server tags
2022-07-21 16:28:56 +02:00
metalgearsloth
86590ceb1f Fix audio merge artifacts (#3061) 2022-07-20 09:58:25 +10:00
metalgearsloth
e518abd2be Version: 0.29.1.0 2022-07-19 21:31:12 +10:00
metalgearsloth
13ae59dbf6 Revert "Don't defer moveevents anymore (#3048)" (#3060) 2022-07-19 21:30:41 +10:00
20kdc
0ded41ebe1 Audio occlusion parallelization (#2776)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-07-19 19:40:59 +10:00
metalgearsloth
3eb295e3ef Version: 0.29.0.0 2022-07-19 18:37:35 +10:00
Leon Friedrich
1782792d30 Fix cross-grid/map container inserts (#3054) 2022-07-19 18:37:05 +10:00
metalgearsloth
d5c0776278 Don't defer moveevents anymore (#3048) 2022-07-19 18:36:45 +10:00
Pieter-Jan Briers
0822b41155 NetManager cleanup. (#3056)
Just removed a bunch of dead code related to message dispatch and instantiation.
2022-07-19 17:44:43 +10:00
Leon Friedrich
7a81c7f64a Misc Shader changes (#2974) 2022-07-19 00:32:58 +02:00
Leon Friedrich
a925b7f84d Add lookup range assert (#3049)
Co-authored-by: Kara <lunarautomaton6@gmail.com>
2022-07-17 06:25:08 +10:00
Leon Friedrich
557de01532 Dirty PVS chunk when visibility mask changes (#3045)
* Dirty PVS chunk when visibility mask changes

* fix tests?

* aaaaaa

* maybe sorta finally fix tests

* directly return vis mask,

Also defaults to 1 only if visibility component does not exist.

* make sure everything has first bit set
2022-07-17 06:23:35 +10:00
Leon Friedrich
a38cbc7188 Make recursive delete detach parents before children (#3008) 2022-07-17 06:05:10 +10:00
metalgearsloth
5146b1b3c6 Version: 0.28.6.0 2022-07-16 13:50:50 +10:00
metalgearsloth
0e97e3000f Add robust method for no lerp (#3040)
* Add robust method for no lerp

Also updated rotation lerping.

* a

* a

* Fix sleeping while I'm here + context

* I hate contexts I hate contexts
2022-07-16 13:50:18 +10:00
metalgearsloth
0c4a05dcbf Version: 0.28.5.1 2022-07-15 14:27:26 +10:00
Leon Friedrich
565fa9f046 Preserve crossgrid joints (#3050) 2022-07-15 11:40:18 +10:00
Pieter-Jan Briers
2783e89d1f SDL2 windowing backend (#2979)
* SDL2 windowing prototype.

* More stuff idk
2022-07-15 00:07:30 +10:00
metalgearsloth
d9d08dcbe3 Version: 0.28.5.0 2022-07-14 20:25:30 +10:00
metalgearsloth
6abeedae97 Clear crossmap joints properly (#3046) 2022-07-14 20:24:17 +10:00
metalgearsloth
7bc1eaabfd findgridsintersecting + metadata performance (#3047) 2022-07-14 20:23:49 +10:00
Paul Ritter
526997639b validates generic args of typeserializers (#3044)
* validates generic args

* whodunnit grrr im angry

Co-authored-by: Paul <ritter.paul1@gmail.com>
2022-07-14 10:35:38 +02:00
Leon Friedrich
9dc030c764 Better rich text error logging (#3036) 2022-07-13 01:57:21 +10:00
Pieter-Jan Briers
35308975db Client con host improvements:
* Don't disable access check outside FULL_RELEASE.
  * Content allows all commands on +HOST now
* Client-side completions are filtered for perms and sorted.
2022-07-11 23:23:12 +02:00
Pieter-Jan Briers
7649c120e9 Do not show forbidden commands in completion results. 2022-07-11 23:23:12 +02:00
Kara
610f6d88af Version: 0.28.4.0 2022-07-09 02:54:46 -07:00
metalgearsloth
0fb5b59eba Make command line config file not exception if not found (#3030) 2022-07-09 02:52:06 -07:00
Pieter-Jan Briers
77b1fd933c Fix MapLoaderTest having a nullable error in Rider. 2022-07-08 22:38:30 +02:00
Leon Friedrich
4ec019078d Add enum and custom hash set serializers (#2973) 2022-07-08 07:25:23 +10:00
metalgearsloth
fe022d4100 Version: 0.28.3.0 2022-07-06 18:52:02 +10:00
Paul Ritter
1d4eec4855 make serv3 null reading sane and yaml-complaint (#3027) 2022-07-06 14:17:10 +10:00
metalgearsloth
84fceb587b Make loadbp take degrees (#3024) 2022-07-06 14:16:57 +10:00
Paul Ritter
a4ad98519e serv3 now writes proper null values (oops) (#3026) 2022-07-06 00:23:13 +10:00
metalgearsloth
8f55a21cc4 Fix lsgrid (#3025)
* Fix lsgrid

Often worldpos wouldn't show due to formatting.

* Also MapId
2022-07-05 23:39:23 +10:00
metalgearsloth
4e40184c4a Version: 0.28.2.1 2022-07-03 14:52:03 +10:00
metalgearsloth
8bea8237f8 Fix physicsmap recursive changes (#3014)
* Fix physicsmap recursive changes

* Fix recursion
2022-07-03 14:49:32 +10:00
Leon Friedrich
00c4d68db8 Fix server shutdown error (#3011) 2022-07-02 14:21:16 +10:00
metalgearsloth
93e26fd88a Add test for recursive broadphase updates (#3010) 2022-07-02 14:10:57 +10:00
Pieter-Jan Briers
312b879b06 Fix connection timeout always being 30000f (#3013) 2022-07-01 19:43:53 -07:00
metalgearsloth
852d1874db Add test that detachparenttonull mapid is recursive (#3009) 2022-07-01 15:07:25 +10:00
Leon Friedrich
9e14a7e0d3 Lookup errors (#3007) 2022-07-01 13:46:26 +10:00
metalgearsloth
5700969945 Version: 0.28.2.0 2022-07-01 02:31:42 +10:00
metalgearsloth
6feb8b69ee Bump cfg log level to info (#2996) 2022-07-01 02:04:58 +10:00
keronshb
1ab14fa6b7 Moves fixture check in physics (#3004)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-07-01 02:04:24 +10:00
Leon Friedrich
445b13791e Lookup & dynamic tree changes (#3006) 2022-06-30 12:37:05 +10:00
metalgearsloth
5605149a63 Fix scale visuals (#3003)
Should be the last time
2022-06-29 22:40:13 +10:00
metalgearsloth
162b069de3 Version: 0.28.1.1 2022-06-29 19:18:15 +10:00
metalgearsloth
1c65686ee0 Fix spinbox overridevalue (#3002) 2022-06-29 19:17:03 +10:00
Pieter-Jan Briers
278755d938 Warn on startup if bad glibc version is detected. (#2998)
Yay.
2022-06-29 15:11:07 +10:00
Leon Friedrich
64b356a9bf Prevent dirty-on-init (#2999)
* prevent dirty-on-init

* Fix test
2022-06-29 15:10:51 +10:00
metalgearsloth
9681dc705e Version: 0.28.1.0 2022-06-29 13:21:06 +10:00
Leon Friedrich
fa2b0233c3 ECS detach to null (#2997)
* ECS detach to null

* fix crash
2022-06-29 13:17:58 +10:00
wrexbe
392e2fefca Fix entity manager shutdown (#2945) 2022-06-29 09:20:51 +10:00
TekuNut
47c56ffcf4 Fix crash in ReflectionManager (#2987) 2022-06-29 03:35:28 +10:00
metalgearsloth
dd602fd6d0 Version: 0.28.0.0 2022-06-28 22:56:26 +10:00
Leon Friedrich
2059d37c8f Remove implicit grid conversion (#2968)
* Remove implicit grid conversion

* fix map test

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-06-28 22:55:44 +10:00
metalgearsloth
6b73b765b2 Remove grid logs (#2994)
I added 2 of these and they aren't needed for me anymore.
2022-06-28 17:53:26 +10:00
metalgearsloth
fb32b55584 Sleep bodies when collision turned off (#2993)
May fix them getting through.
2022-06-28 17:53:13 +10:00
metalgearsloth
045aebfc9e Version: 0.27.1.2 2022-06-28 13:01:26 +10:00
metalgearsloth
449418b1d4 Fix cross-map contacts (#2990) 2022-06-28 13:00:51 +10:00
metalgearsloth
06cf2208f4 Bandaid findpairs issue (#2988) 2022-06-28 12:48:40 +10:00
TekuNut
ffbfdfe0b2 Fix client crash on sprite layer state change (#2984) 2022-06-27 09:18:21 +10:00
metalgearsloth
d7caa93cf5 Version: 0.27.1.1 2022-06-26 15:24:18 +10:00
metalgearsloth
0665781dfe Revert parent change (#2982) 2022-06-25 15:48:35 +10:00
metalgearsloth
a91413f1a6 Version: 0.27.1.0 2022-06-24 21:16:04 +10:00
Kara
6b9eeac228 More CompletionOption helpers (#2980) 2022-06-24 21:15:23 +10:00
wrexbe
c86e4e1ab9 Fix BuilderToMemory truncating (#2975) 2022-06-24 11:29:01 +02:00
wrexbe
269d229c2d Fix hotreload (#2976) 2022-06-23 10:40:14 +02:00
metalgearsloth
7e86065c67 Version: 0.27.0.2 2022-06-23 17:54:44 +10:00
metalgearsloth
dcb0c2eb92 Make GetEntitiesIntersecting(uid) use its bounds (#2978)
Was only using worldPos before.
2022-06-23 17:54:23 +10:00
metalgearsloth
fd667a67e7 Log deleted entities for physics (#2977)
Just crashed server and I'm too lazy to try to repro
2022-06-23 17:27:06 +10:00
metalgearsloth
bf966ee49b Version: 0.27.0.1 2022-06-23 14:38:58 +10:00
Leon Friedrich
2f75b74f1e Fix client disconnect crash (#2949) 2022-06-23 14:29:50 +10:00
metalgearsloth
a05b864952 Make transform handlestate set coordinates and not attachparent (#2965)
This makes the EntParentChangedMessage have the new position when it's issued.
2022-06-23 14:29:12 +10:00
Leon Friedrich
2d96e0cda1 "Fix" another client connection crash (#2950)
* Fix another client connection crash

* Add length info to error.

Co-authored-by: Electro <no>
2022-06-23 14:28:39 +10:00
metalgearsloth
cd1d6ee598 Version: 0.27.0.0 2022-06-23 12:13:07 +10:00
metalgearsloth
09d7ad9d62 Don't run client physics in frameupdate (#2953) 2022-06-23 12:12:54 +10:00
Kara
0c9c1366b0 Allow sprites to override container occlusion (#2971) 2022-06-22 16:07:09 -07:00
metalgearsloth
8470cf43b1 Version: 0.26.0.0 2022-06-22 09:53:15 +10:00
metalgearsloth
62a24a320c Make raiselocalevent not broadcast by default (#2972)
* Make raiselocalevent not broadcast by default

* I forgor to commit
2022-06-22 09:52:50 +10:00
Leon Friedrich
578066511f Maybe fix a placement manager crash (#2969) 2022-06-21 12:04:48 +02:00
metalgearsloth
2821492885 Version: 0.25.0.1 2022-06-20 20:51:55 +10:00
metalgearsloth
3806481f81 Fix broadphase crash (#2966) 2022-06-20 20:49:14 +10:00
metalgearsloth
e610b8a286 Hotfix recursive physics contacts (#2964) 2022-06-20 20:45:09 +10:00
ElectroJr
d283043a56 Version: 0.25.0.0 2022-06-19 20:10:37 -04:00
Leon Friedrich
4171b3ec4e Make Grid Uid Nullable (#2942)
* Make Grid Uid Nullable

* Fix recursion

* fix detach to null

* change obsolete text
2022-06-20 10:08:23 +10:00
wrexbe
f90872b085 Various test changes (#2930) 2022-06-20 10:03:17 +10:00
Leon Friedrich
077faebfc5 Fix some grid traversal misprediction (#2932)
* Fix some grid traversal misprediction

* a

* b

* c

* Revert "b"

This reverts commit ca64919a70.
2022-06-20 07:31:11 +10:00
metalgearsloth
526b37804e Expose GetLocalTilesIntersecting methods (#2961) 2022-06-20 07:27:20 +10:00
Leon Friedrich
b8cb9e6b1d Add Overlay.BeforeDraw() (#2958) 2022-06-20 06:28:09 +10:00
metalgearsloth
0dfd71c990 Version: 0.24.0.1 2022-06-17 13:57:44 +10:00
metalgearsloth
18232e946b Make broadphase updates recursive (#2959) 2022-06-17 13:56:52 +10:00
metalgearsloth
c06f3f003c Early out settiles for empty lists (#2957) 2022-06-17 07:10:11 +10:00
metalgearsloth
72cf2f6334 Version: 0.24.0.0 2022-06-16 15:34:32 +10:00
metalgearsloth
e0e47ad545 Add simple raycast method (#2937) 2022-06-16 15:33:35 +10:00
metalgearsloth
70157265b8 Fix prototype icon error textures (#2954) 2022-06-16 04:45:03 +10:00
wrexbe
1e5068f057 Make fixture init event order explicit (#2946)
* Make fixture init event order explicit

* No more physics init event

* No more physics init event

* Fixing some stuff
2022-06-14 19:25:40 +10:00
Leon Friedrich
2bdea420ae Misc rendering changes (#2948)
* Misc rendering changes

* More tiny changes
2022-06-14 19:24:27 +10:00
Leon Friedrich
be906faf42 Cache layer RSI state (#2947) 2022-06-13 17:49:28 +10:00
ElectroJr
a03eecaa36 Version: 0.23.0.0 2022-06-12 19:48:57 -04:00
keronshb
bc12a0af87 Reorders the signature for sound (#2928) 2022-06-13 09:45:26 +10:00
Leon Friedrich
d347641d00 Update save map command to show a success message. (#2944) 2022-06-13 09:45:04 +10:00
wrexbe
221dbf945e Fix localizing color (#2943) 2022-06-13 09:03:26 +10:00
Leon Friedrich
24c900aeae Small CheckFaceEyeVis() performance increase (#2940) 2022-06-13 08:36:35 +10:00
wrexbe
76aaca6260 Expose RemoveComponentDeferred (#2887) 2022-06-12 21:41:42 +02:00
metalgearsloth
d3519d799a Fix grid splitting (#2941) 2022-06-13 05:21:56 +10:00
Pieter-Jan Briers
1ea18b9448 Move analyzer tests over to separate project.
Safe to say the build system and Rider do not like the double-project-reference shenanigans going on in Robust.UnitTesting.
2022-06-12 12:35:57 +02:00
Pieter-Jan Briers
1e7956eaa8 Remove MarshalHelper
Not necessary anymore since .NET Core
2022-06-12 11:30:30 +02:00
metalgearsloth
7655aec413 Version: 0.22.0.0 2022-06-12 11:02:17 +10:00
Pieter-Jan Briers
a36a10c814 Fix deadlock on client shutdown.
This was an existing bug, but due to me moving more cleanup logic to game thread shutdown the window of opportunity for it to trigger just got much greater.
2022-06-11 16:28:14 +02:00
Pieter-Jan Briers
26cdae6877 cvar command shows completion hint showing cvar value.
Like in source!
2022-06-11 13:24:15 +02:00
Pieter-Jan Briers
c96eae620c Fix GetRegisteredCVars including unregistered CVars. 2022-06-11 13:23:35 +02:00
Pieter-Jan Briers
9591d16aed Implement res:// protocol for WebView, MIME type handling. 2022-06-10 17:09:46 +02:00
Pieter-Jan Briers
05bb361eb2 CEF cookie fixes (#2934)
* Trying to get res:// and usr:// cookies to wrok

* Update CefGlue

* Bump CEF

* Seal types in WebView

Fixes warnings

* Move most of client cleanup to game thread.

This used to run in the windowing thread which broke CEF shutdown, most notably cookie saving.

* "flushcookies" command for CEF.

* Remove unecessary res:// code.

* Fix tests

* More request handler fixes.

* Good thing I don't have to care about commit quality in PRs like this.
2022-06-10 14:30:57 +02:00
Pieter-Jan Briers
776669b789 Remove almost all allocations from F3 menu. (#2923) 2022-06-10 12:59:43 +02:00
Pieter-Jan Briers
8d5fa58e1a Avoid NRE if viewport has no eye 2022-06-09 09:39:08 +02:00
Leon Friedrich
dda544223f load & save map command update (#2926) 2022-06-09 13:13:46 +10:00
Leon Friedrich
34106195b0 Better sprite specifier errors (#2925) 2022-06-09 13:08:26 +10:00
Leon Friedrich
5bf3067342 Fix friend visualizer (#2924) 2022-06-09 03:29:32 +10:00
Leon Friedrich
ebeb504347 Make Eye use Matrix3.CreateTransform (#2921) 2022-06-09 03:10:43 +10:00
Leon Friedrich
0b824f2170 Add State application bool to IGameTiming (#2916) 2022-06-09 03:08:50 +10:00
Leon Friedrich
0d04d8a82a Add generic visualizer system (#2914) 2022-06-09 03:08:36 +10:00
Leon Friedrich
b360c4439b Matrix3 and Angle: add readonly and ref->in (#2919)
* Matrix3 and Angle readonly and ref->in

* fix precision
2022-06-08 17:53:17 +02:00
keronshb
d2cb4d102a Adds a filter to all except origin (#2922)
* Adds a filter to all except origin

* Spelling error fix
2022-06-08 14:59:53 +02:00
Leon Friedrich
b44524cd10 Matrix cleanup (#2920) 2022-06-08 14:52:48 +02:00
Vera Aguilera Puerto
7f0feef97c Version 0.21.0.0 2022-06-07 11:28:50 +02:00
Vera Aguilera Puerto
82a67ecd99 Add Access Permissions to friends, friend attributes now work in members too. (#2799) 2022-06-07 11:27:36 +02:00
metalgearsloth
42ad734a46 Version: 0.20.1.0 2022-06-07 12:11:45 +10:00
Pieter-Jan Briers
ac949a4bee Improve "monitor" command.
Has -all and +all options, code cleaned up including IDebugMonitors API and implementation.
2022-06-07 00:44:48 +02:00
Pieter-Jan Briers
60ca5beffa Put debug console below modal and popup root.
This means console completions aren't covered by F3, among other things.
2022-06-06 18:26:03 +02:00
Pieter-Jan Briers
a6ab044582 Fix shadow copies in Matrix3.TransformBoxSlow 2022-06-06 18:21:06 +02:00
Pieter-Jan Briers
d46fb519d5 Fix fullscreen disabling VSync in some cases.
I hate OpenGL.
2022-06-06 18:20:14 +02:00
Pieter-Jan Briers
832672149b Entity creation performance improvements (#2911) 2022-06-06 14:49:36 +02:00
Kara
3941930c2f Add fluent function for indefinite article (#2805) 2022-06-06 12:45:54 +02:00
metalgearsloth
4ab43cc923 Version: 0.20.0.0 2022-06-06 17:15:57 +10:00
metalgearsloth
cb0cb37e3c Remove PhysicsMap ref from physics comp (#2917) 2022-06-06 17:15:01 +10:00
metalgearsloth
df4ebd6c8c No more spoopy invisible ghosts (#2910)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-06-06 16:50:57 +10:00
wrexbe
647aa7ecf2 Expose total fixtures mass on physics (#2908) 2022-06-05 18:28:02 -07:00
Pieter-Jan Briers
6aaf18cb27 Static dispatch ClientEntityManager from ClientGameStateManager.
Speed.
2022-06-05 17:04:25 +02:00
Pieter-Jan Briers
08e295972c TryGetComponent is AggressiveInlining 2022-06-05 17:04:04 +02:00
Pieter-Jan Briers
b4a7c5d47a Miniscule perf improvements to some component state handling.
Basically won't matter but it's a 0.3%.
2022-06-05 16:06:13 +02:00
Pieter-Jan Briers
4226976821 Ordered EventBus optimizations (#2902) 2022-06-05 14:49:59 +02:00
Pieter-Jan Briers
38bc58e77c Reduce dictionary lookups when doing char glyph stuff. 2022-06-05 00:38:00 +02:00
Leon Friedrich
386b0bc232 Cache TransformComponent in trees (#2904)
* Cache TransformComponent in trees

* add deleted check.
2022-06-05 00:25:00 +02:00
Leon Friedrich
487471c2d1 Faster box transform (#2901) 2022-06-05 00:22:00 +02:00
metalgearsloth
e46cfe1601 Ensure maploader sizes (#2906) 2022-06-05 00:14:09 +02:00
Leon Friedrich
fc4eb664e2 Make TryGetComponent output nullable (#2905)
* Make TryGetComponent output nullable

* figs

* ah. there are more. Why do you fail me VS
2022-06-05 00:13:53 +02:00
Pieter-Jan Briers
6c92d246c8 Oops I broke XAML 2022-06-03 02:50:39 +02:00
Pieter-Jan Briers
e86bd33a29 Fix XAML support in Rider EAP 2022-06-02 21:50:39 +02:00
metalgearsloth
c4787b63a8 Version: 0.19.2.0 2022-06-02 21:02:43 +10:00
metalgearsloth
6b305349c9 Fix grid deletion crashing (#2899)
* Fix grid deletion crashing

* polite

* a

* excellent
2022-06-02 21:01:56 +10:00
Alex Evgrashin
3c16779d68 Add helper function in entity prototype (#2868) 2022-06-01 17:28:47 +02:00
Pieter-Jan Briers
38fcadf649 Remove allocations from physics ComputeDistance() (#2896) 2022-06-02 00:52:43 +10:00
metalgearsloth
6cc50013be Version: 0.19.1.3 2022-06-01 22:46:28 +10:00
metalgearsloth
bb7c9ad7fa Fix grid fixtures logger woopsy (#2895) 2022-06-01 22:36:50 +10:00
metalgearsloth
b53d838b14 Version: 0.19.1.2 2022-06-01 20:01:16 +10:00
metalgearsloth
e03831586e Physics tweaks (#2890)
* Tweak awake assetr slightly

It will still log but game shouldn't blow up anymore.

* b

* a

a
2022-06-01 13:13:15 +10:00
metalgearsloth
6acb8f8b1b Add logs to grid splitting (#2888) 2022-05-31 19:18:49 +10:00
metalgearsloth
29bf2cbbc4 Version: 0.19.1.1 2022-05-31 17:53:48 +10:00
metalgearsloth
4fc238864b Update circle solver to box2d's latest (#2883) 2022-05-30 15:38:20 +10:00
Leon Friedrich
cb8d2727f4 Undo all angle lerp changes (#2884) 2022-05-30 15:38:09 +10:00
metalgearsloth
9ef433d3ed Version: 0.19.1.0 2022-05-29 16:24:48 +10:00
Pieter-Jan Briers
02de3cd437 Fix tests with concrete EntityManager 2022-05-29 01:15:52 +02:00
Pieter-Jan Briers
e7211063e7 Remove unecessary Vertex2D.SizeOf 2022-05-29 01:13:12 +02:00
Leon Friedrich
e32ee1a58e Reuse post-shader render target (#2882) 2022-05-29 01:02:19 +02:00
Pieter-Jan Briers
1eb5859f01 Expose concrete EntityManager on IoC, use it in EntitySystem.
REMOVE VIRTUAL DISPATCH.
2022-05-29 01:01:50 +02:00
Pieter-Jan Briers
ff7c3dc45c Do FramePreEngine and FramePostEngine on server 2022-05-29 00:39:54 +02:00
Pieter-Jan Briers
655b5974a3 Move sRGB -> linear conversion for vertex color to vertex shader.
This took almost 2% of CPU time on release. Jeez.
2022-05-28 23:18:05 +02:00
Leon Friedrich
47d7c7cf6c Revert ShortestDistance changes (#2881) 2022-05-29 04:03:31 +10:00
wrexbe
1c39deae6c Fix github action test output spam (#2847) 2022-05-28 16:15:37 +02:00
Pieter-Jan Briers
6c4dc7fc72 Version: 0.19.0.0 2022-05-28 15:36:59 +02:00
Pieter-Jan Briers
3c5618364c Move ValueList<T> to Robust.Shared.Collections 2022-05-28 15:34:46 +02:00
Pieter-Jan Briers
bf1cc8fd7c Minor performance improvements (#2860) 2022-05-28 15:28:08 +02:00
20kdc
72d4d50788 Tile aliases (#2840) 2022-05-28 14:59:58 +02:00
Leon Friedrich
6a86fcdeeb Fix WorldSpace overlay drawing (#2878) 2022-05-28 14:52:01 +02:00
Pieter-Jan Briers
dad95ad73a Fix KeepAspectCovered 2022-05-28 14:46:15 +02:00
20kdc
77f915acf5 Strip Lidgren "Disconnected: " prefix when a connection fails because of interruption by a disconnect with a structured message. (#2880)
Note that this otherwise retains the prefix, which may be important for debugging.
2022-05-28 14:37:17 +02:00
Pieter-Jan Briers
6fc1daf978 Some compiler warning fixes. 2022-05-28 13:36:35 +02:00
Pieter-Jan Briers
934f589778 Put Control FrameUpdate() before style & layout. (#2877) 2022-05-28 13:09:19 +02:00
Clyybber
305ea97d5b Limit audio raycast length (#2851)
* Limit audio raycast length

* Add MidiManager.MaxDistanceForCulling and cull based on MaxDistance.
2022-05-28 13:07:36 +02:00
Pieter-Jan Briers
e3b26e80bf Sync CurTime base. (#2858) 2022-05-28 13:03:42 +02:00
Leon Friedrich
810ef119b0 Remove "A:" log (#2879) 2022-05-28 11:10:41 +02:00
20kdc
393b27679d ACZ general speedups (#2873)
* Cleave the ACZ code into two parts

* SSAZip - faster-performing than ZipArchive, very small codebase

* OnDemandFile to reduce RAM usage of SSAZip

* Modify OnDemandFile to be more amiable for replacing parts of ACManifest

* Make the ACZ Manifest code a lot less reliant on an "internal zip file" for memory usage reasons

* Finally allow disabling legacy client zip creation entirely

* ZIP is now only an ingestion format for ACZ, not actually served anymore

* We do a little renaming

* We do a little namespace adjustment

* We do a little ABOMINATION OF FILE MERGING
2022-05-27 20:52:38 +02:00
Pieter-Jan Briers
a592134caf run XamlIL with internal MSBuild by default.
This only needs to be external when developing XamlIL itself, and I assume doing it external worsens build perf somewhat.
2022-05-27 17:42:27 +02:00
wrexbe
2389df7c6f Ignore missing components on the client (#2846) 2022-05-27 15:30:22 +02:00
Leon Friedrich
422202348e Change SplitContainer MeasureOverride (#2874) 2022-05-27 13:31:54 +02:00
metalgearsloth
284e08ffd9 Version: 0.18.1.3 2022-05-27 10:18:30 +10:00
Leon Friedrich
2ce3d04bba Remove EntitySystem.Get from SpriteView.DrawInternal() (#2867) 2022-05-27 10:18:01 +10:00
Acruid
8e67bfe990 Backwards compatible API additions to support removing GridId from content. (#2855) 2022-05-27 10:17:05 +10:00
Leon Friedrich
27dc9510a3 Remove ambiguity in sprite specifier (#2844) 2022-05-27 10:16:08 +10:00
Leon Friedrich
d4708cb144 Make ignored component errors more explicit (#2875) 2022-05-27 10:15:44 +10:00
Pieter-Jan Briers
986de32043 Don't try to parse JSON structured disconnects if it doesn't look like JSON.
Avoid my debugger getting caught on the exception.
2022-05-27 00:03:39 +02:00
Kara
4e90c291b3 Make ShortestDistance not reduce angle (#2869) 2022-05-25 21:55:31 -07:00
metalgearsloth
7775767687 Version: 0.18.1.2 2022-05-26 14:29:12 +10:00
Leon Friedrich
5624476e2b Reset last modified tick (#2871) 2022-05-26 14:28:37 +10:00
Leon Friedrich
9ef80864b7 Fix completion divide by zero (#2866) 2022-05-26 04:38:08 +10:00
Clyybber
c32ef136a1 Fix completion crashing on a invalid path not starting with '/' (#2861) 2022-05-25 13:39:31 +10:00
metalgearsloth
b2ea0fe1e2 Version: 0.18.1.1 2022-05-25 00:56:51 +10:00
metalgearsloth
be86b12b14 Fix collisionwake on spawn (#2859)
* Fix collisionwake on spawn

Stuff that was immediately slept wasn't checked correctly.

* Testy
2022-05-25 00:55:11 +10:00
Pieter-Jan Briers
8b8e499615 Avoid TLS lookup in IoCManager.Resolve<T>(ref T) if instance provided. 2022-05-23 23:33:01 +02:00
metalgearsloth
36b0d38b70 Version: 0.18.1.0 2022-05-22 18:56:53 +10:00
Kara
78ef6921da Fix two angle lerping bugs (#2850) 2022-05-22 18:56:16 +10:00
metalgearsloth
f6ab67e92c Fix audio being occluded by non-hard fixtures (#2849) 2022-05-22 18:32:32 +10:00
Vera Aguilera Puerto
44ffdcf429 Also look for "default.dls" soundfonts on Linux.
Technically, it still opened them fine if they were called "default.sf2" but having the correct extension is better, honestly.
2022-05-20 21:55:26 +02:00
Vera Aguilera Puerto
53f4d3fab6 Allow soundfonts shipped by Content to override system soundfonts.
If Content wants to override the system soundfont, it should be able to.
2022-05-20 21:41:12 +02:00
metalgearsloth
7dcf543443 Version: 0.18.0.1 2022-05-20 18:30:09 +10:00
metalgearsloth
4e445ee313 Physics command niceties (#2843) 2022-05-20 14:17:20 +10:00
metalgearsloth
c6be3e145a Fix help command crash (#2841) 2022-05-19 18:18:33 +10:00
Pieter-Jan Briers
f90526be22 Bump ANGLE, add ES3OnFL10_0 support (#2834) 2022-05-19 07:55:36 +10:00
metalgearsloth
df09bc2cf0 Version: 0.18.0.0 2022-05-19 07:52:46 +10:00
metalgearsloth
a1affcfd3f BodyTypeChangedEvent changes (#2838) 2022-05-19 07:51:54 +10:00
metalgearsloth
a402f3a880 Version: 0.17.0.0 2022-05-17 13:32:33 +10:00
Leon Friedrich
b0fe9fb1a4 Log error for invalid coordinate conversions (#2835)
* Log error for invalid coordinate conversions

* remove $$$
2022-05-17 13:10:33 +10:00
Pieter-Jan Briers
5057c91dcd Console command completions v1. (#2817)
* Console command completions v1.

I think it works™️

* Unify cvar commands

* Handle no-completions-at-all better.

* Don't crash if you tab complete while no completions available.

* Always show hints if available

* Properly null completion hint over the wire

* Unify help command, localize it.

* Clean up + localize cvar command.

* Remove debug logging

* List command unified & localized.

* Remove server completions debug logging

* Remote execute command.

Had to make everything async for this.

* Don't lower case enums or bools
Why

* GC commands converted and localized.

* Fix remote command completions.

Whoops

* Kick command completions

* lsasm unified & localized.

* Revert "Don't lower case enums or bools"

This reverts commit 2f825347c3.

* ToString gc_mode command enums instead of trying to fix Fluent.

Ah well.

* Unify szr_stats

* Unify log commands, completions

* Fix compile

* Improve completion with complex cases (quotes, escapes)

* Code cleanup, comments.

* Fix tab completion with empty arg ruining everything.

* Fix RegisteredCommand completions

* Add more complex completion options system.

* Refactor content directory entries into a proper resource manager API.

* Implement GetEntries for DirLoader

* Make type hint darker.

* Exec command autocomplete, pulled play global sound code out to engine.
2022-05-17 13:07:25 +10:00
Pieter-Jan Briers
84a80db21f Quick and dirty environment variable to disable sandboxing.
Make game start faster.
2022-05-16 22:07:09 +02:00
20kdc
8657e5516b Structured disconnect messages (#2831)
* net structured disco

* Structured reason into NetChannelArgs/etc.

* Enable redial flag in common cases

* Get it all done

* Disco->DisconnectMessages
2022-05-16 21:48:12 +02:00
Pieter-Jan Briers
6b24da6990 Don't emit array precisions on GLES2 2022-05-16 17:32:45 +02:00
20kdc
0ee87bc771 Colour batch reduction (#2809)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
2022-05-16 17:28:37 +02:00
metalgearsloth
6e35c89740 Significantly optimise prediction resetting (#2826)
* Significantly optimise prediction resetting

Turns out just tracking dirty entities and not iterating 30k is much faster.

* cleaner

* Slightly better again

* review

* Fix

* boop

* rebiew

* A
2022-05-16 22:08:17 +10:00
Leon Friedrich
9d69b330b5 Stop double AnchorStateChangedEvent (#2830) 2022-05-16 14:40:48 +10:00
metalgearsloth
22b3f3148c Add default ctor for mousejoint 2022-05-16 13:55:30 +10:00
metalgearsloth
b73b3007f2 Version: 0.16.0.0 2022-05-16 13:20:12 +10:00
Leon Friedrich
37dd4b0893 Pass sprite component in AppearanceChangeEvent (#2829) 2022-05-16 13:19:40 +10:00
metalgearsloth
07c5a38582 Issue collision change events on entity spawns again (#2828)
I thought I'd think of something better for pathfinding but I did not.
2022-05-16 13:17:48 +10:00
metalgearsloth
c866c6b59b Optimise grid traversal for pop-in (#2825)
This was like 1/3 of the frame spikes from PVS pop-in. The main benefit is just checking if the entity is anchored for grid traversal and the secondary was earlying-out handling component state if it's sent to nullspace.
2022-05-16 07:37:01 +10:00
ElectroJr
c3e97cb97e Version: 0.15.1.0 2022-05-15 15:25:38 +12:00
Leon Friedrich
52ffb97369 Change overlay screen texture wrapping (#2749) 2022-05-15 13:20:52 +10:00
Leon Friedrich
bad5657725 MapLoader and mapping command changes (#2744) 2022-05-15 12:28:38 +10:00
wrexbe
f8dc3c8a0e Add some CodeAnalysis attributes to whitelist (#2811) 2022-05-15 12:25:57 +10:00
Paul Ritter
77493b5d14 caches reflection in serv3 datadefinition delegates (#2790)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-05-14 16:37:18 +10:00
metalgearsloth
b1ceafbe4f Version: 0.15.0.0 2022-05-14 15:14:10 +10:00
Pieter-Jan Briers
41e9d9b08b Client profiling system (#2783)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-05-14 15:08:46 +10:00
metalgearsloth
dc32549c75 Version: 0.14.7.0 2022-05-14 14:55:56 +10:00
metalgearsloth
17dd3af3c7 ECS metadata pausing (#2800) 2022-05-14 14:55:42 +10:00
metalgearsloth
32bdc19fe9 Final grid movement optimisation (#2711) 2022-05-14 14:54:31 +10:00
metalgearsloth
70fbefbe62 Fix joints crash (#2816) 2022-05-14 14:51:45 +10:00
Vera Aguilera Puerto
64cd6ea9be Adds GridUid field to TileRef. (#2815)
* Adds GridUid field to TileRef.

* actually compiles
2022-05-13 18:00:33 +10:00
metalgearsloth
aa92c2444d Version: 0.14.6.0 2022-05-13 12:07:59 +10:00
metalgearsloth
9b19626f1b Port mousejoint from box2d (#2814) 2022-05-13 00:21:39 +10:00
Moony
2bbe5193ee Moves that disable connect option nobody can use to somewhere people can use it. (#2812) 2022-05-12 16:02:12 +02:00
metalgearsloth
d11318f082 Make tile placement much less jank (#2785) 2022-05-12 22:27:06 +10:00
wrexbe
237f948d99 BinaryPrimitives > BitConverter (#2813)
* BinaryPrimitives > BitConverter

* Forgot a :
2022-05-12 07:57:21 +02:00
Kara D
f3449be1e9 Version: 0.14.5.0 2022-05-11 13:43:58 -07:00
Vera Aguilera Puerto
b95ffda711 EntityCoordinates methods for getting grid/map EntityUid.
Uses the new Transform properties that return grid/map EntityUids.
2022-05-11 14:24:46 +02:00
Moony
0932fa0058 Add the concurrent collections and BitConverter to the allow list. (#2810) 2022-05-11 00:11:32 +02:00
Pieter-Jan Briers
da2e46b81b Increase command timeout on benchmark SSh action 2022-05-10 16:05:53 +02:00
Pieter-Jan Briers
d4a1fcc9c6 Fix database code for benchmarks. 2022-05-10 15:44:25 +02:00
Pieter-Jan Briers
c7e7f4f28f make run_benchmarks.py handle errors better. 2022-05-10 14:44:53 +02:00
Pieter-Jan Briers
87e191b8d7 Benchmarks CI attempt 6 2022-05-10 14:35:12 +02:00
Pieter-Jan Briers
05b21fcfcc Benchmark CI attempt 5 2022-05-10 11:54:25 +02:00
Pieter-Jan Briers
48e4ae87d8 Benchmark CI attempt 4(?) 2022-05-10 11:18:04 +02:00
Pieter-Jan Briers
8b090034f1 Benchmarks CI fix attempt 3 2022-05-10 11:14:17 +02:00
Pieter-Jan Briers
41c183ac09 Fix GITHUB_SHA? 2022-05-10 11:10:57 +02:00
Pieter-Jan Briers
4380b95451 Fix benchmarks attempt 1 2022-05-10 11:06:57 +02:00
Pieter-Jan Briers
90fc486a20 Allow manual dispatch of benchmarks 2022-05-10 11:00:52 +02:00
Paul Ritter
f254153962 benchmark script (#2745)
* benchmark script

* more changes

* oopsie

* adjust workflow

* Put a concurrency limit on the benchmarks action

* Update run_benchmarks.py

Co-authored-by: Paul <ritter.paul1+git@googlemail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2022-05-10 10:58:42 +02:00
Moony
a2538d1905 Add the setter for images to the sandbox list (#2802) 2022-05-10 09:35:55 +02:00
metalgearsloth
5d7a2879a7 Fix scaling consistency between sprite and bounds (#2803) 2022-05-10 00:34:07 -07:00
20kdc
986adf6494 RobustToolbox side of Redial API. (#2804)
* RobustToolbox side of Redial API.

Please be aware that as far as I know testing this code is nigh-impossible until it ships.

* a smidge of paranoia

* paranoia on the paranoia please
2022-05-10 09:24:46 +02:00
Pieter-Jan Briers
15932fb9aa DebugTools.Assert(bool, string) does not allocate if string is a format string anymore. 2022-05-10 00:59:36 +02:00
Pieter-Jan Briers
3ae4bb03f5 Enable NetManager latency sim on release, add no-bye to INetChannel.
A minute amount of tomfoolery.
2022-05-09 15:43:30 +02:00
metalgearsloth
7f47478997 Make physics testbed slightly less annoying to use (#2794) 2022-05-08 23:28:54 +10:00
metalgearsloth
a2923450ea Optimise occluder dirtying (#2801)
Mostly when stuff spawning in.
2022-05-08 15:16:56 +10:00
metalgearsloth
5366b9a35b Cleanup collisionmanager (#2792)
1. Split it into partials because my scroll wheel was hating me.
2. Removed AABB shapetypes because contacts were made fast enough it doesn't matter.
2022-05-08 14:41:36 +10:00
metalgearsloth
5ca37c68e2 Optimise physics init (#2786) 2022-05-08 14:39:54 +10:00
Vera Aguilera Puerto
22aa274d03 Add GridUid and MapUid properties to TransformComponent. (#2798) 2022-05-07 22:43:00 +10:00
metalgearsloth
54bbe55bb9 Version: 0.14.4.0 2022-05-07 21:42:57 +10:00
metalgearsloth
9706576e66 Fix grid splits for empty chunks (#2797) 2022-05-07 13:26:26 +10:00
metalgearsloth
b2ccd65da4 Fix showgridnodes colours (#2796) 2022-05-07 11:17:28 +10:00
Paul
c587cd2e12 hm 2022-05-06 18:36:50 +02:00
Paul Ritter
ba23a989a9 make pvs account for lastack properly (#2733) 2022-05-06 18:09:30 +02:00
metalgearsloth
c6c69668c8 Fix polyshape centroids (#2793) 2022-05-05 22:42:35 +10:00
Leon Friedrich
b0a4593f44 Speed up map init, and unpause map on init (#2781)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-05-05 19:21:03 +10:00
metalgearsloth
2d6e699e2c Mark component name as obsolete (#2791) 2022-05-05 18:42:38 +10:00
metalgearsloth
4307509402 ECS even more transform (#2742)
Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com>
2022-05-05 13:20:23 +10:00
Paul
ed165b1e4c removes some iocresolves in mapmanager 2022-05-04 23:17:47 +02:00
Paul
3503300a23 minor serv3 optimization 2022-05-04 23:05:28 +02:00
Paul
3ab3d255ed fix seed benchmark 2022-05-04 18:43:17 +02:00
metalgearsloth
fd625e0b30 Fix scale command (#2784)
* Fix scale command

Everything will be visualizers.

* comment for future coders
2022-05-04 22:49:42 +10:00
ElectroJr
53af37cd56 Version: 0.14.3.1 2022-04-30 01:51:51 +12:00
Leon Friedrich
6bf4945181 Allow int uniforms to specify precision (#2779) 2022-04-29 23:48:08 +10:00
metalgearsloth
868320c513 Fix VV lineedit crash 2022-04-29 00:41:14 +10:00
Leon Friedrich
577b836420 Fix grid-traversal parenting (#2777) 2022-04-28 18:08:56 +10:00
metalgearsloth
4a36b52657 Nuke an xform log
Probably not worth it.
2022-04-27 00:35:38 +10:00
metalgearsloth
8dc944d22d Stop invalid broadphase change from crashing the game (#2717) 2022-04-26 23:25:28 +10:00
metalgearsloth
0a10170155 Fix map change crash (#2716)
* Fix map change crash

Follower really out here exposing all the ordering bugs.

* Log AttachToGridOrMap
2022-04-26 23:21:58 +10:00
metalgearsloth
dfa2c222d1 Version: 0.14.3.0 2022-04-26 01:18:07 +10:00
metalgearsloth
e288af162c Add event for post-grid-split (#2774) 2022-04-26 01:17:22 +10:00
Kara
6280820c86 Merge pull request #2768 from ShadowCommander/errorcheck-vv-lineedit
Add null check to VV string parsing
2022-04-24 22:51:49 -07:00
ShadowCommander
102b31f83d Add null check to VV string parsing 2022-04-24 02:16:42 -07:00
metalgearsloth
37ca9ca19a Version: 0.14.2.4 2022-04-24 16:40:10 +10:00
metalgearsloth
0c151ad456 Fix grid deletion for SetTiles (#2767) 2022-04-24 16:39:57 +10:00
metalgearsloth
55e3f749b4 Version: 0.14.2.3 2022-04-24 16:07:19 +10:00
metalgearsloth
16902d7fbc Hotfix anchoring (#2764) 2022-04-24 16:06:50 +10:00
metalgearsloth
c37f53e083 Issue re-parent event on split (#2765) 2022-04-24 15:25:55 +10:00
metalgearsloth
4cc499afdf Version: 0.14.2.2 2022-04-24 13:22:39 +10:00
20kdc
48895efad7 Flexible object pool for ZStd compression contexts rather than the array-based version (#2763) 2022-04-23 20:17:59 +02:00
metalgearsloth
eb46b04c0e Version: 0.14.2.1 2022-04-24 00:58:38 +10:00
metalgearsloth
442de12b99 Grid splitting (#2743)
Co-authored-by: Vera Aguilera Puerto <gradientvera@outlook.com>
2022-04-24 00:57:56 +10:00
Vera Aguilera Puerto
712c1f3559 Adds "ressys" and IEntitySystemManager dependency to scripting globals. (#2762)
"ressys" resolves an `EntitySystem`.
2022-04-24 00:55:31 +10:00
Vera Aguilera Puerto
5a5cfa1eba Adds GetGridOrMapTilePosition to SharedTransformSystem. (#2759)
A little helper method that would be VERY useful for many content things... Such as atmos.
2022-04-24 00:55:11 +10:00
metalgearsloth
7988386bc3 Version: 0.14.1.1 2022-04-24 00:53:41 +10:00
Leon Friedrich
76bfe2905d Add support for float[] and vec2[] in shaders (#2751)
* huh it works.

* vector arrays
2022-04-22 22:43:17 +02:00
ShadowCommander
23893bcacd Change LineEdit to keep cursor position (#2752)
* Change LineEdit to keep cursor position

* Revert console changes
2022-04-22 22:42:24 +02:00
Pieter-Jan Briers
c1da159e8f Rely on SharpZstd -Bsymbolic 2022-04-22 22:39:59 +02:00
20kdc
13889acb37 Fix crash caused by passing uninitialized structure to ZSTD_inBuffer (#2760) 2022-04-22 14:10:20 +02:00
Vera Aguilera Puerto
ffb3de3f2c Fix loading soundfonts from filesystem on Linux 2022-04-21 17:52:27 +02:00
Flipp Syder
87cd45fc64 Adds custom midi soundfont support (sandboxed) (#2746) 2022-04-21 10:05:57 +02:00
Leon Friedrich
1cf914813c Add PVSOverrideSystem (#2747)
* Add PVSOverrideSystem

* add session and clear functions
2022-04-20 16:00:18 +02:00
Pieter-Jan Briers
86d61f8d03 Version: 0.14.0.1 2022-04-20 15:39:32 +02:00
Pieter-Jan Briers
8f638fbf9e HOTFIX ParallelManager out of bounds
I could have sworn I made this -1.

Completely untested
2022-04-20 15:21:17 +02:00
metalgearsloth
95ac134a07 Comment out msgstate logger (#2754)
Getting spammed and I don't think we want to log here long-term anyway.
2022-04-20 13:13:15 +02:00
metalgearsloth
4e65f9b2a1 Version: 0.14.0.0 2022-04-20 18:48:06 +10:00
Paul
d60bbe9fe9 misc client optimizations 2022-04-18 22:34:49 +02:00
Pieter-Jan Briers
dec1495e1e Remove reference to ManagedHttpListener.
How did this ever compile?
2022-04-17 19:13:24 +02:00
Paul
dc72c6fe22 fix typo 2022-04-17 18:15:41 +02:00
Paul
141b1205c6 removes some todos 2022-04-17 18:09:46 +02:00
Pieter-Jan Briers
65f4a09ad5 Try to fix ZStd stuff for servers. 2022-04-17 18:02:35 +02:00
Pieter-Jan Briers
3d1545c0b9 Fix incorrect unsubscription to AssemblyLoadContext.Default.Resolving.
+= instead of -=.
2022-04-17 18:02:35 +02:00
metalgearsloth
ec26dd622b DetachParentToNull tweaks (#2741)
* DetachParentToNull tweaks

The other parent change message already has the mapid and gridid updated when issuing the event.

We'll also guard the event by checking if they're already in nullspace.

* woops
2022-04-17 17:28:07 +10:00
metalgearsloth
0ab3131964 ECS transform states (#2710)
* ECS transform states

Turns out it also saves us a GetComponent on the parent too which is nice.

* Fix test
2022-04-17 14:55:29 +10:00
Pieter-Jan Briers
588a9e9f63 ZSTD game states + other improvements (#2737) 2022-04-16 14:36:59 +02:00
Pieter-Jan Briers
f2fa930edd Block explicit layout types in sandboxing. 2022-04-16 14:17:37 +02:00
Kara D
ec47229a37 Version: 0.13.0.0 2022-04-15 14:36:50 -07:00
mirrorcult
bf5d1d58a8 Merge pull request #2715 from moonheart08/better-map-loading 2022-04-15 14:34:48 -07:00
mirrorcult
8b4da24ee7 Merge pull request #2722 from PaulRitter/2022_04_12_abstract_validation 2022-04-15 14:34:22 -07:00
mirrorcult
3fba108d70 Merge pull request #2734 from PJB3005/22-04-14-spacewizards-http 2022-04-15 14:34:01 -07:00
mirrorcult
35029f0eed Merge pull request #2692 from vulppine/color-sliders 2022-04-15 14:33:21 -07:00
mirrorcult
b66ab9d7c6 Merge pull request #2727 from ElectroJr/update-mapping-except 2022-04-15 14:31:30 -07:00
mirrorcult
5e0b745ba9 Merge pull request #2739 from PJB3005/22-04-15-remove-createnetmsg 2022-04-15 14:30:32 -07:00
Pieter-Jan Briers
45d906ba7e Deprecate CreateNetMessage<T>. 2022-04-15 18:47:42 +02:00
Pieter-Jan Briers
24b124fb17 Fix client reconnect 2022-04-15 15:28:45 +02:00
Vera Aguilera Puerto
7cb0978468 Revert "Adds custom MIDI soundfont support (#2720)"
This reverts commit 9ff46b9aad.

Sandbox violation, oops.
2022-04-15 12:46:30 +02:00
mirrorcult
44cb135a1d Even shorter pretty-print type abbreviations for VV (#2735) 2022-04-15 09:15:10 +02:00
Pieter-Jan Briers
146b673203 Move string serializer to ZStd and BLAKE2b.
Faster and smaller
2022-04-15 01:16:35 +02:00
Pieter-Jan Briers
b0d23c5665 Remove zstd & libsodium natives from client publishes.
Save a good megabyte.
2022-04-15 00:39:56 +02:00
Pieter-Jan Briers
68f89c8958 SkipIfSandboxedAttribute
Should allow something like OpenDream to provide unsandboxed-only DLLs easily.
2022-04-15 00:31:17 +02:00
Pieter-Jan Briers
1327d6bf25 Replace ManagedHttpListener submodule in favor of NuGet package.
It's SpaceWizards.HttpListener now!
2022-04-14 23:53:57 +02:00
Pieter-Jan Briers
237e37ff30 Update Lidgren submodule 2022-04-14 23:47:17 +02:00
Pieter-Jan Briers
4d707c86cb Version: 0.12.1.0 2022-04-14 17:17:17 +02:00
Pieter-Jan Briers
c7027c6e00 ACZ manifest delta downloads (#2698) 2022-04-14 17:15:54 +02:00
Paul Ritter
81ec61bcc8 overflowqueue (#2721)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
2022-04-14 10:57:28 +02:00
DrSmugleaf
649178fa54 Rename engine prototypes folder to EnginePrototypes (#2723) 2022-04-14 05:46:29 +02:00
Flipp Syder
9ff46b9aad Adds custom MIDI soundfont support (#2720)
Co-authored-by: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
2022-04-13 11:59:43 +02:00
ElectroJr
cdcbb60ca7 more comments 2022-04-13 21:46:40 +12:00
ElectroJr
d8cdb2b312 comments 2022-04-13 21:43:47 +12:00
ElectroJr
fa1c1b8e6e better equality 2022-04-13 21:39:48 +12:00
ElectroJr
2ded835602 Make MappingDataNode.Except() not recursive 2022-04-13 21:08:59 +12:00
moonheart08
a43f04818d fix map commands. 2022-04-12 09:48:45 -05:00
moonheart08
278dc60119 use a query for xform. 2022-04-12 09:43:59 -05:00
moonheart08
8a202be0cf naming. 2022-04-12 09:34:18 -05:00
moonheart08
58940a3cd7 bp/map load now take arguments. 2022-04-11 23:54:15 -05:00
moonheart08
aa9721d146 fix tests 2022-04-11 23:15:37 -05:00
Paul
79f114ad5b work 2022-04-12 02:04:41 +02:00
Leon Friedrich
197a6ddd9d Fix sprite bb calculation (#2714) 2022-04-11 18:13:32 +02:00
metalgearsloth
4a4fb15e06 Add xform comp ref to parent change message (#2709) 2022-04-11 17:01:07 +10:00
metalgearsloth
e7e83ce6e8 Optimise fixture init slightly (#2707) 2022-04-11 16:58:48 +10:00
Leon Friedrich
a82b293452 Make RemoveComp not error on missing component (#2689) 2022-04-11 16:57:35 +10:00
Vera Aguilera Puerto
bb483a3a38 Add "midipanic" command. (#2701) 2022-04-11 16:55:12 +10:00
moonheart08
2ca3d0e395 Fix map loading once and for all. 2022-04-11 00:44:28 -05:00
metalgearsloth
bda79b1e82 Cache serialized types (#2706) 2022-04-11 12:50:34 +10:00
metalgearsloth
4f4b754e2d Don't allow velocity to be set where an obj can't collide (#2691) 2022-04-11 12:49:35 +10:00
mirrorcult
214cabac43 Merge pull request #2713 from oappiah/minor_config_update 2022-04-10 13:35:00 -07:00
Appiah
7b6229c222 Corrected the map example 2022-04-10 22:24:21 +02:00
Paul
1a14a75897 nullspace viewer crash fix 2022-04-10 17:52:12 +02:00
metalgearsloth
76b75fd9b3 Remove LINQ from sprite bounds (#2708) 2022-04-10 17:48:45 +10:00
Pieter-Jan Briers
b969fd22f7 Version: 0.12.0.1 2022-04-09 21:02:56 +02:00
Profane McBane
8d27d091af Hotfix - change PVS pools to use MaxVisPoolSize (#2704) 2022-04-09 20:54:41 +02:00
DrSmugleaf
1eb7393a60 Revert "pvsrange vec2 + eyezoom (#2676)" (#2703)
This reverts commit 582d8a5587.
2022-04-09 19:41:11 +02:00
Vera Aguilera Puerto
4cf88507c2 Version: 0.11.0.1 2022-04-09 13:21:38 +02:00
Vera Aguilera Puerto
3565d8b321 Fix synth state getting reset every MIDI player loop. 2022-04-09 13:21:09 +02:00
Vera Aguilera Puerto
7094c29b2e Version: 0.11.0.0 2022-04-08 16:07:42 +02:00
Vera Aguilera Puerto
63004b270f Cleans up and improves MIDI code significantly. (#2666) 2022-04-08 15:58:15 +02:00
metalgearsloth
6714a99b38 EntityLookup anchor flag test (#2699) 2022-04-08 13:36:24 +10:00
metalgearsloth
4c3b8df1e7 Fix anchor query (#2697) 2022-04-08 09:56:30 +10:00
metalgearsloth
4bb695121f Version: 0.10.0.0 2022-04-06 19:34:47 +10:00
metalgearsloth
09fd47c421 Don't store contained entities on entitylookup (#2662) 2022-04-06 19:31:34 +10:00
vulppine
d201d9c688 adds color sliders, fixes issues with RGB->HSL/V 2022-04-05 12:21:59 -07:00
Paul
fd1e25c584 Version: 0.9.3.2 2022-04-05 18:51:03 +02:00
Paul Ritter
6bb66ae70e fixes loc (#2685) 2022-04-05 18:50:27 +02:00
Paul
cc82d6b1d9 Version: 0.9.3.1 2022-04-05 18:36:19 +02:00
Paul
956be749b6 fix prototype reload 2022-04-05 18:36:09 +02:00
Paul Ritter
6585a00608 readds expandpvsevent (#2684) 2022-04-05 19:47:14 +10:00
metalgearsloth
c0525f710f Sprite subscription shutdown (#2688) 2022-04-05 19:45:23 +10:00
Vera Aguilera Puerto
d3672807d2 Improves SpriteSystem.GetPrototypeIcon method significantly. (#2680) 2022-04-05 16:36:16 +10:00
ElectroJr
60f18d5f36 Version: 0.9.3.0 2022-04-05 18:06:43 +12:00
mirrorcult
e72d3de256 Local event for BUI opening (#2687) 2022-04-05 15:52:02 +10:00
Moony
ba9846b9c4 Fix vector2 CVars (#2686) 2022-04-05 15:03:10 +10:00
Paul
09586284dc Version: 0.9.2.0 2022-04-04 20:28:53 +02:00
Paul
a1ee4374b2 add a check for major version == 0 2022-04-04 20:28:26 +02:00
Paul Ritter
4de6f25f11 updates version-script to use the new version format (#2683) 2022-04-04 20:25:12 +02:00
Paul Ritter
582d8a5587 pvsrange vec2 + eyezoom (#2676)
Co-authored-by: Paul <ritter.paul1+git@googlemail.com>
2022-04-04 20:20:13 +02:00
Leon Friedrich
ec53b04f99 Add NotNullWhen attribute to TryComp (#2681) 2022-04-04 11:29:02 +02:00
metalgearsloth
950fc94408 Physicsmap tweaks (#2663) 2022-04-04 17:10:15 +10:00
Leon Friedrich
58d12e6e09 Remove Component.OnAdd() (#2660) 2022-04-04 16:11:47 +10:00
ElectroJr
94323005c4 Version: 0.9.1 2022-04-04 17:43:01 +12:00
metalgearsloth
4989842057 Remove IgnorePause (#2649) 2022-04-04 15:41:38 +10:00
Paul
80172636a8 version 0.9 - serv3 refactor 2022-04-03 02:00:41 +02:00
Paul Ritter
8491f7be24 New Serv3 api just dropped (#2605)
Co-authored-by: Paul Ritter <ritter.paul1@gmail.com>
2022-04-03 01:59:48 +02:00
Pieter-Jan Briers
de8c2c14bb Replace Lidgren encryption stuff with Libsodium (#2646) 2022-04-02 16:24:04 +02:00
mirrorcult
baebfff321 Merge pull request #2673 from ElectroJr/fix-description 2022-04-01 17:02:43 -07:00
Paul
24191404aa version 0.8.86 2022-04-02 01:28:12 +02:00
Paul Ritter
990842f5c2 fixes pvs dirty crash (#2674) 2022-04-02 06:09:14 +11:00
ElectroJr
2c2bd3f330 Version: 0.8.85 2022-04-02 00:38:07 +13:00
Leon Friedrich
1ae14c4bfa Add error tolerance to physics map (#2672) 2022-04-01 22:07:27 +11:00
metalgearsloth
61a1701dc9 Fix PVS take 3 (#2671) 2022-04-01 22:04:30 +11:00
ElectroJr
c6ea11346e fix entity description proxy method. 2022-04-02 00:02:58 +13:00
mirrorcult
ad7c871e28 Make effects properly clean up after itself (#2670) 2022-04-01 13:00:54 +11:00
metalgearsloth
c77b3f8022 Version: 0.8.84 2022-04-01 10:10:20 +11:00
metalgearsloth
b263f4a1df Fix PVS crash 2 (#2668)
Co-authored-by: Paul <ritter.paul1@googlemail.com>
2022-04-01 10:09:31 +11:00
Paul
1a11d41bba disable benchmarks workflow 2022-03-31 17:06:48 +02:00
Leon Friedrich
14d0a77644 Make directional sprite matrices static (#2661) 2022-04-01 00:11:17 +11:00
ElectroJr
b75045ce1a Version: 0.8.83 2022-03-31 15:25:31 +13:00
Leon Friedrich
1d8a8e15ef Add a is-In-container metadata flag. (#2585) 2022-03-31 13:23:33 +11:00
Leon Friedrich
28a087c267 Add GetEntitiesIntersectingBody (#2641) 2022-03-31 11:52:35 +11:00
Jane Lewis
8dc849b6bb Cache Sprite AABBs (#2622) 2022-03-31 11:52:00 +11:00
mirrorcult
7e56f46f35 Remove network component messages (#2659) 2022-03-31 10:24:27 +11:00
metalgearsloth
4453a23069 Version: 0.8.82 2022-03-30 23:34:50 +11:00
metalgearsloth
57be0bc845 Fix nullability (#2658) 2022-03-30 23:34:31 +11:00
Paul Ritter
430910ff36 sudo the benchmarks to elevate them to high prio 2022-03-30 14:10:13 +02:00
Paul Ritter
4c95807e2d how 2022-03-30 14:08:53 +02:00
metalgearsloth
92fd04552d Version: 0.8.81 2022-03-30 22:58:42 +11:00
Leon Friedrich
9c7e244821 ECS collision wake (#2656) 2022-03-30 22:57:57 +11:00
Vera Aguilera Puerto
41f64b5c3c Add overload to IntersectRayWithPredicate. (#2650) 2022-03-30 22:57:40 +11:00
Paul Ritter
4003003580 caching trees in pvs (#2652)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-03-30 22:57:31 +11:00
Paul Ritter
f49341b53c im a dummy 2022-03-30 11:16:09 +02:00
Leon Friedrich
61d9d9a832 Make the UI System TryGet functions not log failed resolves (#2657) 2022-03-30 16:37:34 +11:00
Paul
c0b7dd053f working on benchmarks workflow 2022-03-30 00:31:51 +02:00
Paul
f642e10acc versionbump to test benchmarks 2022-03-30 00:25:50 +02:00
Paul Ritter
2fb64480db benchmark workflow & storing it in db (#2653) 2022-03-29 21:43:32 +02:00
metalgearsloth
075b5ec203 Kill local comp messages (#2648) 2022-03-29 23:37:58 +11:00
metalgearsloth
21f2fe6b1b Minor spawn opt (#2651) 2022-03-29 12:34:42 +02:00
metalgearsloth
89080ef7c7 Version: 0.8.79 2022-03-29 18:40:32 +11:00
metalgearsloth
f5d36dc9ca Fix physics parenting bug (#2654) 2022-03-29 18:39:49 +11:00
wrexbe
ef87610b36 Map loader saving change (#2638)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-03-28 16:56:16 +11:00
mirrorcult
c89f1e4d31 Paramless ctor for joints (#2647)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-03-28 16:31:04 +11:00
metalgearsloth
c4805d89e0 Version: 0.8.78 2022-03-27 17:34:43 +11:00
Vera Aguilera Puerto
659ffb028a Dispose of SequencerEvents in MidiRenderer.
Oops!
2022-03-27 00:03:07 +01:00
metalgearsloth
a14c956ccc Nuke EntMapIdChangedMessage (#2621)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-03-26 18:14:56 +01:00
metalgearsloth
facb3914a4 Fix joints crash (#2609) 2022-03-26 18:13:56 +01:00
Vera Aguilera Puerto
aab8f7876b Benchmarks for EntityManager (#2578) 2022-03-26 17:55:00 +01:00
Pieter-Jan Briers
1f199ea71c Add ITaskManager.BlockWaitOnTask()
Smugleaf needed this.

Also changed RobustSynchronizationContext to use channels instead of ConcurrentQueue internally.
2022-03-26 17:02:05 +01:00
metalgearsloth
00b557b77a Struct enumerator for anchored entities (#2626) 2022-03-26 12:53:25 +01:00
metalgearsloth
eac536cffe overlay allocs (#2642) 2022-03-26 12:48:11 +01:00
DrSmugleaf
bf75c6f247 Add IEntitySystemManager.GetEntitySystemOrNull (#2643) 2022-03-26 16:35:09 +11:00
metalgearsloth
1518c79291 Struct enumerator for GetAllGrids (#2624) 2022-03-26 03:17:42 +11:00
metalgearsloth
aae2f72d1a PVS pooling 4 (#2640) 2022-03-25 11:51:59 +01:00
Jane Lewis
273aa3d6ea Show player rotation in debug overlay (#2631) 2022-03-25 18:12:53 +11:00
metalgearsloth
756c4510eb Reduce prediction alloc (#2639) 2022-03-25 18:10:31 +11:00
Paul
cd50e89aec v0.8.77 2022-03-24 23:51:55 +01:00
metalgearsloth
25b648b929 Reduce PVS allocs a bunch (again (again)) (#2630) 2022-03-24 23:48:37 +01:00
metalgearsloth
1dbbb08250 Reduce server allocs a bunch (#2625) 2022-03-24 23:39:52 +01:00
DrSmugleaf
5432f7311e Fix keyboard focused being released and grabbed again immediately afterwards (#2634) 2022-03-24 15:25:25 +01:00
Zoldorf
e662802b4c Update build-docfx.yml 2022-03-23 17:32:12 -06:00
Vera Aguilera Puerto
bae2c390bb Improve Color.FromHex exception message.
It now includes the invalid hexcode argument.
Something in content kept getting these exceptions on prod and knowing the invalid argument would be very helpful when debugging these in the future.
2022-03-23 16:00:28 +01:00
Leon Friedrich
7976926eaf fix sequence node Except() (#2610)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-03-23 23:34:21 +11:00
metalgearsloth
4aee730753 Version: 0.8.76 2022-03-23 20:48:42 +11:00
metalgearsloth
e87c342aa2 inline robusttree pool (#2628) 2022-03-23 20:47:53 +11:00
Paul
d335d74d8f adds maxpoolsize to treepool 2022-03-22 18:02:00 +01:00
metalgearsloth
bc68b0e3ec Version: 0.8.75 2022-03-22 13:57:31 +11:00
metalgearsloth
b1eadbc58f Fix PVS allocation issues (#2623) 2022-03-22 13:55:57 +11:00
Silver
2d3165a16f remove inheritedmembers div 2022-03-21 18:02:35 -06:00
Zoldorf
d99d25de37 Create build-docfx.yml 2022-03-21 17:22:46 -06:00
Zoldorf
be035ab002 :mistake: 2022-03-21 17:22:08 -06:00
Zoldorf
12c8883eea Update build-test.yml 2022-03-21 15:36:41 -06:00
Zoldorf
758c7c1869 Update build-test.yml 2022-03-21 15:28:12 -06:00
Zoldorf
72ab1f5a1a Update build-test.yml 2022-03-21 15:25:40 -06:00
Zoldorf
6b9c1369c0 Update build-test.yml 2022-03-21 15:22:32 -06:00
Zoldorf
fd1f1dc64a Delete build-docfx.yml 2022-03-21 15:12:24 -06:00
Zoldorf
e211368bc4 Update build-docfx.yml 2022-03-21 15:07:41 -06:00
Zoldorf
39307f916d build-docfx.yml 2022-03-21 15:04:24 -06:00
metalgearsloth
7378cc50a1 Version: 0.8.74 2022-03-21 20:09:16 +11:00
Silver
867b9ad932 Adds Docfx to RobustToolbox 2022-03-20 23:08:59 -06:00
Paul Ritter
03064255f6 Makes Robusttree Children nullable to save allocations (#2570) 2022-03-21 03:02:52 +11:00
Pieter-Jan Briers
c9ccd0b873 Fix file dialogs crashing on macOS 2022-03-20 16:47:20 +01:00
metalgearsloth
650eceea7e Remove IoC + GetComp for every tile intersection (#2617) 2022-03-20 16:54:05 +11:00
DrSmugleaf
452ad5a6e5 Version: 0.8.73 2022-03-19 19:41:22 +01:00
Leon Friedrich
7c292c75d4 Add more information to reflection errors. (#2613) 2022-03-20 00:11:42 +11:00
DrSmugleaf
cab4113697 Add myself to CODEOWNERS 2022-03-19 11:27:54 +01:00
metalgearsloth
f1a5de79b5 Change entitylookup bounds to method (#2611) 2022-03-19 16:14:24 +11:00
metalgearsloth
191e80c175 Add EntityQuery support to filters (#2608) 2022-03-19 15:54:13 +11:00
Leon Friedrich
241bce56c8 Add Resolve() to component queries (#2607) 2022-03-19 15:53:39 +11:00
metalgearsloth
b105639b31 More transform ECS methods (#2606) 2022-03-18 10:32:49 +11:00
ElectroJr
419e63ecd5 Version: 0.8.72 2022-03-16 15:32:19 +13:00
metalgearsloth
46e632bf9d Fix effect overlay crash (#2604) 2022-03-15 18:05:13 +11:00
Leon Friedrich
a8871f4ff4 Add an assert to positional audio (#2602) 2022-03-15 14:54:50 +11:00
Paul
65f28c023d also write + bugfix + ratio 2022-03-15 00:43:40 +01:00
Paul
e506f6aba2 error for invalid customtypeserializer 2022-03-15 00:36:05 +01:00
metalgearsloth
93ae74b5a7 Update nuget dependencies (#2581) 2022-03-14 08:57:20 +01:00
Kara D
7b25fa98ee Version: 0.8.71 2022-03-13 19:30:44 -07:00
mirrorcult
e320b7abb4 Merge pull request #2599 from Sanctuary-Station/staging 2022-03-13 19:26:16 -07:00
Acruid
6b9b56ca83 Grid Components Allocate Grids (#2597)
* Deleting a map is now routed through MapComponent deletion.

* Remove map and grid deletions from map networking, just delete the entity if you want to remove the map.

* Moved the chunkSize property of created grids from the networked MapData to the MapGridComponent state.

* Remove unused IMapManager.DefaultMap property.

* Removed MapCreationTick field from MapManager.MapCollection.

* Removed _maps hashset field from MapManager.

* Removed CreatedMaps array from network MapData.

* MapGrid.ParentMapId is now derived from the bound TransformComponent, and isn't required in the MapGrid ctor.
Removed MapGrid.CreatedTick, it can be found on MapGridComponent.CreationTick.

* Remove a bunch of ApplyGameStatePre code duplication.

* Completely refactored CreateGrid.

* Adds AddComponentUninitialized to the ECS system. This allows you to access a component before it is initialized in a using block.

* Use AddComponentUninitialized to allocate a grid after the component is allocated.

* MapLoader now creates the grids after creating the map entities.

* Chunksize and TileSize properties are now actually read out of the map yaml.
TileSize has a public Setter.

* Minor cleanup.

* Moved grid allocation onto the MapGridComponent.

* Final Cleanup.

* Merge Fail.

* Fixed test, grid was getting deleted because it was empty.

* Remove DeletedChunkDatum from grid networking.

* ApplyMapGridState moved from map manager to the MapGridComponent.
2022-03-13 18:28:59 -07:00
Jezithyr
4d19790b3d This should fix the font caching issue? 2022-03-13 16:51:09 -07:00
Jezithyr
2027863d4c Addressing PR Feedback 2022-03-13 15:59:32 -07:00
Vera Aguilera Puerto
4a4444a1ee Adds MemoryContentRoot. (#2590) 2022-03-13 23:52:34 +01:00
Jezithyr
f10316d384 Fixing missing semicolons 2022-03-13 15:23:45 -07:00
Jezithyr
778be40c86 Condensing code 2022-03-13 14:43:24 -07:00
Jesse Rougeau
2046323c71 Update Robust.Client/UserInterface/UserInterfaceManager.cs
More condensing

Co-authored-by: Paul Ritter <ritter.paul1@googlemail.com>
2022-03-13 13:06:02 -07:00
Jesse Rougeau
71bb5cd58e Update Robust.Client/UserInterface/UserInterfaceManager.cs
Condensing sizing logic

Co-authored-by: Paul Ritter <ritter.paul1@googlemail.com>
2022-03-13 13:05:30 -07:00
Jezithyr
71c6e437fa Removing debug and fixing indentation 2022-03-12 20:36:23 -07:00
Jezithyr
26e1474179 Implemented auto UI Scaling :D
- Implemented autoUI scaling, scaling supports down to 520 by 520 pixel screens(Idk why you'd even have this)
- UI scaling can be adjusted by overriding the window root class
2022-03-12 20:31:13 -07:00
Kara D
89a7459fda Update .NET version for build-test workflow
This should hopefully make it catch CS8983
2022-03-12 19:06:23 -07:00
Paul Ritter
a61adf5631 makes budgets clientside & replicated (#2593) 2022-03-13 00:06:40 +11:00
Leon Friedrich
97db1712f3 Fix grid traversal velocities (#2594)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-03-12 23:57:30 +11:00
Paul
ea7012d114 version 0.8.70 2022-03-09 20:58:17 +01:00
Moony
d3eaea5697 Add support for tile variants. (#2577) 2022-03-09 20:56:58 +01:00
metalgearsloth
4ca3fbe4bf Version: 0.8.69 2022-03-10 00:29:08 +11:00
Vera Aguilera Puerto
81fea7595a AttachToGridOrMap checks if the grid/map is being terminated/is deleted. (#2592) 2022-03-10 00:27:18 +11:00
metalgearsloth
2e0806cc1f Version: 0.8.68 2022-03-08 15:48:39 +11:00
metalgearsloth
5325650e92 Fix disappearing grids (#2587)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-03-08 12:25:03 +11:00
Acruid
31764d3c2d Mark C# events on MapManager as Obsolete (#2586)
* Obsoleted C# grid events from MapManager.GridCollection. Use the ECS EventBus events instead.

* Obsoleted C# events from MapManager.MapCollection. Use the ECS EventBus events instead.
2022-03-07 15:51:00 -08:00
Leon Friedrich
9df5152610 Decrease error tolerance for angular velocity updates (#2584) 2022-03-06 23:55:56 +11:00
metalgearsloth
c6cd780ab5 Remove funky merge artifact 2022-03-06 18:26:02 +11:00
Vera Aguilera Puerto
023f845c48 SpriteComponent exception specifies failing RSI path, if any. 2022-03-03 21:29:01 +01:00
Vera Aguilera Puerto
5e977da9bc Fix BaseServer.Shutdown bug when not specifying a reason.
If a shutdown was requested before the main loop had been started, it would only work if the reason was non-null. This is because `string? _shutdownReason` essentially acts as a shutdown request flag with its nullability.
2022-03-03 15:41:44 +01:00
metalgearsloth
fa1de04df7 Version: 0.8.67 2022-03-03 21:18:00 +11:00
metalgearsloth
33251222cd EntityLookup as a system (#2573) 2022-03-03 21:17:01 +11:00
Kara D
70c1e8680f Version: 0.8.66 2022-03-01 15:06:19 -07:00
Kara D
0d214769e6 vs2022 fix 2022-03-01 15:05:49 -07:00
Paul
495bbe891a obsoletes serhooks 2022-03-01 21:49:24 +01:00
Rember
5f68f569c3 BaseContainer.Insert() will now reset the entity's rotation after res… (#2576) 2022-03-01 23:23:56 +11:00
Leon Friedrich
52c883cb1f Fix lsmap and lsgrid (#2574) 2022-03-01 20:20:03 +11:00
metalgearsloth
4b20bae597 RobustUnitTest tweaks (#2568) 2022-03-01 13:35:32 +11:00
Leon Friedrich
64ff046ceb loadmap command tweak (#2572)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-02-28 21:17:58 +11:00
Kara D
5f2566a97d Version: 0.8.65 2022-02-27 12:59:54 -07:00
Kara D
c3735d1d5e vs2022 moment 2022-02-27 12:59:25 -07:00
metalgearsloth
749e547773 Version: 0.8.64 2022-02-28 00:45:53 +11:00
metalgearsloth
af8a010f43 Optimise PVS cangetcompstate (#2560) 2022-02-28 00:45:16 +11:00
metalgearsloth
a8a29e814f Allow content to override occlusion directions (#2528) 2022-02-27 23:15:45 +11:00
metalgearsloth
c3cb5406f6 Fix culling disabled (#2485)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-02-27 22:59:36 +11:00
mirrorcult
73f26d93ca Merge pull request #2565 from ElectroJr/mapping-actions 2022-02-26 20:06:48 -07:00
metalgearsloth
5e86a99060 Version: 0.8.63 2022-02-27 13:00:41 +11:00
Paul Ritter
ce9070b966 changes pvs chunkorder to use a tree-structure, should fix children being sent without parents (#2562)
Co-authored-by: Paul Ritter <ritter.paul1@gmail.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-02-27 13:00:10 +11:00
Vera Aguilera Puerto
aa5bcefaf2 Add System.Threading.Monitor (lock keyword) to sandbox whitelist. 2022-02-26 16:50:41 +01:00
ElectroJr
2df267fc28 Merge remote-tracking branch 'upstream/master' into mapping-actions 2022-02-24 04:13:45 +13:00
ElectroJr
306fcce337 remove todo 2022-02-24 04:05:04 +13:00
ElectroJr
3683b66ef8 Allow SpriteSpecifier to load from entity prototype 2022-02-23 23:37:05 +13:00
Acruid
08a52fb892 MapChunk Cleanup (#2555)
* All IPhysShapes now expose a property to get the local AABB.

* Removed IMapChunk. It's internal, we only have 1 implementation in the engine, no need for abstraction, and removing it helps perf.

* Cleaned up issues in MapChunk file.

* Encapsulate _tiles access inside MapChunk.

* Remove IEnumerable<TileRef> from MapChunk.

* Remove CollidesWithChunk

* Move CalcWorldAABB and RegenerateCollision from MapChunk to MapGrid.
Remove MapChunk.GridId.

* Removed MapChunk.GetAllTiles

* Removed the terrible mocked unit tests.

* Moved the GetTileRef functions from MapChunk to MapGrid.

* Add an event raised on MapChunk when a tile is modified.
Completely remove the IMapGrid dependency from MapChunk.

* Fix bug where you cannot change the tile damage of a tile.
2022-02-21 20:49:30 -08:00
Pieter-Jan Briers
fd3c54b373 Seal some classes. 2022-02-21 14:02:34 +01:00
Pieter-Jan Briers
adee05b009 Make client start with non-seekable streams.
Not marking #2439 as fixed yet due to lack of thorough testing.
2022-02-21 11:23:37 +01:00
Pieter-Jan Briers
a66d40eb19 CVar to force ResourceManager to provide seekability for streams.
To help with #2439
2022-02-21 11:23:37 +01:00
metalgearsloth
d065a96e01 Don't serialize grid fixtures (#2477) 2022-02-21 20:15:30 +11:00
Kara D
ef7709aa78 Version: 0.8.62 2022-02-20 19:34:25 -07:00
Paul Ritter
305b330075 bandaid 2022-02-21 02:30:03 +01:00
Acruid
bec4297ce1 Move Map Pause data from MapManager to MapComponent. (#2543)
* Encapsulated existing _pausedMaps access in MapManager.Pause.
Added more unit tests.

* Moved the MapPaused flag from MapManager.Pause to MapComponent.

* Moved the MapPreInit flag from MapManager.Pause to MapComponent.

* Changed visibility so content can't access the flags directly.

* It's not the code that is wrong, it's the tests that are wrong!

* Removed completely obsolete bookkeeping event.
2022-02-20 13:36:45 -08:00
metalgearsloth
18b21b3d60 Version: 0.8.61 2022-02-20 17:44:49 +11:00
mirrorcult
9b263417b9 Merge pull request #2541 from metalgearsloth/2022-02-14_1 2022-02-19 12:33:46 -07:00
Acruid
13da0a7925 Adds command buffer to client, and input command injection (#2538)
Adds the command buffer to the console.
adds wait <ticks> command to console.
Adds the `incmd` command to inject input commands directly into the simulation, bypassing the frontend.
Removes client side permission check for debug builds.
2022-02-18 19:27:38 -08:00
Kara D
bb28db2412 Version: 0.8.60 2022-02-18 15:50:15 -07:00
mirrorcult
489d150ae0 Merge pull request #2558 from PaulRitter/2022_02_18_real_pvs_hours 2022-02-18 15:49:20 -07:00
Paul Ritter
077dbaf933 yo this slaps 2022-02-18 20:49:03 +01:00
Paul Ritter
26f83ac7a2 bored trainride 2022-02-17 15:08:55 +01:00
metalgearsloth
822009b429 Version: 0.8.59 2022-02-17 18:05:50 +11:00
Leon Friedrich
e07a4e516c Add random vector functions to IRobustRandom (#2551) 2022-02-17 18:05:12 +11:00
metalgearsloth
9ec38b5538 Optimise PVS recursion (#2524) 2022-02-17 18:03:14 +11:00
metalgearsloth
97da770978 More physics ECS (#2529) 2022-02-17 17:52:27 +11:00
metalgearsloth
3acbc8235d Funny struct enumerator for xform kids Part 2 (#2492) 2022-02-17 17:19:08 +11:00
Sam Weaver
a32359d5d4 Only include shadow casting lights in the "max lights per scene" count (#2446)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2022-02-17 14:24:36 +11:00
Paul
78fd39aee2 could fix a racecondition? maybe? 2022-02-16 23:55:04 +01:00
Kara D
fca5c14c67 Version: 0.8.58 2022-02-16 15:53:10 -07:00
Kara D
f60e3a14ef Fix VS2022 17.1 issue 2022-02-16 15:49:19 -07:00
Leon Friedrich
503a7032f9 Hopefully fix appearance component mispredict reconciliation (#2460) 2022-02-16 23:26:13 +01:00
metalgearsloth
918bbd3f01 Version: 0.8.57 2022-02-17 01:06:34 +11:00
Leon Friedrich
a1441d5051 Properly support sprite layer transforms. (#2533) 2022-02-17 00:06:14 +11:00
Leon Friedrich
58d6189c40 Allow sprite layer data to be set using PrototypeLayerData. (#2442) 2022-02-16 19:37:40 +11:00
Leon Friedrich
58defed1d2 Fix InteractionOutline 2: Electric boogaloo (#2511)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-02-16 18:32:40 +11:00
Paul
27a94384d0 v0.8.56 2022-02-15 18:16:07 +01:00
Paul Ritter
4b8f5815db pvs caching (#2547)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2022-02-15 18:14:44 +01:00
metalgearsloth
d830eef435 Version: 0.8.55 2022-02-15 21:16:35 +11:00
metalgearsloth
e7c4bf7341 Don't use worldbounds for PVS (#2473) 2022-02-15 21:07:41 +11:00
ike709
162e646404 Fix a weird issue with config (#2546)
Co-authored-by: ike709 <ike709@github.com>
2022-02-15 20:57:32 +11:00
metalgearsloth
93049fcacf More transform optimisations (#2519) 2022-02-15 20:43:49 +11:00
metalgearsloth
5b90db4beb inline 2022-02-14 18:30:33 +11:00
metalgearsloth
7692ff736b Some more ECS stuff
- Proxy methods on EntityManager
- Transform system stuff
2022-02-14 18:24:52 +11:00
Kara D
f25ad8ece9 Version: 0.8.54 2022-02-13 20:25:00 -07:00
mirrorcult
1aaf3b9250 Merge pull request #2521 from ElectroJr/public-AppearanceSystem 2022-02-13 20:24:23 -07:00
mirrorcult
11f6cff6df Merge pull request #2539 from Acruid/vv_fix_entName 2022-02-13 20:01:53 -07:00
mirrorcult
c2ea57c95a Merge pull request #2503 from Ygg01/linguini-multiline-error-fix 2022-02-13 20:00:47 -07:00
Ygg01
f61ae5da6b Update Linguini and line info in errors 2022-02-14 01:50:11 +01:00
Acruid
8ae9a5f2da Fix a typo where setting the description of an entity in VV sets the name. 2022-02-13 16:35:51 -08:00
Ygg01
3f7e89e006 Merge remote-tracking branch 'origin/master' into linguini-multiline-error-fix 2022-02-13 23:35:28 +01:00
Ygg01
cee4e4d62e Enable Fluent logs for only .ftl files (#2532) 2022-02-12 21:59:08 +11:00
metalgearsloth
14a3783760 Version: 0.8.53 2022-02-12 15:56:21 +11:00
mirrorcult
b4607f7b1f Draw effects below FOV (#2534) 2022-02-12 15:54:50 +11:00
Acruid
5a28c16cae Map Pausing Fixes (#2520) 2022-02-12 15:54:03 +11:00
ElectroJr
9e8bf861ea Merge remote-tracking branch 'upstream/master' into public-AppearanceSystem 2022-02-11 20:43:19 +13:00
ElectroJr
4cfb9210d0 Make AppearanceSystem public 2022-02-09 04:55:31 +13:00
Ygg01
681f77a796 Change newline append 2022-02-04 02:01:52 +01:00
Ygg01
2a7f1cbf48 Ensure that tests work regardless of platform 2022-02-03 04:06:53 +01:00
Ygg01
c4e63cfdc7 Fix multiline errors, add some tests 2022-02-03 01:43:45 +01:00
1759 changed files with 133477 additions and 53197 deletions

6
.github/CODEOWNERS vendored
View File

@@ -1,9 +1,7 @@
# Last match in file takes precedence.
# Ping for all PRs
* @Acruid @PJB3005 @Silvertorch5
/Robust.*/Audio/Midi/ @Zumorica
* @Acruid @PJB3005 @ZoldorfTheWizard
/Robust.Client.NameGenerator @PaulRitter
/Robust.Client.Injectors @PaulRitter
@@ -11,7 +9,7 @@
/Robust.Analyzers @PaulRitter
/Robust.*/GameStates @PaulRitter
/Robust.Shared/Analyzers @PaulRitter
/Robust.*/Serialization @PaulRitter
/Robust.*/Serialization @PaulRitter @DrSmugleaf
/Robust.*/Prototypes @PaulRitter
/Robust.Shared/GameObjects/ComponentDependencies @PaulRitter
/Robust.*/Containers @PaulRitter

41
.github/workflows/benchmarks.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Benchmarks
on:
workflow_dispatch:
schedule:
- cron: '0 5 * * *'
push:
tags:
- 'v*'
concurrency: benchmarks
jobs:
benchmark:
name: Run Benchmarks
runs-on: ubuntu-latest
steps:
- name: Run script on centcomm
uses: appleboy/ssh-action@master
with:
host: centcomm.spacestation14.io
username: robust-benchmark-runner
key: ${{ secrets.CENTCOMM_ROBUST_BENCHMARK_RUNNER_KEY }}
command_timeout: 100000m
script: |
mkdir benchmark_run_${{ github.sha }}
cd benchmark_run_${{ github.sha }}
git clone https://github.com/space-wizards/RobustToolbox.git repo_dir --recursive
cd repo_dir
git checkout ${{ github.sha }}
cd Robust.Benchmarks
dotnet restore
export ROBUST_BENCHMARKS_ENABLE_SQL=1
export ROBUST_BENCHMARKS_SQL_ADDRESS="${{ secrets.BENCHMARKS_WRITE_ADDRESS }}"
export ROBUST_BENCHMARKS_SQL_PORT="${{ secrets.BENCHMARKS_WRITE_PORT }}"
export ROBUST_BENCHMARKS_SQL_USER="${{ secrets.BENCHMARKS_WRITE_USER }}"
export ROBUST_BENCHMARKS_SQL_PASSWORD="${{ secrets.BENCHMARKS_WRITE_PASSWORD }}"
export ROBUST_BENCHMARKS_SQL_DATABASE="benchmarks"
export GITHUB_SHA="${{ github.sha }}"
dotnet run --filter '*' --configuration Release
cd ../../..
rm -rf benchmark_run_${{ github.sha }}

34
.github/workflows/build-docfx.yml vendored Normal file
View File

@@ -0,0 +1,34 @@
name: Build & Publish DocFX
on:
schedule:
- cron: "0 0 * * 0"
jobs:
docfx:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 7.0.x
- name: Install dependencies
run: dotnet restore
- name: Build Project
run: dotnet build --no-restore /p:WarningsAsErrors=nullable
- name: Build DocFX
uses: nikeee/docfx-action@v1.0.0
with:
args: Robust.Docfx/docfx.json
- name: Publish Docfx Documentation on GitHub Pages
uses: maxheld83/ghpages@master
env:
BUILD_DIR: Robust.Docfx/_robust-site
GH_PAT: ${{ secrets.GH_PAT }}

View File

@@ -22,10 +22,12 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.100
dotnet-version: 7.0.x
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore /p:WarningsAsErrors=nullable
- name: Test Engine
run: dotnet test --no-build Robust.UnitTesting/Robust.UnitTesting.csproj -v n
run: dotnet test --no-build Robust.UnitTesting/Robust.UnitTesting.csproj -- NUnit.ConsoleOut=0

View File

@@ -42,7 +42,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.100
dotnet-version: 7.0.x
- name: Build
run: dotnet build

View File

@@ -23,7 +23,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.100
dotnet-version: 7.0.x
- name: Package client
run: Tools/package_client_build.py -p windows mac linux

View File

@@ -21,7 +21,7 @@ jobs:
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.100
dotnet-version: 7.0.x
- name: Disable submodule autoupdate
run: touch BuildChecker/DISABLE_SUBMODULE_AUTOUPDATE
@@ -34,7 +34,7 @@ jobs:
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
run: dotnet build --configuration Tools --no-restore
- name: Content.Tests
run: dotnet test --no-build Content.Tests/Content.Tests.csproj -v n
- name: Content.IntegrationTests

2
.gitignore vendored
View File

@@ -76,3 +76,5 @@ MSBuild/Robust.Custom.targets
release/
Robust.Docfx/*-site
Robust.Docfx/api

3
.gitmodules vendored
View File

@@ -10,9 +10,6 @@
[submodule "Robust.LoaderApi"]
path = Robust.LoaderApi
url = https://github.com/space-wizards/Robust.LoaderApi.git
[submodule "ManagedHttpListener"]
path = ManagedHttpListener
url = https://github.com/space-wizards/ManagedHttpListener.git
[submodule "cefglue"]
path = cefglue
url = https://github.com/space-wizards/cefglue.git

View File

@@ -1,7 +1,3 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<Import Project="..\MSBuild\Robust.Engine.props" />
</Project>

View File

@@ -1,18 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AssemblyName>SpaceWizards.Lidgren.Network</AssemblyName>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<DefaultItemExcludes>Lidgren.Network/**/*</DefaultItemExcludes>
<DefineConstants>$(DefineConstants);USE_RELEASE_STATISTICS</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<SkipRobustAnalyzer>true</SkipRobustAnalyzer>
</PropertyGroup>
<ItemGroup>
<Compile Include="Lidgren.Network\Lidgren.Network\**\*.cs">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>
<Compile Remove="Lidgren.Network\Lidgren.Network\obj\**\*.cs" />
</ItemGroup>
<Import Project="../MSBuild/Robust.Properties.targets" />
</Project>

View File

@@ -0,0 +1,5 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)\..\Robust.Shared.CompNetworkGenerator\Robust.Shared.CompNetworkGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,37 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Build configurations -->
<PropertyGroup>
<!-- Avoid SDK defining DEBUG/RELEASE/DEBUGOPT/TOOLS itself. -->
<DisableImplicitConfigurationDefines>true</DisableImplicitConfigurationDefines>
<!-- Project configurations -->
<Configurations>Debug;Release;Tools;DebugOpt</Configurations>
<Platforms>AnyCPU</Platforms>
</PropertyGroup>
<!-- Debug configuration: asserts, tools, no optimizations -->
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DebugSymbols Condition="'$(DebugSymbols)' == ''">true</DebugSymbols>
<Optimize Condition="'$(Optimize)' == ''">false</Optimize>
<RobustToolsBuild Condition="'$(RobustToolsBuild)' == ''">true</RobustToolsBuild>
<DefineConstants>DEBUG;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<!-- DebugOpt configuration: asserts, tools, optimizations -->
<PropertyGroup Condition="'$(Configuration)' == 'DebugOpt'">
<DebugSymbols Condition="'$(DebugSymbols)' == ''">true</DebugSymbols>
<Optimize Condition="'$(Optimize)' == ''">true</Optimize>
<RobustToolsBuild Condition="'$(RobustToolsBuild)' == ''">true</RobustToolsBuild>
<DefineConstants>DEBUG;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<!-- Tools configuration: no asserts, tools, optimizations -->
<PropertyGroup Condition="'$(Configuration)' == 'Tools'">
<DebugSymbols Condition="'$(DebugSymbols)' == ''">true</DebugSymbols>
<Optimize Condition="'$(Optimize)' == ''">true</Optimize>
<RobustToolsBuild Condition="'$(RobustToolsBuild)' == ''">true</RobustToolsBuild>
</PropertyGroup>
<!-- Release configuration: no asserts, no tools, optimizations -->
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<Optimize Condition="'$(Optimize)' == ''">true</Optimize>
<RobustToolsBuild Condition="'$(RobustToolsBuild)' == ''">false</RobustToolsBuild>
<DefineConstants>RELEASE;$(DefineConstants)</DefineConstants>
</PropertyGroup>
</Project>

View File

@@ -20,10 +20,19 @@
<PropertyGroup Condition="'$(FullRelease)' == 'True'">
<DefineConstants>$(DefineConstants);FULL_RELEASE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<PropertyGroup Condition="'$(FullRelease)' != 'True'">
<DefineConstants>$(DefineConstants);DEVELOPMENT</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release' Or '$(Configuration)' == 'Tools'">
<DefineConstants>$(DefineConstants);EXCEPTION_TOLERANCE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(EnableClientScripting)' == 'True'">
<DefineConstants>$(DefineConstants);CLIENT_SCRIPTING</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(UseSystemSqlite)' == 'True'">
<DefineConstants>$(DefineConstants);USE_SYSTEM_SQLITE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(RobustToolsBuild)' == 'true'">
<DefineConstants>$(DefineConstants);TOOLS</DefineConstants>
</PropertyGroup>
</Project>

View File

@@ -1,4 +1,4 @@
<Project>
<!-- This file automatically reset by Tools/version.py -->
<PropertyGroup><Version>0.8.52</Version></PropertyGroup>
</Project>
<Project>
<!-- This file automatically reset by Tools/version.py -->

View File

@@ -1,8 +1,8 @@
<Project>
<!-- Engine-specific properties. Content should not use this file. -->
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>10</LangVersion>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>11</LangVersion>
<Nullable>enable</Nullable>
<WarningsAsErrors>nullable</WarningsAsErrors>
</PropertyGroup>

View File

@@ -0,0 +1,35 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- MSBuild hurts and I can't find a foolproof way to detect platform. -->
<PropertyGroup>
<OS Condition="'$(OS)' == ''">Windows_NT</OS>
</PropertyGroup>
<Choose>
<When Condition="'$(OS)' != 'Unix'">
<PropertyGroup>
<ActualOS>Windows</ActualOS>
</PropertyGroup>
</When>
<!-- Folders that *probably* only exist on MacOS and not Linux. -->
<When Condition="Exists('/Volumes') And Exists('/System') And Exists('/Library')" >
<PropertyGroup>
<ActualOS>MacOS</ActualOS>
</PropertyGroup>
</When>
<When Condition="$([MSBuild]::IsOSPlatform('FreeBSD'))">
<PropertyGroup>
<ActualOS>FreeBSD</ActualOS>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<ActualOS>Linux</ActualOS>
</PropertyGroup>
</Otherwise>
</Choose>
<PropertyGroup>
<TargetOS Condition="'$(TargetOS)' == ''">$(ActualOS)</TargetOS>
<Python>python3</Python>
<Python Condition="'$(ActualOS)' == 'Windows'">py -3</Python>
<UseSystemSqlite Condition="'$(TargetOS)' == 'FreeBSD'">True</UseSystemSqlite>
</PropertyGroup>
</Project>

View File

@@ -1,34 +1,28 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Properties for both engine and content. -->
<!-- Import this at the end of any project files in Robust and Content. -->
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
<Import Project="Robust.Custom.targets" Condition="Exists('Robust.Custom.targets')"/>
<!-- MSBuild hurts and I can't find a foolproof way to detect platform. -->
<!-- Configuration logic -->
<Import Project="Robust.Configurations.props" />
<!-- Some platform management logic -->
<Import Project="Robust.Platform.props" />
<PropertyGroup>
<OS Condition="'$(OS)' == ''">Windows_NT</OS>
</PropertyGroup>
<Choose>
<When Condition="'$(OS)' != 'Unix'">
<PropertyGroup>
<ActualOS>Windows</ActualOS>
</PropertyGroup>
</When>
<!-- Folders that *probably* only exist on MacOS and not Linux. -->
<When Condition="Exists('/Volumes') And Exists('/System') And Exists('/Library')" >
<PropertyGroup>
<ActualOS>MacOS</ActualOS>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<ActualOS>Linux</ActualOS>
</PropertyGroup>
</Otherwise>
</Choose>
<PropertyGroup>
<TargetOS Condition="'$(TargetOS)' == ''">$(ActualOS)</TargetOS>
<Python>python3</Python>
<Python Condition="'$(ActualOS)' == 'Windows'">py -3</Python>
<TargetFramework>net6.0</TargetFramework>
<EnableClientScripting>True</EnableClientScripting>
<!-- Client scripting is disabled on full release builds for security and size reasons. -->
<EnableClientScripting Condition="'$(FullRelease)' == 'True'">False</EnableClientScripting>
<EnableClientScripting>False</EnableClientScripting>
<!-- Client scripting is only enabled on tools builds for security and size reasons. -->
<EnableClientScripting Condition="'$(RobustToolsBuild)' == 'true'">True</EnableClientScripting>
</PropertyGroup>
<!-- built-in define constants -->
<Import Project="Robust.DefineConstants.targets" />
<!-- analyzer -->
<Import Project="Robust.Analyzers.targets" Condition="'$(SkipRobustAnalyzer)' != 'true'" />
</Project>

View File

@@ -19,10 +19,17 @@
<ProjectReference Include="$(MSBuildThisFileDirectory)\..\Robust.Client.Injectors\Robust.Client.Injectors.csproj" ReferenceOutputAssembly="false"/>
</ItemGroup>
<!-- XamlIL does not make use of special Robust configurations like DebugOpt. Convert these down. -->
<PropertyGroup>
<RobustInjectorsConfiguration>$(Configuration)</RobustInjectorsConfiguration>
<RobustInjectorsConfiguration Condition="'$(Configuration)' == 'DebugOpt'">Debug</RobustInjectorsConfiguration>
<RobustInjectorsConfiguration Condition="'$(Configuration)' == 'Tools'">Release</RobustInjectorsConfiguration>
</PropertyGroup>
<UsingTask
Condition="'$(_RobustUseExternalMSBuild)' != 'true' And $(DesignTimeBuild) != true"
TaskName="CompileRobustXamlTask"
AssemblyFile="$(MSBuildThisFileDirectory)\..\Robust.Client.Injectors\bin\$(Configuration)\netstandard2.0\Robust.Client.Injectors.dll"/>
AssemblyFile="$(MSBuildThisFileDirectory)\..\Robust.Client.Injectors\bin\$(RobustInjectorsConfiguration)\netstandard2.0\Robust.Client.Injectors.dll"/>
<Target
Name="CompileRobustXaml"
Condition="Exists('@(IntermediateAssembly)')"

View File

@@ -10,7 +10,6 @@
using System;
using System.Runtime.InteropServices;
using static OpenToolkit.GraphicsLibraryFramework.GLFWNative;
using static Robust.Shared.Utility.MarshalHelper;
namespace OpenToolkit.GraphicsLibraryFramework
{
@@ -211,7 +210,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// <seealso cref="GetVersion"/>
public static unsafe string GetVersionString()
{
return PtrToStringUTF8(glfwGetVersionString());
return Marshal.PtrToStringUTF8((IntPtr) glfwGetVersionString());
}
/// <summary>
@@ -272,7 +271,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
{
byte* desc;
var code = glfwGetError(&desc);
description = PtrToStringUTF8(desc);
description = Marshal.PtrToStringUTF8((IntPtr) desc);
return code;
}
@@ -590,7 +589,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe string GetMonitorName(Monitor* monitor)
{
return PtrToStringUTF8(glfwGetMonitorName(monitor));
return Marshal.PtrToStringUTF8((IntPtr) glfwGetMonitorName(monitor));
}
/// <summary>
@@ -902,7 +901,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe void WindowHint(WindowHintString hint, string value)
{
var ptr = StringToCoTaskMemUTF8(value);
var ptr = Marshal.StringToCoTaskMemUTF8(value);
try
{
@@ -1364,7 +1363,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe string GetKeyName(Keys key, int scanCode)
{
return PtrToStringUTF8(glfwGetKeyName(key, scanCode));
return Marshal.PtrToStringUTF8((IntPtr) glfwGetKeyName(key, scanCode));
}
/// <summary>
@@ -2278,7 +2277,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe string GetJoystickName(int jid)
{
return PtrToStringUTF8(glfwGetJoystickName(jid));
return Marshal.PtrToStringUTF8((IntPtr) glfwGetJoystickName(jid));
}
/// <summary>
@@ -2351,7 +2350,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe string GetJoystickGUID(int jid)
{
return PtrToStringUTF8(glfwGetJoystickGUID(jid));
return Marshal.PtrToStringUTF8((IntPtr) glfwGetJoystickGUID(jid));
}
/// <summary>
@@ -2509,7 +2508,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe bool UpdateGamepadMappings(string newMapping)
{
var ptr = StringToCoTaskMemUTF8(newMapping);
var ptr = Marshal.StringToCoTaskMemUTF8(newMapping);
try
{
return glfwUpdateGamepadMappings((byte*)ptr) == GLFW_TRUE;
@@ -2585,7 +2584,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe string GetGamepadName(int jid)
{
return PtrToStringUTF8(glfwGetGamepadName(jid));
return Marshal.PtrToStringUTF8((IntPtr) glfwGetGamepadName(jid));
}
/// <summary>
@@ -2854,7 +2853,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe bool ExtensionSupported(string extensionName)
{
var ptr = StringToCoTaskMemUTF8(extensionName);
var ptr = Marshal.StringToCoTaskMemUTF8(extensionName);
try
{
@@ -2893,7 +2892,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// <seealso cref="ExtensionSupported" />
public static unsafe IntPtr GetProcAddress(string procName)
{
var ptr = StringToCoTaskMemUTF8(procName);
var ptr = Marshal.StringToCoTaskMemUTF8(procName);
try
{
@@ -3085,7 +3084,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe Window* CreateWindow(int width, int height, string title, Monitor* monitor, Window* share)
{
var ptr = StringToCoTaskMemUTF8(title);
var ptr = Marshal.StringToCoTaskMemUTF8(title);
try
{
@@ -3306,7 +3305,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// <seealso cref="SetClipboardString"/>
public static unsafe string GetClipboardString(Window* window)
{
return PtrToStringUTF8(glfwGetClipboardString(window));
return Marshal.PtrToStringUTF8((IntPtr) glfwGetClipboardString(window));
}
/// <summary>
@@ -3917,7 +3916,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// <seealso cref="GetClipboardString"/>
public static unsafe void SetClipboardString(Window* window, string data)
{
var ptr = StringToCoTaskMemUTF8(data);
var ptr = Marshal.StringToCoTaskMemUTF8(data);
try
{
@@ -4751,7 +4750,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// </remarks>
public static unsafe void SetWindowTitle(Window* window, string title)
{
var ptr = StringToCoTaskMemUTF8(title);
var ptr = Marshal.StringToCoTaskMemUTF8(title);
try
{
@@ -5340,7 +5339,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
var array = new string[count];
for (var i = 0; i < count; i++)
{
array[i] = PtrToStringUTF8(ptr[i]);
array[i] = Marshal.PtrToStringUTF8((IntPtr) ptr[i]);
}
return array;
@@ -5386,7 +5385,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
/// <returns>The address of the function, or <c>null</c> if an error occurred.</returns>
public static unsafe IntPtr GetInstanceProcAddress(VkHandle instance, string procName)
{
var ptr = StringToCoTaskMemUTF8(procName);
var ptr = Marshal.StringToCoTaskMemUTF8(procName);
try
{

View File

@@ -25,7 +25,7 @@ namespace OpenToolkit.GraphicsLibraryFramework
}
string rName = null;
if (OperatingSystem.IsLinux()) rName = "libglfw.so.3";
if (OperatingSystem.IsLinux() || OperatingSystem.IsFreeBSD()) rName = "libglfw.so.3";
else if (OperatingSystem.IsMacOS()) rName = "libglfw.3.dylib";
if ((rName != null) && NativeLibrary.TryLoad(rName, assembly, path, out var handle))

View File

@@ -1,20 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\MSBuild\Robust.Properties.targets" />
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>7.3</LangVersion>
<LangVersion>9.0</LangVersion>
<SkipRobustAnalyzer>true</SkipRobustAnalyzer>
</PropertyGroup>
<Import Project="..\MSBuild\Robust.DefineConstants.targets" />
<ItemGroup>
<PackageReference Condition="'$(TargetFramework)' == 'net472'" Include="System.Memory" Version="4.5.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Robust.Shared\Robust.Shared.csproj" />
</ItemGroup>
<Import Project="..\MSBuild\Robust.Properties.targets" />
</Project>

View File

@@ -18,7 +18,7 @@ We are happy to accept contributions from anybody. Get in Discord or IRC if you
## Building
This repository is the **engine** part of SS14. It's the base engine all SS14 servers will be built on. As such, it does not start on its own: it needs the [content repo](https://github.com/space-wizards/space-station-14). Think of Robust Toolbox as BYOND in the context of Spacestation 13.
This repository is the **engine** part of SS14. It's the base engine all SS14 servers will be built on. As such, it does not start on its own: it needs the [content repo](https://github.com/space-wizards/space-station-14). Think of Robust Toolbox as BYOND in the context of Space Station 13.
## Legal Info

2765
RELEASE-NOTES.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1546,6 +1546,31 @@
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
- name: FastNoise
license: |
MIT License
Copyright(c) 2020 Jordan Peck (jordan.me2@gmail.com)
Copyright(c) 2020 Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- name: OpenAL soft
license: |
GNU LIBRARY GENERAL PUBLIC LICENSE

View File

@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

View File

@@ -0,0 +1,34 @@
- type: entity
id: debugRotation
abstract: true
suffix: DEBUG
components:
- type: Sprite
netsync: false
visible: true
sprite: debugRotation.rsi
state: direction1
- type: entity
id: debugRotation1
parent: debugRotation
name: dbg_rotation1
components:
- type: Sprite
state: direction1
- type: entity
id: debugRotation4
parent: debugRotation
name: dbg_rotation4
components:
- type: Sprite
state: direction4
- type: entity
id: debugRotationTex
parent: debugRotation
name: dbg_rotationTex
components:
- type: Sprite
state: direction1

View File

@@ -0,0 +1,44 @@
- type: uiTheme
id: Default
path: /Textures/Interface/Default/
colors:
# Root
rootBackground: "#000000"
# Windows
windowBackground: "#111111"
windowBorder: "#444444"
windowHeader: "#001e3d"
windowCloseButton: "#FFFFFF"
windowCloseButtonHover: "#FF7F7F"
windowCloseButtonPressed: "#FF0000"
# Scrollbars
scrollBarDefault: "#80808059"
scrollBarHovered: "#8C8C8C59"
scrollBarGrabbed: "#8C8C8C59"
# Buttons
buttonBackground: "#171717"
buttonBackgroundHovered: "#272727"
buttonBackgroundPressed: "#173717"
buttonBorder: "#444444"
buttonBorderHovered: "#444444"
buttonBorderPressed: "#447044"
buttonBackgroundDisabled: "#333333"
buttonBorderDisabled: "#222222"
# LineEdit
lineEditUneditableText: "#444444"
lineEditPlaceholderText: "#7d7d7d"
lineEditBackground: "#000000"
lineEditBorder: "#444444"
# TabContainer
tabContainerBackground: "#000000"
tabContainerBorder: "#444444"
tabContainerActiveTabBackground: "#173717"
tabContainerActiveTabBorder: "#447044"
tabContainerInactiveTabBackground: "#171717"
tabContainerInactiveTabBorder: "#444444"

View File

@@ -0,0 +1,63 @@
# Used internally by the THE() function.
zzzz-the = { PROPER($ent) ->
*[false] the { $ent }
[true] { $ent }
}
# Used internally by the SUBJECT() function.
zzzz-subject-pronoun = { GENDER($ent) ->
[male] he
[female] she
[epicene] they
*[neuter] it
}
# Used internally by the OBJECT() function.
zzzz-object-pronoun = { GENDER($ent) ->
[male] him
[female] her
[epicene] them
*[neuter] it
}
# Used internally by the POSS-PRONOUN() function.
zzzz-possessive-pronoun = { GENDER($ent) ->
[male] his
[female] hers
[epicene] theirs
*[neuter] its
}
# Used internally by the POSS-ADJ() function.
zzzz-possessive-adjective = { GENDER($ent) ->
[male] his
[female] her
[epicene] their
*[neuter] its
}
# Used internally by the REFLEXIVE() function.
zzzz-reflexive-pronoun = { GENDER($ent) ->
[male] himself
[female] herself
[epicene] themselves
*[neuter] itself
}
# Used internally by the CONJUGATE-BE() function.
zzzz-conjugate-be = { GENDER($ent) ->
[epicene] are
*[other] is
}
# Used internally by the CONJUGATE-HAVE() function.
zzzz-conjugate-have = { GENDER($ent) ->
[epicene] have
*[other] has
}
# Used internally by the CONJUGATE-BASIC() function.
zzzz-conjugate-basic = { GENDER($ent) ->
[epicene] { $first }
*[other] { $second }
}

View File

@@ -0,0 +1,16 @@
# Loc strings for various entity state & client-side PVS related commands
cmd-reset-ent-help = Usage: resetent <Entity UID>
cmd-reset-ent-desc = Reset an entity to the most recently received server state. This will also reset entities that have been detached to null-space.
cmd-reset-all-ents-help = Usage: resetallents
cmd-reset-all-ents-desc = Resets all entities to the most recently received server state. This only impacts entities that have not been detached to null-space.
cmd-detach-ent-help = Usage: detachent <Entity UID>
cmd-detach-ent-desc = Detach an entity to null-space, as if it had left PVS range.
cmd-local-delete-help = Usage: localdelete <Entity UID>
cmd-local-delete-desc = Deletes an entity. Unlike the normal delete command, this is CLIENT-SIDE. Unless the entity is a client-side entity, this will likely cause errors.
cmd-full-state-reset-help = Usage: fullstatereset
cmd-full-state-reset-desc = Discards any entity state information and requests a full-state from the server.

View File

@@ -0,0 +1,563 @@
### Localization for engine console commands
## generic command errors
cmd-invalid-arg-number-error = Invalid number of arguments.
cmd-parse-failure-integer = {$arg} is not a valid integer.
cmd-parse-failure-float = {$arg} is not a valid float.
cmd-parse-failure-bool = {$arg} is not a valid bool.
cmd-parse-failure-uid = {$arg} is not a valid entity UID.
cmd-parse-failure-mapid = {$arg} is not a valid MapId.
cmd-parse-failure-entity-exist = UID {$arg} does not correspond to an existing entity.
cmd-error-file-not-found = Could not find file: {$file}.
cmd-error-dir-not-found = Could not find directory: {$dir}.
cmd-failure-no-attached-entity = There is no entity attached to this shell.
## 'help' command
cmd-oldhelp-desc = Display general help or help text for a specific command
cmd-oldhelp-help = Usage: help [command name]
When no command name is provided, displays general-purpose help text. If a command name is provided, displays help text for that command.
cmd-oldhelp-no-args = To display help for a specific command, write 'help <command>'. To list all available commands, write 'list'. To search for commands, use 'list <filter>'.
cmd-oldhelp-unknown = Unknown command: { $command }
cmd-oldhelp-top = { $command } - { $description }
cmd-oldhelp-invalid-args = Invalid amount of arguments.
cmd-oldhelp-arg-cmdname = [command name]
## 'cvar' command
cmd-cvar-desc = Gets or sets a CVar.
cmd-cvar-help = Usage: cvar <name | ?> [value]
If a value is passed, the value is parsed and stored as the new value of the CVar.
If not, the current value of the CVar is displayed.
Use 'cvar ?' to get a list of all registered CVars.
cmd-cvar-invalid-args = Must provide exactly one or two arguments.
cmd-cvar-not-registered = CVar '{ $cvar }' is not registered. Use 'cvar ?' to get a list of all registered CVars.
cmd-cvar-parse-error = Input value is in incorrect format for type { $type }
cmd-cvar-compl-list = List available CVars
cmd-cvar-arg-name = <name | ?>
cmd-cvar-value-hidden = <value hidden>
## 'list' command
cmd-list-desc = Lists available commands, with optional search filter
cmd-list-help = Usage: list [filter]
Lists all available commands. If an argument is provided, it will be used to filter commands by name.
cmd-list-heading = SIDE NAME DESC{"\u000A"}-------------------------{"\u000A"}
cmd-list-arg-filter = [filter]
## '>' command, aka remote exec
cmd-remoteexec-desc = Executes server-side commands
cmd-remoteexec-help = Usage: > <command> [arg] [arg] [arg...]
Executes a command on the server. This is necessary if a command with the same name exists on the client, as simply running the command would run the client command first.
## 'gc' command
cmd-gc-desc = Run the GC (Garbage Collector)
cmd-gc-help = Usage: gc [generation]
Uses GC.Collect() to execute the Garbage Collector.
If an argument is provided, it is parsed as a GC generation number and GC.Collect(int) is used.
Use the 'gfc' command to do an LOH-compacting full GC.
cmd-gc-failed-parse = Failed to parse argument.
cmd-gc-arg-generation = [generation]
## 'gcf' command
cmd-gcf-desc = Run the GC, fully, compacting LOH and everything.
cmd-gcf-help = Usage: gcf
Does a full GC.Collect(2, GCCollectionMode.Forced, true, true) while also compacting LOH.
This will probably lock up for hundreds of milliseconds, be warned.
## 'gc_mode' command
cmd-gc_mode-desc = Change/Read the GC Latency mode
cmd-gc_mode-help = Usage: gc_mode [type]
If no argument is provided, returns the current GC latency mode.
If an argument is passed, it is parsed as GCLatencyMode and set as the GC latency mode.
cmd-gc_mode-current = current gc latency mode: { $prevMode }
cmd-gc_mode-possible = possible modes:
cmd-gc_mode-option = - { $mode }
cmd-gc_mode-unknown = unknown gc latency mode: { $arg }
cmd-gc_mode-attempt = attempting gc latency mode change: { $prevMode } -> { $mode }
cmd-gc_mode-result = resulting gc latency mode: { $mode }
cmd-gc_mode-arg-type = [type]
## 'mem' command
cmd-mem-desc = Prints managed memory info
cmd-mem-help = Usage: mem
cmd-mem-report = Heap Size: { TOSTRING($heapSize, "N0") }
Total Allocated: { TOSTRING($totalAllocated, "N0") }
## 'physics' command
cmd-physics-overlay = {$overlay} is not a recognised overlay
## 'lsasm' command
cmd-lsasm-desc = Lists loaded assemblies by load context
cmd-lsasm-help = Usage: lsasm
## 'exec' command
cmd-exec-desc = Executes a script file from the game's writeable user data
cmd-exec-help = Usage: exec <fileName>
Each line in the file is executed as a single command, unless it starts with a #
cmd-exec-arg-filename = <fileName>
## 'dump_net_comps' command
cmd-dump_net_comps-desc = Prints the table of networked components.
cmd-dump_net_comps-help = Usage: dump_net-comps
cmd-dump_net_comps-error-writeable = Registration still writeable, network ids have not been generated.
cmd-dump_net_comps-header = Networked Component Registrations:
## 'dump_event_tables' command
cmd-dump_event_tables-desc = Prints directed event tables for an entity.
cmd-dump_event_tables-help = Usage: dump_event_tables <entityUid>
cmd-dump_event_tables-missing-arg-entity = Missing entity argument
cmd-dump_event_tables-error-entity = Invalid entity
cmd-dump_event_tables-arg-entity = <entityUid>
## 'monitor' command
cmd-monitor-desc = Toggles a debug monitor in the F3 menu.
cmd-monitor-help = Usage: monitor <name>
Possible monitors are: { $monitors }
You can also use the special values "-all" and "+all" to hide or show all monitors, respectively.
cmd-monitor-arg-monitor = <monitor>
cmd-monitor-invalid-name = Invalid monitor name
cmd-monitor-arg-count = Missing monitor argument
cmd-monitor-minus-all-hint = Hides all monitors
cmd-monitor-plus-all-hint = Shows all monitors
## 'setambientlight' command
cmd-set-ambient-light-desc = Allows you to set the ambient light for the specified map, in SRGB.
cmd-set-ambient-light-help = setambientlight [mapid] [r g b a]
cmd-set-ambient-light-parse = Unable to parse args as a byte values for a color.
## Mapping commands
cmd-savemap-desc = Serializes a map to disk. Will not save a post-init map unless forced.
cmd-savemap-help = savemap <MapID> <Path> [force]
cmd-savemap-not-exist = Target map does not exist.
cmd-savemap-init-warning = Attempted to save a post-init map without forcing the save.
cmd-savemap-attempt = Attempting to save map {$mapId} to {$path}.
cmd-savemap-success = Map successfully saved.
cmd-hint-savemap-id = <MapID>
cmd-hint-savemap-path = <Path>
cmd-hint-savemap-force = [bool]
cmd-loadmap-desc = Loads a map from disk into the game.
cmd-loadmap-help = loadmap <MapID> <Path> [x] [y] [rotation] [consistentUids]
cmd-loadmap-nullspace = You cannot load into map 0.
cmd-loadmap-exists = Map {$mapId} already exists.
cmd-loadmap-success = Map {$mapId} has been loaded from {$path}.
cmd-loadmap-error = An error occurred while loading map from {$path}.
cmd-hint-loadmap-x-position = [x-position]
cmd-hint-loadmap-y-position = [y-position]
cmd-hint-loadmap-rotation = [rotation]
cmd-hint-loadmap-uids = [float]
cmd-hint-savebp-id = <Grid EntityID>
## 'flushcookies' command
# Note: the flushcookies command is from Robust.Client.WebView, it's not in the main engine code.
cmd-flushcookies-desc = Flush CEF cookie storage to disk
cmd-flushcookies-help = This ensure cookies are properly saved to disk in the event of unclean shutdowns.
Note that the actual operation is asynchronous.
cmd-ldrsc-desc = Pre-caches a resource.
cmd-ldrsc-help = Usage: ldrsc <path> <type>
cmd-rldrsc-desc = Reloads a resource.
cmd-rldrsc-help = Usage: rldrsc <path> <type>
cmd-gridtc-desc = Gets the tile count of a grid.
cmd-gridtc-help = Usage: gridtc <gridId>
# Client-side commands
cmd-guidump-desc = Dump GUI tree to /guidump.txt in user data.
cmd-guidump-help = Usage: guidump
cmd-uitest-desc = Open a dummy UI testing window
cmd-uitest-help = Usage: uitest
## 'uitest2' command
cmd-uitest2-desc = Opens a UI control testing OS window
cmd-uitest2-help = Usage: uitest2 <tab>
cmd-uitest2-arg-tab = <tab>
cmd-uitest2-error-args = Expected at most one argument
cmd-uitest2-error-tab = Invalid tab: '{$value}'
cmd-uitest2-title = UITest2
cmd-setclipboard-desc = Sets the system clipboard
cmd-setclipboard-help = Usage: setclipboard <text>
cmd-getclipboard-desc = Gets the system clipboard
cmd-getclipboard-help = Usage: Getclipboard
cmd-togglelight-desc = Toggles light rendering.
cmd-togglelight-help = Usage: togglelight
cmd-togglefov-desc = Toggles fov for client.
cmd-togglefov-help = Usage: togglefov
cmd-togglehardfov-desc = Toggles hard fov for client. (for debugging space-station-14#2353)
cmd-togglehardfov-help = Usage: togglehardfov
cmd-toggleshadows-desc = Toggles shadow rendering.
cmd-toggleshadows-help = Usage: toggleshadows
cmd-togglelightbuf-desc = Toggles lighting rendering. This includes shadows but not FOV.
cmd-togglelightbuf-help = Usage: togglelightbuf
cmd-chunkinfo-desc = Gets info about a chunk under your mouse cursor.
cmd-chunkinfo-help = Usage: chunkinfo
cmd-rldshader-desc = Reloads all shaders.
cmd-rldshader-help = Usage: rldshader
cmd-cldbglyr-desc = Toggle fov and light debug layers.
cmd-cldbglyr-help= Usage: cldbglyr <layer>: Toggle <layer>
cldbglyr: Turn all Layers off
cmd-key-info-desc = Keys key info for a key.
cmd-key-info-help = Usage: keyinfo <Key>
## 'bind' command
cmd-bind-desc = Binds an input key combination to an input command.
cmd-bind-help = Usage: bind { cmd-bind-arg-key } { cmd-bind-arg-mode } { cmd-bind-arg-command }
Note that this DOES NOT automatically save bindings.
Use the 'svbind' command to save binding configuration.
cmd-bind-arg-key = <KeyName>
cmd-bind-arg-mode = <BindMode>
cmd-bind-arg-command = <InputCommand>
cmd-net-draw-interp-desc = Toggles the debug drawing of the network interpolation.
cmd-net-draw-interp-help = Usage: net_draw_interp
cmd-net-draw-interp-desc = Toggles the debug drawing of the network interpolation.
cmd-net-draw-interp-help = Usage: net_draw_interp
cmd-net-watch-ent-desc = Dumps all network updates for an EntityId to the console.
cmd-net-watch-ent-help = Usage: net_watchent <0|EntityUid>
cmd-net-refresh-desc = Requests a full server state.
cmd-net-refresh-help = Usage: net_refresh
cmd-net-entity-report-desc = Toggles the net entity report panel.
cmd-net-entity-report-help = Usage: net_entityreport
cmd-fill-desc = Fill up the console for debugging.
cmd-fill-help = Fills the console with some nonsense for debugging.
cmd-cls-desc = Clears the console.
cmd-cls-help = Clears the debug console of all messages.
cmd-sendgarbage-desc = Sends garbage to the server.
cmd-sendgarbage-help = The server will reply with 'no u'
cmd-loadgrid-desc = Loads a grid from a file into an existing map.
cmd-loadgrid-help = loadgrid <MapID> <Path> [x y] [rotation] [storeUids]
cmd-loc-desc = Prints the absolute location of the player's entity to console.
cmd-loc-help = loc
cmd-tpgrid-desc = Teleports a grid to a new location.
cmd-tpgrid-help = tpgrid <gridId> <X> <Y> [<MapId>]
cmd-rmgrid-desc = Removes a grid from a map. You cannot remove the default grid.
cmd-rmgrid-help = rmgrid <gridId>
cmd-mapinit-desc = Runs map init on a map.
cmd-mapinit-help = mapinit <mapID>
cmd-lsmap-desc = Lists maps.
cmd-lsmap-help = lsmap
cmd-lsgrid-desc = Lists grids.
cmd-lsgrid-help = lsgrid
cmd-addmap-desc = Adds a new empty map to the round. If the mapID already exists, this command does nothing.
cmd-addmap-help = addmap <mapID> [initialize]
cmd-rmmap-desc = Removes a map from the world. You cannot remove nullspace.
cmd-rmmap-help = rmmap <mapId>
cmd-savegrid-desc = Serializes a grid to disk.
cmd-savegrid-help = savegrid <gridID> <Path>
cmd-testbed-desc = Loads a physics testbed on the specified map.
cmd-testbed-help = testbed <mapid> <test>
cmd-saveconfig-desc = Saves the client configuration to the config file.
cmd-saveconfig-help = saveconfig
## 'flushcookies' command
# Note: the flushcookies command is from Robust.Client.WebView, it's not in the main engine code.
cmd-flushcookies-desc = Flush CEF cookie storage to disk
cmd-flushcookies-help = This ensure cookies are properly saved to disk in the event of unclean shutdowns.
Note that the actual operation is asynchronous.
## 'addcomp' command
cmd-addcomp-desc = Adds a component to an entity.
cmd-addcomp-help = addcomp <uid> <componentName>
cmd-addcompc-desc = Adds a component to an entity on the client.
cmd-addcompc-help = addcompc <uid> <componentName>
## 'rmcomp' command
cmd-rmcomp-desc = Removes a component from an entity.
cmd-rmcomp-help = rmcomp <uid> <componentName>
cmd-rmcompc-desc = Removes a component from an entity on the client.
cmd-rmcompc-help = rmcomp <uid> <componentName>
## 'addview' command
cmd-addview-desc = Allows you to subscribe to an entity's view for debugging purposes.
cmd-addview-help = addview <entityUid>
cmd-addviewc-desc = Allows you to subscribe to an entity's view for debugging purposes.
cmd-addviewc-help = addview <entityUid>
## 'removeview' command
cmd-removeview-desc = Allows you to unsubscribe to an entity's view for debugging purposes.
cmd-removeview-help = removeview <entityUid>
## 'loglevel' command
cmd-loglevel-desc = Changes the log level for a provided sawmill.
cmd-loglevel-help = Usage: loglevel <sawmill> <level>
sawmill: A label prefixing log messages. This is the one you're setting the level for.
level: The log level. Must match one of the values of the LogLevel enum.
cmd-testlog-desc = Writes a test log to a sawmill.
cmd-testlog-help = Usage: testlog <sawmill> <level> <message>
sawmill: A label prefixing the logged message.
level: The log level. Must match one of the values of the LogLevel enum.
message: The message to be logged. Wrap this in double quotes if you want to use spaces.
## 'vv' command
cmd-vv-desc = Opens View Variables.
cmd-vv-help = Usage: vv <entity ID|IoC interface name|SIoC interface name>
## 'showvelocities' command
cmd-showvelocities-desc = Displays your angular and linear velocities.
cmd-showvelocities-help = Usage: showvelocities
## 'setinputcontext' command
cmd-setinputcontext-desc = Sets the active input context.
cmd-setinputcontext-help = Usage: setinputcontext <context>
## 'forall' command
cmd-forall-desc = Runs a command over all entities with a given component.
cmd-forall-help = Usage: forall <bql query> do <command...>
## 'delete' command
cmd-delete-desc = Deletes the entity with the specified ID.
cmd-delete-help = delete <entity UID>
# System commands
cmd-showtime-desc = Shows the server time.
cmd-showtime-help = showtime
cmd-restart-desc = Gracefully restarts the server (not just the round).
cmd-restart-help = restart
cmd-shutdown-desc = Gracefully shuts down the server.
cmd-shutdown-help = shutdown
cmd-saveconfig-desc = Saves the server configuration to the config file.
cmd-saveconfig-help = saveconfig
cmd-netaudit-desc = Prints into about NetMsg security.
cmd-netaudit-help = netaudit
# Player commands
cmd-tp-desc = Teleports a player to any location in the round.
cmd-tp-help = tp <x> <y> [<mapID>]
cmd-tpto-desc = Teleports the current player or the specified players/entities to the location of the first player/entity.
cmd-tpto-help = tpto <username|uid> [username|uid]...
cmd-tpto-destination-hint = destination (uid or username)
cmd-tpto-victim-hint = entity to teleport (uid or username)
cmd-tpto-parse-error = Cant resolve entity or player: {$str}
cmd-listplayers-desc = Lists all players currently connected.
cmd-listplayers-help = listplayers
cmd-kick-desc = Kicks a connected player out of the server, disconnecting them.
cmd-kick-help = kick <PlayerIndex> [<Reason>]
# Spin command
cmd-spin-desc = Causes an entity to spin. Default entity is the attached player's parent.
cmd-spin-help = spin velocity [drag] [entityUid]
# Localization command
cmd-rldloc-desc = Reloads localization (client & server).
cmd-rldloc-help = Usage: rldloc
# Debug entity controls
cmd-spawn-desc = Spawns an entity with specific type.
cmd-spawn-help = spawn <prototype> OR spawn <prototype> <relative entity ID> OR spawn <prototype> <x> <y>
cmd-cspawn-desc = Spawns a client-side entity with specific type at your feet.
cmd-cspawn-help = cspawn <entity type>
cmd-scale-desc = Increases or decreases an entity's size naively.
cmd-scale-help = scale <entityUid> <float>
cmd-dumpentities-desc = Dump entity list.
cmd-dumpentities-help = Dumps entity list of UIDs and prototype.
cmd-getcomponentregistration-desc = Gets component registration information.
cmd-getcomponentregistration-help = Usage: getcomponentregistration <componentName>
cmd-showrays-desc = Toggles debug drawing of physics rays. An integer for <raylifetime> must be provided.
cmd-showrays-help = Usage: showrays <raylifetime>
cmd-disconnect-desc = Immediately disconnect from the server and go back to the main menu.
cmd-disconnect-help = Usage: disconnect
cmd-entfo-desc = Displays verbose diagnostics for an entity.
cmd-entfo-help = Usage: entfo <entityuid>
The entity UID can be prefixed with 'c' to convert it to a client entity UID.
cmd-fuck-desc = Throws an exception
cmd-fuck-help = Throws an exception
cmd-showpos-desc = Enables debug drawing over all entity positions in the game.
cmd-showpos-help = Usage: showpos
cmd-sggcell-desc = Lists entities on a snap grid cell.
cmd-sggcell-help = Usage: sggcell <gridID> <vector2i>\nThat vector2i param is in the form x<int>,y<int>.
cmd-overrideplayername-desc = Changes the name used when attempting to connect to the server.
cmd-overrideplayername-help = Usage: overrideplayername <name>
cmd-showanchored-desc = Shows anchored entities on a particular tile
cmd-showanchored-help = Usage: showanchored
cmd-dmetamem-desc = Dumps a type's members in a format suitable for the sandbox configuration file.
cmd-dmetamem-help = Usage: dmetamem <type>
cmd-dmetamem-desc = Displays chunk bounds for the purposes of rendering.
cmd-dmetamem-help = Usage: showchunkbb <type>
cmd-launchauth-desc = Load authentication tokens from launcher data to aid in testing of live servers.
cmd-launchauth-help = Usage: launchauth <account name>
cmd-lightbb-desc = Toggles whether to show light bounding boxes.
cmd-lightbb-help = Usage: lightbb
cmd-monitorinfo-desc = Monitors info
cmd-monitorinfo-help = Usage: monitorinfo <id>
cmd-setmonitor-desc = Set monitor
cmd-setmonitor-help = Usage: setmonitor <id>
cmd-physics-desc = Shows a debug physics overlay. The arg supplied specifies the overlay.
cmd-physics-help = Usage: physics <aabbs / com / contactnormals / contactpoints / distance / joints / shapeinfo / shapes>
cmd-hardquit-desc = Kills the game client instantly.
cmd-hardquit-help = Kills the game client instantly, leaving no traces. No telling the server goodbye.
cmd-quit-desc = Shuts down the game client gracefully.
cmd-quit-help = Properly shuts down the game client, notifying the connected server and such.
cmd-csi-desc = Opens a C# interactive console.
cmd-csi-help = Usage: csi
cmd-scsi-desc = Opens a C# interactive console on the server.
cmd-scsi-help = Usage: scsi
cmd-watch-desc = Opens a variable watch window.
cmd-watch-help = Usage: watch
cmd-showspritebb-desc = Toggle whether sprite bounds are shown
cmd-showspritebb-help = Usage: showspritebb
cmd-togglelookup-desc = Shows / hides entitylookup bounds via an overlay.
cmd-togglelookup-help = Usage: togglelookup
cmd-net_entityreport-desc = Toggles the net entity report panel.
cmd-net_entityreport-help = Usage: net_entityreport
cmd-net_refresh-desc = Requests a full server state.
cmd-net_refresh-help = Usage: net_refresh
cmd-net_graph-desc = Toggles the net statistics pannel.
cmd-net_graph-help = Usage: net_graph
cmd-net_watchent-desc = Dumps all network updates for an EntityId to the console.
cmd-net_watchent-help = Usage: net_watchent <0|EntityUid>
cmd-net_draw_interp-desc = Toggles the debug drawing of the network interpolation.
cmd-net_draw_interp-help = Usage: net_draw_interp <0|EntityUid>
cmd-vram-desc = Displays video memory usage statics by the game.
cmd-vram-help = Usage: vram
cmd-showislands-desc = Shows the current physics bodies involved in each physics island.
cmd-showislands-help = Usage: showislands
cmd-showgridnodes-desc = Shows the nodes for grid split purposes.
cmd-showgridnodes-help = Usage: showgridnodes
cmd-profsnap-desc = Make a profiling snapshot.
cmd-profsnap-help = Usage: profsnap
cmd-devwindow-desc = Dev Window
cmd-devwindow-help = Usage: devwindow
cmd-devwindow-desc = Open file
cmd-devwindow-help = Usage: testopenfile
cmd-scene-desc = Immediately changes the UI scene/state.
cmd-scene-help = Usage: scene <className>
cmd-szr_stats-desc = Report serializer statistics.
cmd-szr_stats-help = Usage: szr_stats
cmd-hwid-desc = Returns the current HWID (HardWare ID).
cmd-hwid-help = Usage: hwid
cmd-vvread-desc = Retrieve a path's value using VV (View Variables).
cmd-vvread-desc = Usage: vvread <path>
cmd-vvwrite-desc = Modify a path's value using VV (View Variables).
cmd-vvwrite-help = Usage: vvwrite <path>
cmd-vv-desc = Opens View Variables (VV).
cmd-vv-help = Usage: vv <path|entity ID|guihover>
cmd-vvinvoke-desc = Invoke/Call a path with arguments using VV.
cmd-vvinvoke-help = Usage: vvinvoke <path> [arguments...]
cmd-dump_dependency_injectors-desc = Dump IoCManager's dependency injector cache.
cmd-dump_dependency_injectors-help = Usage: dump_dependency_injectors
cmd-dump_dependency_injectors-total-count = Total count: { $total }
cmd-dump_netserializer_type_map-desc = Dump NetSerializer's type map and serializer hash.
cmd-dump_netserializer_type_map-help = Usage: dump_netserializer_type_map
cmd-hub_advertise_now-desc = Immediately advertise to the master hub server
cmd-hub_advertise_now-help = Usage: hub_advertise_now
cmd-echo-desc = Echo arguments back to the console
cmd-echo-help = Usage: echo "<message>"
## 'vfs_ls' command
cmd-vfs_ls-desc = List directory contents in the VFS.
cmd-vfs_ls-help = Usage: vfs_list <path>
Example:
vfs_list /Assemblies
cmd-vfs_ls-err-args = Need exactly 1 argument.
cmd-vfs_ls-hint-path = <path>
cmd-reloadtiletextures-desc = Reloads the tile texture atlas to allow hot reloading tile sprites
cmd-reloadtiletextures-help = Usage: reloadtiletextures

View File

@@ -0,0 +1,10 @@
color-selector-sliders-red = R
color-selector-sliders-green = G
color-selector-sliders-blue = B
color-selector-sliders-hue = H
color-selector-sliders-saturation = S
color-selector-sliders-value = V
color-selector-sliders-alpha = A
color-selector-sliders-rgb = RGB
color-selector-sliders-hsv = HSV

View File

@@ -3,6 +3,7 @@
entity-spawn-window-title = Entity Spawn Panel
entity-spawn-window-search-bar-placeholder = search
entity-spawn-window-clear-button = Clear
entity-spawn-window-replace-button-text = Replace
entity-spawn-window-erase-button-text = Erase Mode
entity-spawn-window-override-menu-tooltip = Override placement

View File

@@ -0,0 +1,3 @@
debug-builtin-connection-screen-invalid-username-with-reason = The given username is invalid: {$invalidreason}
debug-builtin-connection-screen-invalid-username = Invalid Username.
debug-builtin-connection-screen-failed-to-connect = Failed to connect: {$reason}

View File

@@ -0,0 +1,5 @@
discord-rpc-in-main-menu = In Main Menu
discord-rpc-in-main-menu-logo-text = I think coolsville SUCKS
discord-rpc-character = Username: {$username}
discord-rpc-on-server = On Server: {$servername}
discord-rpc-players = Players: {$players}/{$maxplayers}

View File

@@ -18,6 +18,15 @@ input-key-F12 = F12
input-key-F13 = F13
input-key-F14 = F14
input-key-F15 = F15
input-key-F16 = F16
input-key-F17 = F17
input-key-F18 = F18
input-key-F19 = F19
input-key-F20 = F20
input-key-F21 = F21
input-key-F22 = F22
input-key-F23 = F23
input-key-F24 = F24
input-key-Pause = Pause
input-key-Left = Left
input-key-Up = Up
@@ -25,7 +34,22 @@ input-key-Down = Down
input-key-Right = Right
input-key-Space = Space
input-key-Return = Return
input-key-NumpadEnter = Num Enter
input-key-NumpadEnter = Numpad Enter
input-key-NumpadNum0 = Numpad 0
input-key-NumpadNum1 = Numpad 1
input-key-NumpadNum2 = Numpad 2
input-key-NumpadNum3 = Numpad 3
input-key-NumpadNum4 = Numpad 4
input-key-NumpadNum5 = Numpad 5
input-key-NumpadNum6 = Numpad 6
input-key-NumpadNum7 = Numpad 7
input-key-NumpadNum8 = Numpad 8
input-key-NumpadNum9 = Numpad 9
input-key-NumpadAdd = Numpad Add
input-key-NumpadSubtract = Numpad Subtract
input-key-NumpadDivide = Numpad Divide
input-key-NumpadMultiply = Numpad Multiply
input-key-NumpadDecimal = Numpad Decimal
input-key-BackSpace = Backspace
input-key-Tab = Tab
input-key-PageUp = Page Up

View File

@@ -0,0 +1 @@
cmd-midipanic-desc = Turns off every note for every active MIDI renderer.

View File

@@ -0,0 +1,59 @@
# Playback Commands
cmd-replay-play-desc = Resume replay playback.
cmd-replay-play-help = replay_play
cmd-replay-pause-desc = Pause replay playback
cmd-replay-pause-help = replay_pause
cmd-replay-toggle-desc = Resume or pause replay playback.
cmd-replay-toggle-help = replay_toggle
cmd-replay-stop-desc = Stop and unload a replay.
cmd-replay-stop-help = replay_stop
cmd-replay-load-desc = Load and start a replay.
cmd-replay-load-help = replay_load <replay folder>
cmd-replay-load-hint = Replay folder
cmd-replay-skip-desc = Skip forwards or backwards in time.
cmd-replay-skip-help = replay_skip <tick or timespan>
cmd-replay-skip-hint = Ticks or timespan (HH:MM:SS).
cmd-replay-set-time-desc = Jump forwards or backwards to some specific time.
cmd-replay-set-time-help = replay_set <tick or time>
cmd-replay-set-time-hint = Tick or timespan (HH:MM:SS), starting from
cmd-replay-error-time = "{$time}" is not an integer or timespan.
cmd-replay-error-args = Wrong number of arguments.
cmd-replay-error-no-replay = Not currently playing a replay.
cmd-replay-error-already-loaded = A replay is already loaded.
cmd-replay-error-run-level = You cannot load a replay while connected to a server.
# Recording commands
cmd-replay-recording-start-desc = Starts a replay recording, optionally with some time limit.
cmd-replay-recording-start-help = Usage: replay_recording_start [name] [overwrite] [time limit]
cmd-replay-recording-start-success = Started recording a replay.
cmd-replay-recording-start-already-recording = Already recording a replay.
cmd-replay-recording-start-error = An error occurred while trying to start the recording.
cmd-replay-recording-start-hint-time = [time limit (minutes)]
cmd-replay-recording-start-hint-name = [name]
cmd-replay-recording-start-hint-overwrite = [overwrite (bool)]
cmd-replay-recording-stop-desc = Stops a replay recording.
cmd-replay-recording-stop-help = Usage: replay_recording_stop
cmd-replay-recording-stop-success = Stopped recording a replay.
cmd-replay-recording-stop-not-recording = Not currently recording a replay.
cmd-replay-recording-stats-desc = Displays information about the current replay recording.
cmd-replay-recording-stats-help = Usage: replay_recording_stats
cmd-replay-recording-stats-result = Duration: {$time} min, Ticks: {$ticks}, Size: {$size} MB, rate: {$rate} MB/min.
# Time Control UI
replay-time-box-scrubbing-label = Dynamic Scrubbing
replay-time-box-replay-time-label = Recording Time: {$current} / {$end} ({$percentage}%)
replay-time-box-server-time-label = Server Time: {$current} / {$end}
replay-time-box-index-label = Index: {$current} / {$total}
replay-time-box-tick-label = Tick: {$current} / {$total}

View File

@@ -0,0 +1,169 @@
command-description-tpto =
Teleport the given entities to some target entity.
command-description-player-list =
Returns a list of all player sessions.
command-description-player-self =
Returns the current player session.
command-description-player-imm =
Returns the session associated with the player given as argument.
command-description-player-entity =
Returns the entities of the input sessions.
command-description-self =
Returns the current attached entity.
command-description-physics-velocity =
Returns the velocity of the input entities.
command-description-physics-angular-velocity =
Returns the angular velocity of the input entities.
command-description-buildinfo =
Provides information about the build of the game.
command-description-cmd-list =
Returns a list of all commands, for this side.
command-description-explain =
Explains the given expression, providing command descriptions and signatures.
command-description-search =
Searches through the input for the provided value.
command-description-stopwatch =
Measures the execution time of the given expression.
command-description-types-consumers =
Provides all commands that can consume the given type.
command-description-types-tree =
Debug tool to return all types the command interpreter can downcast the input to.
command-description-types-gettype =
Returns the type of the input.
command-description-types-fullname =
Returns the full name of the input type according to CoreCLR.
command-description-as =
Casts the input to the given type.
Effectively a type hint if you know the type but the interpreter does not.
command-description-count =
Counts the amount of entries in it's input, returning an integer.
command-description-map =
Maps the input over the given block, with the provided expected return type.
This command may be modified to not need an explicit return type in the future.
command-description-select =
Selects N objects or N% of objects from the input.
One can additionally invert this command with not to make it select everything except N objects instead.
command-description-comp =
Returns the given component from the input entities, discarding entities without that component.
command-description-delete =
Deletes the input entities.
command-description-ent =
Returns the provided entity ID.
command-description-entities =
Returns all entities on the server.
command-description-paused =
Filters the input entities by whether or not they are paused.
This command can be inverted with not.
command-description-with =
Filters the input entities by whether or not they have the given component.
This command can be inverted with not.
command-description-fuck =
Throws an exception.
command-description-ecscomp-listty =
Lists every type of component registered.
command-description-cd =
Changes the session's current directory to the given relative or absolute path.
command-description-ls-here =
Lists the contents of the current directory.
command-description-ls-in =
Lists the contents of the given relative or absolute path.
command-description-methods-get =
Returns all methods associated with the input type.
command-description-methods-overrides =
Returns all methods overriden on the input type.
command-description-methods-overridesfrom =
Returns all methods overriden from the given type on the input type.
command-description-cmd-moo =
Asks the important questions.
command-description-cmd-descloc =
Returns the localization string for a command's description.
command-description-cmd-getshim =
Returns a command's execution shim.
command-description-help =
Provides a quick rundown of how to use toolshed.
command-description-ioc-registered =
Returns all the types registered with IoCManager on the current thread (usually the game thread)
command-description-ioc-get =
Gets an instance of an IoC registration.
command-description-loc-tryloc =
Tries to get a localization string, returning null if unable.
command-description-loc-loc =
Gets a localization string, returning the unlocalized string if unable.
command-description-physics-angular_velocity =
Returns the angular velocity of the given entities.
command-description-vars =
Provides a list of all variables set in this session.
command-description-any =
Returns true if there's any values in the input, otherwise false.
command-description-ArrowCommand =
Assigns the input to a variable.
command-description-isempty =
Returns true if the input is empty, otherwise false.
command-description-isnull =
Returns true if the input is null, otherwise false.
command-description-unique =
Filters the input sequence for uniqueness, removing duplicate values.
command-description-where =
Given some input sequence IEnumerable<T>, takes a block of signature T -> bool that decides if each input value should be included in the output sequence.
command-description-do =
Backwards compatibility with BQL, applies the given old commands over the input sequence.
command-description-named =
Filters the input entities by their name, with the regex ^selector$.
command-description-prototyped =
Filters the input entities by their prototype.
command-description-nearby =
Creates a new list of all entities nearby the inputs within the given range.
command-description-first =
Returns the first entry of the given enumerable.
command-description-splat =
"Splats" a block, value, or variable, creating N copies of it in a list.
command-description-val =
Casts the given value, block, or variable to the given type. This is mostly a workaround for current limitations of variables.
command-description-actor-controlled =
Filters entities by whether or not they're actively controlled.
command-description-actor-session =
Returns the sessions associated with the input entities.
command-description-physics-parent =
Returns the parent(s) of the input entities.
command-description-emplace =
Runs the given block over it's inputs, with the input value placed into the variable $value within the block.
Additionally breaks out $wx, $wy, $proto, $desc, $name, and $paused for entities.
Can also have breakout values for other types, consult the documentation for that type for further info.
command-description-AddCommand =
Performs numeric addition.
command-description-SubtractCommand =
Performs numeric subtraction.
command-description-MultiplyCommand =
Performs numeric multiplication.
command-description-DivideCommand =
Performs numeric division.
command-description-min =
Returns the minimum of two values.
command-description-max =
Returns the maximum of two values.
command-description-BitAndCommand =
Performs bitwise AND.
command-description-BitOrCommand =
Performs bitwise OR.
command-description-BitXorCommand =
Performs bitwise XOR.
command-description-neg =
Negates the input.
command-description-GreaterThanCommand =
Performs a greater-than comparison, x > y.
command-description-LessThanCommand =
Performs a less-than comparison, x < y.
command-description-GreaterThanOrEqualCommand =
Performs a greater-than-or-equal comparison, x >= y.
command-description-LessThanOrEqualCommand =
Performs a less-than-or-equal comparison, x <= y.
command-description-EqualCommand =
Performs an equality comparison, returning true if the inputs are equal.
command-description-NotEqualCommand =
Performs an equality comparison, returning true if the inputs are not equal.
command-description-entitysystemupdateorder-tick =
Lists the tick update order of entity systems.
command-description-entitysystemupdateorder-frame =
Lists the frame update order of entity systems.

View File

@@ -0,0 +1,7 @@
uploadfolder-command-description = Uploads a folder from your UserData folder recursively to the server contentDB.
uploadfolder-command-help = uploadfolder [folder you want to upload in userdata/UploadFolder]
uploadfolder-command-wrong-args = Wrong number of arguments!
uploadfolder-command-folder-not-found = Folder {$folder} not found!
uploadfolder-command-resource-upload-disabled = Network Resource Uploading is currently disabled. check Server CVars.
uploadfolder-command-file-too-big = File {$filename} above the current size limit! It must be smaller than {$sizeLimit} MB. skipping.
uploadfolder-command-success = Uploaded {$fileCount} files

View File

@@ -0,0 +1,63 @@
# Used internally by the THE() function.
zzzz-the = { PROPER($ent) ->
*[false] a { $ent }
[true] { $ent }
}
# Used internally by the SUBJECT() function.
zzzz-subject-pronoun = { GENDER($ent) ->
[male] ele
[female] ela
[epicene] eles
*[neuter] ele
}
# Used internally by the OBJECT() function.
zzzz-object-pronoun = { GENDER($ent) ->
[male] ele
[female] ela
[epicene] eles
*[neuter] isso
}
# Used internally by the POSS-PRONOUN() function.
zzzz-possessive-pronoun = { GENDER($ent) ->
[male] dele
[female] dela
[epicene] deles
*[neuter] dele
}
# Used internally by the POSS-ADJ() function.
zzzz-possessive-adjective = { GENDER($ent) ->
[male] dele
[female] dela
[epicene] deles
*[neuter] dele
}
# Used internally by the REFLEXIVE() function.
zzzz-reflexive-pronoun = { GENDER($ent) ->
[male] ele mesmo
[female] ela mesmo
[epicene] eles mesmos
*[neuter] ele mesmo
}
# Used internally by the CONJUGATE-BE() function.
zzzz-conjugate-be = { GENDER($ent) ->
[epicene] é
*[other] é
}
# Used internally by the CONJUGATE-HAVE() function.
zzzz-conjugate-have = { GENDER($ent) ->
[epicene] tenho
*[other] tem
}
# Used internally by the CONJUGATE-BASIC() function.
zzzz-conjugate-basic = { GENDER($ent) ->
[epicene] { $first }
*[other] { $second }
}

View File

@@ -0,0 +1,16 @@
# Strings Loc para vários comandos relacionados ao estado da entidade e ao PVS do lado do cliente
cmd-reset-ent-help = Uso: resetent <Entity UID>
cmd-reset-ent-desc = Redefina uma entidade para o estado do servidor recebido mais recentemente. Isso também redefinirá as entidades que foram desanexadas para espaço nulo.
cmd-reset-all-ents-help = Uso: resetallents
cmd-reset-all-ents-desc = Redefine todas as entidades para o estado do servidor recebido mais recentemente. Isso afeta apenas as entidades que não foram desanexadas ao espaço nulo.
cmd-detach-ent-help = Uso: detachent <Entity UID>
cmd-detach-ent-desc = Desanexar uma entidade para espaço nulo, como se tivesse saído do intervalo PVS.
cmd-local-delete-help = Uso: localdelete <Entity UID>
cmd-local-delete-desc = Exclui uma entidade. Ao contrário do comando delete normal, este é CLIENT-SIDE. A menos que a entidade seja uma entidade do lado do cliente, isso provavelmente causará erros.
cmd-full-state-reset-help = Uso: fullstatereset
cmd-full-state-reset-desc = Descarta qualquer informação de estado da entidade e solicita um estado completo do servidor.

View File

@@ -0,0 +1,161 @@
### Localization for engine console commands
## generic
cmd-invalid-arg-number-error = Número inválido de argumentos.
cmd-parse-failure-integer = {$arg} não é um inteiro válido.
cmd-parse-failure-float = {$arg} não é um float válido.
cmd-parse-failure-bool = {$arg} não é um booleano válido.
cmd-parse-failure-uid = {$arg} não é um UID de entidade válido.
cmd-parse-failure-entity-exist = UID {$arg} não corresponde a uma entidade existente.
## 'help' command
cmd-help-desc = Exibir ajuda geral ou texto de ajuda para um comando específico
cmd-help-help = Uso: help [command name]
Quando nenhum nome de comando é fornecido, exibe o texto de ajuda geral. Se um nome de comando for fornecido, exibe o texto de ajuda para esse comando.
cmd-help-no-args = Para exibir a ajuda de um comando específico, escreva 'help <command>'. Para listar todos os comandos disponíveis, escreva 'list'. Para procurar comandos, use 'list <filter>'.
cmd-help-unknown = Comando desconhecido: { $command }
cmd-help-top = { $command } - { $description }
cmd-help-invalid-args = Quantidade de argumentos inválida.
cmd-help-arg-cmdname = [command name]
## 'cvar' command
cmd-cvar-desc = Obtém ou define um CVar.
cmd-cvar-help = Uso: cvar <name | ?> [value]
Se um valor for passado, o valor será analisado e armazenado como o novo valor do CVar.
Caso contrário, o valor atual do CVar é exibido.
Use 'cvar ?' para obter uma lista de todos os CVars registrados.
cmd-cvar-invalid-args = Deve fornecer exatamente um ou dois argumentos.
cmd-cvar-not-registered = CVar '{ $cvar }' não está registrado. Use 'cvar ?' para obter uma lista de todos os CVars registrados.
cmd-cvar-parse-error = O valor de entrada está no formato incorreto para o tipo { $type }
cmd-cvar-compl-list = Listar CVars disponíveis
cmd-cvar-arg-name = <name | ?>
cmd-cvar-value-hidden = <value hidden>
## 'list' command
cmd-list-desc = Lista os comandos disponíveis, com filtro de pesquisa opcional
cmd-list-help = Uso: list [filter]
Lista todos os comandos disponíveis. Se um argumento for fornecido, ele será usado para filtrar comandos por nome.
cmd-list-heading = NOME DESC{"\u000A"}-------------------------{"\u000A"}
cmd-list-arg-filter = [filter]
## '>' command, aka remote exec
cmd-remoteexec-desc = Executa comandos do lado do servidor
cmd-remoteexec-help = Uso: > <command> [arg] [arg] [arg...]
Executa um comando no servidor. Isso é necessário se um comando com o mesmo nome existir no cliente, pois a simples execução do comando executaria o comando do cliente primeiro.
## 'gc' command
cmd-gc-desc = Execute o GC (coletor de lixo)
cmd-gc-help = Uso: gc [generation]
Usa GC.Collect() para executar o Garbage Collector.
Se um argumento for fornecido, ele será analisado como um número de geração do GC e GC.Collect(int) será usado.
Use o comando 'gfc' para fazer um GC completo compactando LOH.
cmd-gc-failed-parse = Falha ao analisar o argumento.
cmd-gc-arg-generation = [generation]
## 'gcf' command
cmd-gcf-desc = Execute o GC, totalmente, compactando LOH e tudo.
cmd-gcf-help = Uso: gcf
Faz um GC.Collect(2, GCCollectionMode.Forced, true, true) completo enquanto também compacta LOH.
Isso provavelmente será bloqueado por centenas de milissegundos, esteja avisado.
## 'gc_mode' command
cmd-gc_mode-desc = Alterar/ler o modo de latência do GC
cmd-gc_mode-help = Uso: gc_mode [type]
Se nenhum argumento for fornecido, retornará o modo de latência do GC atual.
Se um argumento for passado, ele será analisado como GCLatencyMode e definido como o modo de latência do GC.
cmd-gc_mode-current = modo de latência atual do gc: { $prevMode }
cmd-gc_mode-possible = modos possíveis:
cmd-gc_mode-option = - { $mode }
cmd-gc_mode-unknown = modo de latência gc desconhecido: { $arg }
cmd-gc_mode-attempt = tentando alterar o modo de latência do gc: { $prevMode } -> { $mode }
cmd-gc_mode-result = modo de latência gc resultante: { $mode }
cmd-gc_mode-arg-type = [type]
## 'mem' command
cmd-mem-desc = Imprime informações de memória gerenciada
cmd-mem-help = Uso: mem
cmd-mem-report = Tamanho da pilha: { TOSTRING($heapSize, "N0") }
Total alocado: { TOSTRING($totalAllocated, "N0") }
## 'physics' command
cmd-physics-overlay = {$overlay} não é uma sobreposição reconhecida
## 'lsasm' command
cmd-lsasm-desc = Lista assemblies carregados por contexto de carregamento
cmd-lsasm-help = Uso: lsasm
## 'exec' command
cmd-exec-desc = Executa um arquivo de script dos dados de usuário graváveis do jogo
cmd-exec-help = Uso: exec <fileName>
Cada linha no arquivo é executada como um único comando, a menos que comece com um #
cmd-exec-arg-filename = <fileName>
## 'dump_net_comps' command
cmd-dump_net_comps-desc = Imprime a tabela de componentes em rede.
cmd-dump_net_comps-help = Uso: dump_net-comps
cmd-dump_net_comps-error-writeable = Registro ainda gravável, IDs de rede não foram gerados.
cmd-dump_net_comps-header = Registros de componentes em rede:
## 'dump_event_tables' command
cmd-dump_event_tables-desc = Imprime tabelas de eventos direcionados para uma entidade.
cmd-dump_event_tables-help = Uso: dump_event_tables <entityUid>
cmd-dump_event_tables-missing-arg-entity = Argumento de entidade ausente
cmd-dump_event_tables-error-entity = Entidade inválida
cmd-dump_event_tables-arg-entity = <entityUid>
## 'monitor' command
cmd-monitor-desc = Alterna um monitor de depuração no menu F3.
cmd-monitor-help = Uso: monitor <name>
Os monitores possíveis são: { $monitors }
Você também pode usar os valores especiais "-all" e "+all" para ocultar ou mostrar todos os monitores, respectivamente.
cmd-monitor-arg-monitor = <monitor>
cmd-monitor-invalid-name = Nome do monitor inválido
cmd-monitor-arg-count = Argumento do monitor ausente
cmd-monitor-minus-all-hint = Esconde todos os monitores
cmd-monitor-plus-all-hint = Mostra todos os monitores
## Mapping commands
cmd-savemap-desc = Serializa um mapa para o disco. Não salvará um mapa pós-inicialização a menos que seja forçado.
cmd-savemap-help = savemap <MapID> <Path> [force]
cmd-savemap-not-exist = O mapa de destino não existe.
cmd-savemap-init-warning = Tentativa de salvar um mapa pós-inicialização sem forçar o salvamento.
cmd-savemap-attempt = Tentando salvar o mapa {$mapId} em {$path}.
cmd-savemap-success = Mapa salvo com sucesso.
cmd-hint-savemap-id = <MapID>
cmd-hint-savemap-path = <Path>
cmd-hint-savemap-force = [bool]
cmd-loadmap-desc = Carrega um mapa do disco para o jogo.
cmd-loadmap-help = loadmap <MapID> <Path> [x] [y] [rotation] [consistentUids]
cmd-loadmap-nullspace = Você não pode carregar no mapa 0.
cmd-loadmap-exists = Mapa {$mapId} já existe.
cmd-loadmap-success = Mapa {$mapId} foi carregado em {$path}.
cmd-loadmap-error = Ocorreu um erro ao carregar o mapa de {$path}.
cmd-hint-loadmap-x-position = [x-position]
cmd-hint-loadmap-y-position = [y-position]
cmd-hint-loadmap-rotation = [rotation]
cmd-hint-loadmap-uids = [float]
cmd-hint-savebp-id = <Grid EntityID>
## 'flushcookies' command
# Note: the flushcookies command is from Robust.Client.WebView, it's not in the main engine code.
cmd-flushcookies-desc = Liberar o armazenamento de cookies CEF para o disco
cmd-flushcookies-help = Isso garante que os cookies sejam salvos corretamente no disco no caso de desligamentos impróprios.
Observe que a operação real é assíncrona.

View File

@@ -0,0 +1,10 @@
color-selector-sliders-red = R
color-selector-sliders-green = G
color-selector-sliders-blue = B
color-selector-sliders-hue = H
color-selector-sliders-saturation = S
color-selector-sliders-value = V
color-selector-sliders-alpha = A
color-selector-sliders-rgb = RGB
color-selector-sliders-hsv = HSV

View File

@@ -0,0 +1,11 @@
## EntitySpawnWindow
entity-spawn-window-title = Painel de Criação de Entidade
entity-spawn-window-search-bar-placeholder = pesquisar
entity-spawn-window-clear-button = Limpar
entity-spawn-window-erase-button-text = Modo Apagar
entity-spawn-window-override-menu-tooltip = Substituir posicionamento
## Console
console-line-edit-placeholder = Comando aqui

View File

@@ -0,0 +1 @@
defaultwindow-placeholder-title = Exemplo de título de janela aqui

View File

@@ -0,0 +1,54 @@
input-key-Escape = Escape
input-key-Control = Control
input-key-Shift = Shift
input-key-Alt = Alt
input-key-Menu = Menu
input-key-F1 = F1
input-key-F2 = F2
input-key-F3 = F3
input-key-F4 = F4
input-key-F5 = F5
input-key-F6 = F6
input-key-F7 = F7
input-key-F8 = F8
input-key-F9 = F9
input-key-F10 = F10
input-key-F11 = F11
input-key-F12 = F12
input-key-F13 = F13
input-key-F14 = F14
input-key-F15 = F15
input-key-Pause = Pause
input-key-Left = Left
input-key-Up = Up
input-key-Down = Down
input-key-Right = Right
input-key-Space = Space
input-key-Return = Return
input-key-NumpadEnter = Num Enter
input-key-BackSpace = Backspace
input-key-Tab = Tab
input-key-PageUp = Page Up
input-key-PageDown = Page Down
input-key-End = End
input-key-Home = Home
input-key-Insert = Insert
input-key-Delete = Delete
input-key-MouseLeft = Mouse Left
input-key-MouseRight = Mouse Right
input-key-MouseMiddle = Mouse Middle
input-key-MouseButton4 = Mouse 4
input-key-MouseButton5 = Mouse 5
input-key-MouseButton6 = Mouse 6
input-key-MouseButton7 = Mouse 7
input-key-MouseButton8 = Mouse 8
input-key-MouseButton9 = Mouse 9
input-key-LSystem-win = Left Win
input-key-RSystem-win = Right Win
input-key-LSystem-mac = Left Cmd
input-key-RSystem-mac = Right Cmd
input-key-LSystem-linux = Left Meta
input-key-RSystem-linux = Right Meta
input-key-unknown = <unknown key>

View File

@@ -0,0 +1 @@
cmd-midipanic-desc = Desliga cada nota para cada renderizador MIDI ativo.

View File

@@ -0,0 +1 @@
tab-container-not-tab-title-provided = Sem título

View File

@@ -0,0 +1,11 @@
## ViewVariablesInstanceEntity
view-variable-instance-entity-server-components-add-component-button-placeholder = Adicionar Componente
view-variable-instance-entity-client-variables-tab-title = Variávies do Cliente
view-variable-instance-entity-client-components-tab-title = Componentes do Cliente
view-variable-instance-entity-server-variables-tab-title = Variávies do Servidor
view-variable-instance-entity-server-components-tab-title = Componentes do Servidor
view-variable-instance-entity-client-components-search-bar-placeholder = Pesquisar
view-variable-instance-entity-server-components-search-bar-placeholder = Pesquisar
view-variable-instance-entity-add-window-server-components = Adicionar Componente [S]
view-variable-instance-entity-add-window-client-components = Adicionar Componente [C]

View File

@@ -5,6 +5,7 @@ preset raw;
#include "/Shaders/Internal/fov_shared.swsl"
const highp float g_MinVariance = 0.0;
uniform highp vec4 occludeColor;
void fragment()
{
@@ -19,5 +20,5 @@ void fragment()
discard;
}
COLOR = vec4(0.0, 0.0, 0.0, 1.0 - occlusion);
COLOR = vec4(occludeColor.rgb, 1.0 - occlusion);
}

View File

@@ -5,6 +5,7 @@ preset raw;
#include "/Shaders/Internal/fov_shared.swsl"
const highp float g_MinVariance = 0.0;
uniform highp vec4 occludeColor;
void fragment()
{
@@ -18,5 +19,5 @@ void fragment()
discard;
}
COLOR = vec4(0.0, 0.0, 0.0, 1.0);
COLOR = vec4(occludeColor.rgb, 1.0);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

View File

Before

Width:  |  Height:  |  Size: 637 B

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

View File

@@ -0,0 +1,822 @@
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp.Testing;
using Microsoft.CodeAnalysis.Testing;
using Microsoft.CodeAnalysis.Testing.Verifiers;
using NUnit.Framework;
using Robust.Analyzers;
using VerifyCS = Microsoft.CodeAnalysis.CSharp.Testing.NUnit.AnalyzerVerifier<Robust.Analyzers.AccessAnalyzer>;
using static Microsoft.CodeAnalysis.Testing.DiagnosticResult;
namespace Robust.Analyzers.Tests;
[Parallelizable(ParallelScope.All | ParallelScope.Fixtures)]
[TestFixture]
public sealed class AccessAnalyzer_Test
{
public Task Verifier(string code, params DiagnosticResult[] expected)
{
var test = new CSharpAnalyzerTest<AccessAnalyzer, NUnitVerifier>()
{
TestState =
{
AdditionalReferences = { typeof(AccessAnalyzer).Assembly },
Sources = { code }
},
};
// ExpectedDiagnostics cannot be set, so we need to AddRange here...
test.TestState.ExpectedDiagnostics.AddRange(expected);
return test.RunAsync();
}
/*
*
*/
[Test]
public async Task ReadTest()
{
const string code = @"
using System;
using Robust.Shared.Analyzers;
// ReSharper disable RedundantAssignment
// ReSharper disable UnusedVariable
// ReSharper disable ArrangeThisQualifier
// ReSharper disable UnusedMember.Global
// ReSharper disable UnusedType.Global
public struct MyData
{
public int MyField;
public static bool operator ==(MyData lhs, MyData rhs) => lhs.MyField == rhs.MyField;
public static bool operator !=(MyData lhs, MyData rhs) => lhs.MyField != rhs.MyField;
}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public sealed class TypeNobodyCanRead
{
public MyData Data = default;
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Read,
Friend = AccessPermissions.Read,
Other = AccessPermissions.Read)]
public MyData Data2 = default;
public void TestTypeNobodyCanRead(TypeNobodyCanRead obj)
{
// None of these accesses should be allowed.
var copy = Data;
var copy2 = this.Data;
var copy3 = obj.Data;
copy = Data;
copy = this.Data;
copy = obj.Data;
var copy4 = Data.MyField;
var copy5 = this.Data.MyField;
var copy6 = obj.Data.MyField;
if (Data == copy) {}
if (this.Data == copy) {}
if (obj.Data == copy) {}
if(Data.MyField == 0) {}
if(this.Data.MyField == 0) {}
if(obj.Data.MyField == 0) {}
// All of these accesses should be fine.
var copy7 = Data2;
var copy8 = this.Data2;
var copy9 = obj.Data2;
copy = Data2;
copy = this.Data2;
copy = obj.Data2;
var copy10 = Data2.MyField;
var copy11 = this.Data2.MyField;
var copy12 = obj.Data2.MyField;
if (Data2 == copy) {}
if (this.Data2 == copy) {}
if (obj.Data2 == copy) {}
if(Data2.MyField == 0) {}
if(this.Data2.MyField == 0) {}
if(obj.Data2.MyField == 0) {}
}
}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Read,
Friend = AccessPermissions.Read,
Other = AccessPermissions.Read)]
public sealed class MemberNobodyCanRead
{
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public MyData Data = default;
public MyData Data2 = default;
public void TestMemberNobodyCanRead(TypeNobodyCanRead obj)
{
// None of these accesses should be allowed.
var copy = Data;
var copy2 = this.Data;
var copy3 = obj.Data;
copy = Data;
copy = this.Data;
copy = obj.Data;
var copy4 = Data.MyField;
var copy5 = this.Data.MyField;
var copy6 = obj.Data.MyField;
if (Data == copy) {}
if (this.Data == copy) {}
if (obj.Data == copy) {}
if(Data.MyField == 0) {}
if(this.Data.MyField == 0) {}
if(obj.Data.MyField == 0) {}
// All of these accesses should be fine.
var copy7 = Data2;
var copy8 = this.Data2;
var copy9 = obj.Data2;
copy = Data2;
copy = this.Data2;
copy = obj.Data2;
var copy10 = Data2.MyField;
var copy11 = this.Data2.MyField;
var copy12 = obj.Data2.MyField;
if (Data2 == copy) {}
if (this.Data2 == copy) {}
if (obj.Data2 == copy) {}
if(Data2.MyField == 0) {}
if(this.Data2.MyField == 0) {}
if(obj.Data2.MyField == 0) {}
}
}
public sealed class FriendlyClass
{
public void TestTypeNobodyCanRead(TypeNobodyCanRead obj)
{
// We shouldn't be able to access any of these, even if we're a friend..
var copy = obj.Data;
copy = obj.Data;
var copy2 = obj.Data.MyField;
copy2 = obj.Data.MyField;
if (obj.Data == copy) {}
if(obj.Data.MyField == 0) {}
// We should be allowed to access all of these, we're friends!
var copy3 = obj.Data2;
copy = obj.Data2;
var copy4 = obj.Data2.MyField;
copy4 = obj.Data2.MyField;
if(obj.Data2 == copy) {}
if(obj.Data2.MyField == 0) {}
}
public void TestMemberNobodyCanRead(MemberNobodyCanRead obj)
{
// We shouldn't be able to access any of these, even if we're a friend..
var copy = obj.Data;
copy = obj.Data;
var copy2 = obj.Data.MyField;
copy2 = obj.Data.MyField;
if (obj.Data == copy) {}
if(obj.Data.MyField == 0) {}
// We should be allowed to access all of these, we're friends!
var copy3 = obj.Data2;
copy = obj.Data2;
var copy4 = obj.Data2.MyField;
copy4 = obj.Data2.MyField;
if(obj.Data2 == copy) {}
if(obj.Data2.MyField == 0) {}
}
}
public sealed class OtherClass
{
public void TestTypeNobodyCanRead(TypeNobodyCanRead obj)
{
// We shouldn't be able to access any of these, as 'other types' can't..
var copy = obj.Data;
copy = obj.Data;
var copy2 = obj.Data.MyField;
copy2 = obj.Data.MyField;
if (obj.Data == copy) {}
if(obj.Data.MyField == 0) {}
// We should be allowed to access all of these, they let others read it!
var copy3 = obj.Data2;
copy = obj.Data2;
var copy4 = obj.Data2.MyField;
copy4 = obj.Data2.MyField;
if(obj.Data2 == copy) {}
if(obj.Data2.MyField == 0) {}
}
public void TestMemberNobodyCanRead(MemberNobodyCanRead obj)
{
// We shouldn't be able to access any of these, as 'other types' can't..
var copy = obj.Data;
copy = obj.Data;
var copy2 = obj.Data.MyField;
copy2 = obj.Data.MyField;
if (obj.Data == copy) {}
if(obj.Data.MyField == 0) {}
// We should be allowed to access all of these, they let others read it!
var copy3 = obj.Data2;
copy = obj.Data2;
var copy4 = obj.Data2.MyField;
copy4 = obj.Data2.MyField;
if(obj.Data2 == copy) {}
if(obj.Data2.MyField == 0) {}
}
}";
await Verifier(code,
// AUTO-GENERATED DIAGNOSTICS BELOW //
// /0/Test0.cs(35,20): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(35, 20, 35, 24).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(36,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(36, 21, 36, 30).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(37,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(37, 21, 37, 29).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(39,16): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(39, 16, 39, 20).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(40,16): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(40, 16, 40, 25).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(41,16): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(41, 16, 41, 24).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(43,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(43, 21, 43, 25).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(44,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(44, 21, 44, 30).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(45,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(45, 21, 45, 29).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(47,13): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(47, 13, 47, 17).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(48,13): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(48, 13, 48, 22).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(49,13): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(49, 13, 49, 21).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(51,12): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(51, 12, 51, 16).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(52,12): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(52, 12, 52, 21).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(53,12): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(53, 12, 53, 20).WithArguments("a 'Read' same-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(95,20): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(95, 20, 95, 24).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(96,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(96, 21, 96, 30).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(97,21): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(97, 21, 97, 29).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(99,16): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(99, 16, 99, 20).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(100,16): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(100, 16, 100, 25).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(101,16): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(101, 16, 101, 24).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(103,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(103, 21, 103, 25).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(104,21): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(104, 21, 104, 30).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(105,21): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(105, 21, 105, 29).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(107,13): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(107, 13, 107, 17).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(108,13): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(108, 13, 108, 22).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(109,13): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(109, 13, 109, 21).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(111,12): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(111, 12, 111, 16).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(112,12): error RA0002: Tried to perform a 'Read' same-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(112, 12, 112, 21).WithArguments("a 'Read' same-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(113,12): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(113, 12, 113, 20).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(143,20): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(143, 20, 143, 28).WithArguments("a 'Read' friend-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(144,16): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(144, 16, 144, 24).WithArguments("a 'Read' friend-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(146,21): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(146, 21, 146, 29).WithArguments("a 'Read' friend-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(147,17): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(147, 17, 147, 25).WithArguments("a 'Read' friend-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(149,13): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(149, 13, 149, 21).WithArguments("a 'Read' friend-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(150,12): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(150, 12, 150, 20).WithArguments("a 'Read' friend-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(166,20): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(166, 20, 166, 28).WithArguments("a 'Read' friend-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(167,16): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(167, 16, 167, 24).WithArguments("a 'Read' friend-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(169,21): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(169, 21, 169, 29).WithArguments("a 'Read' friend-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(170,17): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(170, 17, 170, 25).WithArguments("a 'Read' friend-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(172,13): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(172, 13, 172, 21).WithArguments("a 'Read' friend-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(173,12): error RA0002: Tried to perform a 'Read' friend-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(173, 12, 173, 20).WithArguments("a 'Read' friend-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(192,20): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(192, 20, 192, 28).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(193,16): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(193, 16, 193, 24).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(195,21): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(195, 21, 195, 29).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(196,17): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(196, 17, 196, 25).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(198,13): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(198, 13, 198, 21).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(199,12): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'TypeNobodyCanRead', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(199, 12, 199, 20).WithArguments("a 'Read' other-type", "Data", "TypeNobodyCanRead", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(215,20): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(215, 20, 215, 28).WithArguments("a 'Read' other-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(216,16): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(216, 16, 216, 24).WithArguments("a 'Read' other-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(218,21): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(218, 21, 218, 29).WithArguments("a 'Read' other-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(219,17): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(219, 17, 219, 25).WithArguments("a 'Read' other-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(221,13): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(221, 13, 221, 21).WithArguments("a 'Read' other-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(222,12): error RA0002: Tried to perform a 'Read' other-type access to member 'Data' in type 'MemberNobodyCanRead', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(222, 12, 222, 20).WithArguments("a 'Read' other-type", "Data", "MemberNobodyCanRead", "having no", "Member Permissions: ---------")
);
}
[Test]
public async Task WriteTest()
{
const string code = @"
using System;
using Robust.Shared.Analyzers;
// ReSharper disable RedundantAssignment
// ReSharper disable UnusedVariable
// ReSharper disable ArrangeThisQualifier
// ReSharper disable UnusedMember.Global
// ReSharper disable UnusedType.Global
// ReSharper disable NotAccessedField.Global
// ReSharper disable RedundantDefaultMemberInitializer
public struct MyData
{
public int MyField;
}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public sealed class TypeNobodyCanWrite
{
public MyData Data = default;
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Write,
Friend = AccessPermissions.Write,
Other = AccessPermissions.Write)]
public MyData Data2 = default;
public void TestTypeNobodyCanWrite(TypeNobodyCanWrite obj)
{
// None of these accesses should be allowed.
Data = default;
this.Data = default;
obj.Data = default;
Data.MyField = 0;
this.Data.MyField = 0;
obj.Data.MyField = 0;
// All of these accesses should be fine.
Data2 = default;
this.Data2 = default;
obj.Data2 = default;
Data2.MyField = 0;
this.Data2.MyField = 0;
obj.Data2.MyField = 0;
}
}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Write,
Friend = AccessPermissions.Write,
Other = AccessPermissions.Write)]
public sealed class MemberNobodyCanWrite
{
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public MyData Data = default;
public MyData Data2 = default;
public void TestMemberNobodyCanWrite(TypeNobodyCanWrite obj)
{
// None of these accesses should be allowed.
Data = default;
this.Data = default;
obj.Data = default;
Data.MyField = 0;
this.Data.MyField = 0;
obj.Data.MyField = 0;
// All of these accesses should be fine.
Data2 = default;
this.Data2 = default;
obj.Data2 = default;
Data2.MyField = 0;
this.Data2.MyField = 0;
obj.Data2.MyField = 0;
}
}
public sealed class FriendlyClass
{
public void TestTypeNobodyCanWrite(TypeNobodyCanWrite obj)
{
// We shouldn't be able to access any of these, even if we're a friend..
obj.Data = default;
obj.Data.MyField = 0;
// We should be allowed to access all of these, we're friends!
obj.Data2 = default;
obj.Data2.MyField = 0;
}
public void TestMemberNobodyCanWrite(MemberNobodyCanWrite obj)
{
// We shouldn't be able to access any of these, even if we're a friend..
obj.Data = default;
obj.Data.MyField = 0;
// We should be allowed to access all of these, we're friends!
obj.Data2 = default;
obj.Data2.MyField = 0;
}
}
public sealed class OtherClass
{
public void TestTypeNobodyCanWrite(TypeNobodyCanWrite obj)
{
// We shouldn't be able to access any of these, as 'other types' can't..
obj.Data = default;
obj.Data.MyField = 0;
// We should be allowed to access all of these, they let others write!
obj.Data2 = default;
obj.Data2.MyField = 0;
}
public void TestMemberNobodyCanWrite(MemberNobodyCanWrite obj)
{
// We shouldn't be able to access any of these, as 'other types' can't..
obj.Data = default;
obj.Data.MyField = 0;
// We should be allowed to access all of these, they let others write!
obj.Data2 = default;
obj.Data2.MyField = 0;
}
}";
await Verifier(code,
// AUTO-GENERATED DIAGNOSTICS BELOW //
// /0/Test0.cs(34,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(34, 9, 34, 13).WithArguments("a 'Write' same-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(35,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(35, 9, 35, 18).WithArguments("a 'Write' same-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(36,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(36, 9, 36, 17).WithArguments("a 'Write' same-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(38,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(38, 9, 38, 13).WithArguments("a 'Write' same-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(39,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(39, 9, 39, 18).WithArguments("a 'Write' same-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(40,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(40, 9, 40, 17).WithArguments("a 'Write' same-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(70,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(70, 9, 70, 13).WithArguments("a 'Write' same-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(71,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(71, 9, 71, 18).WithArguments("a 'Write' same-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(72,9): error RA0002: Tried to perform a 'Write' other-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(72, 9, 72, 17).WithArguments("a 'Write' other-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(74,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(74, 9, 74, 13).WithArguments("a 'Write' same-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(75,9): error RA0002: Tried to perform a 'Write' same-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(75, 9, 75, 18).WithArguments("a 'Write' same-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(76,9): error RA0002: Tried to perform a 'Write' other-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(76, 9, 76, 17).WithArguments("a 'Write' other-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(94,9): error RA0002: Tried to perform a 'Write' friend-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(94, 9, 94, 17).WithArguments("a 'Write' friend-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(95,9): error RA0002: Tried to perform a 'Write' friend-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(95, 9, 95, 17).WithArguments("a 'Write' friend-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(105,9): error RA0002: Tried to perform a 'Write' friend-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(105, 9, 105, 17).WithArguments("a 'Write' friend-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(106,9): error RA0002: Tried to perform a 'Write' friend-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(106, 9, 106, 17).WithArguments("a 'Write' friend-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(119,9): error RA0002: Tried to perform a 'Write' other-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(119, 9, 119, 17).WithArguments("a 'Write' other-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(120,9): error RA0002: Tried to perform a 'Write' other-type access to member 'Data' in type 'TypeNobodyCanWrite', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(120, 9, 120, 17).WithArguments("a 'Write' other-type", "Data", "TypeNobodyCanWrite", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(130,9): error RA0002: Tried to perform a 'Write' other-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(130, 9, 130, 17).WithArguments("a 'Write' other-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(131,9): error RA0002: Tried to perform a 'Write' other-type access to member 'Data' in type 'MemberNobodyCanWrite', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(131, 9, 131, 17).WithArguments("a 'Write' other-type", "Data", "MemberNobodyCanWrite", "having no", "Member Permissions: ---------")
);
}
[Test]
public async Task ExecuteTest()
{
const string code = @"
using System;
using Robust.Shared.Analyzers;
// ReSharper disable RedundantAssignment
// ReSharper disable UnusedVariable
// ReSharper disable ArrangeThisQualifier
// ReSharper disable UnusedMember.Global
// ReSharper disable UnusedType.Global
// ReSharper disable NotAccessedField.Global
// ReSharper disable RedundantDefaultMemberInitializer
// ReSharper disable ReturnValueOfPureMethodIsNotUsed
public struct MyData
{
public int MyField;
public void MyMethod() {}
}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public sealed class TypeNobodyCanExecute
{
public MyData Data = default;
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Execute,
Friend = AccessPermissions.Execute,
Other = AccessPermissions.Execute)]
public MyData Data2 = default;
public void MyMethod() {}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Execute,
Friend = AccessPermissions.Execute,
Other = AccessPermissions.Execute)]
public void MyMethod2() {}
public void TestTypeNobodyCanExecute(TypeNobodyCanExecute obj)
{
// None of these accesses should be allowed.
MyMethod();
this.MyMethod();
obj.MyMethod();
Data.MyMethod();
this.Data.MyMethod();
obj.Data.MyMethod();
Data.MyField.ToString();
this.Data.MyField.ToString();
obj.Data.MyField.ToString();
// All of these accesses should be fine.
MyMethod2();
this.MyMethod2();
obj.MyMethod2();
Data2.MyMethod();
this.Data2.MyMethod();
obj.Data2.MyMethod();
Data2.MyField.ToString();
this.Data2.ToString();
obj.Data2.ToString();
}
}
[Access(typeof(FriendlyClass),
Self = AccessPermissions.Execute,
Friend = AccessPermissions.Execute,
Other = AccessPermissions.Execute)]
public sealed class MemberNobodyCanExecute
{
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public MyData Data = default;
public MyData Data2 = default;
[Access(typeof(FriendlyClass),
Self = AccessPermissions.None,
Friend = AccessPermissions.None,
Other = AccessPermissions.None)]
public void MyMethod() {}
public void MyMethod2() {}
public void TestMemberNobodyCanExecute(TypeNobodyCanExecute obj)
{
// None of these accesses should be allowed.
MyMethod();
this.MyMethod();
obj.MyMethod();
Data.MyMethod();
this.Data.MyMethod();
obj.Data.MyMethod();
Data.MyField.ToString();
this.Data.MyField.ToString();
obj.Data.MyField.ToString();
// All of these accesses should be fine.
MyMethod2();
this.MyMethod2();
obj.MyMethod2();
Data2.MyMethod();
this.Data2.MyMethod();
obj.Data2.MyMethod();
Data2.MyField.ToString();
this.Data2.ToString();
obj.Data2.ToString();
}
}
public sealed class FriendlyClass
{
public void TestTypeNobodyCanExecute(TypeNobodyCanExecute obj)
{
// We shouldn't be able to access any of these, even if we're a friend..
obj.MyMethod();
obj.Data.MyMethod();
obj.Data.MyField.ToString();
// We should be allowed to access all of these, we're friends!
obj.MyMethod2();
obj.Data2.MyMethod();
obj.Data2.MyField.ToString();
}
public void TestMemberNobodyCanExecute(MemberNobodyCanExecute obj)
{
// We shouldn't be able to access any of these, even if we're a friend..
obj.MyMethod();
obj.Data.MyMethod();
obj.Data.MyField.ToString();
// We should be allowed to access all of these, we're friends!
obj.MyMethod2();
obj.Data2.MyMethod();
obj.Data2.MyField.ToString();
}
}
public sealed class OtherClass
{
public void TestTypeNobodyCanExecute(TypeNobodyCanExecute obj)
{
// We shouldn't be able to access any of these, as 'other types' can't..
obj.MyMethod();
obj.Data.MyMethod();
obj.Data.MyField.ToString();
// We should be allowed to access all of these, they let others Execute!
obj.MyMethod2();
obj.Data2.MyMethod();
obj.Data2.MyField.ToString();
}
public void TestMemberNobodyCanExecute(MemberNobodyCanExecute obj)
{
// We shouldn't be able to access any of these, as 'other types' can't..
obj.MyMethod();
obj.Data.MyMethod();
obj.Data.MyField.ToString();
// We should be allowed to access all of these, they let others Execute!
obj.MyMethod2();
obj.Data2.MyMethod();
obj.Data2.MyField.ToString();
}
}";
await Verifier(code,
// AUTO-GENERATED DIAGNOSTICS BELOW //
// /0/Test0.cs(44,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'MyMethod' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(44, 9, 44, 19).WithArguments("an 'Execute' same-type", "MyMethod", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(45,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'MyMethod' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(45, 9, 45, 24).WithArguments("an 'Execute' same-type", "MyMethod", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(46,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'MyMethod' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(46, 9, 46, 23).WithArguments("an 'Execute' same-type", "MyMethod", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(48,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(48, 9, 48, 13).WithArguments("an 'Execute' same-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(49,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(49, 9, 49, 18).WithArguments("an 'Execute' same-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(50,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(50, 9, 50, 17).WithArguments("an 'Execute' same-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(52,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(52, 9, 52, 13).WithArguments("an 'Execute' same-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(53,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(53, 9, 53, 18).WithArguments("an 'Execute' same-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(54,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(54, 9, 54, 17).WithArguments("an 'Execute' same-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(96,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'MyMethod' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(96, 9, 96, 19).WithArguments("an 'Execute' same-type", "MyMethod", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(97,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'MyMethod' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(97, 9, 97, 24).WithArguments("an 'Execute' same-type", "MyMethod", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(98,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'MyMethod' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(98, 9, 98, 23).WithArguments("an 'Execute' other-type", "MyMethod", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(100,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(100, 9, 100, 13).WithArguments("an 'Execute' same-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(101,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(101, 9, 101, 18).WithArguments("an 'Execute' same-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(102,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(102, 9, 102, 17).WithArguments("an 'Execute' other-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(104,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(104, 9, 104, 13).WithArguments("an 'Execute' same-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(105,9): error RA0002: Tried to perform an 'Execute' same-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(105, 9, 105, 18).WithArguments("an 'Execute' same-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(106,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(106, 9, 106, 17).WithArguments("an 'Execute' other-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(128,9): error RA0002: Tried to perform an 'Execute' friend-type access to member 'MyMethod' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(128, 9, 128, 23).WithArguments("an 'Execute' friend-type", "MyMethod", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(129,9): error RA0002: Tried to perform an 'Execute' friend-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(129, 9, 129, 17).WithArguments("an 'Execute' friend-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(130,9): error RA0002: Tried to perform an 'Execute' friend-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(130, 9, 130, 17).WithArguments("an 'Execute' friend-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(141,9): error RA0002: Tried to perform an 'Execute' friend-type access to member 'MyMethod' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(141, 9, 141, 23).WithArguments("an 'Execute' friend-type", "MyMethod", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(142,9): error RA0002: Tried to perform an 'Execute' friend-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(142, 9, 142, 17).WithArguments("an 'Execute' friend-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(143,9): error RA0002: Tried to perform an 'Execute' friend-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(143, 9, 143, 17).WithArguments("an 'Execute' friend-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(157,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'MyMethod' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(157, 9, 157, 23).WithArguments("an 'Execute' other-type", "MyMethod", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(158,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(158, 9, 158, 17).WithArguments("an 'Execute' other-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(159,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'Data' in type 'TypeNobodyCanExecute', despite having no access. Type Permissions: ---------
VerifyCS.Diagnostic().WithSpan(159, 9, 159, 17).WithArguments("an 'Execute' other-type", "Data", "TypeNobodyCanExecute", "having no", "Type Permissions: ---------"),
// /0/Test0.cs(170,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'MyMethod' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(170, 9, 170, 23).WithArguments("an 'Execute' other-type", "MyMethod", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(171,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(171, 9, 171, 17).WithArguments("an 'Execute' other-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------"),
// /0/Test0.cs(172,9): error RA0002: Tried to perform an 'Execute' other-type access to member 'Data' in type 'MemberNobodyCanExecute', despite having no access. Member Permissions: ---------
VerifyCS.Diagnostic().WithSpan(172, 9, 172, 17).WithArguments("an 'Execute' other-type", "Data", "MemberNobodyCanExecute", "having no", "Member Permissions: ---------")
);
}
}

View File

@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\MSBuild\Robust.Properties.targets" />
<Import Project="..\MSBuild\Robust.Engine.props" />
<PropertyGroup>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzer.Testing" Version="1.1.1"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.1"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing.NUnit" Version="1.1.1"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.0.1"/>
<PackageReference Include="NUnit" Version="3.13.2"/>
<PackageReference Include="NUnit.ConsoleRunner" Version="3.15.0"/>
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1"/>
<PackageReference Include="NUnit.Analyzers" Version="3.3.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Robust.Analyzers\Robust.Analyzers.csproj"/>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,264 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Operations;
using Robust.Shared.Analyzers.Implementation;
namespace Robust.Analyzers
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class AccessAnalyzer : DiagnosticAnalyzer
{
private const string AccessAttributeType = "Robust.Shared.Analyzers.AccessAttribute";
private const string RobustAutoGeneratedAttributeType = "Robust.Shared.Analyzers.RobustAutoGeneratedAttribute";
private const string PureAttributeType = "System.Diagnostics.Contracts.PureAttribute";
[SuppressMessage("ReSharper", "RS2008")]
private static readonly DiagnosticDescriptor AccessRule = new (
Diagnostics.IdAccess,
"Invalid access",
"Tried to perform {0} access to member '{1}' in type '{2}', despite {3} access. {4}.",
"Usage",
DiagnosticSeverity.Error,
true,
"Make sure to give the accessing type the correct access permissions.");
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics =>
ImmutableArray.Create(AccessRule);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
context.EnableConcurrentExecution();
context.RegisterOperationAction(CheckFriendship,
OperationKind.FieldReference,
OperationKind.PropertyReference,
OperationKind.MethodReference,
OperationKind.Invocation);
}
private void CheckFriendship(OperationAnalysisContext context)
{
var operation = context.Operation;
// The symbol representing the member being accessed.
ISymbol member;
// The operation to target when determining access type.
IOperation targetAccess;
switch (operation)
{
case IMemberReferenceOperation memberRef:
{
member = memberRef.Member;
targetAccess = memberRef.Parent;
break;
}
case IInvocationOperation invocation:
{
member = invocation.TargetMethod;
targetAccess = invocation;
break;
}
default:
return;
}
// Get the info of the type defining the member, so we can check the attributes later...
var accessedType = member.ContainingType;
// Get the attributes
var friendAttribute = context.Compilation.GetTypeByMetadataName(AccessAttributeType);
var autoGenAttribute = context.Compilation.GetTypeByMetadataName(RobustAutoGeneratedAttributeType);
// Get the type that is containing this expression, or, the type where this is happening.
if (context.ContainingSymbol?.ContainingType is not {} accessingType)
return;
// Should we ignore the access attempt due to the accessing type being auto-generated?
if (accessingType.GetAttributes().FirstOrDefault(a =>
a.AttributeClass != null &&
a.AttributeClass.Equals(autoGenAttribute, SymbolEqualityComparer.Default)) is { } attr)
{
return;
}
// Determine which type of access is happening here... Read, write or execute?
var accessAttempt = DetermineAccess(context, targetAccess, operation);
// Check whether this is a "self" access, including inheritors.
var selfAccess = InheritsFromOrEquals(accessingType, accessedType);
// Helper function to deduplicate attribute-checking code.
bool CheckAttributeFriendship(AttributeData attribute, bool isMemberAttribute)
{
// If the attribute isn't the friend attribute, we don't care about it.
if (!SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, friendAttribute))
return false;
var self = AccessAttribute.SelfDefaultPermissions;
var friends = AccessAttribute.FriendDefaultPermissions;
var others = AccessAttribute.OtherDefaultPermissions;
foreach (var kv in attribute.NamedArguments)
{
if (kv.Value.Value is not byte value)
continue;
var permissions = (AccessPermissions) value;
switch (kv.Key)
{
case nameof(AccessAttribute.Self):
{
self = permissions;
break;
}
case nameof(AccessAttribute.Friend):
{
friends = permissions;
break;
}
case nameof(AccessAttribute.Other):
{
others = permissions;
break;
}
default:
continue;
}
}
// By default, we will check the "other" permissions unless we find we're dealing with a friend or self.
var permissionCheck = others;
// Human-readable relation between accessing and accessed types.
var accessingRelation = "other-type";
if (!selfAccess)
{
// This is not a self-access, so we need to determine whether the accessing type is a friend.
// Check all types allowed in the friend attribute. (We assume there's only one constructor arg.)
var types = attribute.ConstructorArguments[0].Values;
foreach (var constant in types)
{
// Check if the value is a type...
if (constant.Value is not INamedTypeSymbol friendType)
continue;
// Check if the accessing type is specified in the attribute...
if (!InheritsFromOrEquals(accessingType, friendType))
continue;
// Set the permissions check to the friend permissions!
permissionCheck = friends;
accessingRelation = "friend-type";
break;
}
}
else
{
// Self-access, so simply set the permissions check to self.
permissionCheck = self;
accessingRelation = "same-type";
}
// If we allow this access, return! All is good.
if ((accessAttempt & permissionCheck) != 0)
return true;
// Access denied! Report an error.
context.ReportDiagnostic(
Diagnostic.Create(AccessRule, operation.Syntax.GetLocation(),
$"a{(accessAttempt == AccessPermissions.Execute ? "n" : "")} '{accessAttempt}' {accessingRelation}",
$"{member.Name}",
$"{accessedType.Name}",
$"{(permissionCheck == AccessPermissions.None ? "having no" : $"only having '{permissionCheck}'")}",
$"{(isMemberAttribute ? "Member" : "Type")} Permissions: {self.ToUnixPermissions()}{friends.ToUnixPermissions()}{others.ToUnixPermissions()}"));
// Only return ONE error.
return true;
}
// Check attributes in the member first, since they take priority and can override type restrictions.
foreach (var attribute in member.GetAttributes())
{
if(CheckAttributeFriendship(attribute, true))
return;
}
// Check attributes in the type containing the member last.
foreach (var attribute in accessedType.GetAttributes())
{
if(CheckAttributeFriendship(attribute, false))
return;
}
}
private static AccessPermissions DetermineAccess(OperationAnalysisContext context, IOperation operation, IOperation original)
{
switch (operation)
{
case IAssignmentOperation assign:
{
return assign.Target.Equals(original) ? AccessPermissions.Write : AccessPermissions.Read;
}
case IInvocationOperation invoke:
{
var pureAttribute = context.Compilation.GetTypeByMetadataName(PureAttributeType);
foreach (var attribute in invoke.TargetMethod.GetAttributes())
{
// Pure methods are treated as read accesses.
if (SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, pureAttribute))
return AccessPermissions.Read;
}
return AccessPermissions.Execute;
}
case IMemberReferenceOperation member:
{
return DetermineAccess(context, member.Parent, operation);
}
default:
{
return AccessPermissions.Read;
}
}
}
private bool InheritsFromOrEquals(INamedTypeSymbol type, INamedTypeSymbol baseType)
{
foreach (var otherType in GetBaseTypesAndThis(type))
{
if (SymbolEqualityComparer.Default.Equals(otherType, baseType))
return true;
}
return false;
}
private IEnumerable<INamedTypeSymbol> GetBaseTypesAndThis(INamedTypeSymbol namedType)
{
var current = namedType;
while (current != null)
{
yield return current;
current = current.BaseType;
}
}
}
}

View File

@@ -0,0 +1,206 @@
#nullable enable
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Operations;
using static Microsoft.CodeAnalysis.SymbolEqualityComparer;
namespace Robust.Analyzers;
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public sealed class ByRefEventAnalyzer : DiagnosticAnalyzer
{
private const string ByRefAttribute = "Robust.Shared.GameObjects.ByRefEventAttribute";
private static readonly DiagnosticDescriptor ByRefEventSubscribedByValueRule = new(
Diagnostics.IdByRefEventSubscribedByValue,
"By-ref event subscribed to by value",
"Tried to subscribe to a by-ref event '{0}' by value.",
"Usage",
DiagnosticSeverity.Error,
true,
"Make sure that methods subscribing to a ref event have the ref keyword for the event argument."
);
private static readonly DiagnosticDescriptor ByValueEventSubscribedByRefRule = new(
Diagnostics.IdValueEventRaisedByRef,
"Value event subscribed to by-ref",
"Tried to subscribe to a value event '{0}' by-ref.",
"Usage",
DiagnosticSeverity.Error,
true,
"Make sure that methods subscribing to value events do not have the ref keyword for the event argument."
);
private static readonly DiagnosticDescriptor ByRefEventRaisedByValueRule = new(
Diagnostics.IdByRefEventRaisedByValue,
"By-ref event raised by value",
"Tried to raise a by-ref event '{0}' by value.",
"Usage",
DiagnosticSeverity.Error,
true,
"Make sure to use the ref keyword when raising ref events."
);
private static readonly DiagnosticDescriptor ByValueEventRaisedByRefRule = new(
Diagnostics.IdValueEventRaisedByRef,
"Value event raised by-ref",
"Tried to raise a value event '{0}' by-ref.",
"Usage",
DiagnosticSeverity.Error,
true,
"Make sure to not use the ref keyword when raising value events."
);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(
ByRefEventSubscribedByValueRule,
ByValueEventSubscribedByRefRule,
ByRefEventRaisedByValueRule,
ByValueEventRaisedByRefRule
);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
context.EnableConcurrentExecution();
context.RegisterOperationAction(CheckEventSubscription, OperationKind.Invocation);
context.RegisterOperationAction(CheckEventRaise, OperationKind.Invocation);
}
private void CheckEventSubscription(OperationAnalysisContext context)
{
if (context.Operation is not IInvocationOperation operation)
return;
var subscribeMethods = context.Compilation
.GetTypeByMetadataName("Robust.Shared.GameObjects.EntitySystem")?
.GetMembers()
.Where(m => m.Name.Contains("SubscribeLocalEvent"))
.Cast<IMethodSymbol>();
if (subscribeMethods == null)
return;
if (!subscribeMethods.Any(m => m.Equals(operation.TargetMethod.OriginalDefinition, Default)))
return;
var typeArguments = operation.TargetMethod.TypeArguments;
if (typeArguments.Length < 1 || typeArguments.Length > 2)
return;
if (operation.Arguments.First().Value is not IDelegateCreationOperation delegateCreation)
return;
if (delegateCreation.Target is not IMethodReferenceOperation methodReference)
return;
var eventParameter = methodReference.Method.Parameters.LastOrDefault();
if (eventParameter == null)
return;
ITypeSymbol eventArgument;
switch (typeArguments.Length)
{
case 1:
eventArgument = typeArguments[0];
break;
case 2:
eventArgument = typeArguments[1];
break;
default:
return;
}
var byRefAttribute = context.Compilation.GetTypeByMetadataName(ByRefAttribute);
if (byRefAttribute == null)
return;
var isByRefEventType = eventArgument
.GetAttributes()
.Any(attribute => attribute.AttributeClass?.Equals(byRefAttribute, Default) ?? false);
var parameterIsRef = eventParameter.RefKind == RefKind.Ref;
if (isByRefEventType != parameterIsRef)
{
var descriptor = isByRefEventType ? ByRefEventSubscribedByValueRule : ByValueEventSubscribedByRefRule;
var diagnostic = Diagnostic.Create(descriptor, operation.Syntax.GetLocation(), eventArgument);
context.ReportDiagnostic(diagnostic);
}
}
private void CheckEventRaise(OperationAnalysisContext context)
{
if (context.Operation is not IInvocationOperation operation)
return;
var raiseMethods = context.Compilation
.GetTypeByMetadataName("Robust.Shared.GameObjects.EntitySystem")?
.GetMembers()
.Where(m => m.Name.Contains("RaiseLocalEvent") && m.Kind == SymbolKind.Method)
.Cast<IMethodSymbol>();
var busRaiseMethods = context.Compilation
.GetTypeByMetadataName("Robust.Shared.GameObjects.EntityEventBus")?
.GetMembers()
.Where(m => m.Name.Contains("RaiseLocalEvent") && m.Kind == SymbolKind.Method)
.Cast<IMethodSymbol>();
if (raiseMethods == null)
return;
if (busRaiseMethods != null)
raiseMethods = raiseMethods.Concat(busRaiseMethods);
if (!raiseMethods.Any(m => m.Equals(operation.TargetMethod.OriginalDefinition, Default)))
{
// If you try to do this normally by concatenating like busRaiseMethods above
// the analyzer does not run without any errors
// I don't know man
const string directedBusMethod = "Robust.Shared.GameObjects.IDirectedEventBus.RaiseLocalEvent";
if (!operation.TargetMethod.ToString().StartsWith(directedBusMethod))
return;
}
var arguments = operation.Arguments;
IArgumentOperation eventArgument;
switch (arguments.Length)
{
case 1:
eventArgument = arguments[0];
break;
case 2:
case 3:
eventArgument = arguments[1];
break;
default:
return;
}
var eventParameter = eventArgument.Parameter;
// TODO have a way to check generic type parameters
if (eventParameter == null ||
eventParameter.Type.SpecialType == SpecialType.System_Object ||
eventParameter.Type.TypeKind == TypeKind.TypeParameter)
{
return;
}
var byRefAttribute = context.Compilation.GetTypeByMetadataName(ByRefAttribute);
if (byRefAttribute == null)
return;
var isByRefEventType = eventParameter.Type
.GetAttributes()
.Any(attribute => attribute.AttributeClass?.Equals(byRefAttribute, Default) ?? false);
var parameterIsRef = eventParameter.RefKind == RefKind.Ref;
if (isByRefEventType != parameterIsRef)
{
var descriptor = isByRefEventType ? ByRefEventRaisedByValueRule : ByValueEventRaisedByRefRule;
var diagnostic = Diagnostic.Create(descriptor, eventArgument.Syntax.GetLocation(), eventParameter.Type);
context.ReportDiagnostic(diagnostic);
}
}
}

View File

@@ -6,8 +6,21 @@ public static class Diagnostics
{
public const string IdExplicitInterface = "RA0000";
public const string IdSerializable = "RA0001";
public const string IdFriend = "RA0002";
public const string IdAccess = "RA0002";
public const string IdExplicitVirtual = "RA0003";
public const string IdTaskResult = "RA0004";
public const string IdUseGenericVariant = "RA0005";
public const string IdUseGenericVariantInvalidUsage = "RA0006";
public const string IdUseGenericVariantAttributeValueError = "RA0007";
public const string IdNotNullableFlagNotSet = "RA0008";
public const string IdInvalidNotNullableFlagValue = "RA0009";
public const string IdInvalidNotNullableFlagImplementation = "RA0010";
public const string IdInvalidNotNullableFlagType = "RA0011";
public const string IdNotNullableFlagValueType = "RA0012";
public const string IdByRefEventSubscribedByValue = "RA0013";
public const string IdValueEventSubscribedByRef = "RA0014";
public const string IdByRefEventRaisedByValue = "RA0015";
public const string IdValueEventRaisedByRef = "RA0016";
public static SuppressionDescriptor MeansImplicitAssignment =>
new SuppressionDescriptor("RADC1000", "CS0649", "Marked as implicitly assigned.");

View File

@@ -1,129 +0,0 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
namespace Robust.Analyzers
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class FriendAnalyzer : DiagnosticAnalyzer
{
const string FriendAttribute = "Robust.Shared.Analyzers.FriendAttribute";
[SuppressMessage("ReSharper", "RS2008")]
private static readonly DiagnosticDescriptor Rule = new (
Diagnostics.IdFriend,
"Tried to access friend-only member",
"Tried to access member \"{0}\" in class \"{1}\" which can only be accessed by friend classes",
"Usage",
DiagnosticSeverity.Error,
true,
"Make sure to specify the accessing class in the friends attribute.");
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(Rule);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
context.EnableConcurrentExecution();
context.RegisterSyntaxNodeAction(CheckFriendship, SyntaxKind.SimpleMemberAccessExpression);
}
private void CheckFriendship(SyntaxNodeAnalysisContext context)
{
if (context.Node is not MemberAccessExpressionSyntax memberAccess)
return;
// We only do something if our parent is one of a few types.
switch (context.Node.Parent)
{
// If we're being assigned...
case AssignmentExpressionSyntax assignParent:
{
if (assignParent.Left != memberAccess)
return;
break;
}
// If we're being invoked...
case InvocationExpressionSyntax:
break;
// Otherwise, do nothing.
default:
return;
}
// Get the friend attribute
var friendAttr = context.Compilation.GetTypeByMetadataName(FriendAttribute);
// Get the type that is containing this expression, or, the class where this is happening.
if (context.ContainingSymbol?.ContainingType is not { } containingType)
return;
// We check all of our children and get only the identifiers.
foreach (var identifier in memberAccess.ChildNodes().Select(node => node as IdentifierNameSyntax))
{
if (identifier == null) continue;
// Get the type info of the identifier, so we can check the attributes...
if (context.SemanticModel.GetTypeInfo(identifier).ConvertedType is not { } type)
continue;
// Same-type access is always fine.
if (SymbolEqualityComparer.Default.Equals(type, containingType))
continue;
// Finally, get all attributes of the type, to check if we have any friend classes.
foreach (var attribute in type.GetAttributes())
{
// If the attribute isn't the friend attribute, continue.
if (!SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, friendAttr))
continue;
// Check all types allowed in the friend attribute. (We assume there's only one constructor arg.)
foreach (var constant in attribute.ConstructorArguments[0].Values)
{
// Check if the value is a type...
if (constant.Value is not INamedTypeSymbol t)
continue;
// If we find that the containing class is specified in the attribute, return! All is good.
if (InheritsFromOrEquals(containingType, t))
return;
}
// Not in a friend class! Report an error.
context.ReportDiagnostic(
Diagnostic.Create(Rule, context.Node.GetLocation(),
$"{context.Node.ToString().Split('.').LastOrDefault()}", $"{type.Name}"));
}
}
}
private bool InheritsFromOrEquals(INamedTypeSymbol type, INamedTypeSymbol baseType)
{
foreach (var otherType in GetBaseTypesAndThis(type))
{
if (SymbolEqualityComparer.Default.Equals(otherType, baseType))
return true;
}
return false;
}
private IEnumerable<INamedTypeSymbol> GetBaseTypesAndThis(INamedTypeSymbol namedType)
{
var current = namedType;
while (current != null)
{
yield return current;
current = current.BaseType;
}
}
}
}

View File

@@ -0,0 +1,171 @@
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Operations;
namespace Robust.Analyzers;
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public sealed class NotNullableFlagAnalyzer : DiagnosticAnalyzer
{
private const string Attribute = "Robust.Shared.Analyzers.NotNullableFlagAttribute";
private static readonly DiagnosticDescriptor NotNullableNotSetRule = new (
Diagnostics.IdNotNullableFlagNotSet,
"Not Nullable Flag not set",
"Class type parameter {0} is not annotated as nullable and notNullableOverride is not set to true",
"Usage",
DiagnosticSeverity.Error,
true,
"Assign true to notNullableOverride or specify the type parameter as nullable.");
private static readonly DiagnosticDescriptor InvalidNotNullableValueRule = new (
Diagnostics.IdInvalidNotNullableFlagValue,
"Not Nullable Flag wrongfully set",
"Class type parameter {0} is annotated as nullable but notNullableOverride is set to true",
"Usage",
DiagnosticSeverity.Error,
true,
"Remove the true assignment to notNullableOverride or remove the nullable specifier of the type parameter.");
private static readonly DiagnosticDescriptor InvalidNotNullableImplementationRule = new (
Diagnostics.IdInvalidNotNullableFlagImplementation,
"Invalid NotNullable flag implementation.",
"NotNullable flag is either not typed as bool, or does not have a default value equaling false",
"Usage",
DiagnosticSeverity.Error,
true,
"Ensure that the notNullable flag is typed bool and has false set as a default value.");
private static readonly DiagnosticDescriptor InvalidNotNullableTypeRule = new (
Diagnostics.IdInvalidNotNullableFlagType,
"Failed to resolve type parameter",
"Failed to resolve type parameter \"{0}\".",
"Usage",
DiagnosticSeverity.Error,
true,
"Use nameof to avoid typos.");
private static readonly DiagnosticDescriptor NotNullableFlagValueTypeRule = new (
Diagnostics.IdNotNullableFlagValueType,
"NotNullable flag not supported for value types.",
"Value types as generic arguments are not supported for NotNullable flags",
"Usage",
DiagnosticSeverity.Error,
true,
"Nullable value types are distinct at runtime when inspected with reflection. Therefore they are not supported for NotNullable flags.");
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics =>
ImmutableArray.Create(
NotNullableNotSetRule,
InvalidNotNullableValueRule,
InvalidNotNullableImplementationRule,
InvalidNotNullableTypeRule,
NotNullableFlagValueTypeRule);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
context.EnableConcurrentExecution();
context.RegisterOperationAction(CheckNotNullableFlag, OperationKind.Invocation);
}
private bool TryGetTypeArgument(IMethodSymbol methodSymbol, string typeParamName, out ITypeSymbol typeArgument)
{
for (var index = 0; index < methodSymbol.TypeParameters.Length; index++)
{
if (methodSymbol.TypeParameters[index].Name != typeParamName)
continue;
typeArgument = methodSymbol.TypeArguments[index];
return true;
}
typeArgument = null;
return false;
}
private void CheckNotNullableFlag(OperationAnalysisContext context)
{
if (context.Operation is not IInvocationOperation invocationOperation || !invocationOperation.TargetMethod.IsGenericMethod)
return;
var attribute = context.Compilation.GetTypeByMetadataName(Attribute);
var @bool = context.Compilation.GetSpecialType(SpecialType.System_Boolean);
foreach (var argument in invocationOperation.Arguments)
{
if(argument.Parameter == null) continue;
foreach (var attributeData in argument.Parameter.GetAttributes())
{
if (!SymbolEqualityComparer.Default.Equals(attributeData.AttributeClass, attribute))
continue;
if (!SymbolEqualityComparer.Default.Equals(argument.Parameter.Type, @bool) ||
!argument.Parameter.HasExplicitDefaultValue ||
argument.Parameter.ExplicitDefaultValue as bool? != false)
{
context.ReportDiagnostic(Diagnostic.Create(
InvalidNotNullableImplementationRule,
argument.Parameter.Locations[0]));
break;
}
if (!TryGetTypeArgument(invocationOperation.TargetMethod,
attributeData.ConstructorArguments[0].Value as string, out var typeArgument))
{
context.ReportDiagnostic(Diagnostic.Create(
InvalidNotNullableTypeRule,
argument.Parameter.Locations[0],
attributeData.ConstructorArguments[0].Value as string));
break;
}
//until i find a way to implement it sanely, generic calls are exempt from this attribute
if(typeArgument is ITypeParameterSymbol) break;
//dont ask me why, argument.ConstantValue just straight up doesnt work.
//i still kept it in here as a fallback, incase it ever starts working again lol -<paul
var constantValue = (argument.Value as ILiteralOperation)?.ConstantValue ?? argument.ConstantValue;
if (typeArgument.IsValueType)
{
if (argument.ArgumentKind != ArgumentKind.DefaultValue)
{
//todo diagnostic only use for struct types
context.ReportDiagnostic(Diagnostic.Create(
NotNullableFlagValueTypeRule,
argument.Syntax.GetLocation()));
}
break;
}
if (typeArgument.NullableAnnotation == NullableAnnotation.None ||
(argument.ArgumentKind != ArgumentKind.DefaultValue && !constantValue.HasValue))
break;
var flagValue = argument.ArgumentKind != ArgumentKind.DefaultValue ||
constantValue.Value as bool? == true;
var nullable = typeArgument.NullableAnnotation == NullableAnnotation.Annotated;
if (nullable && flagValue)
{
context.ReportDiagnostic(Diagnostic.Create(InvalidNotNullableValueRule,
argument.Syntax.GetLocation(),
typeArgument));
}
else if (!nullable && !flagValue)
{
context.ReportDiagnostic(Diagnostic.Create(NotNullableNotSetRule,
argument.Syntax.GetLocation(),
typeArgument));
}
break;
}
}
}
}

View File

@@ -0,0 +1,238 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeActions;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Operations;
namespace Robust.Analyzers;
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public sealed class PreferGenericVariantAnalyzer : DiagnosticAnalyzer
{
private const string AttributeType = "Robust.Shared.Analyzers.PreferGenericVariantAttribute";
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray.Create(
UseGenericVariantDescriptor, UseGenericVariantInvalidUsageDescriptor,
UseGenericVariantAttributeValueErrorDescriptor);
private static readonly DiagnosticDescriptor UseGenericVariantDescriptor = new(
Diagnostics.IdUseGenericVariant,
"Consider using the generic variant of this method",
"Consider using the generic variant of this method to avoid potential allocations",
"Usage",
DiagnosticSeverity.Warning,
true,
"Consider using the generic variant of this method to avoid potential allocations.");
private static readonly DiagnosticDescriptor UseGenericVariantInvalidUsageDescriptor = new(
Diagnostics.IdUseGenericVariantInvalidUsage,
"Invalid generic variant provided",
"Generic variant provided mismatches the amount of type parameters of non-generic variant",
"Usage",
DiagnosticSeverity.Error,
true,
"The non-generic variant should have at least as many type parameter at the beginning of the method as there are generic type parameters on the generic variant.");
private static readonly DiagnosticDescriptor UseGenericVariantAttributeValueErrorDescriptor = new(
Diagnostics.IdUseGenericVariantAttributeValueError,
"Failed resolving generic variant value",
"Failed resolving generic variant value: {0}",
"Usage",
DiagnosticSeverity.Error,
true,
"Consider using nameof to avoid any typos.");
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.ReportDiagnostics | GeneratedCodeAnalysisFlags.Analyze);
context.EnableConcurrentExecution();
context.RegisterOperationAction(CheckForGenericVariant, OperationKind.Invocation);
}
private void CheckForGenericVariant(OperationAnalysisContext obj)
{
if(obj.Operation is not IInvocationOperation invocationOperation) return;
var preferGenericAttribute = obj.Compilation.GetTypeByMetadataName(AttributeType);
string genericVariant = null;
AttributeData foundAttribute = null;
foreach (var attribute in invocationOperation.TargetMethod.GetAttributes())
{
if (!SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, preferGenericAttribute))
continue;
genericVariant = attribute.ConstructorArguments[0].Value as string ?? invocationOperation.TargetMethod.Name;
foundAttribute = attribute;
break;
}
if(genericVariant == null) return;
var maxTypeParams = 0;
var typeTypeSymbol = obj.Compilation.GetTypeByMetadataName("System.Type");
foreach (var parameter in invocationOperation.TargetMethod.Parameters)
{
if(!SymbolEqualityComparer.Default.Equals(parameter.Type, typeTypeSymbol)) break;
maxTypeParams++;
}
if (maxTypeParams == 0)
{
obj.ReportDiagnostic(
Diagnostic.Create(UseGenericVariantInvalidUsageDescriptor,
foundAttribute.ApplicationSyntaxReference?.GetSyntax().GetLocation()));
return;
}
IMethodSymbol genericVariantMethod = null;
foreach (var member in invocationOperation.TargetMethod.ContainingType.GetMembers())
{
if (member is not IMethodSymbol methodSymbol
|| methodSymbol.Name != genericVariant
|| !methodSymbol.IsGenericMethod
|| methodSymbol.TypeParameters.Length > maxTypeParams
|| methodSymbol.Parameters.Length > invocationOperation.TargetMethod.Parameters.Length - methodSymbol.TypeParameters.Length
) continue;
var typeParamCount = methodSymbol.TypeParameters.Length;
var failedParamComparison = false;
var objType = obj.Compilation.GetSpecialType(SpecialType.System_Object);
for (int i = 0; i < methodSymbol.Parameters.Length; i++)
{
if (methodSymbol.Parameters[i].Type is ITypeParameterSymbol && SymbolEqualityComparer.Default.Equals(invocationOperation.TargetMethod.Parameters[i + typeParamCount].Type, objType))
continue;
if (!SymbolEqualityComparer.Default.Equals(methodSymbol.Parameters[i].Type,
invocationOperation.TargetMethod.Parameters[i + typeParamCount].Type))
{
failedParamComparison = true;
break;
}
}
if(failedParamComparison) continue;
genericVariantMethod = methodSymbol;
}
if (genericVariantMethod == null)
{
obj.ReportDiagnostic(Diagnostic.Create(
UseGenericVariantAttributeValueErrorDescriptor,
foundAttribute.ApplicationSyntaxReference?.GetSyntax().GetLocation(),
genericVariant));
return;
}
var typeOperands = new string[genericVariantMethod.TypeParameters.Length];
for (var i = 0; i < genericVariantMethod.TypeParameters.Length; i++)
{
switch (invocationOperation.Arguments[i].Value)
{
//todo figure out if ILocalReferenceOperation, IPropertyReferenceOperation or IFieldReferenceOperation is referencing static typeof assignments
case ITypeOfOperation typeOfOperation:
typeOperands[i] = typeOfOperation.TypeOperand.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
continue;
default:
return;
}
}
obj.ReportDiagnostic(Diagnostic.Create(
UseGenericVariantDescriptor,
invocationOperation.Syntax.GetLocation(),
ImmutableDictionary.CreateRange(new Dictionary<string, string>()
{
{"typeOperands", string.Join(",", typeOperands)}
})));
}
}
[ExportCodeFixProvider(LanguageNames.CSharp)]
public class PreferGenericVariantCodeFixProvider : CodeFixProvider
{
private static string Title(string method, string[] types) => $"Use {method}<{string.Join(",", types)}>.";
public override FixAllProvider GetFixAllProvider()
{
return WellKnownFixAllProviders.BatchFixer;
}
public override async Task RegisterCodeFixesAsync(CodeFixContext context)
{
var root = await context.Document.GetSyntaxRootAsync();
if(root == null) return;
foreach (var diagnostic in context.Diagnostics)
{
if (!diagnostic.Properties.TryGetValue("typeOperands", out var typeOperandsRaw)
|| typeOperandsRaw == null) continue;
var node = root.FindNode(diagnostic.Location.SourceSpan);
if (node is ArgumentSyntax argumentSyntax)
node = argumentSyntax.Expression;
if(node is not InvocationExpressionSyntax invocationExpression)
continue;
var typeOperands = typeOperandsRaw.Split(',');
context.RegisterCodeFix(
CodeAction.Create(
Title(invocationExpression.Expression.ToString(), typeOperands),
c => FixAsync(context.Document, invocationExpression, typeOperands, c),
Title(invocationExpression.Expression.ToString(), typeOperands)),
diagnostic);
}
}
private async Task<Document> FixAsync(
Document contextDocument,
InvocationExpressionSyntax invocationExpression,
string[] typeOperands,
CancellationToken cancellationToken)
{
var memberAccess = (MemberAccessExpressionSyntax)invocationExpression.Expression;
var root = (CompilationUnitSyntax) await contextDocument.GetSyntaxRootAsync(cancellationToken);
var arguments = new ArgumentSyntax[invocationExpression.ArgumentList.Arguments.Count - typeOperands.Length];
var types = new TypeSyntax[typeOperands.Length];
for (int i = 0; i < typeOperands.Length; i++)
{
types[i] = ((TypeOfExpressionSyntax)invocationExpression.ArgumentList.Arguments[i].Expression).Type;
}
Array.Copy(
invocationExpression.ArgumentList.Arguments.ToArray(),
typeOperands.Length,
arguments,
0,
arguments.Length);
memberAccess = memberAccess.WithName(SyntaxFactory.GenericName(memberAccess.Name.Identifier,
SyntaxFactory.TypeArgumentList(SyntaxFactory.SeparatedList(types))));
root = root!.ReplaceNode(invocationExpression,
invocationExpression.WithArgumentList(invocationExpression.ArgumentList.WithArguments(SyntaxFactory.SeparatedList(arguments)))
.WithExpression(memberAccess));
return contextDocument.WithSyntaxRoot(root);
}
public override ImmutableArray<string> FixableDiagnosticIds =>
ImmutableArray.Create(Diagnostics.IdUseGenericVariant);
}

View File

@@ -6,9 +6,25 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.8.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="3.8.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.1" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.0.1" />
</ItemGroup>
<ItemGroup>
<!-- Needed for NotNullableFlagAnalyzer. -->
<Compile Include="..\Robust.Shared\Analyzers\NotNullableFlagAttribute.cs" />
</ItemGroup>
<ItemGroup>
<!-- Needed for FriendAnalyzer. -->
<Compile Include="..\Robust.Shared\Analyzers\AccessAttribute.cs" />
<Compile Include="..\Robust.Shared\Analyzers\AccessPermissions.cs" />
</ItemGroup>
<ItemGroup>
<!-- Needed for PreferGenericVariantAnalyzer. -->
<Compile Include="..\Robust.Shared\Analyzers\PreferGenericVariantAttribute.cs" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,44 @@
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Operations;
namespace Robust.Analyzers;
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public sealed class TaskResultAnalyzer : DiagnosticAnalyzer
{
[SuppressMessage("ReSharper", "RS2008")]
private static readonly DiagnosticDescriptor ResultRule = new DiagnosticDescriptor(
Diagnostics.IdTaskResult,
"Risk of deadlock from accessing Task<T>.Result",
"Accessing Task<T>.Result is dangerous and can cause deadlocks in some contexts. If you understand how this works and are certain that you aren't causing a deadlock here, mute this error with #pragma.",
"Usage",
DiagnosticSeverity.Error,
true);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics =>
ImmutableArray.Create(ResultRule);
public override void Initialize(AnalysisContext context)
{
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
context.EnableConcurrentExecution();
context.RegisterOperationAction(Check, OperationKind.PropertyReference);
}
private static void Check(OperationAnalysisContext context)
{
var taskType = context.Compilation.GetTypeByMetadataName("System.Threading.Tasks.Task`1");
var operation = (IPropertyReferenceOperation) context.Operation;
var member = operation.Member;
if (member.Name == "Result" && taskType.Equals(member.ContainingType.ConstructedFrom, SymbolEqualityComparer.Default))
{
var diag = Diagnostic.Create(ResultRule, operation.Syntax.GetLocation());
context.ReportDiagnostic(diag);
}
}
}

View File

@@ -0,0 +1,53 @@
using System.Collections.Generic;
using System.Globalization;
using BenchmarkDotNet.Analysers;
using BenchmarkDotNet.Columns;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Filters;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Order;
using BenchmarkDotNet.Reports;
using BenchmarkDotNet.Validators;
using Robust.Benchmarks.Exporters;
namespace Robust.Benchmarks.Configs;
public sealed class DefaultSQLConfig : IConfig
{
public static readonly IConfig Instance = new DefaultSQLConfig();
private DefaultSQLConfig(){}
public IEnumerable<IExporter> GetExporters()
{
yield return SQLExporter.Default;
}
public IEnumerable<IColumnProvider> GetColumnProviders() => DefaultConfig.Instance.GetColumnProviders();
public IEnumerable<ILogger> GetLoggers() => DefaultConfig.Instance.GetLoggers();
public IEnumerable<IDiagnoser> GetDiagnosers() => DefaultConfig.Instance.GetDiagnosers();
public IEnumerable<IAnalyser> GetAnalysers() => DefaultConfig.Instance.GetAnalysers();
public IEnumerable<Job> GetJobs() => DefaultConfig.Instance.GetJobs();
public IEnumerable<IValidator> GetValidators() => DefaultConfig.Instance.GetValidators();
public IEnumerable<HardwareCounter> GetHardwareCounters() => DefaultConfig.Instance.GetHardwareCounters();
public IEnumerable<IFilter> GetFilters() => DefaultConfig.Instance.GetFilters();
public IEnumerable<BenchmarkLogicalGroupRule> GetLogicalGroupRules() => DefaultConfig.Instance.GetLogicalGroupRules();
public IOrderer Orderer => DefaultConfig.Instance.Orderer!;
public SummaryStyle SummaryStyle => DefaultConfig.Instance.SummaryStyle;
public ConfigUnionRule UnionRule => DefaultConfig.Instance.UnionRule;
public string ArtifactsPath => DefaultConfig.Instance.ArtifactsPath;
public CultureInfo CultureInfo => DefaultConfig.Instance.CultureInfo!;
public ConfigOptions Options => DefaultConfig.Instance.Options;
}

View File

@@ -0,0 +1,54 @@
using BenchmarkDotNet.Attributes;
using JetBrains.Annotations;
using Robust.Shared.Analyzers;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.UnitTesting.Server;
namespace Robust.Benchmarks.EntityManager;
[Virtual]
public class AddRemoveComponentBenchmark
{
private ISimulation _simulation = default!;
private IEntityManager _entityManager = default!;
[UsedImplicitly]
[Params(1, 10, 100, 1000)]
public int N;
[GlobalSetup]
public void GlobalSetup()
{
_simulation = RobustServerSimulation
.NewSimulation()
.RegisterComponents(f => f.RegisterClass<A>())
.InitializeInstance();
_entityManager = _simulation.Resolve<IEntityManager>();
var coords = new MapCoordinates(0, 0, new MapId(1));
_simulation.AddMap(coords.MapId);
for (var i = 0; i < N; i++)
{
_entityManager.SpawnEntity(null, coords);
}
}
[Benchmark]
public void AddRemoveComponent()
{
for (var i = 2; i <= N+1; i++)
{
var uid = new EntityUid(i);
_entityManager.AddComponent<A>(uid);
_entityManager.RemoveComponent<A>(uid);
}
}
[ComponentProtoName("A")]
public sealed class A : Component
{
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,225 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using BenchmarkDotNet.Attributes;
using Robust.Shared.GameObjects;
namespace Robust.Benchmarks.EntityManager;
public class ComponentIndexBenchmark
{
// Just a bunch of types to bloat the test lists.
private readonly CompIndexFetcher _compIndexFetcherDirect;
private readonly IFetcher _compIndexFetcher;
private readonly DictFetcher _dictFetcherDirect;
private readonly IFetcher _dictFetcher;
public ComponentIndexBenchmark()
{
_compIndexFetcherDirect = new CompIndexFetcher();
_compIndexFetcher = _compIndexFetcherDirect;
_dictFetcherDirect = new DictFetcher();
_dictFetcher = _dictFetcherDirect;
}
[GlobalSetup]
public void Setup()
{
var types = typeof(ComponentIndexBenchmark)
.GetNestedTypes(BindingFlags.NonPublic)
.Where(t => t.Name.StartsWith("TestType"))
.ToArray();
_compIndexFetcher.Init(types);
_dictFetcher.Init(types);
}
[Benchmark]
public int BenchCompIndex() => _compIndexFetcher.Get<TestType50>();
[Benchmark]
public int BenchDict() => _dictFetcher.Get<TestType50>();
[Benchmark]
public int BenchCompIndexDirect() => _compIndexFetcherDirect.Get<TestType50>();
[Benchmark]
public int BenchDictDirect() => _dictFetcherDirect.Get<TestType50>();
private static CompIdx ArrayIndexFor<T>() => CompArrayIndex<T>.Idx;
private static int _compIndexMaster = -1;
private static class CompArrayIndex<T>
{
// ReSharper disable once StaticMemberInGenericType
public static readonly CompIdx Idx = new(Interlocked.Increment(ref _compIndexMaster));
}
private static CompIdx GetCompIdIndex(Type type)
{
return (CompIdx)typeof(CompArrayIndex<>)
.MakeGenericType(type)
.GetField(nameof(CompArrayIndex<int>.Idx), BindingFlags.Static | BindingFlags.Public)!
.GetValue(null)!;
}
private interface IFetcher
{
void Init(Type[] types);
int Get<T>();
}
private sealed class CompIndexFetcher : IFetcher
{
private int[] _values = Array.Empty<int>();
public void Init(Type[] types)
{
var max = types.Max(t => GetCompIdIndex(t).Value);
_values = new int[max + 1];
var i = 0;
foreach (var type in types)
{
_values[GetCompIdIndex(type).Value] = i++;
}
}
public int Get<T>()
{
return _values[CompArrayIndex<T>.Idx.Value];
}
}
private sealed class DictFetcher : IFetcher
{
private readonly Dictionary<Type, int> _values = new();
public void Init(Type[] types)
{
var i = 0;
foreach (var type in types)
{
_values[type] = i++;
}
}
public int Get<T>()
{
return _values[typeof(T)];
}
}
// Just a bunch of types to pad the size of the arrays and such.
// @formatter:off
// ReSharper disable UnusedType.Local
private sealed class TestType1{}
private sealed class TestType2{}
private sealed class TestType3{}
private sealed class TestType4{}
private sealed class TestType5{}
private sealed class TestType6{}
private sealed class TestType7{}
private sealed class TestType8{}
private sealed class TestType9{}
private sealed class TestType10{}
private sealed class TestType11{}
private sealed class TestType12{}
private sealed class TestType13{}
private sealed class TestType14{}
private sealed class TestType15{}
private sealed class TestType16{}
private sealed class TestType17{}
private sealed class TestType18{}
private sealed class TestType19{}
private sealed class TestType20{}
private sealed class TestType21{}
private sealed class TestType22{}
private sealed class TestType23{}
private sealed class TestType24{}
private sealed class TestType25{}
private sealed class TestType26{}
private sealed class TestType27{}
private sealed class TestType28{}
private sealed class TestType29{}
private sealed class TestType30{}
private sealed class TestType31{}
private sealed class TestType32{}
private sealed class TestType33{}
private sealed class TestType34{}
private sealed class TestType35{}
private sealed class TestType36{}
private sealed class TestType37{}
private sealed class TestType38{}
private sealed class TestType39{}
private sealed class TestType40{}
private sealed class TestType41{}
private sealed class TestType42{}
private sealed class TestType43{}
private sealed class TestType44{}
private sealed class TestType45{}
private sealed class TestType46{}
private sealed class TestType47{}
private sealed class TestType48{}
private sealed class TestType49{}
private sealed class TestType50{}
private sealed class TestType51{}
private sealed class TestType52{}
private sealed class TestType53{}
private sealed class TestType54{}
private sealed class TestType55{}
private sealed class TestType56{}
private sealed class TestType57{}
private sealed class TestType58{}
private sealed class TestType59{}
private sealed class TestType60{}
private sealed class TestType61{}
private sealed class TestType62{}
private sealed class TestType63{}
private sealed class TestType64{}
private sealed class TestType65{}
private sealed class TestType66{}
private sealed class TestType67{}
private sealed class TestType68{}
private sealed class TestType69{}
private sealed class TestType70{}
private sealed class TestType71{}
private sealed class TestType72{}
private sealed class TestType73{}
private sealed class TestType74{}
private sealed class TestType75{}
private sealed class TestType76{}
private sealed class TestType77{}
private sealed class TestType78{}
private sealed class TestType79{}
private sealed class TestType80{}
private sealed class TestType81{}
private sealed class TestType82{}
private sealed class TestType83{}
private sealed class TestType84{}
private sealed class TestType85{}
private sealed class TestType86{}
private sealed class TestType87{}
private sealed class TestType88{}
private sealed class TestType89{}
private sealed class TestType90{}
private sealed class TestType91{}
private sealed class TestType92{}
private sealed class TestType93{}
private sealed class TestType94{}
private sealed class TestType95{}
private sealed class TestType96{}
private sealed class TestType97{}
private sealed class TestType98{}
private sealed class TestType99{}
// ReSharper restore UnusedType.Local
// @formatter:on
}

View File

@@ -0,0 +1,75 @@
using BenchmarkDotNet.Attributes;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.UnitTesting.Server;
namespace Robust.Benchmarks.EntityManager;
public class ComponentIteratorBenchmark
{
private ISimulation _simulation = default!;
private IEntityManager _entityManager = default!;
[UsedImplicitly]
[Params(1, 10, 100, 1000)]
public int N;
public A[] Comps = default!;
[GlobalSetup]
public void GlobalSetup()
{
_simulation = RobustServerSimulation
.NewSimulation()
.RegisterComponents(f => f.RegisterClass<A>())
.InitializeInstance();
_entityManager = _simulation.Resolve<IEntityManager>();
Comps = new A[N+2];
var coords = new MapCoordinates(0, 0, new MapId(1));
_simulation.AddMap(coords.MapId);
for (var i = 0; i < N; i++)
{
var uid = _entityManager.SpawnEntity(null, coords);
_entityManager.AddComponent<A>(uid);
}
}
[Benchmark]
public A[] ComponentStructEnumerator()
{
var query = _entityManager.EntityQueryEnumerator<A>();
var i = 0;
while (query.MoveNext(out var comp))
{
Comps[i] = comp;
i++;
}
return Comps;
}
[Benchmark]
public A[] ComponentIEnumerable()
{
var i = 0;
foreach (var comp in _entityManager.EntityQuery<A>())
{
Comps[i] = comp;
i++;
}
return Comps;
}
[ComponentProtoName("A")]
public sealed class A : Component
{
}
}

View File

@@ -0,0 +1,53 @@
using BenchmarkDotNet.Attributes;
using Robust.Shared.Analyzers;
using static Robust.Benchmarks.EntityManager.ArchetypeComponentAccessBenchmark;
namespace Robust.Benchmarks.EntityManager;
[MemoryDiagnoser]
[Virtual]
public class ArrayAccessBenchmark
{
[Params(new[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9})]
public int[] Array = default!;
[Params(5)]
public int Element;
[Params(500)]
public int Handle;
public Archetype<int, int, int, int, int, int, int, int, int, int> Archetype = default!;
[GlobalSetup]
public void GlobalSetup()
{
Archetype = new Archetype<int, int, int, int, int, int, int, int, int, int>(1000);
}
[Benchmark]
public int? GetArrayElement()
{
return Consume();
}
[Benchmark]
public int? GetExisting()
{
return Consume(Element);
}
[Benchmark]
public int? GetArchetype()
{
return Consume(Archetype.GetComponentUnsafeHandle<int>(Handle));
}
private int? Consume(int? value = null)
{
if (value == null)
value = Array[5];
return value;
}
}

View File

@@ -0,0 +1,61 @@
using System;
using BenchmarkDotNet.Attributes;
using JetBrains.Annotations;
using Robust.Shared.Analyzers;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.UnitTesting.Server;
namespace Robust.Benchmarks.EntityManager;
[Virtual]
public class GetComponentBenchmark
{
private ISimulation _simulation = default!;
private IEntityManager _entityManager = default!;
[UsedImplicitly]
[Params(1, 10, 100, 1000)]
public int N;
public A[] Comps = default!;
[GlobalSetup]
public void GlobalSetup()
{
_simulation = RobustServerSimulation
.NewSimulation()
.RegisterComponents(f => f.RegisterClass<A>())
.InitializeInstance();
_entityManager = _simulation.Resolve<IEntityManager>();
Comps = new A[N+2];
var coords = new MapCoordinates(0, 0, new MapId(1));
_simulation.AddMap(coords.MapId);
for (var i = 0; i < N; i++)
{
var uid = _entityManager.SpawnEntity(null, coords);
_entityManager.AddComponent<A>(uid);
}
}
[Benchmark]
public A[] GetComponent()
{
for (var i = 2; i <= N+1; i++)
{
Comps[i] = _entityManager.GetComponent<A>(new EntityUid(i));
}
// Return something so the JIT doesn't optimize out all the GetComponent calls.
return Comps;
}
[ComponentProtoName("A")]
public sealed class A : Component
{
}
}

View File

@@ -0,0 +1,62 @@
using BenchmarkDotNet.Attributes;
using JetBrains.Annotations;
using Robust.Shared.Analyzers;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.UnitTesting.Server;
namespace Robust.Benchmarks.EntityManager;
[Virtual]
public class SpawnDeleteEntityBenchmark
{
private ISimulation _simulation = default!;
private IEntityManager _entityManager = default!;
private MapCoordinates _mapCoords = MapCoordinates.Nullspace;
private EntityCoordinates _entCoords = EntityCoordinates.Invalid;
[UsedImplicitly]
[Params(1, 10, 100, 1000)]
public int N;
[GlobalSetup]
public void GlobalSetup()
{
_simulation = RobustServerSimulation
.NewSimulation()
.RegisterComponents(f => f.RegisterClass<A>())
.InitializeInstance();
_entityManager = _simulation.Resolve<IEntityManager>();
_mapCoords = new MapCoordinates(0, 0, new MapId(1));
var uid = _simulation.AddMap(_mapCoords.MapId);
_entCoords = new EntityCoordinates(uid, 0, 0);
}
[Benchmark(Baseline = true)]
public void SpawnDeleteEntityMapCoords()
{
for (var i = 0; i < N; i++)
{
var uid = _entityManager.SpawnEntity(null, _mapCoords);
_entityManager.DeleteEntity(uid);
}
}
[Benchmark]
public void SpawnDeleteEntityEntCoords()
{
for (var i = 0; i < N; i++)
{
var uid = _entityManager.SpawnEntity(null, _entCoords);
_entityManager.DeleteEntity(uid);
}
}
[ComponentProtoName("A")]
public sealed class A : Component
{
}
}

View File

@@ -0,0 +1,227 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Loggers;
using BenchmarkDotNet.Mathematics;
using BenchmarkDotNet.Parameters;
using BenchmarkDotNet.Reports;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Npgsql;
using Npgsql.Internal;
using Npgsql.Internal.TypeHandlers;
using Npgsql.Internal.TypeHandling;
namespace Robust.Benchmarks.Exporters;
public sealed class SQLExporter : IExporter
{
private static readonly JsonSerializerOptions JsonSerializerOptions = new JsonSerializerOptions
{
NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals
};
public static readonly IExporter Default = new SQLExporter();
private SQLExporter(){}
public void ExportToLog(Summary summary, ILogger logger)
{
Export(summary, logger);
}
public IEnumerable<string> ExportToFiles(Summary summary, ILogger consoleLogger)
{
Export(summary, consoleLogger);
return Array.Empty<string>();
}
private bool TryGetEnvironmentVariable(string name, ILogger logger, [NotNullWhen(true)] out string? value)
{
value = Environment.GetEnvironmentVariable(name);
if (value == null)
logger.WriteError($"ROBUST_BENCHMARKS_ENABLE_SQL is set, but {name} is missing.");
return value != null;
}
private void Export(Summary summary, ILogger logger)
{
if (!TryGetEnvironmentVariable("ROBUST_BENCHMARKS_SQL_ADDRESS", logger, out var address) ||
!TryGetEnvironmentVariable("ROBUST_BENCHMARKS_SQL_PORT", logger, out var rawPort) ||
!TryGetEnvironmentVariable("ROBUST_BENCHMARKS_SQL_USER", logger, out var user) ||
!TryGetEnvironmentVariable("ROBUST_BENCHMARKS_SQL_PASSWORD", logger, out var password) ||
!TryGetEnvironmentVariable("ROBUST_BENCHMARKS_SQL_DATABASE", logger, out var db) ||
!TryGetEnvironmentVariable("GITHUB_SHA", logger, out var gitHash))
return;
if (!int.TryParse(rawPort, out var port))
{
logger.WriteError("Failed parsing ROBUST_BENCHMARKS_SQL_PORT to int.");
return;
}
var builder = new DbContextOptionsBuilder<BenchmarkContext>();
var connectionString = new NpgsqlConnectionStringBuilder
{
Host = address,
Port = port,
Database = db,
Username = user,
Password = password
}.ConnectionString;
builder.UseNpgsql(connectionString);
using var ctx = new BenchmarkContext(builder.Options);
try
{
ctx.Database.OpenConnection();
var con = (NpgsqlConnection) ctx.Database.GetDbConnection();
con.TypeMapper.AddTypeResolverFactory(new JsonOverrideTypeHandlerResolverFactory(JsonSerializerOptions));
ctx.Database.Migrate();
foreach (var run in BenchmarkRun.FromSummary(summary, gitHash))
{
ctx.BenchmarkRuns.Add(run);
}
ctx.SaveChanges();
}
finally
{
ctx.Dispose();
}
}
public string Name => "sql";
}
// https://github.com/npgsql/efcore.pg/issues/1107#issuecomment-945126627
class JsonOverrideTypeHandlerResolverFactory : TypeHandlerResolverFactory
{
private readonly JsonSerializerOptions _options;
public JsonOverrideTypeHandlerResolverFactory(JsonSerializerOptions options)
=> _options = options;
public override TypeHandlerResolver Create(NpgsqlConnector connector)
=> new JsonOverrideTypeHandlerResolver(connector, _options);
public override string? GetDataTypeNameByClrType(Type clrType)
=> null;
public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
=> null;
class JsonOverrideTypeHandlerResolver : TypeHandlerResolver
{
readonly JsonHandler _jsonbHandler;
internal JsonOverrideTypeHandlerResolver(NpgsqlConnector connector, JsonSerializerOptions options)
=> _jsonbHandler ??= new JsonHandler(
connector.DatabaseInfo.GetPostgresTypeByName("jsonb"),
connector.TextEncoding,
isJsonb: true,
options);
public override NpgsqlTypeHandler? ResolveByDataTypeName(string typeName)
=> typeName == "jsonb" ? _jsonbHandler : null;
public override NpgsqlTypeHandler? ResolveByClrType(Type type)
// You can add any user-defined CLR types which you want mapped to jsonb
=> type == typeof(JsonDocument) ? _jsonbHandler : null;
public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
=> null; // Let the built-in resolver do this
}
}
public sealed class DesignTimeContextFactoryPostgres : IDesignTimeDbContextFactory<BenchmarkContext>
{
public BenchmarkContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<BenchmarkContext>();
optionsBuilder.UseNpgsql("Server=localhost");
return new BenchmarkContext(optionsBuilder.Options);
}
}
public class BenchmarkContext : DbContext
{
public DbSet<BenchmarkRun> BenchmarkRuns { get; set; } = default!;
public BenchmarkContext() { }
public BenchmarkContext(DbContextOptions<BenchmarkContext> options) : base(options) { }
}
public class BenchmarkRun
{
public int Id { get; set; }
public string GitHash { get; set; } = string.Empty;
[Column(TypeName = "timestamptz")] public DateTime RunDate { get; set; }
public string Name { get; set; } = string.Empty;
public string? ParameterMapping { get; set; }
[Column(TypeName = "jsonb")]
public BenchmarkRunParameter[]? ParameterMappingJson { get; set; }
[Column(TypeName = "jsonb")]
public Statistics Statistics { get; set; } = default!;
public static IEnumerable<BenchmarkRun> FromSummary(Summary summary, string gitHash)
{
var runDate = DateTime.UtcNow;
foreach (var benchmarkReport in summary.Reports)
{
var paramString = new StringBuilder();
var parametersItems = benchmarkReport.BenchmarkCase.Parameters.Items;
var runParameters = new BenchmarkRunParameter[parametersItems.Count];
for (var i = 0; i < parametersItems.Count; i++)
{
runParameters[i] = new BenchmarkRunParameter(parametersItems[i]);
paramString.Append(runParameters[i].ToString());
if (i < parametersItems.Count - 1) paramString.Append(',');
}
if (benchmarkReport.ResultStatistics == null)
{
Console.WriteLine($"err: No statistics available for {benchmarkReport.BenchmarkCase.Descriptor.DisplayInfo}!");
continue;
}
yield return new BenchmarkRun
{
Name = benchmarkReport.BenchmarkCase.Descriptor.DisplayInfo,
RunDate = runDate,
GitHash = gitHash,
ParameterMapping = runParameters.Length > 0 ? paramString.ToString() : null,
ParameterMappingJson = runParameters.Length > 0 ? runParameters : null,
Statistics = benchmarkReport.ResultStatistics
};
}
}
}
public struct BenchmarkRunParameter
{
public string Name { get; set; } = string.Empty;
public object Value { get; set; } = default!;
public BenchmarkRunParameter(ParameterInstance instance)
{
Name = instance.Name;
Value = instance.Value;
}
public override string ToString()
{
return $"{Name}={Value}";
}
}

View File

@@ -0,0 +1,55 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
[DbContext(typeof(BenchmarkContext))]
[Migration("20220328231938_InitialCreate")]
partial class InitialCreate
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.0")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Robust.Benchmarks.Exporters.BenchmarkRun", b =>
{
b.Property<decimal>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("numeric(20,0)");
b.Property<string>("GitHash")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<BenchmarkRunReport[]>("Reports")
.IsRequired()
.HasColumnType("jsonb");
b.Property<DateTime>("RunDate")
.HasColumnType("Date");
b.HasKey("Id");
b.ToTable("BenchmarkRuns");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,35 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "BenchmarkRuns",
columns: table => new
{
Id = table.Column<decimal>(type: "numeric(20,0)", nullable: false),
GitHash = table.Column<string>(type: "text", nullable: false),
RunDate = table.Column<DateTime>(type: "Date", nullable: false),
Name = table.Column<string>(type: "text", nullable: false),
Reports = table.Column<BenchmarkRunReport[]>(type: "jsonb", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_BenchmarkRuns", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "BenchmarkRuns");
}
}
}

View File

@@ -0,0 +1,57 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
[DbContext(typeof(BenchmarkContext))]
[Migration("20220510131430_fix-pk")]
partial class FixPK
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.0")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Robust.Benchmarks.Exporters.BenchmarkRun", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("GitHash")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<BenchmarkRunReport[]>("Reports")
.IsRequired()
.HasColumnType("jsonb");
b.Property<DateTime>("RunDate")
.HasColumnType("timestamptz");
b.HasKey("Id");
b.ToTable("BenchmarkRuns");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,51 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
public partial class FixPK : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<DateTime>(
name: "RunDate",
table: "BenchmarkRuns",
type: "timestamptz",
nullable: false,
oldClrType: typeof(DateTime),
oldType: "Date");
migrationBuilder.AlterColumn<int>(
name: "Id",
table: "BenchmarkRuns",
type: "integer",
nullable: false,
oldClrType: typeof(decimal),
oldType: "numeric(20,0)")
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<DateTime>(
name: "RunDate",
table: "BenchmarkRuns",
type: "Date",
nullable: false,
oldClrType: typeof(DateTime),
oldType: "timestamptz");
migrationBuilder.AlterColumn<decimal>(
name: "Id",
table: "BenchmarkRuns",
type: "numeric(20,0)",
nullable: false,
oldClrType: typeof(int),
oldType: "integer")
.OldAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
}
}
}

View File

@@ -0,0 +1,62 @@
// <auto-generated />
using System;
using BenchmarkDotNet.Mathematics;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
[DbContext(typeof(BenchmarkContext))]
[Migration("20221009235705_db")]
partial class DB
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Robust.Benchmarks.Exporters.BenchmarkRun", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("GitHash")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ParameterMapping")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RunDate")
.HasColumnType("timestamptz");
b.Property<Statistics>("Statistics")
.IsRequired()
.HasColumnType("jsonb");
b.HasKey("Id");
b.ToTable("BenchmarkRuns");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,36 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
public partial class DB : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "Reports",
table: "BenchmarkRuns",
newName: "Statistics");
migrationBuilder.AddColumn<string>(
name: "ParameterMapping",
table: "BenchmarkRuns",
type: "text",
nullable: false,
defaultValue: "");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ParameterMapping",
table: "BenchmarkRuns");
migrationBuilder.RenameColumn(
name: "Statistics",
table: "BenchmarkRuns",
newName: "Reports");
}
}
}

View File

@@ -0,0 +1,64 @@
// <auto-generated />
using System;
using BenchmarkDotNet.Mathematics;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
[DbContext(typeof(BenchmarkContext))]
[Migration("20221010144620_param_work")]
partial class ParamWork
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Robust.Benchmarks.Exporters.BenchmarkRun", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("GitHash")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ParameterMapping")
.HasColumnType("text");
b.Property<BenchmarkRunParameter[]>("ParameterMappingJson")
.HasColumnType("jsonb");
b.Property<DateTime>("RunDate")
.HasColumnType("timestamptz");
b.Property<Statistics>("Statistics")
.IsRequired()
.HasColumnType("jsonb");
b.HasKey("Id");
b.ToTable("BenchmarkRuns");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,44 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
public partial class ParamWork : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "ParameterMapping",
table: "BenchmarkRuns",
type: "text",
nullable: true,
oldClrType: typeof(string),
oldType: "text");
migrationBuilder.AddColumn<BenchmarkRunParameter[]>(
name: "ParameterMappingJson",
table: "BenchmarkRuns",
type: "jsonb",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ParameterMappingJson",
table: "BenchmarkRuns");
migrationBuilder.AlterColumn<string>(
name: "ParameterMapping",
table: "BenchmarkRuns",
type: "text",
nullable: false,
defaultValue: "",
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);
}
}
}

View File

@@ -0,0 +1,62 @@
// <auto-generated />
using System;
using BenchmarkDotNet.Mathematics;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Robust.Benchmarks.Exporters;
#nullable disable
namespace Robust.Benchmarks.Migrations
{
[DbContext(typeof(BenchmarkContext))]
partial class BenchmarkContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "6.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Robust.Benchmarks.Exporters.BenchmarkRun", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("GitHash")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<string>("ParameterMapping")
.HasColumnType("text");
b.Property<BenchmarkRunParameter[]>("ParameterMappingJson")
.HasColumnType("jsonb");
b.Property<DateTime>("RunDate")
.HasColumnType("timestamptz");
b.Property<Statistics>("Statistics")
.IsRequired()
.HasColumnType("jsonb");
b.HasKey("Id");
b.ToTable("BenchmarkRuns");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,11 @@
using System;
using BenchmarkDotNet.Mathematics;
using Robust.Benchmarks.Exporters;
namespace Robust.Benchmarks.Migrations;
public class BenchmarkRunReport
{
public BenchmarkRunParameter[] Parameters { get; set; } = Array.Empty<BenchmarkRunParameter>();
public Statistics Statistics { get; set; } = default!;
}

View File

@@ -1,30 +1,32 @@
using BenchmarkDotNet.Attributes;
using Robust.Shared.Analyzers;
namespace Robust.Benchmarks.NumericsHelpers
namespace Robust.Benchmarks.NumericsHelpers;
[Virtual]
public class AddBenchmark
{
[Virtual]
public class AddBenchmark
[Params(32, 128)]
public int N { get; set; }
[Params(1,2)]
public int T { get; set; }
private float[] _inputA = default!;
private float[] _inputB = default!;
private float[] _output = default!;
[GlobalSetup]
public void Setup()
{
[Params(32, 128)]
public int N { get; set; }
_inputA = new float[N];
_inputB = new float[N];
_output = new float[N];
}
private float[] _inputA = default!;
private float[] _inputB = default!;
private float[] _output = default!;
[GlobalSetup]
public void Setup()
{
_inputA = new float[N];
_inputB = new float[N];
_output = new float[N];
}
[Benchmark]
public void Bench()
{
Shared.Maths.NumericsHelpers.Add(_inputA, _inputB, _output);
}
[Benchmark]
public void Bench()
{
Shared.Maths.NumericsHelpers.Add(_inputA, _inputB, _output);
}
}

View File

@@ -0,0 +1,26 @@
using BenchmarkDotNet.Attributes;
using Robust.Shared.Analyzers;
namespace Robust.Benchmarks.NumericsHelpers;
[Virtual]
[DisassemblyDiagnoser()]
public class HorizontalAddBenchmark
{
[Params(8, 32, 128)]
public int N { get; set; }
private float[] _inputA = default!;
[GlobalSetup]
public void Setup()
{
_inputA = new float[N];
}
[Benchmark]
public float Bench()
{
return Shared.Maths.NumericsHelpers.HorizontalAdd(_inputA);
}
}

View File

@@ -1,6 +1,9 @@
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Running;
#if DEBUG
using BenchmarkDotNet.Configs;
#endif
using System;
using BenchmarkDotNet.Running;
using Robust.Benchmarks.Configs;
namespace Robust.Benchmarks
{
@@ -16,7 +19,8 @@ namespace Robust.Benchmarks
Console.WriteLine("THE DEBUG BUILD IS ONLY GOOD FOR FIXING A CRASHING BENCHMARK\n");
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, new DebugInProcessConfig());
#else
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
var config = Environment.GetEnvironmentVariable("ROBUST_BENCHMARKS_ENABLE_SQL") != null ? DefaultSQLConfig.Instance : null;
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, config);
#endif
}
}

View File

@@ -1,18 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\MSBuild\Robust.Properties.targets" />
<Import Project="..\MSBuild\Robust.Engine.props" />
<PropertyGroup>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>../bin/Benchmarks</OutputPath>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Robust.Server\Robust.Server.csproj" />
<ProjectReference Include="..\Robust.Shared\Robust.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
</ItemGroup>
<Import Project="..\MSBuild\Robust.Engine.targets" />
<Import Project="..\MSBuild\Robust.Engine.props" />
<PropertyGroup>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>../bin/Benchmarks</OutputPath>
<OutputType>Exe</OutputType>
<NoWarn>RA0003</NoWarn>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Robust.Server\Robust.Server.csproj" />
<ProjectReference Include="..\Robust.Shared\Robust.Shared.csproj" />
<ProjectReference Include="..\Robust.UnitTesting\Robust.UnitTesting.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.4" />
</ItemGroup>
<Import Project="..\MSBuild\Robust.Properties.targets" />
</Project>

View File

@@ -1,7 +1,7 @@
using System.Globalization;
using Robust.Shared.IoC;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Manager.Result;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Validation;
using Robust.Shared.Serialization.Markdown.Value;
@@ -9,7 +9,7 @@ using Robust.Shared.Serialization.TypeSerializers.Interfaces;
namespace Robust.Benchmarks.Serialization
{
public sealed class BenchmarkIntSerializer : ITypeSerializer<int, ValueDataNode>
public sealed class BenchmarkIntSerializer : ITypeSerializer<int, ValueDataNode>, ITypeCopyCreator<int>
{
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
IDependencyCollection dependencies, ISerializationContext? context = null)
@@ -19,20 +19,22 @@ namespace Robust.Benchmarks.Serialization
: new ErrorNode(node, $"Failed parsing int value: {node.Value}");
}
public DeserializationResult Read(ISerializationManager serializationManager, ValueDataNode node,
IDependencyCollection dependencies, bool skipHook, ISerializationContext? context = null)
public int Read(ISerializationManager serializationManager, ValueDataNode node,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null,
ISerializationManager.InstantiationDelegate<int>? instanceProvider = null)
{
return new DeserializedValue<int>(int.Parse(node.Value, CultureInfo.InvariantCulture));
return int.Parse(node.Value, CultureInfo.InvariantCulture);
}
public DataNode Write(ISerializationManager serializationManager, int value, bool alwaysWrite = false,
public DataNode Write(ISerializationManager serializationManager, int value, IDependencyCollection dependencies,
bool alwaysWrite = false,
ISerializationContext? context = null)
{
return new ValueDataNode(value.ToString(CultureInfo.InvariantCulture));
}
public int Copy(ISerializationManager serializationManager, int source, int target, bool skipHook,
ISerializationContext? context = null)
public int CreateCopy(ISerializationManager serializationManager, int source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return source;
}

View File

@@ -3,7 +3,6 @@ using System.Linq;
using BenchmarkDotNet.Attributes;
using Robust.Benchmarks.Serialization.Definitions;
using Robust.Shared.Analyzers;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Sequence;
@@ -28,7 +27,7 @@ namespace Robust.Benchmarks.Serialization.Copy
var seedMapping = yamlStream.Documents[0].RootNode.ToDataNodeCast<SequenceDataNode>().Cast<MappingDataNode>(0);
Seed = SerializationManager.ReadValueOrThrow<SeedDataDefinition>(seedMapping);
Seed = SerializationManager.Read<SeedDataDefinition>(seedMapping, notNullableOverride: true);
}
private const string String = "ABC";
@@ -46,7 +45,7 @@ namespace Robust.Benchmarks.Serialization.Copy
[Benchmark]
public string? CreateCopyString()
{
return SerializationManager.CreateCopy(String);
return SerializationManager.CreateCopy(String, notNullableOverride: true);
}
[Benchmark]
@@ -58,13 +57,13 @@ namespace Robust.Benchmarks.Serialization.Copy
[Benchmark]
public DataDefinitionWithString? CreateCopyDataDefinitionWithString()
{
return SerializationManager.CreateCopy(DataDefinitionWithString);
return SerializationManager.CreateCopy(DataDefinitionWithString, notNullableOverride: true);
}
[Benchmark]
public SeedDataDefinition? CreateCopySeedDataDefinition()
{
return SerializationManager.CreateCopy(Seed);
return SerializationManager.CreateCopy(Seed, notNullableOverride: true);
}
[Benchmark]
@@ -109,9 +108,7 @@ namespace Robust.Benchmarks.Serialization.Copy
copy.Potency = Seed.Potency;
copy.Ligneous = Seed.Ligneous;
copy.PlantRsi = Seed.PlantRsi == null
? null!
: new ResourcePath(Seed.PlantRsi.ToString(), Seed.PlantRsi.Separator);
copy.PlantRsi = new ResPath(Seed.PlantRsi.ToString());
copy.PlantIconState = Seed.PlantIconState;
copy.Bioluminescent = Seed.Bioluminescent;
copy.BioluminescentColor = Seed.BioluminescentColor;
@@ -124,30 +121,21 @@ namespace Robust.Benchmarks.Serialization.Copy
[BenchmarkCategory("flag")]
public object? CopyFlagZero()
{
return SerializationManager.CopyWithTypeSerializer(
typeof(FlagSerializer<BenchmarkFlags>),
(int) FlagZero,
(int) FlagZero);
return SerializationManager.CreateCopy<int, FlagSerializer<BenchmarkFlags>>((int) FlagZero);
}
[Benchmark]
[BenchmarkCategory("flag")]
public object? CopyFlagThirtyOne()
{
return SerializationManager.CopyWithTypeSerializer(
typeof(FlagSerializer<BenchmarkFlags>),
(int) FlagThirtyOne,
(int) FlagThirtyOne);
return SerializationManager.CreateCopy<int, FlagSerializer<BenchmarkFlags>>((int) FlagThirtyOne);
}
[Benchmark]
[BenchmarkCategory("customTypeSerializer")]
public object? CopyIntegerCustomSerializer()
{
return SerializationManager.CopyWithTypeSerializer(
typeof(BenchmarkIntSerializer),
Integer,
Integer);
return SerializationManager.CreateCopy<int, BenchmarkIntSerializer>(Integer);
}
}
}

View File

@@ -19,6 +19,7 @@ namespace Robust.Benchmarks.Serialization.Definitions
name: tobacco
seedName: tobacco
displayName: tobacco plant
plantRsi: Objects/Specific/Hydroponics/tobacco.rsi
productPrototypes:
- LeavesTobacco
harvestRepeat: Repeat
@@ -36,7 +37,7 @@ namespace Robust.Benchmarks.Serialization.Definitions
Max: 10
PotencyDivisor: 10";
[DataField("id", required: true)] public string ID { get; set; } = default!;
[IdDataFieldAttribute] public string ID { get; set; } = default!;
#region Tracking
[DataField("name")] public string Name { get; set; } = string.Empty;
@@ -86,7 +87,7 @@ namespace Robust.Benchmarks.Serialization.Definitions
#endregion
#region Cosmetics
[DataField("plantRsi", required: true)] public ResourcePath PlantRsi { get; set; } = default!;
[DataField("plantRsi", required: true)] public ResPath PlantRsi { get; set; } = default!;
[DataField("plantIconState")] public string PlantIconState { get; set; } = "produce";
[DataField("bioluminescent")] public bool Bioluminescent { get; set; }
[DataField("bioluminescentColor")] public Color BioluminescentColor { get; set; } = Color.White;

View File

@@ -2,7 +2,6 @@
using BenchmarkDotNet.Attributes;
using Robust.Benchmarks.Serialization.Definitions;
using Robust.Shared.Analyzers;
using Robust.Shared.Serialization.Manager.Result;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Sequence;
@@ -42,57 +41,48 @@ namespace Robust.Benchmarks.Serialization.Read
private ValueDataNode FlagThirtyOne { get; } = new("ThirtyOne");
[Benchmark]
public string? ReadString()
public string ReadString()
{
return SerializationManager.ReadValue<string>(StringNode);
return SerializationManager.Read<string>(StringNode, notNullableOverride: true);
}
[Benchmark]
public int? ReadInteger()
public int ReadInteger()
{
return SerializationManager.ReadValue<int>(IntNode);
return SerializationManager.Read<int>(IntNode);
}
[Benchmark]
public DataDefinitionWithString? ReadDataDefinitionWithString()
public DataDefinitionWithString ReadDataDefinitionWithString()
{
return SerializationManager.ReadValue<DataDefinitionWithString>(StringDataDefNode);
return SerializationManager.Read<DataDefinitionWithString>(StringDataDefNode, notNullableOverride: true);
}
[Benchmark]
public SeedDataDefinition? ReadSeedDataDefinition()
public SeedDataDefinition ReadSeedDataDefinition()
{
return SerializationManager.ReadValue<SeedDataDefinition>(SeedNode);
return SerializationManager.Read<SeedDataDefinition>(SeedNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("flag")]
public DeserializationResult ReadFlagZero()
public object? ReadFlagZero()
{
return SerializationManager.ReadWithTypeSerializer(
typeof(int),
typeof(FlagSerializer<BenchmarkFlags>),
FlagZero);
return SerializationManager.Read<int, ValueDataNode, FlagSerializer<BenchmarkFlags>>(FlagZero);
}
[Benchmark]
[BenchmarkCategory("flag")]
public DeserializationResult ReadThirtyOne()
public object? ReadThirtyOne()
{
return SerializationManager.ReadWithTypeSerializer(
typeof(int),
typeof(FlagSerializer<BenchmarkFlags>),
FlagThirtyOne);
return SerializationManager.Read<int, ValueDataNode, FlagSerializer<BenchmarkFlags>>(FlagThirtyOne);
}
[Benchmark]
[BenchmarkCategory("customTypeSerializer")]
public DeserializationResult ReadIntegerCustomSerializer()
public object? ReadIntegerCustomSerializer()
{
return SerializationManager.ReadWithTypeSerializer(
typeof(int),
typeof(BenchmarkIntSerializer),
IntNode);
return SerializationManager.Read<int, ValueDataNode, BenchmarkIntSerializer>(IntNode);
}
}
}

View File

@@ -46,84 +46,84 @@ namespace Robust.Benchmarks.Serialization
[BenchmarkCategory("read")]
public string[]? ReadEmptyString()
{
return SerializationManager.ReadValue<string[]>(EmptyNode);
return SerializationManager.Read<string[]>(EmptyNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public string[]? ReadOneString()
{
return SerializationManager.ReadValue<string[]>(OneIntNode);
return SerializationManager.Read<string[]>(OneIntNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public string[]? ReadTenStrings()
{
return SerializationManager.ReadValue<string[]>(TenIntsNode);
return SerializationManager.Read<string[]>(TenIntsNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public int[]? ReadEmptyInt()
{
return SerializationManager.ReadValue<int[]>(EmptyNode);
return SerializationManager.Read<int[]>(EmptyNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public int[]? ReadOneInt()
{
return SerializationManager.ReadValue<int[]>(OneIntNode);
return SerializationManager.Read<int[]>(OneIntNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public int[]? ReadTenInts()
{
return SerializationManager.ReadValue<int[]>(TenIntsNode);
return SerializationManager.Read<int[]>(TenIntsNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public DataDefinitionWithString[]? ReadEmptyStringDataDef()
{
return SerializationManager.ReadValue<DataDefinitionWithString[]>(EmptyNode);
return SerializationManager.Read<DataDefinitionWithString[]>(EmptyNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public DataDefinitionWithString[]? ReadOneStringDataDef()
{
return SerializationManager.ReadValue<DataDefinitionWithString[]>(OneStringDefNode);
return SerializationManager.Read<DataDefinitionWithString[]>(OneStringDefNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public DataDefinitionWithString[]? ReadTenStringDataDefs()
{
return SerializationManager.ReadValue<DataDefinitionWithString[]>(TenStringDefsNode);
return SerializationManager.Read<DataDefinitionWithString[]>(TenStringDefsNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public SealedDataDefinitionWithString[]? ReadEmptySealedStringDataDef()
{
return SerializationManager.ReadValue<SealedDataDefinitionWithString[]>(EmptyNode);
return SerializationManager.Read<SealedDataDefinitionWithString[]>(EmptyNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public SealedDataDefinitionWithString[]? ReadOneSealedStringDataDef()
{
return SerializationManager.ReadValue<SealedDataDefinitionWithString[]>(OneStringDefNode);
return SerializationManager.Read<SealedDataDefinitionWithString[]>(OneStringDefNode, notNullableOverride: true);
}
[Benchmark]
[BenchmarkCategory("read")]
public SealedDataDefinitionWithString[]? ReadTenSealedStringDataDefs()
{
return SerializationManager.ReadValue<SealedDataDefinitionWithString[]>(TenStringDefsNode);
return SerializationManager.Read<SealedDataDefinitionWithString[]>(TenStringDefsNode, notNullableOverride: true);
}
}
}

View File

@@ -12,9 +12,9 @@ namespace Robust.Benchmarks.Serialization
{
public SerializationBenchmark()
{
IoCManager.InitThread();
ServerIoC.RegisterIoC();
IoCManager.BuildGraph();
var deps = IoCManager.InitThread();
ServerIoC.RegisterIoC(deps);
deps.BuildGraph();
var assemblies = new[]
{
@@ -25,12 +25,12 @@ namespace Robust.Benchmarks.Serialization
foreach (var assembly in assemblies)
{
IoCManager.Resolve<IConfigurationManagerInternal>().LoadCVarsFromAssembly(assembly);
deps.Resolve<IConfigurationManagerInternal>().LoadCVarsFromAssembly(assembly);
}
IoCManager.Resolve<IReflectionManager>().LoadAssemblies(assemblies);
deps.Resolve<IReflectionManager>().LoadAssemblies(assemblies);
SerializationManager = IoCManager.Resolve<ISerializationManager>();
SerializationManager = deps.Resolve<ISerializationManager>();
}
protected ISerializationManager SerializationManager { get; }

Some files were not shown because too many files have changed in this diff Show More