Commit Graph
46 Commits
Author SHA1 Message Date
Pieter-Jan BriersandGitHub 0d3cd41382 Enable NRTs on Robust.Server (#1118) 2020-06-09 14:18:29 +02:00
SweptandGitHub a3814dd7c0 Changes PointLightComponent radius from an int to a float. (#1111) 2020-06-07 17:33:03 +02:00
ComicIronicandGitHub 486fd670e2 Change DrawDepth to int, add content constant hook (#1090)
This allows DrawDepth to be defined in the content layer.
2020-05-31 00:40:48 +02:00
Pieter-Jan Briers 9eeb1d1afa Fix compiler warnings 2020-05-28 17:44:31 +02:00
Pieter-Jan Briers 263a72ed07 Fix NullRef in PhysicsComponent.RemoveController() 2020-05-28 13:18:25 +02:00
Pieter-Jan Briers 488ce445a0 Shut down physics controllers when PhysicsComponent shuts down. 2020-05-28 00:49:42 +02:00
Pieter-Jan Briers e334d6610e Fix race condition in the Bound UI system.
If you sent multiple state updates on the same frame these could easily arrive in different orders on the client, which is definitely not intended. This fixes that by sending them per frame.

As a result, this also means earlier updates on the same frame are discarded, saving bandwidth.
2020-05-26 16:20:47 +02:00
Jackson LewisandGitHub 274334c926 Rewrite the physics engine (#1037) 2020-05-23 01:21:02 +02:00
chairbenderandGitHub 4e192f9084 Add helper method for statically getting entity systems (#1061) 2020-05-20 16:42:02 +02:00
Víctor Aguilera PuertoandGitHub 424a9c9dfb ServerUserInterfaceComponent can now SetState on a specific player (#1060) 2020-05-18 20:53:03 +02:00
Pieter-Jan Briers 7c4b1af967 Optimize UserInterfaceSystem and clean up bound user interface API slightly. 2020-04-26 00:51:46 +02:00
Jackson LewisandGitHub 828ada9e22 Split HandleMessage into local and networked variants, add ICommonSession parameter to the latter (#1028) 2020-04-20 09:37:10 +02:00
Víctor Aguilera PuertoandGitHub 3d6a3a6216 Add visibility masks to IPlayerSession, add Visibility componen… (#1026) 2020-04-10 16:38:59 +02:00
Pieter-Jan Briers 8f96c65312 Fix BoundUserInterface not raising close event if player disconnects. 2020-03-30 18:31:09 +02:00
Tyler YoungandGitHub 214f9f0323 Implement client bubble PVS. (#983)
* bubble implementation

include contained entities

fix line edit crash when clipboard contents are null somehow

use CVar for update bubble range

remove seenMovers that get NaN'd out of MaxUpdateRange - huge reduction in network traffic from bullets

cut default of MaxUpdateRange down to 12.5 for now

maybe handle teleported things

handle removing player state on disconnect

fixed positional audio errors

make UpdateEntityTree also update player's last seen ents

make net.maxupdaterange cvar tunable at runtime w/o impacting performance

back to position nan as means to hide from client

revert work pooling as the wrong player was getting the wrong game state

ffs needed to think less about *if* something is *seen* and more about *when* it must be *unseen*

clean up usings

handle parenting and sequencing issues that arise on the client

gather needed ents to update recursively

applied suggestions from code review

fix missing recursively contained ents

make assumption that client last saw things on first tick instead of tick zero, as zero would be the "from tick" and first would be he "to tick"

add First tick as constant to GameTick due to relevance above

renamed includedEnts to checkedEnts to make usage more clear

added comments

inverted some conditions to flatten parts of the pvs logic

fixed sending states when already seen (lastChange < lastSeen to lastChange <= lastSeen)

fix sending states when no actual changes (other bugs?)

local caching of currentTick, remove priorTick

* make TransformComponent's Parent setter call Dirty() to handle replicating network state if AttachParent isn't invoked

* fixed parent changed by setting Parent on Transform not updating parent's Children collection and other stuff

rotating parent entities now are visible with their orbiting children if one of their children moves into view

* break out duplicated code as GetLastSeen

* remove unused net.parallelstates

introduce net.pvs to configure enabling/disabling PVS
2020-02-23 14:42:54 +01:00
AcruidandGitHub 728f58465d EntitySystem Event Refactor (#989)
* Removed the EntitySystem event implementation, it now uses the more advanced EventBus.
Removed EntitySystem.RegisterMessageTypes() function.
Removed EntitySystem.SubscribeEvents() function.
Added EntitySystemMessage.NetChannel field. This holds the remote net channel the event originated from.

* Removed the Sender object from events. If you needed this field, add it to the event class.

* Removed unused event proxy methods from Entity.
SubscribeEvent() has been split into SubscribeNetworkEvent() and SubscribeLocalEvent() methods on EntitySystem.
Most methods on EntityEventBus now require callers to specify the source (Local or Network) of the events.
2020-02-22 17:59:43 +01:00
Acruid df9be436c4 Removed the StateType property from every component. This field was completely unused except for a debug assertion. 2020-01-24 14:07:46 -08:00
Acruid 78a33076f9 Merged client and server CollidableComponent into a shared version. Now shared code can add collidable components to entities. 2020-01-11 14:10:25 -08:00
Acruid 7a77fa59e2 Switched physics collision broadphase from spatial partition to Naive.
Grid->Grid collision works.
2020-01-10 15:39:34 -08:00
Acruid 22bf1516cf Adds the new PhysShapeGrid.
Grids now have their own collision group.
2020-01-09 18:26:54 -08:00
Acruid 8d30bcb041 Added a ShowContents flag to containers so that the contents can be rendered.
Added `bool TryGetContainer(IEntity, out IContainer)` to containers.
Changed the API of ContainerHelpers.
2020-01-03 15:16:07 -08:00
Pieter-Jan Briers 2f94beb4b5 Fix ContainerManagerComponent.ContainsEntity not returning correct results for multiple containers. 2019-12-24 15:16:14 +01:00
Pieter-Jan Briers 2b037c3bf2 Synchronize containers to the client. 2019-12-22 21:43:03 +01:00
Pieter-Jan Briers 2b8645b60f Fix some Robust.Server namespaces in Robust.Shared. 2019-12-22 13:40:43 +01:00
AcruidandPieter-Jan Briers f5c0dba194 Map & Grid Entities (#916)
* Adds Map components to the ECS system.

* Grid entities are now created along with map grids.
Grid components are now properly reused from map deserialization when a grid is created through the MapManager.

* Make MapGridComponent shared.
Don't send Nullspace default grid to client, they have their own.
Properly link the new grid with the entity sent from the server.

* Fixes nullRefException when ToString() is called on an Entity with no Prototype.

* Adds logging debug info about binding a map/grid to an entity.
Nightly Commit.

* Client map networking now properly pivots a grid from the client entity to the shared entity.
Added IMapGridComponent.ClearGridId() to properly dissociate the component from a grid before deleting it.
WorldPosition of a default grid is always 0,0 regardless of the entity transform (if any).
Nullspace map and default grid are not bound to an entity.
Nullspace map and default grid cannot be deleted.

* Map Entities are now created along with new maps.

* Client & Server load with new scene hierarchy.

* Fix rebase damage.

* Added ContainerHelpers helper class.

* Fix Container checks.

* Fixed clothes.

* Fixing unit tests.

* Removed disabled code.

* Actually initialize and startup the Map and Grid entities.
2019-12-21 22:11:17 +01:00
AcruidandGitHub ea8e5e9fe7 EventBus Refactor (#909)
* Extracts the ECS event system out of EntityManager, and into a new class called EventBus.
XML Docs and full test coverage for EventBus.
2019-12-08 19:36:52 -08:00
Víctor Aguilera PuertoandPieter-Jan Briers ffe506ef94 Adds Midi playback, Midi input, etc. (#873)
* raw PCM audio for clyde

* Remove soundfont.cs

* Midi stuff

* Some more work

* This actually works now!

* update

* Add nfluidsynth submodule.

* fuck

* Midi audio works!

* Lots of stuff, and cool interfaces for items

* Update

* Note limit

* Moving out of range of UI raises OnClosed now as well

* It just works

* Update nfluidsynth submodule

* Remove managed-midi, remove unused methods I added to clyde

* Remove remnants of older NFluidsynth

* Update nfluidsynth submodule.

* Fix some of MidiManager

* Add changes PJB made to soundfont loading

* Delete OpenAL source/buffers when disposed

* Remove remnants of "Rendering"

* Use ReadOnlySpan, make interface/implementation arguments consistent

* Improve EmptyBuffers performance

* Make renderers use an enum for their status

* MidiRenderer events are now invoked on the main thread

* MidiManager now has a method to dispose renderers

* Lock player

* Fun stuff

* Update nfluidsynth submodule.

* Fix midi audio rendering

* Address a few reviews

* Revert changes made to Clyde

* Create sfloader per midi renderer

* Midi file size check

* Now OpenMidi/OpenInput and their respective close methods return bools.

* Update nfluidsynth submodule.

* Move number to constant.

* Use BufferedAudioSource

* Remove unused using statements

* Use new API

* Lock player and synth correctly

* Use midi sawmill

* Adds "Disposed" property to MidiRenderer

* Remove DisposeRenderer, let midi render thread handle it instead

* Renderer position is updated from main loop

* Use nfluidsynth from nuget

* Fix appveyor, lazy fluidsynth init

* Only join MidiThread if it actually exists...
2019-10-30 16:45:11 +01:00
Pieter-Jan BriersandGitHub e519b6b53d Delete some dead code. (#876)
Mostly utility classes and ancient legacy.
2019-10-17 01:52:58 +02:00
Acruid 55a50ff7ba Setting the Component.Running property now calls the Startup/Shutdown methods automatically. Startup/Shutdown are now protected. This makes the system more foolproof, previously if the component did not call the base method inside Startup/Shutdown, everything would break. This also allows a component to be started/stopped from the VV system by simply setting the property. 2019-09-18 11:24:15 -07:00
Acruid fd47179d79 The intention was to delete the key, not set it to null. Previously if ContainerManagerComponent.ForceRemove was called multiple times with a Deleted container, it would throw a NullRefException. 2019-09-16 16:24:47 -07:00
Acruid 8a61259c11 Renames the yaml key name for the BodyType on CollidableComponent so that it does not collide with the component type field. This previously caused deserialization to fail. 2019-09-16 11:06:33 -07:00
Acruid 7239e70294 When an item is inserted into a container, it's LocalPosition is set to (0,0). This causes the position of the contained entity to == the container's position. Entities are now spatially inside their containers. Previously, the local position was not set, so contained entities could be tens of meters away from their containers, preventing things like FindInSphere from working intuitively. 2019-09-15 14:47:09 -07:00
Acruid e2c60871e9 ContainerManagerComponent now checks if the container is deleted before trying to remove an entity from it. Previously it would blindly call ForceRemove on a deleted container, causing a NullRefException.
Added some debug assertions to Container. These should help verify that a deleted container is not being accessed.
2019-09-09 12:22:32 -07:00
Acruid c8ff91bf72 Entity Containers now raise a ContainerContentsModifiedMessage Component Message when their set of entities is modified.
Code cleanup in Container.cs
2019-09-09 10:37:10 -07:00
AcruidandPieter-Jan Briers f2eb035ed8 Physics Shapes (#847)
* Adds a new IPhysicsShape object where you can define what collisions shape a PhysBody has.
AABB is now accessed through the PhysicsShape, so the BoundingBoxComponent is not required.

* Default PhysShape now copies the AABB of the BoundingBoxComponent.

* Fixed issue with serialization of PhysShapeAabbComp.

* Spatial queries now use ICollidableComponent instead of BoundingBoxComponent.
showbb now draws entities using the obsolete BoundingBoxComponent in Aqua.

* Renamed PhysShapeAabbComp to PhysShapeAabb.
Removed BoundingBoxComponent.

* Default CollidableComponent does not collide with anything now.

* Renamed ICollidable to IPhysBody.
Moved ICollidable to the Robust.Shared/Physics namespace.

* PhysShapes are now a collection of primitive shapes that contribute to the whole PhysBody.
ObjectSerializer.DataField can now deal with abstract types using YAML tags.

* Added LocalBounds property to ClickableComponent.
Added state to ClickableComponent.

* Added a Rectangle physics shape.

* ClickableComponent now actually checks that a click is inside its bounds.

* Reverted the addition of a try/catch around map loading. Any errors can propagate to the code trying to load the map again.
2019-09-03 22:06:50 +02:00
Pieter-Jan Briers 4cc30823a6 Fix build on .NET Framework. 2019-08-29 20:29:36 +02:00
Pieter-Jan Briers 62f25669c7 Make it possible to VV containers. 2019-08-29 14:36:07 +02:00
DamianXandPieter-Jan Briers 943b000950 Things for wires (#852)
* Things for wires

* Fixed things
2019-08-25 23:18:03 +02:00
CatTheSystemandPieter-Jan Briers ff5334f446 Quick fix to flashlight radius (#844) 2019-08-15 09:52:54 +02:00
Pieter-Jan Briers fdfbf92223 Remove a ton of lighting system cruft.
Basically just kills the light manager.
Clyde was already using the ECS anyways.
2019-07-30 13:31:05 +02:00
Pieter-Jan BriersandGitHub bb4a1eda8e Project file refactor (#819)
* Project file refactor

Move all the .csproj files to the new .NET Core style.
This doesn't make any difference for compiling for Framework,
but it does reduce a ton of useless boilerplate.

As an extension of this, killed a bunch of uncompiled & unmaintained .cs files.

Compiling for release (to profile) works now.
Removed AnyCPU targets from the solution file.

* Fix compiler warnings.
2019-05-28 00:16:01 +02:00
AcruidandPieter-Jan Briers dc4cc71c72 Fixes game crashing because the player entity got deleted. (#814) 2019-05-24 17:03:13 +02:00
Pieter-Jan Briers afc2a747c8 Fix deleting entities that have containers. 2019-05-06 19:30:51 +02:00
Pieter-Jan Briers 4979620486 Container improvements.
Make containers actually handle automatic removal of entities,
like say on unpartenting.
This was because a lot of content code was doing this manually,
and it broke, really badly.

They also emit events now that said content code can use instead.
2019-05-05 13:07:59 +02:00
AcruidandPieter-Jan Briers a5a3a539dc Tick Logic Timing and Bandwidth Improvements (#795)
Code was changed so that time starts at tick zero, and all entities are initialized in the space between tick 0 to 1. This was a solution to the fact fromSequence was including entities with lastStateUpdate tick one less than the actual sequence number. This is purely an issue about when exactly the game does its logic relative to the tick signals, ie positive or negative edge of the tick. Right now the game is set up to run the game logic on the positive edge of a Tick (enforced by GameLoop).

The second big part is that an empty collection takes 5ish bytes more than a null collection in the NetSerializer, even though they are conceptually the same thing in a game state. This PR puts null checks around everything and allows GameStates to have whole sections of itself null. This reduced the payload size of an empty game state from 49B to 15B.

This PR also fixes the bug where the physics system marks every movable entity as dirty every tick.
2019-04-20 18:08:43 +02:00
SilverandGitHub 25926a17b7 Renames SS14.* to Robust.* (#793)
RobustToolbox projects should be named Robust.* 

This PR changes the RobustToolbox projects from SS14.* to Robust.*

Updates SS14.* prefixes/namespaces to Robust.*
Updates SpaceStation14.sln to RobustToolbox.sln
Updates MSBUILD/SS14.* to MSBUILD/Robust.*
Updates CSProject and MSBuild references for the above
Updates git_helper.py
Removes Runserver and Runclient as they are unusable
2019-04-15 20:24:59 -06:00