ETS2 SimHubで自作ダッシュボードを作ってみる その6 ギアポジションの表記を変更する

どうも、け~えすです。

久しぶりのSimHubネタでございます。
以前自作ダッシュの簡単な解説をしたのですが、その際に1つの質問を頂きました。
「ギア表示のバックポジションやニュートラルの表記を変更できないか」と。

その時の返答として、
「それぞれ変更したいギアのみ表示する方法で対処するしか思いつかない」と返答しました。
自分も同じ疑問を持ち、チャレンジしたけどその方法しかわからなかったんです。

最近やっと対策方法が見つけられたので、その方法を書いていきます。



ギアポジション表記の問題点

実際のギアの表示をする際、[DataCorePlugin.GameRawData.Drivetrain.GearDashboard]をお使いになると思います。
他にもギア表示の関数はあるんですが、他の物だと「リアルなギアポジション」を表示する仕様が多いため、例えばAT運用時に停車した際、ギアポジションがドライブにも関わらず表示がN(ニュートラル)になるんです。(MTのみの運用だと気が付かないかも)

なので上記関数を使うのですが、この関数だと表示がすべて数字のみなんですね。
なのでニュートラルだと0を、リバース系はマイナス表記になります。

乗用車だとリバースは1段のみがほとんどですが、ヨーロッパのトラックの場合は副ミッション等の仕様で複数段のリバースが用意されています。
MAN E6だと後進2段、Volvoだと後進4段の仕様のミッションが用意されてますね。

さすがにマイナス表記とか嫌ですやん?w なので色々と手を加えてそれっぽい表記にしていきます。

表示文字の変更(代入)方法

その1 力技で対応してみる

これは自分が最初に考え付いた方法です。 この時は文字の代入ができる関数を見つけておりませんでした。

やり方は簡単で、ニュートラル・バック1速・バック2速・1速から上の4つのギア表記を作り、それぞれの表示条件を付けて切り替え表示するようにしました。

例えばニュートラルの場合だと、GeneralのVisibleに
[DataCorePlugin.GameRawData.Drivetrain.ElectricEnabled] &
[DataCorePlugin.GameRawData.Drivetrain.GearDashboard] =0
と入れました。 そのうえでTextのTextにNを入れてます。(Textには関数を使ってません)
これで電源ON&ギアポジションが0の時だけNが表示されるようになりました。

続いてバックです。 GeneralのVisibleに
[DataCorePlugin.GameRawData.Drivetrain.ElectricEnabled] &
[DataCorePlugin.GameRawData.Drivetrain.GearDashboard] =-1
と入れて、TextはR1にしてます。 これで電源ON&ギアが-1の時だけR1と表示されます。
後進2速も同じような感じで対応してます。

最後に前進ギアの表示ですが、GeneralのVisibleには以下のようにしました。
[DataCorePlugin.GameRawData.Drivetrain.ElectricEnabled] &
[DataCorePlugin.GameRawData.Drivetrain.GearDashboard] >0
そのうえで、TextのTextに以下の関数を入れてます。
[DataCorePlugin.GameRawData.Drivetrain.GearDashboard]
Textには代入文字は入れてません。
この設定では、電源ON&ギアが1速以上の整数の時にギアが表示されます。

これで4つのギアポジション表記が完成したので、それぞれを重ねあうように設置します。 これで完成となります。

これでやるのはいいんですが、やっぱり手間がかかりますし、後々のメンテナンスなども面倒になります。
位置合わせがずれると、ギアを変えるたびに表示に違和感を感じますし、何とかならんかと考えて色々と調べました。
ここでやっとReplace命令を見つけることが出来ました。

その2 Replaceを使ってみた(1回目)

NCalcの命令形でReplaceを見つけたんですが、最初は使い方がよくわかりませんでした。
色々と試すうちに何とか理解できたのですが、たぶん以下の内容で間違いないと思います。
命令は「replace(value, 'texttoreplace', 'replacementtext')」となっているのですが、実際の使い方としては「replace(関数, '代入したい文字', '代入する文字')となります。

例えば0をNと表示したいのなら、
replace([DataCorePlugin.GameRawData.Drivetrain.GearDashboard], '0', 'N')
とすればOKです。

では実際にやってみます。
TextのText項目のボタンを押して関数入力に移行します。
Replace命令は「Insert function」で入力出来るので、赤枠のボタンを押して命令一覧を出します。 もしくは手入力でもOKです。


赤いボタンを押して、

一覧からreplaceを探してダブルクリック。

そうすると、こんな感じで入力されます。
ギアポジションの関数が欲しいなら、「Insert property」を押してほしい関数を選択したら、下の行にその関数が出てきます。

