A wedding, a visit from mother, a double-double bank holiday and a portal gun.

Where have you BEEN?!?!

Ok, it’s been a while, I know. I’ve been busy! First week in april I went to the wedding of one of Jo’s friends (which to be fair, was very nice!) since then it’s just been none-stop with one thing and another, including the mind bogglingly awesome portal 2, But, with this insanely long double double weekend event, I decided that I needed to say enough was enough and get back to development. There was also the event of dogsbody dying. I’ve now sent off the drive, and replaced it with an 80gb one as temporary measure so that I can continue with development…

Ok, so what have you got done in the mean time?

Well, if you cast your mind back to the last post, I’d just got balls of weapon type things flying around, but firing lots of them was causing the server to slow to a crawl. I spent a good couple of days googling ways to speed up database access, (improved SQL commands, locking the tables prior to use, moving the database onto a fast flash drive) but none seemed to make a massive amount of difference. In the end, it was taking about 200ms to update the position of 1000 entities. This is quite clearly not helpful at all! I’ve stuck a book entitled high performance MySQL on my amazon wish list and e-mailed/ text my brother to say that he still owes me a birthday pressie, but so far I don’t think he’s got the hint. I’ve read about something called MySQL cluster, for high performance distributed databases, but I’m not sure if this will meet my needs, or even what it actually is. I’ve decided to put this problem on hold though, in order to meet the 1st of may deadline I’ve set myself…

Ok, so things aren’t going swimmingly, but surely you’ve got something done?

Well yes. Like I said, I’ve put this particular issue on temporary hold until I can get a firm grip on other performance issues and how I want the server to behave in certain circumstances. So, soldiering ahead with some of the other stuff, the first of which was to make items “time out”, e.g weapons fire only has a short life span. This was relatively easy to do, a time stamp is stamped on an entry at creation, and it’s evaluated every time the server updates the positions of stuff. Thinking about it, and having read an article on eve-onlines dev blogs, they imply that their physics calculations are only carried out once per second. Which, means that their database isn’t quite as impressive as I thought it was, but, is still impressive. My original idea was to have many servers serving the same solar system, with all sorts of other wonder, but I’m starting to think that that is just too much wishful thinking, and that maybe one server per system is the way to go. It certainly would simplify some of the database access stuff, and would then allow the server a lot more freedom with how it manages the world (less calls back and forth), but, at the same time, that would then relegate the database (for movement parts anyway) to purely the role of data backup, which removes at least some of the performance constraints. For now, this isn’t much of an issue, and I’m content to leave it as is, pending the whole performance mysql book thing.

We were promised pew pew.

No you weren’t. Seriously. Go back and read it, and I made the distinct statement that pew pew was some distance off. I’ll wait here while you do that.

Ok, we still want pew pew…

Ok. I shall ignore that for now. Once the server was no longer updating and had in fact removed the expired entities (in this case read as energy balls), they were no longer being processed, and new clients wouldn’t see them, but, they were however being stuck in space and could be flown up to and even through. They caused no interactions, as they were essentially ghosts of balls past, but they were a nusiance nonetheless. What was needed was a way of the server telling the client that certain things had been removed from the game. This raises the question of “removal in a puff of logic” or destruction in a BOOM kind of way. I’d kind of been toying with the idea of removal and destruction as two separate events, but I think this might be a little too complicated to implement, to start with anyway. I’ve kind of liked the idea of the client having to marry up the removal of a ship because it’s been blown up, with a big explosion where it was, as apposed to being told that a particular ship has been destroyed. It comes down to the data, as received from the server, not being perfect, but deliberately so. I mean, If it looks like a duck, moves like a duck, and quacks like a duck, then it’s probably a duck right? Why would a ship being replaced with an explosion be any different? It certainly opens up a can of worms later on though… Anyway, I decided on removal of energy balls. Fortunately, I’d thought of this a while back, and there was an unimplemented thread that requried minimal stitching up to get it to work. Voila! balls that disappeared after a few seconds.

