https://linen.dev logo
車内LEDを表現できるスクリプトについて
# forum
k
車内LEDを表現できるスクリプトで、LEDの文字を発行させることはできますでしょうか?  現状、LEDの文字が発行しないので、トンネルに入ると文字が見えにくいです。 https://cdn.discordapp.com/attachments/1475162147146305566/1475162149021155389/2026-02-23_01.06.22.png?ex=699c7b4f&is=699b29cf&hm=8f40629b145e377f16f63cbefdea9c29d1f77a2b3fbc451784aa2f26a88f87cf&
h
強制発光は以下のようにすると実装できます
Copy code
javascript
importPackage(Packages.jp.ngt.ngtlib.renderer);//GLHelper
//代替: var GLHelper = Packages.jp.ngt.ngtlib.renderer.GLHelper;

GLHelper.disableLighting();
GLHelper.setLightmapMaxBrightness();

//パーツを描画する(強制発光)
part.render(renderer);//など

GLHelper.enableLighting();
ただし、GLHelper.enableLighting()のあとになにかパーツを描画する処理を入れると正しい明るさにならないので、基本的には終わりの方で実施する必要があります
もし明るさももとに戻したい場合は以下のように実装すればうまくいくかもしれません
Copy code
javascript
importPackage(Packages.jp.ngt.ngtlib.renderer);//GLHelper
//代替: var GLHelper = Packages.jp.ngt.ngtlib.renderer.GLHelper;

var isOldVer = Packages.jp.ngt.rtm.RTMCore.VERSION.indexOf("1.7.10") !== -1;
var defaultLightLevel = isOldVer ? entity.func_70070_b(0) : entity.func_70070_b();

GLHelper.disableLighting();
GLHelper.setLightmapMaxBrightness();

//パーツを描画する(強制発光)
part.render(renderer);//など

GLHelper.setBrightness(defaultLightLevel);
GLHelper.enableLighting();
k
おそらくオブジェじゃないんですがそれでも発行できるんでしょうか?
一番下のやつがLEDのやつです
h
pass == 2と制限されていますが、これは先頭車で照明がついているときしか反映されない(中間車では通らなくなる)のでpass == 0が適切かなと思います
照明・尾灯オンにすれば中間車も通るかもです(うろ覚え
k
一応pass2、3、4、0に指定してるのですが
光らないんですよね
h
AllControlLedInCarの関数を使用しているのはpass==2の中だけにしかない感じですかね?
スクリプト全文があれば手っ取り早いですが...
h
pass == 0で発光処理+AllControlLedInCarを入れ、それ以外のpassのAllControlLedInCarは削除といった感じで試してみてもらいたいです
k
発光処理というのは強制発行のことですか?
h
そうですね
Copy code
javascript
    if (pass == 0) {
        body.render(renderer);
        render_door(entity);
        
        //強制発光
        var GLHelper = Packages.jp.ngt.ngtlib.renderer.GLHelper;
        GLHelper.disableLighting();
        GLHelper.setLightmapMaxBrightness();

        //描画処理
        AllControlLedInCar(entity);
        
        //強制発光ここまで
        GLHelper.enableLighting();
    }
みたいな感じです
k
やってみます
ありがとうございます
h
//強制発光ここまで 以降で描画するとおかしくなったりするので、pass == 0で他の通常の描画処理を入れるときは //強制発光 より手前で入れるようにしてください
k
わかりました。
ありがとうございます。
たびたびすみませんが、このように記述すると車両選択したときにクラッシュしてしまいます。 https://cdn.discordapp.com/attachments/1475162147146305566/1475173852907700254/render_aaa.js?ex=699c8635&is=699b34b5&hm=ec98022bf6ded724e14eb6a5e9d8bd8a5be7328306e658142a2586e95108ad7f&
もう一つ気になる点があって、車内を完全に消灯した状態(LED表示は除く)はできなくなるということでしょうか?
このように最後のほうに記述しても、pass 1のやつまで強制発行してしまいます。 AllControlLedInCar(entity);だけ強制発行させることは可能なのでしょうか? https://cdn.discordapp.com/attachments/1475162147146305566/1475212499816026202/image.png?ex=699caa34&is=699b58b4&hm=0911cbb892c4e682dfadf5a0b236b42324329ead57b42b2fb7e3d4fa391f3e65&
ちなみになぜかはわかりませんが if (pass == 0) { body.render(renderer); render_door(entity); この部分だけは強制発行はしないようです。 しかし if(pass == 2){ //前照灯 body.render(renderer); doorR1.render(renderer); doorR2.render(renderer); doorL1.render(renderer); doorL2.render(renderer); } の部分はすべて強制発行してしまいます。
p
http://discord.com/channels/799152792518393917/800357851801190430/1124096937889636354 一応この方法で以降のオブジェクトを自然光量にもどすことは可能です
以降全部自然光量になります
荒技にはなりますが、pass2の最初にこいつを入れてやるとか?
ちなみに車両は既存のRTMの仕様にそってメニューで前照灯や尾灯を設定してますか? それとも前照灯尾灯オンにして車両の進行方向で決定してますか?
k
今の所試しで中間車だけなので既存の仕様です
試してみます
//強制発光ここまで GLHelper.enableLighting(); という構文を突破してしまうようです
GLHelper.disableLighting(); 始まりのところはちゃんと守ってくれてるんですがね
このスクリプトの38行目,GLHelper.disableLighting();より上のオブジェクトはしっかり強制発行かからないようにはなるんですが
それより下のオブジェクトが全部発行してしまっています
そこで、pass == 4の一番下(このスクリプトでいう65行目)に強制発行の構文を入れることによって、下のオブジェクトが全部発行してしまうというのを無理やりなくしてみたんですけど、一応しっかり強制発行かからなくなったのですが、AllControlLedInCar(entity); //LED表示 はpass == 0で記述しないと描画してくれないようです。
今の目的はLED表示のみ発行させることなので、これだと意味がないんですよね
p
自然光量にもどすのは試しましたか?
k
GLHelper.disableLighting(); //ライティング無効 GLHelper.setLightmapMaxBrightness(); //最大発光 AllControlLedInCar(entity); GLHelper.setBrightness(entity.func_70070_b(0)); //自然光量に戻す GLHelper.enableLighting(); //ライティング有効
これをpass == 0に入れてみましたがクラッシュしました
どうやら車両選択の時に落ちるようです
車両は出せた上に、しっかりLEDのみ発光しました
Copy code
function renderPreview(pass) {
    GL11.glPushMatrix();
    if (pass === 0) {
        body.render(renderer);
        doorR1.render(renderer);
        doorR2.render(renderer);
        doorL1.render(renderer);
        doorL2.render(renderer);
        AllControlLedInCar(entity);    
    }
    GL11.glPopMatrix();
}
AllControlLedInCar(entity); は試しに入れてみましたがクラッシュしました
p
車両選択のときにおちるのはすべてentity回りのエラーなので、if(entity){}でかこってみてください
k
解決しました。
お二方大変ご協力ありがとうございます。
5 Views