Saturday, July 5, 2008

Some interface changes

This week, I have added some additional elements to the user interface in order to make it more user-friendly.

The first would be the turn counter in the top-left hand corner, which is handy for knowing how long the game has been progressing for someone who is joining in half-way, and for knowing the current 'phase' in rulesets like Reach for The Stars, where there are three phases and certain orders are possible depending on the phase. However, it does not actually show the phase - the user will currently have to calculate it on his own.

Another difference is the End of Turn timer in the bottom bar, showing how many seconds are left until the turn is over. The 'End' button next to it is used to tell the server that you are done with your current turn, although this step must usually be taken by the majority of players before the server actually finishes the turn.

Next, when the user hovers the mouse cursor over any object on the starmap, a popup will display with some information about that object such as their name and owner (if any). In addition for fleets, the composition of the fleet will be shown, while planets will display their resources and star systems will just show how many planets they contain. One thing I'm trying to figure out is how to dynamically resize the popup in accordance to the text contained, to prevent text overrun such as in this case:

etower333's home planet - In the minisec ruleset, the home planet of a player is defined by having "Home Planets" in their list of planetary resources.

Another change made is to tweak the icon view so that it colours the icons according to their owner:

This makes icon view a lot more useful, especially as I'm still working out how to show ownership of planets in 3d view without colouring the entire planet.

A common issue with network applications is having the server down, or providing incorrect credentials, so an error message will be displayed when this situation occurs.

I'll be looking out for more areas where I can put information or error messages, but I probably won't post about it again as it's quite minor in implementation (though important).

One suggestion was to have a way of selecting between objects that are clustered closely together when the view is zoomed out. In the wxwidgets client, clicking on a star system will cycle through all the objects in orbit around that system, so I have attempted to make something similar - when clicking multiple times on the same spot, the client will cycle through objects overlapping that area.

Issues encountered this week
A new version of python-ogre was recently released (1.2 RC2), and contains a huge amount of changes from RC1. After downloading the windows build, I found that it wraps versions of ogre that I had never even heard of! (1.7 in this case - the latest stable version is 1.4.9 and the next slated release is 1.6, codenamed Shoggoth. Talk about bleeding edge. :)) Needless to say, it brought a few interface-breaking changes with it and I was considering whether to port the project over or not. One desirable thing about RC2 is that it supports CEGUI 0.60 which comes with a brand new tree widget - something which I'm sure would be very useful. One course of action might be to compile a custom version of python-ogre with just the new stuff that I need - something quite easy to do on linux as I just have to change some version numbers in the build scripts. On the other hand, that would make it more difficult for people to just download the source and run it when they already have python-ogre installed. I think that for now, the client will continue to target the previous version of python-ogre (1.1 since 1.2 RC1 has disappeared) until I can wrap my head around all the new stuff that's just come in.

Things to come next week
I will be working on animating the camera view to make it smoother (for instance, zooming in and out should be gradual and not abrupt) while making it possible to rotate around an object.

Also, I want to revamp the messages window to implement the great suggestion of having a two-paned system, and to handle messages with html tags in them, although I'm not very sure how I'm going to do that at this point.

Thirdly, I want to squish all of the bugs I've found so far. :)

1 comment:

mithro said...

Great to see more progress! One thing I remember you suggesting is to animate the "turn update process". I think this would be a very cool option to look into, it would definitely give people something to look at while the downloading is occurring.

There is also the option of adding BattleXML support to the client.
BattleXML basically describes how a battle occurred. It is currently only supported by the Python server, but will be added to the C++ server when Lee gets around to it. It is definitely well suited as you can have lots of cool explosions and similar. For more information check out the battleviewer which is in git. I'm happy to explain more about the format on IRC sometime.

Regarding python-ogre, I think sticking with the version you have is probably the best idea for now. Once we have Ubuntu debs working then we can easily think about switching. We only really need to worry about Linux as for Windows and Mac the binaries contain everything that is needed.

Regarding the HTML formatting. There are some libraries for python which convert HTML into plain text (while keeping things like indenting and bullet points). This might be useful for a first pass at getting something a little more readable.

Regarding what type of hardware to support, I think going for people who actually have 3d support is good. It would be cool to support the intel cards (which are the bottom of the range) but not required. Your client is really about eye-candy, if you want to run a client on low end hardware, you can always use tpclient-pywx.

Have you though about putting particle emitters from things like the ships engines?

Keep up the good work.