WE WANT PEW PEW!

It’s a good job I just finished the first draft of pew pew. It’s not perfect, and absolutely far from it. It was a relatively easy prospect to add very rough, radius based colision detection. This now means that balls of energy, colliding with a ship will result in the ship being removed. There is no explosion effect (yet) but it works: client with guns and death. It’s not tested yet, but there is no reason that it shouldn’t work first time. Two ships, logging on to the server together, should see each other, and be able to shoot the crap out of each other (or crash into each other!)

We love you.

I know. This has been an insanely long post, even for me, so I shall cut it off shortly. I’ve got a few things I want to tweak, and Icarus will be ready for version 1.0 release! I want to add some kind of basic HUD, a cross hair and some kind of threat indicator to let you know where the other ship is. Speaking of the other ship, I think it’s time to get rid of the default model and replace it with something a little more… suitable. I should be able to just update the appropriate actor class (responsible for anything drawn on the screen) to load the model from a mesh as apposed to directly creating one. Should is the operative word here…

Posted in Project Icarus | Leave a comment

PEW PEW!

Ok, I know it’s only been a couple of days since the last update, but I figured this one was deserved. After a fairly heavy day at it again, I’ve got some significant progress, and, as promised a video! 

Oooh, pretty. What is it?

Well, to start with, it’s showing that the joystick control now functions, with a vague and simple flight model (like I said it did). Multiplayer should work. There is simply no reason I can think of that two people would not be able to log in simultaneously and see the effects that the other was having on the world. However, until I actually log in and do this, everything is purely speculative. The last thing you see is some weapons fire. I say weapons, it doesn’t actually do anything, but it might as well be weapons fire…

Pew pew then?

Not quite. There are a few issues still to iron out, like for instance the balls are supposed to be green, not white. Although it should be fairly straight forward to calculate whether or not someone has been hit, there are issues to do with the firer, where, depending on a few race conditions, it would be possible for someone to be hit by their own weapon in the moments after firing. To this end I’ve got to have a think about what I’m actually going to do about it. Do I simply make it fire from velocity*timeperiod*asafetyfactor in front of the ship? it might give weird graphical issues, but should mostly work… do I make the weapon not become live for a few moments… Could be tricky if you’re close to your opponent already though…

No pew pew then…

Not really. Like I said, a few design decissions to be made, but they should be doable relatively quickly. The only problem at the moment is that the server is a little bit like a bag of spagetti. Various stuff is handled all over the place and I can’t say I’m happy about it in any way shape or form. However, the client is coming along quite nicely and seems vaguely stable and hasn’t needed too much re-writing no matter what I’ve thrown at it. I think I’m going to leave the server as it is, for now. There isn’t much benefit re-writing what I’ve got already until after May 1st. Let’s face it, at that point I should have a much better handle of what I want various things to do anyway in the server, as well as a better understanding of the database stuff.

So pew pew soon?

Yes. Soon. When? When it’s done and ready. There is one small problem at the moment. After a slightly trigger happy session testing, I noticed that the game was becoming a little choppy, in that with 1000 odd entities in the database, the simulated frame rate had dropped to around ten frames a second. I should note, that when I say virtual frame rate, I mean the rate at which updates are received from the server (or rather observable updates of positions. Also note that there is no frame smoothing between updates from the server – deliberatly so at the moment to show up issues exactly like this one…) After a little investigation, it was clear that the slowdown was due to the actual updates to the data, not the WCF interface itself. A quick google revealed that it might speed things up significantly if I lock the table before doing the updates, so that’s my next task!

Posted in Project Icarus | Leave a comment

Squashed like a puny insect

Ok, so after a fair chunk of research, lots of head banging and frack all progress, I didn’t really have all that much to show for anything. I’d managed to figure out how to turn on debugging mode in direct x (which didn’t really give me a lot, just a general direct x error) and how to get visual studio to not ignore exceptions raised in dlls (why would you ever want to ignore them whilst debugging anyway? surely that’s the whole point?!?!)

