sschmid / Entitas

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

Update on Entitas 2.0-beta and my situation #1074

Open sschmid opened 1 year ago

sschmid commented 1 year ago

Hello everyone!

I'd like to share a quick update on Entitas 2.0-beta and my situation:

Recently I was working very actively on a completly new code generator for Entitas using dotnet C# source generators. You can read all about it in this issue: https://github.com/sschmid/Entitas/issues/1005 Actually, based on my GitHub stats, it was the most productive month in almost 10 years 😍

I think it's awesome, I love it and I'm super hyped and can't wait to use it! :D

I have a few more changes planned, but once it was ready to use I also worked a lot on the whole Entitas project to simplyfy and modernize many things. I quote some of my message from the Entitas discord channel to help me summarize:

less is more. I removed ~50% of the codebase while making Entitas better 🥳

1.13.0 was 33819 lines of code, now it's almost half: 18929

Same with the number of projects: I could drastically simplify the project structure. It was 20 projects before, now 11

I've put a first test version of Entitas 2.0-beta into Math-One so everyone can already try it. See discord message: https://discord.com/channels/599321316377624601/599321316876615691/1134560590749249718

You can try Entitas 2.0-beta now in MatchOne on branch `entitas-2.0-beta`

https://github.com/sschmid/Match-One/tree/entitas-2.0-beta

I will make a more detailed announcement in a few weeks (after the summer break 😇)

But here's a quick summary:

- replaced Jenny with new dotnet source generator
- support Unity asmdefs
- support namespace for contexts and components
- started removing dependencies to DesperateDevs
  - e.g. remove Entitas Preferences window in favour of unity menu items and `EntitasSettings` ScriptableObject
- using Entitas as Unity package
- migrated fully to dotnet 6.0
- updated to official Microsoft C# coding conventions

Highly motivated I released this one day before my holidays. My plan was to directly get back to work on Entitas after my holidays and release Entitas 2.0 asap and update all of our games to it. That would have been awesome! But during the holidays I was informed that I'm affected by a layoff due to restructuring. I'm fine, but it will affect my plans "slighlty" 🙃

I'll need to take some time now to see what's next, also I need new equipment, new software licenses etc so I can continue working on Entitas. This might take some time, but hopefully not too long. I'm still hyped about Entitas 2.0 and I will update you here again as soon as I have more news.

Happy coding! Simon

gkiernozek commented 11 months ago

Hi! Entitas 2.0-beta is running really great - no major issues at this time 👍

How are you holding up? Did you find something new or you are taking some (well deserved) time off? (Longest time without any commit from what I can see so just making sure everything is all right :) )

I also have quick question for 2.0: Is it possible to have flag type component in 2.0? And access it like entity.isClicked with IsClicked: IComponent rather than entity.HasIsClicked() ?

sschmid commented 11 months ago

@gkiernozek Happy to hear you have fun trying Entitas 2.0 already!

All good, thanks for asking. I kinda feel bad not working on Entitas right now and I miss working on it! I hope to get back on development early next year again.

The generated api for flag components is now the same as regular components. E.g. ClickedComponent will generate HasClicked(), AddClicked(), ReplaceClicked() and GetClicked().

For reference: generated code for a flag component SomeComponent from the unit tests https://github.com/sschmid/Entitas/blob/main/tests/Entitas.Generators.Tests/snapshots/ComponentGeneratorTests.Component%23MyAppMainSomeEntityExtension.g.verified.cs

I don't think there's a need to differentiate between those components anymore. You now get the same behaviour and exceptions to regular components, e.g. throwing an exception when adding a component twice. ReplaceClicked() might also be useful to make reactive system trigger again

dharmeshmp commented 9 months ago

Hi @sschmid,

I'm thrilled about the progress in Entitas 2.0-beta and the significant improvements you've made. I've been testing it and experiencing positive results so far. Considering its stability and compatibility, I'm curious whether it's advisable to use Entitas 2.0-beta in a production environment. Are there any specific considerations or potential caveats that I should be aware of?

xushunwang commented 6 months ago

May I ask what the progress is now?And the discord url seems invalid.