あとはカット&ペーストで整えたらOKです。
エディターをセーブしてさっそく試してみます。

しっかりとN表記になってますね。 ではそのまま運転して試してみます。

9速までは問題なし。 次に10速・・・


・・・はい? なぜ1Nなんて表記が・・・?

まぁ、バグじゃなくって仕様ですね。 0を見つけたら問答無用でNに置き換えるので、これは仕方がないって事です。
融通が利かないなとも思いますが、「プログラムはね、書いたとおりにしか動かないんだよ?」って偉い人も言ってますので、これはしょうがないw

しょうがないので別の手を考えますかorz

その3 関数を見直してみる

とりあえず[DataCorePlugin.GameRawData.Drivetrain.GearDashboard]だとニュートラルが0表記になるので、ギア関連の関数でニュートラルがN表記であり、停止中や走行中のアクセルオフでニュートラル表記にならない関数がないかもう1度確かめてみます。

ETS2を起動してからSimHubのDashStudioを使って関数を調べてみます。
その際にトラックの電源をONにして、どこかのギアに入れておきます。
ATだったら前進状態にしておきます。

「Insert property」を押して関数一覧が出たら、上の検索枠にgearを入力してギア関連の関数を検索します。(検索時はエンジンON&ATで前進状態です。 ギアはトラックのメーター上ではA2(ATで2速)の表記でした)

2速表記が2個出てきました。下の方は今まで使っていた関数なので、今度は上の方の[DataCorePlugin.GameData.NewData.Gear]を使ってみます。

これが正解だったみたいで、ニュートラルではN、リバース1速はRと表記してくれます。
当然ですが10速は10と表記します。 これが欲しかった関数ですね。
残念ながら、リバースの2速以降はマイナス表示でしたが。

これを使えば、あとはリバースの表記を変更するだけで行けそうです。

その4 Replaceを使ってみた(2回目)

リバースギア以外は[DataCorePlugin.GameData.NewData.Gear]の表記をそのまま使えるので、リバースギアだけの置き換えを考えていきます。

ETS2やATSのバニラでは、リバースギアが最大4段まで使われます。 なのでR4までの表記は用意しておきたいところ。

Replaceがあるんだし、4つ書き換えなら関数を4段おきにすれば行けるだろうと思ったんですが・・・
 
こんな感じでエラーになってしまいます。 改行せずにそのまま繋げたりしたんですが、やはりうまくいきません。
1個だけなら通るんですが、replaceを複数付けたら確実にエラーになります。

このままだと、またリバースギアの段数だけ項目を増やしていく手法になってしまいます。
ちょっと悔しいので、色々と内容を変えてGoogle検索しまくってみました。

数日後にやっと答えが見つかりました。
答えそのものが載っているページを見つけたのですが、URLが分からなくなってここでは出せないのですが・・・

Replaceを複数使いたいなら、以下のようにするといいみたいです。
とりあえず4か所書き換える場合でやると、
replace(
replace(
replace(
replace(関数, '置き換えたい文字その1', '置き換える文字その1')
, '置き換えたい文字その2', '置き換える文字その2')
, '置き換えたい文字その3', '置き換える文字その3')
, '置き換えたい文字その4', '置き換える文字その4')
って感じになります。
実際にはRをR1に、-2から-4までをR2からR4と表記させたいので、こんな感じで書いてみました。
replace(
replace(
replace(
replace([DataCorePlugin.GameData.NewData.Gear], 'R', 'R1')
, '-2', 'R2')
, '-3', 'R3')
, '-4', 'R4')
これで実験してみます。

結果としては大成功です。 ニュートラルはNに、リバースはR1~R4まで表示可能になりました。
当然ですが10速は10で表示され、ATでの走行中にアクセルを抜いたり、交差点などで停止してもN表記にはなりません。
ギア表示の項目も1つに纏められたので、とりあえず言うことなしです。

念のためおさらいしますと、
・電源ONでギア表示させたいなら、GeneralのVisibleに[DataCorePlugin.GameRawData.Drivetrain.ElectricEnabled]を入れて、横のチェックを入れておく。
・ギア表記の代入は、TextのTextで行う。
関数は[DataCorePlugin.GameData.NewData.Gear]を使う方がよい。
Replaceを1つだけなら問題ないが、複数の書き換えをしたいなら、
replace(
replace(関数, '置き換えたい文字その1', '置き換える文字その1')
, '置き換えたい文字その2', '置き換える文字その2')
のような記述で2個以上の書き換えが可能になる。

となります。

こんなのETS2やATSでしか使い道がないかもしれませんが、ちょっとしたTipsって事で書いてみました。


スポンサーリンク