Tuesday, March 25, 2014

Networking and player owned object spawning

I keep having to drop back to basics with networking. I always try some bastardised version of authoritative and client server from grabbing snippets here and there, then confusing who owns what and how the clients behave.

Right, to put it down step by step for myself later; simple server creation via Network.InitializeServer and spawning of the server players prefab under OnServerInitialized. When a player connects, I notice it in OnPlayerConnected but do not spawn the players prefab here (my previous shots made this player owned by the server, which caused me confusion wrangling the items later on. I did have it working, but it was muddled in my head and seemed overly complicated for what I wanted)

Instead, spawn the player in OnConnectedToServer so that there is a clear separation of client/server making the scripting classes easier to read and use.

Now, I use a base class for all other items that need to exist or move relative to the origin based camera. All it does is toggle the render flags on the objects attached and stores a "relative to origin" vector3. When a player spawns, say, a radar satellite, it needs to be grabbed by the other players application and rendered in the right place.

And wa'hey


Wednesday, March 19, 2014

Multiplayer enabled custom coordinate system with local area rendering.

Well, that's a long winded title. I also need to get all of these scripts sorted out and hosted somewhere for people to look at.

Custom coordinates (previous post) worked well and the localised renderer toggling worked well in conjuction with the other players.

My usual issue was the networking setup and re-learning all the things I forgot about RPC communications.
Ensuring that the NetworkView items are added and set for no state synchronisation or observed items set me back as usual. The "ownership" of items and initialisation of the known "world" objects (in this case, stand-ins for solar system objects) caused me trouble until I realised I should send those objects down to the network player via RPC instead of configuring it on server connection as that only updated the servers version.

My idea is that the local player needs a copy of these items coordinates in order to do the rendering in relation to themselves and being able to manipulate them without contention on the server.

I worry that the amount of traffic needed for a living place could be prohibitive so one of my next steps will be handing around a seed and doing some very late update synchronising.

For a starfield, there are some simple tweaks available using (in this case) multiple legacy particle generators. I'll follow up on this later as it doesn't work with repeatable results (I need to seed it). But it is rather pretty.

Wednesday, March 12, 2014

Double based custom coordinate system.

There's an ever nagging voice in my head that says "make a solar system and fly around in it".
To that end, I've produced a test scene.

First things first, multiple cameras. In order to get close and far viewing without z-buffer fighting, two cameras are bound together. The first should have its clipping set to near 0.01 and far 1,000. Ensure that this has a low depth priority (using a default scene camera, this should be -1). The second camera, with a near 1,000 and far 1,000,000 (or whatever you fancy) and a priority higher than the first (say, -2). 

Depth priority means that the higher value is rendered first, then the lower values rendered over the top. It's important to set the first (lower priority) cameras clear flag to Depth only otherwise it draws over the far away items.

For a custom coordinate system, I crafted a small Vector3d setup using doubles. So far I've only needed to implement the constructor, magnitude, distance and the subtraction operator. The main idea here is to put an awareness bubble around the player (who stays at the origin in world space).

Moving the player object simply adjusts the Vector3d that belongs to it. Once the distance between the other objects and the player falls inside the awareness bubble I trigger the rendering of the non-player item and position it at the edge of the bubble. Its "local" position for drawing is then in relation to the movement values the player changes.

Throwing in some real planetary scales and distances brings the odd trouble, but probably require some shenanigans around faking scale ranges. This is a nice core double based system that should allow for some driving about.

Monday, March 10, 2014

Configuring an Azure shared site with domains4less

I've fumbled my way around configuring my domain (http://quiet.net.nz to host apps I create) and azure shared site with the domains4less control panel templates and the howto from http://www.windowsazure.com/en-us/documentation/articles/web-sites-custom-domain-name/

On of my gotchas is the default template with its * and @, my confusion around the MX and TXT records I configured (prefixed with @) in my previous post about domains.live.com setup.

I added a CNAME for www to my azurewebsites.net address, awaited the replication and then added the awverify settings. But the wildcards of both @ and * and the restrictions on @ in CNAME led me to killing the A for * and setting the * in the CNAME.

If you get what I mean.
CNAMEs
* -> mysite.azurewebsites.net
awverify -> awverify.mysite.azurewebsites.net
www -> mysite.azurewebsites.net

A
Deleted the entry for * -> domains4less destination IP.
Changed the entry for @ -> azure IP from the Manage Domains configuration.

Wednesday, March 5, 2014

Mordheim Bodyguard

A wip shot. Lucky to grab this guy off trademe not long after games workshop pulled the item days before I went to order it. His purpose is unit filler for my Empire army, but gosh, if I don't want more of these older ogre sculpts for a Maneater unit for my Ogre Kingdoms lot.