But it’s fixed now right? riiight?

Yes, I did it, I finally solved my first real bug. It turns out, that whatever wraps the mesh class in the un-managed version of directX, doesn’t auto-release it. So, every time you new a mesh, you get it permanently. So, when every frame I had a new mesh being created… well. You get the idea. Not my finest hour, but something that I wrote in a hurry to get something working, with every intention of coming back and fixing later on. Oh well, that’s the way these things go I guess!

Sounds good, we like progress.

Yup, so do I. In fact, there was a very simple bit of progress shortly after I found the bug. This is perhaps the most important bit of progress, and it actually shows that somethingworks to the untrained eye. I now have a little ship that can fly around other little ships. (When I say ships, I mean little box wedge things, but sssssshhhh) But yes, whichever way it points, it flies! Complete with throttle control! A little crude, and not really how the flight model is going to work, but it’s close enough that I can use it to start with to get a framework.

That does sound good, where’s the video?

Well, yes, that’s good news, but there is bad as well. Ok, I forgot to take one when that bit was working, and now I’ve ripped the guts out of some of the server stuff and I’m back to square one with a blank screen due to an issue with notification of owned entities before they’ve been setup by the server notification. I’ve now got to wrestle with some classes to make them either re-call the code that will bind the camera to an entity, or think of some other funky way of reassigning an object for several references in one go. I have some thoughts, but it needs work.

That is bad news.

Yeah… that wasn’t the bad news… It appears that the HDD in dogsbody (the affectionate name for the NAS that I use to run SVN and other general storage) has taken a turn for the worst and is failing a load of fairly important looking tests. It’s currently still working, but the last thing I want to do is rely on it and then it to go pop. To make matters worse, It’s only a single drive NAS (believe me, I’m cursing not going for the 40 quid more expensive double bay version with mirroring when you have two drives) but you live and learn. I’m hoping to get the drive sent off to be replaced, but I have no idea how long that will take. I had gotten to like SVN quite a lot, it was a very nice way of switching between work areas without losing any progress or other such stupid things. *sigh*

Still, I think we’re still on track for something playable on May 1st!

Posted in Project Icarus | Leave a comment

Has it been that long already?

Whoa, what a time. It’s been very busy for me personally, with a lot of my time taken up with people leaving do’s at work, due to a round of redundencies that has just occured. Anyway, I managed to find myself a few minutes and managed to actually get some code done! I know! A miracle!

Where were we?

I think the last time I spoke on here, there were just four spining test models on the screen, spinning. This showed that the client was rendering information given to it by the server, and that the server was correctly processing and updating entities in the database. All great!

So what did you actually get done?

Since then, I’ve re-written parts of the renderer camera to allow binding to a specific entity. (I’ve allowed the view to be from a ship) That’s obviously quite important (seeing where you’re going/ aiming and all that). It’s always been my envisaging that the camera would be able to bind to an entity in many different ways; looking at, looking over the shoulder, offset etc etc, and the way the camera class hangs together reflects this. I’m not sure it’s perfect, but as the game matures and I figure out what I actually want to do with it, I’m sure it’ll become better.

That’s it? That’s all you’ve done?

No no, I’ve also updated the server to create a new entry in the database every time a client connects. Getting it to delete the track again afterwards is proving a little trickier than expected, but that was well. Expected. The client has had some major poking of it’s inards to allow sensible processing of all these different entities and to allow the camera to bind to a specific, or special track.

That doesn’t sound like much.

It’s not, but be patient, baby steps.  But WAIT! There’s more! I re-stitched the joystick back in. Big whoop, I know. BUT WAIT! There’s more! I created an interface to allow the joystick data to be sent to server to process and actually affect the world! That’s right, real working joystick controls! BUT WAIT! (and so on) I’ve poked and stirred the client around quite a lot, so it now has quite a good concept of what the current “game” contains (a world representation, and some ships that exist in that world) a world contains (at the moment this is just a list of entities, but I fully envisage this to grow as it matures) etc etc. I’ve not decided on a format of handling the server<=>client requests that should work quite well.

