Until now, every element functions were implemented in the [Server|Client|Shared][Entity|Weapon]Store which was a problem when we had to implement a server function common (self:GetOwner()) to all elements without duplicating code.
In order to fix this and make it easier to implement elements functions, I added elements libraries (similar to scripting libraries) which allow to separate store logic from functions and to combine multiple libraries (ex: ServerElementLibrary + ServerEntityLibrary).
It adds a shitload of files which may be good for compilation time on modification.
I made several changes which were not mandatory for this but helped cleaning the whole code base:
ScriptStore now makes use of a global metatable containing all functions relative to all elements (which is used by the element-specific metatable).
Shared and Server elements stores no longer require an AssetStore ref.
Timer and animation systems are now based on the match time instead of the application time, lessening the need to pass an Application ref everywhere.
Until now, every element functions were implemented in the [Server|Client|Shared][Entity|Weapon]Store which was a problem when we had to implement a server function common (self:GetOwner()) to all elements without duplicating code.
In order to fix this and make it easier to implement elements functions, I added elements libraries (similar to scripting libraries) which allow to separate store logic from functions and to combine multiple libraries (ex: ServerElementLibrary + ServerEntityLibrary).
It adds a shitload of files which may be good for compilation time on modification.
I made several changes which were not mandatory for this but helped cleaning the whole code base: