There are actually three model layers where the numbers are. All three are single sided planes just 0.01" apart from each other. The first is a plain TexDiff filter with no alpha, Diffuse: 35, Ambient: 4, this is the 'light off' layer. The next uses Tex filter, Diffuse: 60, Ambient: 35, this is the 'light on' layer. Finally I have a mask layer which frames the numbers and blocks the light of the Tex layer (if there is a better way I have no idea how to do it). It does look good though as it gives it the illusion that numbers are behind "something". This used TexDiff filter with Transparency, Diffuse: 35, Ambient:4. All three layers pull from the same texture area, the first two ignore the alpha channel, the mask does not, and thus the numbers can show through.
In the LUA I had to add the logic to turn on and off the the first and second layers when the headlights turned on and off. This means I had to create my model with nodes I could control. Instead of trying to explain the hierarchy I will snap a screenshot.
And here is a sample of how my texture is laid out:
Now remember that all nodes are 'on' when you load up the engine. So in the Initialise function I need to turn off the lit number layer:
Now remember that all nodes are 'on' when you load up the engine. So in the Initialise function I need to turn off the lit number layer:
function Initialise () -- Turn off the number boards by default Call("DMV_WingBoard01Rt:ActivateNode", "number_board_on", 0) Call("DMV_WingBoard01Lt:ActivateNode", "number_board_on", 0) ...
Then I need to detect when the headlights switch on and off, this happens in the OnControlValueChange function.
function OnControlValueChange ( name, index, value ) if Call( "*:ControlExists", name, index ) then -- if the headlights are on turn on the number boards if name == "Headlights" then if value == 0 then Call("DMV_WingBoard01Rt:ActivateNode", "number_board_on", 0) Call("DMV_WingBoard01Lt:ActivateNode", "number_board_on", 0) Call("DMV_WingBoard01Rt:ActivateNode", "number_board_off", 1) Call("DMV_WingBoard01Lt:ActivateNode", "number_board_off", 1) else Call("DMV_WingBoard01Rt:ActivateNode", "number_board_on", 1) Call("DMV_WingBoard01Lt:ActivateNode", "number_board_on", 1) Call("DMV_WingBoard01Rt:ActivateNode", "number_board_off", 0) Call("DMV_WingBoard01Lt:ActivateNode", "number_board_off", 0) end end ...
So why didn't I just use 'value' to turn on and off the lights? Because for headlights 1 is forward, and 2 is rear, and 0 is both off. Also I figured out an old problem that Kali was trying to tell me when I first showed him my ditch lights. He was trying to explain that he was seeing some Z-order fighting between the on and off layers. I couldn't see it, so I chalked it up to a difference between how our video cards rendered the model. Well, now I know different. In the LUA I deactivate the 'off' layer when the lights turn on, and vice versa.
Oh, and ignore the third stack, its nothing... no really, just pretend its not there...
No comments:
Post a Comment