That all sounds swell, is there anything else we should know?

What, you mean being able to control and manipulate a “ship”, in real 3D space with sensible and (hopefully) well designed code in the background isn’t enough for you? Well, there is one thing more… A nice shiny, juice gigantic yellow head of a bug. Because, see that nice thing I just described? It all works exactly as described… for a few seconds. Then, for seemingly no reason, I get a random directX error. It would also appear that diagnosing these kind of errors is very, very, very difficult to do. (well, from the limited research I’ve done). This is of course why I’m here though, to push forward the limits of my comfort zone and investigate and understand things of which I have had no previous clue or knowledge.

*sigh* what could possibly go wrong?

Posted in Project Icarus | Leave a comment

And then there were four spining wedge things.

Ok, I’ve had a couple of evenings to myself now and work is rocketting on! The server architecture is starting to come along nicely and I’m learning nice things all along the way, which, is exactly the point of all this!

So what’s new pussycat?

Like I said, there is a lot of work in the engine of the server, giving a vaguely sensible layout and some vague form of structure to the various activities that have to go on. The client has undergone some pretty major work too; it now receives a list of entities from the server, stores them, creates actors to represent them displays it all on the screen. So, we now have as many things on the screen as we like!

That’s great news! What’s the bad news then?

Well, I wouldn’t exactly call it bad news, but I was held up for a while on some juddering issues (I may be forced to make a video, I may not) that I eventually tracked down to the database not being quick enough to meet it’s performance constraints. I’ve put some code to kind of protect against it, but it’s not looking too good on that front. It would appear that the timer was kicking off the process thread, and then the timer was expiring and kicking off the next event before the first had completed. I’ve had to drop dogsbody (my magic NAS box) as it would appear that it just wasn’t quick enough (in latency terms anyway) to get the data turned around for my needs. This has created me a little head room, but I must remember to add some performance constraing checks in the server! Otherwise who knows what odd things could be happening.

Wait, weren’t you going to talk about quaternions?

Well rememebered you at the back! Basically, these are funky things invented nearly 200 years ago as a way of representing orientation, without suffering from the normal problems of gimbal locks and a whole other heap of stuff I’m not too sure of. Anyway, they were pretty much dropped as they’re hard as nails to properly understand, but they seem to be back in vogue because they’re nice mathmatically and are much more efficient compared to eular angles. Either way, they are used when calculating how to rotate an entity in screen space around it’s own axis. i.e, where the nose is pointing. Currently, there is no acceleration based on the entities orientation and I feel that I may have a little difficulty applying the acceleration, as the ships orientation is represented in the database as a quaternion, and I’m not entirely sure how to get the direction the ship is facing in a form I need to work with… Oh well, we live and learn…


Posted in Project Icarus | Leave a comment

What’s going on?

Ok, well, development has been a little slow the last week, but it’s not my fault, honest! I’ve done some work on creating structure within the server, but that’s about it. Last weekend was spent with Jo in Portsmouth, to celebrate her birthday, which was, mostly, really nice.

What work have you been doing then?

Project wise, I’ve not really got an awful lot to show for my efforts. I spent a while playing with SVN, merging the changes for the renderer stuff back into the trunk (relatively straight forward) and then updating another branch with the changes in the trunk. This caused quite a few conflicts which were quite a nightmare to resolve! Mostly due to there being a lot of placeholder code, a lot of the code which was there was re-written/ moved around/ refactored. Hopefully things should simplify later down the line when things are a little more stable! It certainly did highlight the dangers of multiple development branches though! It can be a nightmare!

So what about the server?

