GuiPlus is a versatile network GUI framework for Minecraft and Forge. It can be used by mod developers to easily create anything from simplistic legacy controls to attractive custom HUD elements.
Current state (more or less):
Parent/child based graphical element structure with easily overridden classes for custom implementations.
Common GUI elements built in. (ex: Label, Button, ToggleButton, TitleBar, TextPanel, DockPanel, ListPanel, TabPanel, ScrollBar, PopUp, etc, etc..)
Elements can stay on screen during game play for a versatile HUD (see below)
Elements can react to changes in input focus and adjust accordingly (ex: my chat demo in the images above will hide buttons, title bar, and input field when in HUD mode but displays them again when input focus is switched)
Elements can be defined and handled client-side, but if they are built of pre-defined element types, can be sent to the client from a server-side mod with no need for any additional coding or mod installation at the client... This means, once the player has installed GuiPlus, any new mod using GuiPlus that the admin installs at the server, or any change made to content, will be seamlessly synchronized with the client.
Planned features (that I can remember at the moment):
Many more bulit-in element types (ex: ImagePanel, ItemSlot, Graph, RadarView, Gauge (hp, mana, armor, ammo, etc), CrossHair, etc, etc..)
Automatic downloading for custom skins.
Animation for closing, opening, size changes, state switches during input focus, etc, etc..
Cursor changes and element highlighting on mouse hover.
Bukkit port
Full documentation and API for developers.
Thank you for your interest, please let me know what you think of the project and post whatever suggestions you may have. I will be posting more screenshots and videos of changes made while working toward a beta release so, FOLLOW THIS TOPIC!.. I need beta testers as well so please let me know if you are interested in helping.
Whoa, really nice job on that! If you're looking for another developer, hit me up in a PM.
Anyway, GUI's look nice and slick, which I really like. Does this have the ability to have images put onto the screen? (Like the XP bar, but static).
Thank you!, that is definitely what I was going for. I am no artist, but CS5 primitives with some fancy blending options did the trick.
Aside from the text, every element you see on screen are just 64x64 .PNGs programatically chopped up to preserve the scale and aspect ratio of the borders. Because of that fact, the system already supports full skinning and every element group on screen can have it's own skin. I also plan to add automatic custom skin downloading functions for even more versatility and ease of use. I even have plans for custom font rendering with pseudo anti-aliasing since I don't feel the vanilla font goes well with the style I am pushing for.
And yes, any image can very easily be displayed on screen as a HUD element. As far as XP bars and the like, I am coding a "Gauge" element that could be used for any type of bar or dial by changing a few settings (mana, hp, xp, ammo, cooldown, etc..). It will be as simple as instantiating the element and setting an image, ceiling, and floor. (and of course updating the current value through the integrating mod on a tick or event)
I could definitely use some help with the "polishing" but I'll need to get this thing out of alpha and do some cleaning/documentation to make the code more readable.
Thank you for your support! Stay tuned for more element types and tech demo videos.
So, it seems a lot like Rainmeter, did you make it based off of that?
I have heard of Rainmeter but never used it personally. I built GuiPlus from scratch. Visually it's just my attempt at a clean, attractive, feel, that doesn't waste too much display landscape or hinder game play. Under the hood I was going for a data structure that would be familiar to developers who have worked with common legacy guis, but object oriented.
Are the gui's click-draggable? Can you add new ones?
Yes, if an element has user move and size permission it can be dragged around or resized with the mouse. They have docking support (for docking to one side of the screen or docking inside of another elemnt), anchoring support (for anchoring to a certain spot on the screen or inside of another element), and I am coding tabbing support (so you can define a TabPanel and drag-drop other panels inside of it)
For elements that you don't want the user moving/sizing or don't want them interacting with at all, you simply clear the appropriate flags.
Element groups (like the 2 samples you see in the images) can be defined client-side, server-side, or in XML. Creating a custom group is as simple as typing out an XML file or instantiating element objects in code and linking them with the parent/cild architecture.
I will be adding every basic element that would be needed for most gui and hud implementations, as well as taking suggestions from the community. But if you need something more specialized you can simply extend one of my base element classes and override event handing for input and rendering. This way no one has to reinvent the wheel and attractive, functional content can be built that shares all the features of the rest of the system but requires minimal coding.
Seems like you have a very hardy system going there.
So, child parent relationships are built with XML? Seems like a decent thing. How will you define the flags for each element? Within an XML file or ingame?
Seems like you have a very hardy system going there.
So, child parent relationships are built with XML? Seems like a decent thing. How will you define the flags for each element? Within an XML file or ingame?
Thanks again. Everything can be defined in code or in XML, whichever you are more comfortable with. The primary purpose of the XML serialization and deserialiation is for client/server synchronization. One of my goals with this was to allow server-side mods to incorporate GUI interaction without actually having any client-side code. This way server admins can install new mods, install updates, and alter content, without players ever having to do anything to their client after the initial install of GuiPlus. I chose XML because it easily supports full serialization for passing an entire element group, or partial serialization for client/server synchronization events that are only passing small bits of content or state info. This system also allows local caching on disk of element groups so that the server only has to send the definition once, and content/state data is all that is communicated afterwards.
The nice side effect of all this is that element groups can be defined purely in XML if one so chooses, and content can be added or modified without ever changing code on the client and sometimes without even changing code on the server. Also, nested XML nodes are easier to read/write for some people than a long list of object instantiations, flag assignments, and parent.adopt(child) calls.
Holy cow. This mod looks like it will have great potential. If you want I could make a video of it, although I dont have a youtube I'd give you the download.
Cant wait for the release
I have an Alpha/Demo together with some interesting sample elements if anyone would like to play around with it and do some bug hunting.
It's nothing monumental and It's FAR from public release status but I am pretty excited about how it feels so far and would like to share it with anyone willing to actively participate in testing and suggestion.
I have an Alpha/Demo together with some interesting sample elements if anyone would like to play around with it and do some bug hunting.
It's nothing monumental and It's FAR from public release status but I am pretty excited about how it feels so far and would like to share it with anyone willing to actively participate in testing and suggestion.
Sorry for the hiatus folks, was very busy with work. Project is still active, here is a video after a load of bug-fixes and a few new features and skins.
Anyway, GUI's look nice and slick, which I really like. Does this have the ability to have images put onto the screen? (Like the XP bar, but static).
Thank you!, that is definitely what I was going for. I am no artist, but CS5 primitives with some fancy blending options did the trick.
Aside from the text, every element you see on screen are just 64x64 .PNGs programatically chopped up to preserve the scale and aspect ratio of the borders. Because of that fact, the system already supports full skinning and every element group on screen can have it's own skin. I also plan to add automatic custom skin downloading functions for even more versatility and ease of use. I even have plans for custom font rendering with pseudo anti-aliasing since I don't feel the vanilla font goes well with the style I am pushing for.
And yes, any image can very easily be displayed on screen as a HUD element. As far as XP bars and the like, I am coding a "Gauge" element that could be used for any type of bar or dial by changing a few settings (mana, hp, xp, ammo, cooldown, etc..). It will be as simple as instantiating the element and setting an image, ceiling, and floor. (and of course updating the current value through the integrating mod on a tick or event)
I could definitely use some help with the "polishing" but I'll need to get this thing out of alpha and do some cleaning/documentation to make the code more readable.
Thank you for your support! Stay tuned for more element types and tech demo videos.
So, it seems a lot like Rainmeter, did you make it based off of that?
I have heard of Rainmeter but never used it personally. I built GuiPlus from scratch. Visually it's just my attempt at a clean, attractive, feel, that doesn't waste too much display landscape or hinder game play. Under the hood I was going for a data structure that would be familiar to developers who have worked with common legacy guis, but object oriented.
Are the gui's click-draggable? Can you add new ones?
Yes, if an element has user move and size permission it can be dragged around or resized with the mouse. They have docking support (for docking to one side of the screen or docking inside of another elemnt), anchoring support (for anchoring to a certain spot on the screen or inside of another element), and I am coding tabbing support (so you can define a TabPanel and drag-drop other panels inside of it)
For elements that you don't want the user moving/sizing or don't want them interacting with at all, you simply clear the appropriate flags.
Element groups (like the 2 samples you see in the images) can be defined client-side, server-side, or in XML. Creating a custom group is as simple as typing out an XML file or instantiating element objects in code and linking them with the parent/cild architecture.
I will be adding every basic element that would be needed for most gui and hud implementations, as well as taking suggestions from the community. But if you need something more specialized you can simply extend one of my base element classes and override event handing for input and rendering. This way no one has to reinvent the wheel and attractive, functional content can be built that shares all the features of the rest of the system but requires minimal coding.
So, child parent relationships are built with XML? Seems like a decent thing. How will you define the flags for each element? Within an XML file or ingame?
Thanks again. Everything can be defined in code or in XML, whichever you are more comfortable with. The primary purpose of the XML serialization and deserialiation is for client/server synchronization. One of my goals with this was to allow server-side mods to incorporate GUI interaction without actually having any client-side code. This way server admins can install new mods, install updates, and alter content, without players ever having to do anything to their client after the initial install of GuiPlus. I chose XML because it easily supports full serialization for passing an entire element group, or partial serialization for client/server synchronization events that are only passing small bits of content or state info. This system also allows local caching on disk of element groups so that the server only has to send the definition once, and content/state data is all that is communicated afterwards.
The nice side effect of all this is that element groups can be defined purely in XML if one so chooses, and content can be added or modified without ever changing code on the client and sometimes without even changing code on the server. Also, nested XML nodes are easier to read/write for some people than a long list of object instantiations, flag assignments, and parent.adopt(child) calls.
Cant wait for the release
It's nothing monumental and It's FAR from public release status but I am pretty excited about how it feels so far and would like to share it with anyone willing to actively participate in testing and suggestion.
im game
Sent a PM.
Sorry for the small text, watch in full-size HD.
I assume other mods can hook in and use GuiPlus for their GUI methods? If so, I have a mod that could be greatly benefited by this.