Improved UI :
We replaced the multi-line listbox with a multi-line edit box, in order to get word-wrapping a eliminate the horizontal scroll bar. This only worked properly after forcing the vertical scroll bar to always appear, otherwise the horiz scroll bar would come back when the vertical scroll bar came in, as the vert one reduced the horizontal area for text.
Also, the weapon selection box is working now.
Enabled Multiple Nav Grid Areas :
The nav grids are currently created by dropping a sphere at the player pos and sweeping it in 8 directions, then recursing to each valid neighbor. This is great, as it automatically creates the navigable areas from places the player could go.
The downside is that if there is a ledge or something the player can't get to, but one where we wish to place an enemy, the enemy would not have a valid nav node, and would either keep still or wander towards 0,0,0.
Yesterday I added each sentient player to the nav grid seed stack, so that any area accessible to the player or any enemy is added to the nav grid. I may expand this later so that certain triggers can act as nav seeds if we don't want to put an enemy there.
This changed exposed a bug in the brain's pathfinding code, which didn't handle failed AI searches gracefully. Now the enemies properly react to you even when they can't get to you right away.
Walkable Entities :
There is a piece of code in the simulation loop that looks for walkable triangles underneath the entity's feet. If one is found, it sets the entity's velocity to match his desired velocity. This didn't check for entities below the player, however, which prevented him from walking on objects.
I fixed this yesterday so that now you can walk on objects, such as crates, and a new bridge object ( pictured below ), which will use some of the door logic to be able to slide open and closed.
This morning I also fixed a bug with entity naming that caused some objects to have duplicate names, making scripting them impossible. I also changed entity names to use their type name, so instead of Entity_0001, you get Pistol_0001 or Repeater_0001.
Lastly I added entity activation to the script commands. Activate is a context-sensitive command. Activating a open door will close it, and vice versa, turn on or off a fan or switch, etc. With these last two fixes, I hooked up the switch on the poison level that will start the fan and bring in the poison gas.