Page 1 of 1

Train Order Board aspect scripts.

Posted: Fri May 19, 2017 10:40 pm
by Trainboi
Been messing about with this script a while now and I can't quite figure it out. Considering I've no idea what I'm doing, suggest whatever, but I'm specifically looking at or above the bold line. For the sake of keeping this short, I'm only posting from the start of the script to the end of my new section.

include "World.gs" //included this for world functions

include "Browser.gs" //included this for making browser elements


class trainorder isclass Industry
{
//standard scenery piece so im making this class MapObject

Soup mySoup;

int i;
//browser name

Browser info;

//operable animation values

float[] anim = new float[0];

//animation frame counts

float[] animFrame = new float[0];

//names of anims

int[] frame = GetMeshAnimationFrame();

Numbers[0] = 0;
Numbers[1] = 1;
Numbers[15] = 15;
Numbers[30] = 30;

string[] animName = new string[0];



bool AspectGreen = false;
bool AspectYellow = false;
bool AspectRed = true;

Asset m_coronaGreen, m_coronaYellow, m_coronaRed;

define int ASPECT_RED = 1;
define int ASPECT_YELLOW = 2;
define int ASPECT_GREEN = 3;
int m_signalAspects;


void ConfigureSignalAspects() {
switch (m_signalAspects) {
case ASPECT_GREEN:

AspectYellow = false;
AspectGreen = true;
AspectRed = false;

break;


case ASPECT_YELLOW:

AspectYellow = true;
AspectGreen = false;
AspectRed = false;

break;


case ASPECT_RED:
default:

AspectYellow = false;
AspectGreen = false;
AspectRed = true;

}
}

// ============================================================================
// Name: SigController
// Desc: Controls signal aspect
// ============================================================================


thread void SigController(void) {

if(frame = 1) {
SetFXCoronaTexture("light1", m_coronaRed);
SetFXCoronaTexture("light2", m_coronaRed);
}
else if(frame = 15) {
SetFXCoronaTexture("light1", m_coronaYellow);
SetFXCoronaTexture("light2", m_coronaYellow);
}
else if(frame = 30) {
SetFXCoronaTexture("light1", m_coronaGreen);
SetFXCoronaTexture("light2", m_coronaGreen);
}
else {
SetFXCoronaTexture("light1", null);
SetFXCoronaTexture("light2", null);
}

}

I know SigController can/does run because when I originally set it up it was arranged differently, and it did select all the correct coronas. That part seems to be fine. The problem is I need to get them to change - the signal is up(red) at frame 1, halfway(yellow) at frame 15, and down(green) at frame 30. Accordingly I've tried to set up so the script will pick up the animation frame and select the appropriate coronas, being null at all points in between. Unfortunately I'm currently getting a parse error reported on the bold line. Any suggestions, either for what is causing the parse error or whether or not this script will achieve what I want it to?

Re: Train Order Board aspect scripts.

Posted: Sat May 20, 2017 10:45 pm
by Pencil
GetMeshAnimationFrame takes a parameter (the name of the mesh with the animation), right?

What are you trying to do with the script?

Re: Train Order Board aspect scripts.

Posted: Sun May 21, 2017 8:26 am
by Trainboi
The object of the script is that at frame 1 (signal up) the signal is red, at frame 15 (signal midway) the light displays yellow, and at frame 30 (signal down) the light displays green.
I don't think I gave a specific mesh for the script to check...that's probably it. Will mess about with it and see how it goes.

*edit*

Okay, here we go. I am now getting a parse error at (bold) line 85. Once again, no idea why...

include "World.gs" //included this for world functions

include "Browser.gs" //included this for making browser elements


class trainorder isclass Industry
{
//standard scenery piece so im making this class MapObject

Soup mySoup;

int i;
//browser name

Browser info;

//operable animation values

float[] anim = new float[0];

//animation frame counts

float[] animFrame = new float[0];

//names of anims

int[] down = GetMeshAnimationFrame("anim1");

int[] up = GetMeshAnimationFrame("anim2");

string[] animName = new string[0];



bool AspectGreen = false;
bool AspectYellow = false;
bool AspectRed = true;

Asset m_coronaGreen, m_coronaYellow, m_coronaRed;

define int ASPECT_RED = 1;
define int ASPECT_YELLOW = 2;
define int ASPECT_GREEN = 3;
int m_signalAspects;


void ConfigureSignalAspects() {
switch (m_signalAspects) {
case ASPECT_GREEN:

AspectYellow = false;
AspectGreen = true;
AspectRed = false;

break;


case ASPECT_YELLOW:

AspectYellow = true;
AspectGreen = false;
AspectRed = false;

break;


case ASPECT_RED:
default:

AspectYellow = false;
AspectGreen = false;
AspectRed = true;

}
}

// ============================================================================
// Name: SigController
// Desc: Controls signal aspect
// ============================================================================


thread void SigController(void) {

if(down = 1) and (up = 1) {
SetFXCoronaTexture("light1", m_coronaRed);
SetFXCoronaTexture("light2", m_coronaRed);
}
else if(down = 1) and (up = 15) {
SetFXCoronaTexture("light1", m_coronaRed);
SetFXCoronaTexture("light2", m_coronaYellow);
}
else if(down = 1) and (up = 30) {
SetFXCoronaTexture("light1", m_coronaRed);
SetFXCoronaTexture("light2", m_coronaGreen);
}
else if(down = 15) and (up = 15) {
SetFXCoronaTexture("light1", m_coronaYellow);
SetFXCoronaTexture("light2", m_coronaYellow);
}
else if(down = 15) and (up = 1) {
SetFXCoronaTexture("light1", m_coronaYellow);
SetFXCoronaTexture("light2", m_coronaGreen);
}
else if(down = 15) and (up = 30) {
SetFXCoronaTexture("light1", m_coronaYellow);
SetFXCoronaTexture("light2", m_coronaGreen);
}
else if(down = 30) and (up = 30) {
SetFXCoronaTexture("light1", m_coronaGreen);
SetFXCoronaTexture("light2", m_coronaGreen);
}
else if(down = 30) and (up = 1) {
SetFXCoronaTexture("light1", m_coronaGreen);
SetFXCoronaTexture("light2", m_coronaRed);
}
else if(down = 30) and (up = 15) {
SetFXCoronaTexture("light1", m_coronaGreen);
SetFXCoronaTexture("light2", m_coronaYellow);
}
else {
SetFXCoronaTexture("light1", null);
SetFXCoronaTexture("light2", null);
}

}

Re: Train Order Board aspect scripts.

Posted: Mon May 22, 2017 7:37 pm
by Pencil
It almost seems like you might want to use an event file and listen for those messages ( http://online.ts2009.com/mediaWiki/inde ... nt_Message )?

Re: Train Order Board aspect scripts.

Posted: Tue May 23, 2017 3:05 pm
by Trainboi
I actually figured out an alternate solution, one which does not use coronas at all.
With a lighted texture behind it, the transparent signal aspect actually functions perfectly:
Image
Image
Image
Image
I like the look of them, although the aspect doesn't have the same nice high-visibility offered by most coronas. Still, most train order boards in Trainz don't have lighting at all, and this at least looks good with night mode...

Re: Train Order Board aspect scripts.

Posted: Tue May 23, 2017 7:40 pm
by NormHart
That looks great trainboi1!

Re: Train Order Board aspect scripts.

Posted: Tue May 23, 2017 7:42 pm
by Pencil
Yes, it does - nice job!

You could always try lod'ing the light, using a larger light mesh as you get farther away.....

Re: Train Order Board aspect scripts.

Posted: Tue May 23, 2017 9:29 pm
by Trainboi
Pencil wrote: Tue May 23, 2017 7:42 pm Yes, it does - nice job!

You could always try lod'ing the light, using a larger light mesh as you get farther away.....
There's an idea...good one!

Re: Train Order Board aspect scripts.

Posted: Tue Jun 13, 2017 12:36 pm
by PacificCoastBorax99
Nice depot you got there Trainboi! Is that a Southern Pacific Standard type? Reminds me of the depot at Lone Pine...

Re: Train Order Board aspect scripts.

Posted: Tue Jun 13, 2017 5:52 pm
by Trainboi
It's a standard type CS-22. Lone Pine was one of the type, with hipped roofs, an extended first-floor waiting room, and an extended freight depot.