sschmid / Entitas

Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity
MIT License
7.11k stars 1.11k forks source link

New Entitas distribution - How? (+ brief Entitas update) #992

Closed sschmid closed 1 year ago

sschmid commented 2 years ago

Hi!

Long time no see! I hope you're all doing great! I'd like to get your feedback on how you would like to download and use Entitas in the future. I will also use this issue to give you an update on the current state of Entitas.

Current state

Since we started the Popcore game studio in Berlin my focus shifted away from Entitas and from the outside there was no apparent progress. However, we use Entitas everyday for all of our games and it works great! I'm finally able to pick up Entitas development again and I'm reworking the Entitas project (and DesperateDevs, which includes Jenny) to simplify building, testing and customizing it. This will help me to get back to regular updates but more importantly, it help anyone else to contribute to Entitas or maintain their custom fork.

This also includes open-sourcing DesperateDevs, including Jenny and the Entitas Roslyn code generator plugin.

Entitas is open-source and I want to enable Entitas to be our community ECS for C# and Unity. Everyone interested should be able to make Entitas their Entitas. I suggest a few changes that should help me and everyone involved in the future:

  1. Update to the official Microsoft C# Coding Conventions
  2. Use modern project structure and migrate to .NET project SDKs
  3. Migrate all unit tests to xunit
  4. Automate releases

Step 1, 2 and 3 are already done for DesperateDevs. I would like to release a new Entitas version that uses the latest DesperateDevs code and then update Entitas itself the same way.

That leads me to the actual question:

How should we release Entitas in the future?

From a C# developer perspective we could just release precompiled dlls with nuget.

From a Unity developer perspective we could release the actual source code with assembly definitions using the Unity Asset Store or openupm. Releasing the source code allows us to use compiler flags.

Do you care about nuget? Do you care about Unity Asset Store? What about openupm? Or is there a way do register Entitas as an official Unity package that would be available in Unity's package manager?

JesseTG commented 2 years ago

OpenUPM, please. It's become the most popular destination for open source Unity packages.

vnedilko commented 2 years ago

Hi, nice to hear entitas is alive) I think nowadays openupm or GitHub release is main distribution strategy for unity packages. Thanks

jtuchel commented 2 years ago

It would be nice to have something similiar to Entitas Redux

https://github.com/jeffcampbellmakesgames/Entitas-Redux/wiki/Installation

The same might apply for Jenny

https://github.com/jeffcampbellmakesgames/Entitas-Redux/wiki/Genesis-Setup

RustedGames commented 2 years ago

The Unity Asset store is the most convenient but I'll also go for OpenUPM

BrokenHell commented 2 years ago

It would be nice to have something similiar to Entitas Redux

https://github.com/jeffcampbellmakesgames/Entitas-Redux/wiki/Installation

The same might apply for Jenny

https://github.com/jeffcampbellmakesgames/Entitas-Redux/wiki/Genesis-Setup

Sorry this question might not related but how do you find Redux version? Have you use it in any project?

jtuchel commented 2 years ago

@sschmid I'm new to .Net but does

Use modern project structure and migrate to .NET project SDKs

mean we can use Entitas with the latest .Net version soon? And setup Entitas and Jenny with a single openupm install?

sschmid commented 2 years ago

@jtuchel Yes. As a first step I update all Desperate Devs libs to net6.0 and netstandard2.1 and will distribute them as nuget + Unity package with asmdefs.

I plan to release an Entitas update using the latest Desperate Devs libs and after that update Entitas itself using net6.0 etc

jtuchel commented 2 years ago

@jtuchel Yes. As a first step I update all Desperate Devs libs to net6.0 and netstandard2.1 and will distribute them as nuget + Unity package with asmdefs.

I plan to release an Entitas update using the latest Desperate Devs libs and after that update Entitas itself using net6.0 etc

@sschmid May I ask you if there is something like a roadmap? Are you doing well or is there still a ton of work to do that requires some months for a stable release? ( E.g. Entitas 2.0.0 )

Step 1, 2 and 3 are already done for DesperateDevs.

Unfortunately I don't know what this means but this sounds like you are doing well and "just" need some days or weeks. Is there something other people can do / contribute?

sschmid commented 2 years ago

Update: I'm currently working on Entitas 1.14, ETA 1 or 2 weeks.

Brief summary: Entitas 1.14 is mostly about updating to DesperateDevs 1.0 nuget packages. DesperateDevs 1.0 addresses the points mentioned above:

Additionally:

Entitas repo will stop including precompiled DesperateDevs dlls in favour of nuget.

The Entitas.zip from the release section will still include everything you need + Jenny and the Roslyn plugins for free 🥳 No need to get Entitas from the Unity Asset Store anymore.

DesperateDevs 1.0 will be fully open source very soon, incl Jenny, Jenny server, Roslyn support and all Entitas Roslyn adapters.

Entitas 1.15 or most likely 2.0 will be all about addressing the points above for the Entitas repo itself, resulting in a modernized project structure using the latest and greatest.

Entitas 2.x and above will address open issues + extracting code gen templates to text, so eveyone can customze the generated code easily. After that, a major breaking change of the genrated code for Entitas is planned, moving away from partial classes in favour of extension methods to fully suppor Unity asmdef for faster iteration times + addressing one of my favourite and also very old feature request: Entitas Kits

sschmid commented 2 years ago

master branch is still on Entitas 1.13 and will be phased out very soon, switching to main, which will be the new default branch starting with Entitas 1.14. Follow main for latest commits and updates

sschmid commented 2 years ago

Update: Desperate Devs 1.0.0 is now open-source https://github.com/sschmid/DesperateDevs

I might extract Jenny, Sherlog and TCPeasy out to their own repos at some point.

sschmid commented 2 years ago

Update:

Entitas 1.14.0 is out 😍

https://github.com/sschmid/Entitas/releases/tag/1.14.0

sschmid commented 1 year ago

Update on Entitas distribution (CI/CD)

I want to move away from big updates and releases where I bundle everything into Entitas.zip and Jenny.zip. Instead, I would like to continuously update Entitas and each sub project or dependency individually.

I use GitHub actions to build and release to nuget and openupm. I have automated releases for all Entitas dependencies already. In case you missed it: all Entitas dependencies like Jenny (the Code Generator + Roslyn plugins that where exclusive to the Unity Asset Store version in the past) are now open source.

I will apply same GitHub actions to Entitas next and update you once it's done.

The result will be that you can use the Unity package manager using OpenUPM for Unity projects, and NuGet for C# projects.

sschmid commented 1 year ago
Screen Shot 2022-11-04 at 21 53 28