Page 1 of 5
Split: viewDirectionChanged woes
Posted: Mon Jul 25, 2011 2:49 pm
by CommonSenseOTB
Moderator: Split from Scripting Requests discussion in Suggestion Box.
Kaks wrote:OK, from tonight's build .viewDirectionChanged should fire correctly. It took me a while to figure out the source of glithches that were plaguing my original implementation...
Thanks.
Re: Scripting requests
Posted: Mon Jul 25, 2011 5:00 pm
by Killer Wolf
cheers Kaks, give that a try when i can - the download page is refusing to load :-/
Re: Scripting requests
Posted: Tue Jul 26, 2011 5:41 pm
by Killer Wolf
okay, still not working.
here's my script :
Code: Select all
this.alertConditionChanged = function(newCondition, oldCondition)
{
switch(newCondition)
{
case 0: // we're docked
{
player.ship.hud = "phantomTradingHUD.plist"; // set the docked HUD
break;
}
case 1: // we're at green alert
case 2: // or we're at yellow alert
{
if(player.ship.energy > 108 && player.viewString != "VIEW_GUI_DISPLAY") // if we're not using the damaged HUD
{
player.ship.hud = "phantomNormalHUD.plist"; // set the standard HUD
}
break;
}
case 3: // we're at red alert
{
if(player.alertHostiles && player.ship.energy > 108 && player.viewString != "VIEW_GUI_DISPLAY") // and under attack and not using the damaged HUD
{
player.ship.hud = "phantomCombatHUD.plist"; // set the combat HUD
}
break;
}
case 4:
{
if (viewString == "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
}
}
}
}
this.shipLaunchedFromStation = function()
{
if(this.energyCheckTimer)
{
this.energyCheckTimer.start()
}
else
{
this.energyCheckTimer = new Timer(this, this.energyCheck,0,2) // use a timer to keep an eye on the HUD state
}
}
this.energyCheck = function()
{
if(player.ship.docked)
{
this.energyCheckTimer.stop();
}
else
{
if(player.ship.energy < 109 )
{
player.ship.hud = "phantomSnafuHUD.plist"; // display the damaged HUD
return;
}
if(player.ship.energy > 108 && player.ship.hud == "phantomSnafuHUD.plist")
{
this.alertConditionChanged(player.alertCondition,0); // if energy is >49 and we're still displaying the damaged HUD, use other code to repair
}
}
}
this.shipDied = function()
{
if(this.energyCheckTimer)
{
this.energyCheckTimer.stop()
}
}
Re: Scripting requests
Posted: Tue Jul 26, 2011 5:55 pm
by Wildeblood
Killer Wolf wrote:okay, still not working.
here's my script :
Code: Select all
this.alertConditionChanged = function(newCondition, oldCondition)
{
switch(newCondition)
{
case 0: // we're docked
...
case 4:
{
if (viewString == "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
There is no alert condition 4. Your options are 0-3.
Re: Scripting requests
Posted: Tue Jul 26, 2011 6:18 pm
by Kaks
Never mind that!
I'm not surprised it's not working, KW's code hasn't got this.viewDirectionChanged anywhere I can see...
Re: Scripting requests
Posted: Tue Jul 26, 2011 7:11 pm
by Wildeblood
Kaks wrote:Never mind that!
I'm not surprised it's not working, KW's code hasn't got this.viewDirectionChanged anywhere I can see...
No, because he has mistaken this.alertConditionChanged for magic.
Re: Scripting requests
Posted: Wed Jul 27, 2011 6:36 am
by Killer Wolf
Wildeblood wrote:Kaks wrote:Never mind that!
I'm not surprised it's not working, KW's code hasn't got this.viewDirectionChanged anywhere I can see...
No, because he has mistaken this.alertConditionChanged for magic.
or maybe i just tried changing some code? pardon me for not being a fkng JS expert.
Re: Scripting requests
Posted: Wed Jul 27, 2011 7:47 am
by Wildeblood
Killer Wolf wrote:Wildeblood wrote:Kaks wrote:Never mind that!
I'm not surprised it's not working, KW's code hasn't got this.viewDirectionChanged anywhere I can see...
No, because he has mistaken this.alertConditionChanged for magic.
or maybe i just tried changing some code? pardon me for not being a fkng JS expert.
Don't react like that, my comment was deadpan irony, not an outrageous insult. JS isn't magical, it's just evil and bogus. But you have misunderstood the nature of either (1) events like alertConditionChanged and viewDirectionChanged or (2) what a switch/case structure does.
Apparently, JS is an event-driven object-oriented language, whatever the hell that means. So every so often the game will send an event like alertConditionChanged or viewDirectionChanged, and you have to write some code that listens out for the
particular event you're interested in. There's no point listening for:-
this.alertConditionChanged = function(newCondition, oldCondition)
if you're actually interested in:-
this.viewDirectionChanged = function(viewString)
So I think all you need is this:-
Code: Select all
this.viewDirectionChanged = function(viewString)
{
if (viewString == "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
}
}
Re: Scripting requests
Posted: Wed Jul 27, 2011 8:07 am
by Killer Wolf
'kay, my bad. thanks for the info, i'll hammer together something when i get home. as i've mentioned before, i don't get this OO stuff at all, lol, i'm a COBOL/BASIC creature myself :-/
really need to hunt out some basic/intro tutes on the net or something, but i just haven't got the time due to all my other art/ship building/writing etc etc.
Re: Scripting requests
Posted: Wed Jul 27, 2011 6:18 pm
by Killer Wolf
pointers in the right direction please : why's this brining up the GUI HUD for Aft/Port/etc?
Code: Select all
this.alertConditionChanged = function(newCondition, oldCondition)
{
switch(newCondition)
{
case 0: // we're docked
{
player.ship.hud = "phantomTradingHUD.plist"; // set the docked HUD
break;
}
case 1: // we're at green alert
case 2: // or we're at yellow alert
{
if(player.ship.energy > 108 && player.viewString != "VIEW_GUI_DISPLAY") // if we're not using the damaged HUD
{
player.ship.hud = "phantomNormalHUD.plist"; // set the standard HUD
}
break;
}
case 3: // we're at red alert
{
if(player.alertHostiles && player.ship.energy > 108 && player.viewString != "VIEW_GUI_DISPLAY") // and under attack and not using the damaged HUD
{
player.ship.hud = "phantomCombatHUD.plist"; // set the combat HUD
}
break;
}
}
}
new stuff :-
this.viewDirectionChanged = function(viewString)
{
if(player.viewString = "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
}
else if(player.alertHostiles && player.ship.energy > 108 && player.viewString != "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomCombatHUD.plist";
}
else if(player.ship.energy < 109)
{
player.ship.hud = "phantomSnafuHUD.plist";
}
else
{
player.ship.hud = "phantomNormalHUD.plist";
}
}
end of new stuff
this.shipLaunchedFromStation = function()
{
if(this.energyCheckTimer)
{
this.energyCheckTimer.start()
}
else
{
this.energyCheckTimer = new Timer(this, this.energyCheck,0,2) // use a timer to keep an eye on the HUD state
}
}
this.energyCheck = function()
{
if(player.ship.docked)
{
this.energyCheckTimer.stop();
}
else
{
if(player.ship.energy < 109 )
{
player.ship.hud = "phantomSnafuHUD.plist"; // display the damaged HUD
return;
}
if(player.ship.energy > 108 && player.ship.hud == "phantomSnafuHUD.plist")
{
this.alertConditionChanged(player.alertCondition,0); // if energy is >49 and we're still displaying the damaged HUD, use other code to repair
}
}
}
this.shipDied = function()
{
if(this.energyCheckTimer)
{
this.energyCheckTimer.stop()
}
}
the bold bit's the bit i've added in to the rest of the original script. i was a bit off w/ the nested IF...ELSE syntax but this version is from a tute site on the web.
edit, no it's not, bold ain't working in a code snippet, so i've written it in manually.
cheers in advance....
Re: Scripting requests
Posted: Wed Jul 27, 2011 7:28 pm
by Thargoid
You've got "player.viewString" where you should have just "viewString" in the first if statement in the this.viewDirectionChanged function, plus you also need == or === in an if statement, not single =. The passed parameter is just viewString, no player prefix.
Change
Code: Select all
if(player.viewString = "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
}
to
Code: Select all
if(viewString === "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
}
and similarly just below it in the next if statement down.
In the if statement the === means strictly equal to (exact same value, and exactly the same type - boolean, integer, float, string etc) whereas == does comparisons between different types and is less strict, so 2 == "2" is true, but 2 === "2" is false (but == can take longer in script runtime than === does due to the extra checking needed). More details of that are
here and in many other websites - search
javascript comparison for alternative websites.[/color]
Re: Scripting requests
Posted: Thu Jul 28, 2011 6:28 am
by Killer Wolf
cheers bud, i'll try again when i get home.
edit : didn't work.
changed the new stuff to
Code: Select all
this.viewDirectionChanged = function(viewString)
{
if(viewString === "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomGUI.plist";
}
else if(player.alertHostiles && player.ship.energy > 108 && viewString != "VIEW_GUI_DISPLAY")
{
player.ship.hud = "phantomCombatHUD.plist";
}
else if(player.ship.energy < 109)
{
player.ship.hud = "phantomSnafuHUD.plist";
}
else
{
player.ship.hud = "phantomNormalHUD.plist";
}
}
the GUI doesn't come up on view direction changes now, but neither does it come up for F5~F8.
BTW, in the log i'm also getting
Code: Select all
17:42:24.529 [debugTCP.disconnect]: No connection to debug console: "Connection to debug console failed: 'No connection could be made because the target machine actively refused it.
' (outStream status: 7, inStream status: 7)."
17:42:24.529 [debugTCP.disconnect]: No connection to debug console: "Connection to debug console failed: 'unknown error.' (outStream status: 0, inStream status: 0)."
17:42:24.529 [debugTCP.connect.failed]: Failed to connect to debug console at address 127.0.0.1:8563.
which i assume is not related?
cheers...
Re: Scripting requests
Posted: Thu Jul 28, 2011 7:32 pm
by CommonSenseOTB
Killer Wolf, if you want I can try to help you as best I can. In doing the Sniper Camera System I found that it works best to only use viewDirection when going between views or going into or out of a specific view. When I want to react to a screen change for instance to go from any view to f5-f8 I use:
this.guiScreenChanged = function()
{
if(guiScreen !== "GUI_SCREEN_MAIN")
{
your code here.
or to go from f5-f8 to any view I use:(currently haven't used this one but should work)
this.guiScreenChanged = function()
{
if(guiScreen === "GUI_SCREEN_MAIN")
{
your code here.
for going to a specific view from any other view(or screen) I use:
this.viewDirectionChanged = function(to, from)
{
if(to === "VIEW_FORWARD" && from !== "VIEW_FORWARD")
{
your code here.
for going to any other view(or screen) from a specific view I use:
this.viewDirectionChanged = function(to, from)
{
if(to !== "VIEW_FORWARD" && from === "VIEW_FORWARD")
{
your code here.
When I saw your code posted awhile ago with viewString I tried it but couldn't get it to work. Without "to && from" I would use:
this.viewDirectionChanged = function()
{
if(viewDirection === "VIEW_FORWARD")
{
your code here.
One thing to remember is that this.guiScreenChanged = function() only fires on a screen change and this.viewDirectionChanged = function(to, from) only fires on a views change. As I understand it. Hopefully I listed everything correctly.
I hope this helps you out. Can't wait to see more built-in huds in your excellent ships. If this doesn't help feel free to PM me the link for the files and I will fix it for you ASAP first priority over everything else I'm currently doing. I don't want to see you waste your time on this when you could be modelling and texturing some cool ships. Cheers.
Re: Scripting requests
Posted: Thu Jul 28, 2011 7:55 pm
by Kaks
Your second error: looks like you've got a (new?) firewall blocking communications between Oolite & the console, or maybe you've turned the js console off - if it's the second case, your error message is just confirming that when Oolite tried to talk to the js console, it just couldn't find it...
Hmmm, this thread seems to have become anything other than scripting requests in the last few posts... A_C, what do you think? Split to a new thread?
Re: Split: viewDirectionChanged woes
Posted: Fri Jul 29, 2011 5:51 am
by another_commander
OK, split.