The client has received most of my work recently, which is all well and good, but the server has been quite neglected. Where I have a pretty firm idea now of how the client is going to hang together and what the top level subsystems are going to look like, the server is definately not feeling the love. It sat, rather unloved, with a splurge of ideas and thoughts vomited onto the screen. It worked. Kind of. It worked well enough for me to be happy that I could develop it. Unfortunately, that time has now come. So, when on Monday I was planning on getting the WCF a bit more up to date, I spent most of my time re-factoring and adding structure to the code I did have. I’ve got something that hangs together a little bit better now, but I’m still not happy with it. I’m still not comfortable with database access and, whilst it’s easy enough to read stuff and update stuff thinking hey! That’s easy enough to wrap up and put some structure on, I simply don’t know enough about what it is I need to do with the database (concurrent access, handing responsibility of items between instances of the server, protecting transactions etc etc) to be able to confidently put some code in place… *sigh* But, isn’t this why I’m here after all?

So, you didn’t get anything useful done?

Well, that’s not strictly true. I found several very very good articles about WCF, sessions, instances and concurrency. All of which seemed very very very good and aided my understanding of how WCF hangs together no end. I was having major trouble “discovering” my service and creating the proxy with the svcutil thingy, but I later found out that it was because I needed to manually add the metadata behavior. All done and everything was good.

Ok, that’s great, WCF it is then?

Pretty much. There is one small remaining problem though. It would seem sensible to split up the functionality into multiple interfaces, right? Well, as far as I can tell, it’s a one to one relationship between service contracts and interfaces. Also, as far as I can tell, it’s a one to one relationship between sessions and services. Which puts my thinking of the model right out the window, unless I want to have one gigantic (and unruly) interface, with one session, or lots of structures small interfaces, but a terrible and horrible session management. I think I might be able to have my cake and eat it though, by inheriting the interfaces and extending it with relevant functionality. so A is parent to B which is parent to C which is parent to D etc etc, so each interface is separate, but amalgamates to form one giant interface which can be realised by my WCF handler class…

P.S

If anyone other than me is reading these, please feel free to register and post the odd comment. Hell, even if you don’t post comments, it’s still nice to know that there is someone (else) listening to what I’m thinking!

Posted in Project Icarus | Leave a comment

Eat my shorts.

Ok, so we have progress! First and foremost, a rant about my own stupidity. I’ve spent pretty much two days toiling over this, which is in actual fact a very very simple error (arn’t these always the hardest?)

A quick 3D lesson for those at the back, not paying attention. To draw something in 3D, you need verticies. Think of these as dots in a join the dots puzzle. Then, you need indicies. These, specifically, are in groups of three and specify a triangle (everything is made up of triangles!). So yeah. You specify a list of verticies, and then you specify a list of indicies.

You can then pass these, independently into the direct3D device, a little magic happens, and voila. You have some shapes on the screen. Alternatively, you can join these two things together and you get what is called a Mesh. This is quite an important concept in 3D programming and not something I wanted to brush over quickly. So when my simple mesh of two triangles failed to work, I was left almost crying and this felt like the last straw. The problem kind of boiled down to the fact that when I specified two faces (a group of three indicies forming a triangle) and six indicies, no triangles were being drawn. When I specified three faces from 6 indicies, I got two triangles, but not the ones I’d told it to draw. The first one looked kind of right, but the second one was obviously rubbish. I build and rebuilt and tinkered, but couldn’t find what was going wrong.

So what was it?

When you work with the indies and verticies separately, you have to put them into buffers, and give each buffer to the direcd3D device, which worked flawlessly. Put them in a mesh, it failed. So, after much googling, I came accross: http://www.mdxinfo.com/ and the exact kind of tutorial I’d been looking for, one that specified, by hand, a load of verticies, and indicies, and then made a mesh from them. I overlaid my code on theirs, and couldn’t see any obvious differences, so I spliced the two bits of code together, and all of a sudden their code didn’t work. Pure their code, was fine, so I knew my answer lied here somewhere.

Come on, tell me! I’ve got work to do and stuff!

