Invisible tracks indication

+Added prefab_name field in the Track class and track_prefab_name in the Switch class
*Invisible tracks are now drawn in gray instead of being completely skipped
This commit is contained in:
izawartka 2025-06-04 14:13:33 +02:00
parent 519ed7aa1d
commit f95a38f96c
7 changed files with 19 additions and 15 deletions

View File

@ -52,7 +52,7 @@ function getTrackColor(object, trackColorMode) {
switch (trackColorMode) {
case "none":
default:
return "#aaa";
return object.prefab_name.includes('trans-mat') ? "#444" : "#aaa";
case "type":
switch (object.type) {

View File

@ -11,8 +11,8 @@ export default class BezierTrack extends Track
control2: Vector3.zero()
};
constructor(id, start, control1, end, control2, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed) {
super(id, start, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed);
constructor(id, start, control1, end, control2, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed) {
super(id, start, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed);
Object.assign(this.points, {
start,
@ -39,6 +39,7 @@ export default class BezierTrack extends Track
values[17], // id_station
...Track.slopesFromText(values[18]), // start_slope, end_slope
values[21], // id_isolation
values[23], // prefab_name
parseFloat(values[24]), // maxspeed
parseFloat(values[25]) // derailspeed
);

View File

@ -10,12 +10,12 @@ export default class PointTrack extends Track
end: Vector3.zero()
};
constructor(id, start, end, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed) {
constructor(id, start, end, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed) {
const ry = AngleHelper.radToDeg(start.atanY(end));
const rot = new Vector3(0, ry, 0);
// TODO: fix rx and rz = 0
// TODO: calculate length
super(id, start, rot, null, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed);
super(id, start, rot, null, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed);
Object.assign(this.points, {
start, end

View File

@ -109,10 +109,6 @@ export default class Scenery
}
static _parseTrack(text) {
/// TODO: remove
const values = text.split(";");
if(values.includes("none-slp,trans-mat,trans-mat")) return null; // skip invisible tracks
const trackType = text.split(';', 4)[2];
switch(trackType) {
case 'Track':

View File

@ -11,8 +11,8 @@ export default class StandardTrack extends Track
circleCenter: Vector3.zero()
};
constructor(id, start, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed) {
super(id, start, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed);
constructor(id, start, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed) {
super(id, start, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed);
this._calcPoints();
}
@ -29,6 +29,7 @@ export default class StandardTrack extends Track
values[13], // id_station
...Track.slopesFromText(values[14]), // start_slope, end_slope
values[17], // id_isolation
values[19], // prefab_name
parseFloat(values[20]), // maxspeed
parseFloat(values[21]) // derailspeed
);

View File

@ -15,16 +15,18 @@ export default class Switch extends SceneryObject {
category = "switches";
type = "Switch";
applied = false;
track_prefab_name;
trackA;
trackB;
constructor(id, model, pos, rot, data, id_isolation, id_switch, maxspeed, derailspeed) {
constructor(id, model, pos, rot, data, id_isolation, id_switch, maxspeed, derailspeed, track_prefab_name) {
super(id, pos, rot);
Object.assign(this, {
model,
data,
id_switch, id_isolation,
maxspeed, derailspeed
maxspeed, derailspeed,
track_prefab_name
});
this.bare_model = model.split(',')[0]?.trim() || model.trim();
@ -42,7 +44,8 @@ export default class Switch extends SceneryObject {
values[10], // id_isolation
values[11], // id_switch
parseFloat(values[13]), // maxspeed
parseFloat(values[14]) // derailspeed
parseFloat(values[14]), // derailspeed
values[15] // track_prefab_name
);
return sw;
@ -121,6 +124,7 @@ export default class Switch extends SceneryObject {
0, // start_slope
0, // end_slope
this.id_isolation,
this.track_prefab_name,
this.maxspeed,
this.derailspeed
);

View File

@ -13,9 +13,10 @@ export default class Track extends SceneryObject {
previd;
start_slope;
end_slope;
prefab_name;
hide_isolation = false;
constructor(id, pos, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, maxspeed, derailspeed) {
constructor(id, pos, rot, len, r, nextid, previd, id_station, start_slope, end_slope, id_isolation, prefab_name, maxspeed, derailspeed) {
super(id, pos, rot);
Object.assign(this, {
len, r,
@ -23,6 +24,7 @@ export default class Track extends SceneryObject {
id_station,
start_slope, end_slope,
id_isolation,
prefab_name,
maxspeed, derailspeed
});
}