td2-visualizer/src/model/signal_elements/signal-elements.js
izawartka 422c038cfa Added a frame for extended signals parsing
+Added SignalElements class parsing and storing extended information about signals
+Added support for standard and dwarf EHA/ERI signals extended parsing (excluding eha_top_l, eha_top_r, eha_ps_k and eri_ps_k prefabs) (signs are not being parsed yet)
+Added SignalElementsEnums const that will help to translate different signal types into one unified structure
2025-06-26 16:55:06 +02:00

42 lines
1.3 KiB
JavaScript

import SceneryParserLog from "../scenery-parser-log";
import SignalElementsEnums from "./enums";
import SignalElementsParsersList from "./parsers-list";
export default class SignalElements {
type = SignalElementsEnums.Type.UNKNOWN;
headPosition = SignalElementsEnums.HeadPosition.UNKNOWN;
units = [];
bar;
signs = [];
constructor(type, headPosition, units = [], bar = null, signs = []) {
Object.assign(this, {
type,
headPosition,
units,
bar,
signs
});
}
static fromPrefabText(id, text) {
const prefabName = text.split(",", 2)[0].trim();
for(const parser of Object.values(SignalElementsParsersList)) {
if (!parser.regex.test(prefabName)) continue;
for(const subtype of parser.subtypes) {
if (subtype.isAppliable(prefabName)) {
return subtype.fromPrefabText(id, text);
}
}
SceneryParserLog.warn('signalElemsRecognizedUnknownPrefab', `Signal ${id} recognized as ${parser.name} but has unknown prefab name: ${prefabName}`);
return null;
}
SceneryParserLog.warn('signalElemsUnknownPrefab', `Signal ${id} has unknown prefab name: ${prefabName}`);
return null;
}
}