And there it was. Such a simple mistake, and so very easily overlooked. The indicies array. I had declared the indicies as “int” I mean, after all, it’s an integer, what could go wrong? *facepalm*. Well, it would seem that the direct3D device code uses some kind of memory map or something to read the integers, as as soon as I changed it to be an array of shorts (a type of int, but can only represent half a regular integer) as per the other example I’d seen, and voila, two circles, exactly as expected appear on my screen. Cue the Champagne! (almost).

And then?

So, a very productive evening later, pesky Z-buffer problems, quaternions hell and some joystick maping later (this will have to wait till a later blog!) and we have the Client_prototype video! It might not look that impressive, but it is the culmination of many many hours work on this! The movement you see is purely joystick based and it behaves exactly as I’d expect and hope it would; pitch, yaw and rolling about the appropriate axis.

And then?

Well, now I have some vague kind of 3d graphics going on (well, graphic sufficient that will allow me to carry on developing in a different part of the system) I guess I should move back to the WCF. I’m a little worried about it to be honest, it’s big, scary and although I’m pretty sure I should be able to get it to behave how I want and need it to, I’m not entirely convinced that I will be able to! Eep!

Until next time…

Posted in Project Icarus | Leave a comment

What is it with 3D graphics?!

I’ve had it with SlimDX.

I just couldn’t get SlimDX to even draw me a simple triangle where I wanted it. This, of course, leaves me flat out of 3D options. Well. Not quite. I’m going back to square one, and microsofts DirectX. But didn’t that not work I hear you say? Didn’t M$ abandon all development and support for managed code variant of DirectX? The answer? well, yes. The short version is that the last compiled version was for .NET 2.0, and if you try to run it in .net 4.0, you get an error. An error that’s quite easy to supress. My thinking now is to get to grips with how Direct3D hangs together until such time as I hit a major issue with the non supported .net2/4 type thing, in which case, I should be in a much better place to understand how to make the transition back to SlimDX. (Well, that’s the theory…)

It’s a trap! (that will make sense when you see what Riemers flight is based on)

To that end I’ve spent the last few days playing around with it, and have made significant progress. I’ve run up Riemers.net C# examples on both my laptop and my main computer, refreshing my hope in this project. I have now start putting together the framework for the rendered that will sit on top of the game engine to make everything nice and pretty and playable.

A few sucesses, a few failures

I have had a few successes (like making the camera rotate with the joystick), but, am hitting bumps along the way. I now have a much better understanding of how Direct3D works and how to use it (Vertices, Indicies and Meshes), but am having trouble stitching together something that makes any form of real usability. My main problem at the moment is actually stitching in the mesh; I’ve given it a vaguely right looking set of indicies and a verticies, but it doesn’t want to draw the triangles I’ve told it to. I’m now starting to regret jumping the step between just vertices and meshs (using vertices and indicies, both in their own buffers). Oh well, I think this is something I will have to take a step back for tomorrow. Other than that, my overall class structure is hanging together well I think, and has real promise!

Onwards and upwards! Or should that be: move(new vector3(1,0,1)); ?

Posted in Project Icarus | Leave a comment

And then there was WCF

I know it’s been a while, but hey! I’ve been busy! Ok, so my first venture into WCF hasn’t gone too well. I’ve got to grips with the basics, defining an interface, discovering an interface with that funky tool that generates all the client code, and I even found a couple of code examples of how to dynamically connect to a service without having to use that stupid config file. However. I’ve hit all sorts of latency issues, which have made me re-think using WCF in the first place. Part of me thinks this folly and stupid, as it’s M$ all singing, all dancing framework, but part of me is wondering if I’m wanting it to do more than it’s meant to.

Fortunately, I did find one example of a guy with similar problems explaining that it’s actually the data serializer causing my latceny issues, and gave a nice looking code example that involved the coder writing what essentially formed a data serialiser. I’m not convinced though, and lots more experimentation is required I think!

XNA

