https://linen.dev logo
カスタムボタンが存在しない判定
# forum
p
カスタムボタン同期スクリプトを作成しているのですが、先頭車と中間車のカスタムボタンの数が違うため、中間車に合わせようとされたとき、重複していないカスタムボタンの値が0にされてしまいます。 要約: 指定したDataMapが存在しないことを判定する方法があれば教えて欲しいです
Copy code
javascript
syncDataMapInt(entity,["Button6","Button7","Button8","Button9","Button10"]);

function syncDataMapInt(entity,dataMapList){
    if(entity == null)return;
    var formation = entity.getFormation();
    if(formation == null || formation.entries.length < 2)return;
    var controlCar = NGTUtil.getMethod(formation.getClass(),formation,formation,"getControlCar",[]);
    if(controlCar == null || entity.getVehicleState(TrainState.TrainStateType.Role) == 0)return;
    var currentCarDataMap = entity.getResourceState().getDataMap();
    var controlCarDataMap = controlCar.getResourceState().getDataMap();
    for(var i = 0; i < dataMapList.length; ++i){
        if(controlCarDataMap.getInt(dataMapList[i]) !== null && controlCarDataMap.getInt(dataMapList[i]) != currentCarDataMap.getInt(dataMapList[i])){
            currentCarDataMap.setInt(dataMapList[i],controlCarDataMap.getInt(dataMapList[i]),3);
        }
    }
}
Button0~5は共通部分、6~10は先頭車のみで同期したい部分です。先頭車と中間車は同じrenderScriptを使用しています。
一応スクリプト載せておきます
DataMap.getInt("存在しない奴") !== null が通ってしまっているので、返り値がnullではなく0であるという予想 カスタムボタンの値ではなく名前?を取得できたりすれば判別できそう
u
Copy code
java
if (DataMap#contains(key)) {
    //存在する
} else {
    //存在しない
}
といった形でDataMapの中に指定したキーの値が含まれているかを判定できます
p
あ~contains使えばよかったんですね、無事できました。ありがとうございました。