-
Notifications
You must be signed in to change notification settings - Fork 777
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FYI: Port of Caliburn.Micro to NoesisGUI for Unity #965
Comments
I like this idea let me look at your code this weekend. |
I tried to keep the code as unchanged as possible. So if you download it and paste it into a local caliburn micro repo, you should get a good clean diff |
@VacuumBreather can you email me when you get a chance I have a few questions. My email is on my profile page |
Hi @VacuumBreather, Very nice work, I like the idea of getting Caliburn.Micro to even more places and would love to bring this into the official Caliburn.Micro. However, I am not familiar with NoesisGUI or Unity, how does the package management work for Unity is it NuGet packages or something else? Regarding the #if statements there are plenty of those in Caliburn.Micro as is so I dont think a few more will do any harm. |
NoesisGUI is basically just a high performance port of WPF with a C++ base. It has a C++ SDK and a C# SDK for standalone stuff as well as integrations into the major engines. I think it's the most feasable for Caliburn Micro to support the C# SDK for now. That one basically can be achieved with a few #if s and some namespace changes (everything in System.Windows is basically in Noesis namespace and some Behavior stuff for Caliburn's actions in NoesisApp, their implementation of the Xaml.Behaviors) Noesis has several additions for stuff like games that are render optimized and special effects but that's irrelevant for Caliburn. The Unity engine support is I think something I have to do in the port. I don't think that can work well for Caliburn. The Bootstrapper has to be a Unity type, you'd have to get rid of a lot of static stuff, like ViewLocator etc, because in a Game engine you can have multiple UIs and multiple Bootstrappers running at the same time (Like Menu, Gameplay UI overlay and even in-world 3D game UI, which Noesis supports. You can render the UI to a texture and place it anywhere in the world) So some of Caliburn's Core concepts would have to be changed for that. Not to mention the completely different way of packaging things up. For the C# SDK a nuget will be fine. But for Unity it needs to be a Unity package which is a different thing. Unity needs to create .meta files for every file in the package so you'd have to have a Unity project and a build chain set up for those and constantly use the Unity editor to generate those files. Not to mention all files needing to be in specific folders etc, which could be achieved with a custom build script, moving things around and generating that. But you'd also have to make sure it always compiles in Unity, so you'd need a Unity build chain etc... I don't think that's feasable for Caliburn.Micro. That's what I made the Fork for. But supporting the C# SDK should be as easy as a few more #if clauses For details you can check their page www.noesisengine.com |
Hello, no bug, just letting you guys know (Eisenberg is already aware :) )
A while ago I started a port of Caliburn.Micro to NoesisGUI for Unity: https://github.com/VacuumBreather/Caliburn.Noesis
I'm approaching the first release, finally getting all the features to work, with latest API additions to Noesis. I just wanted to let you know.. who knows maybe one day you figure out a way to integrate it into Caliburn.Micro official, even though there are some significant differences in how the Bootstrapper has to work and there's a lot of additional #if statements because everything in the WPF namespaces needs to use a different namespace and there's still SOME API differences. Most stuff in Core is pretty identical though. I had to use UniTask as a more efficient replacement for Task in all the async stuff though (might actually be an idea for Caliburn.Micro for a future version to either also use UniTask or at least ValueTask, since most times the Caliburn operations still return synchronously)
You can check the project out and of course any help keeping it synchronized for the most part with any development in Caliburn is always welcome, though I think I can handle that part. The current port on my master is based on the latest master here.
Quick question... is there any idea yet when your 5.0.0 version will get released? If it's not too far in the future I might wait for my 1.0.0 until then, so we're mostly API identical, aside from the classes I had to change (had to make some static stuff instance classes, like the Locator classes, since there can be potentially multiple bootstrappers in Unity for game UI)
If you haven't looked into NoesisGUI, take a look. It's pretty neat and also has C++ and C# SDKs and a Unreal integration. Baldur's Gate 3 used it. (The hope is of course to get some games out there to get some use out of Caliburn :) )
And of course, thanks for all the work on Caliburn.Micro :)
The text was updated successfully, but these errors were encountered: