Sure, it would be interesting to see what features you are thinking of. I'ld suggest that hud elements should be identified by a SimpleUri. But at the same time, it is unlikely we will incorporate further updates to the old UI system, so keep that in mind (your work would be proof of concept and prototyping only, essentially). Also there are some major differences in approach between NUI and the old UI, so some of your concerns may not even be an issue.I hope you don't mind, but I'd like to start working out the HUD element api now, and program against it -- I can write a simple version for the current non-nui gui and see how well it works in practice.
I was specifically highlighting that positioning would be configurable by the user. Not that would be the extent of the capabilities of what would be available for code.I'd like to see it go beyond just repositioning. I'd like to be able to disable, reenable, hide, display, and replace existing hud elements as well as fetch the hud element instance to call other methods on them. disable would stop elements from receiving events whereas hide would not render it. I think we would also want the ability to enable/disable keyboard bindings to these elements as well.
As an example, have the ability to switch between the core "imp view" hud and a "dungeon keeper" hud for giving orders to creatures.
On the specific features you mention...
* Disable/Enable: NUI currently uses "focus" to determine whether to send key input to an element, so that end of thing is taken care of I believe? If you mean something other than input events, I believe UI should be databinding driven, not event driven - ideally once set up a HUD element should take care of itself for the most part and not need to be updated by events or method calls.
* Hide/Display: Visibility should be a property of all widgets, whether top-level like the HUD element, or low level like a label. I would suggest the HUD element should hide/show itself based on a combination of internal logic and a databoundable property that determines visibility, if at all possible. Actually, I should just add this to NUI next. Visibility and receiving input are tied together - an invisible element isn't rendered, and thus doesn't "draw" interaction regions, so it cannot receive interactions. This makes sense to me because an invisible UI element shouldn't intercept clicks or input.
* NUI widgets don't support keybinding at the moment. What are your thoughts on it being necessary? I think it is probably useful for some things, like having the whatever is bound to opening the console also closing it. At the same time this could be handled by a component system.
* Replacement makes sense, this is further enable by the use of JSON assets for defining UI elements - you can replace a UI element using the standard overrides capability of Terasology's module system without any code, if it is defined as an asset. This obviously is problematic if multiple modules want to replace the same element, but that would be the same through code.
* Multiple HUDs or HUD setups is interesting, will meditate on that.
Additionally I'ld like to have an extension point system so modules can add into existing elements in predefined ways without having to replace the entire element.