I’ve had a quick play with this, and also poked around with the XNA tutorials at http://www.riemers.net/, which, although awesome and do exactly what I want, do suffer from one small problem. The XNA won’t run on my laptop. Now, I know that my laptop isn’t the worlds greatest, and that I shouldn’t expect a lot from an integrated graphics card. However. I can run eve online on it, one of the prettiest space games for a very long time. Granted, it doesn’t run well, but, it runs. If this project is every going to work (let alone take off, pardon the pun) Then I’m going to need to develop on my laptop. XNA just laughs and says it can’t find a suitable device. Ignoring that, if this project is ever going to take off a la minecraft (as if!), then it’s going to need to be widely accessable. Lets face it, minecraft doesn’t have the prettiest graphics, but look at what it’s done!

This kind of leaves me back at square two, using slimdx, which, as far as I can tell, is a mostly direct X compliant library, as previously mentioned. 

so?

Well, there arn’t going to be as many code examples for slimdx, nor as many people able/ willing to give help when things inevitably go wrong. XNA also has the added benefit of opening the door to XBOX development and deployment. Not something that I really want to actively get into, but it’s something that at least looked interesting for a few moments.

And then there was the C# course and Vodafones stupid outtage

In random and unexpected twist, I’m on a C# course, paid for in full by my company (go Andy!) so a week of living it large in the hotel (which has it’s own Gym, of which I just popped my Gym cherry in; more of this in a moment) But anyway, yeah, C# course. The first day was much as I expected. I didn’t really learn too much, maybe a few odds and sods, but it was mostly affirming what I thought I knew. There are a few topics coming up that I haven’t really done much with (reflection, generics), but, I’m pretty damned comfortable with everything else that the course has on the label. At the very least this should give me an excuse to get into some kind of C# role within the company, which, I have to say, would be freaking awesome. Not sure if it will happen, but we’ll see!

And the Gym?

So, all day my phone has been out of service, or has had service but been unable to do anything. Now I think I understand why: http://www.bbc.co.uk/news/technology-12595681. Well, that was great, and meant that I couldn’t call ahead and explain that I was stuck in traffic on the M3. Additionally, it meant that I couldn’t do any work on the project tonight, and meant that, gulp, I ended up in the Gym! For some reason, I had the foresight to pack a gym shirt and tracksuit trousers and my running shoes… I had some insane idea of maybe, possibly going for a quick jog around the block, but I wasn’t going to turn down a free gym session when I had nothing to do!

Moving forward

Ok, I appreciate this is now quite an obscene length, so I’ll cut it short. I think I’m going to leave the latency issues as is for now, lets face it, they’re not going to cause me developmental issues, and I might not even get to solve them full stop. I want to have a good ol play with the direct 3D stuff, and that’s what I’m going to do in my spare time in the coming evenings. (in theory anyway). After all, what’s the worst that could happen?

Posted in Project Icarus | Leave a comment

Here be joysticks

Licencing

Ok, so slight panic over, thanks mostly to Steven. He’s pointed out that I was reading the wrong part of the licencing agreement, and it was actually for a different product *facepalm*. Anyway, it actually turns out I can pretty much use the code for what I like! Go SlimDX!

SlimDX then.

Ok, so after playing around with the example code and my development area, I’ve actually got something that seems to hang together fairly well, using events, something that I very much wanted to master! Well, mastery is not quite attained yet, but I have managed to set up a multi subscriber, multi publisher setup where the event class has several inheritance based variations. Go me.

Moving forward

There is still a little bit of stitching to do with the joystick, and maybe updating it to also include the keyboard? Who knows, I don’t think I want to spend too much time here yet, given that I’ve still got lots left to do. The next thing I think I’m going to have a go at is the WCF interface. I’ve got a nice article from the MSDN that explains the subtleties of the different types and way to use the WCF (http://msdn.microsoft.com/en-us/magazine/cc163537.aspx)

Once thats in place, I plan to stitch the code so that the moving of the joystick will adjust the velocity of the track in the database, which will then filter back up to the screen in the form of an entity list update.

And then, *gulp* It’s on to the 3D work to draw something. Block based ships here I come!

Posted in Project Icarus | Leave a comment