Set view to main signalbox on load

- Updated scenery loading to set the view to main signalbox on scenery load
This commit is contained in:
izawartka 2026-07-28 17:38:58 +02:00
parent e9960c4839
commit 6a0f945a0d
2 changed files with 20 additions and 8 deletions

View File

@ -38,6 +38,16 @@ export default function SceneryManager(props) {
} }
}, [myFetch]); }, [myFetch]);
const updateViewAfterSceneryLoaded = useCallback((scenery) => {
const mainSignalBox = scenery.getMainSignalBox();
if(mainSignalBox) {
const sbPos = mainSignalBox.pos.toSVGCoords();
const sbRot = -mainSignalBox.getFinalRotation();
setCamera(...sbPos, sbRot, Constants.map.zoomDefault);
}
else setCamera(0, 0, 0, Constants.map.zoomDefault);
}, [setCamera]);
const loadCustomScenery = useCallback((file) => { const loadCustomScenery = useCallback((file) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let alreadyLoading; let alreadyLoading;
@ -66,13 +76,7 @@ export default function SceneryManager(props) {
let loadingError = null; let loadingError = null;
try { try {
scenery = SceneryParser.fromText(e.target?.result); scenery = SceneryParser.fromText(e.target?.result);
const mainSignalBox = scenery.signalBoxes?.[0]; updateViewAfterSceneryLoaded(scenery);
if(mainSignalBox) {
const sbPos = mainSignalBox.pos.toSVGCoords();
const sbRot = -mainSignalBox.getFinalRotation();
setCamera(...sbPos, sbRot, Constants.map.zoomDefault);
}
else setCamera(0, 0, 0, Constants.map.zoomDefault);
} catch (error) { } catch (error) {
scenery = null; scenery = null;
loadingError = error; loadingError = error;
@ -85,7 +89,7 @@ export default function SceneryManager(props) {
resolve(scenery); resolve(scenery);
} }
}); });
}, [setCamera]); }, [updateViewAfterSceneryLoaded]);
const loadScenery = useCallback(async (sceneryName) => { const loadScenery = useCallback(async (sceneryName) => {
let file; let file;

View File

@ -58,6 +58,14 @@ export default class Scenery
}); });
} }
getMainSignalBox() {
if(this.signalBoxes.length === 0) return null;
const mainSignalBoxName = this.objects.special?.SceneryInfo?.['main_signalbox'];
const foundMainSignalBox = this.signalBoxes.find(sb => sb.name === mainSignalBoxName);
return foundMainSignalBox || this.signalBoxes[0];
}
_applyCategory(category) { _applyCategory(category) {
if(!this.objects[category]) return; if(!this.objects[category]) return;