https://linen.dev logo
jsonからScriptにデータを送る方法
# forum
f
jsonに書いた数字をスクリプトに送る方法ってありますか?
c
どういうことですか
f
言い方が難しいですね
c
jsonを送るということより何で何がやりたいのかを言ってくださったほうが理解しやすい気もしますね
f
言い方が変ですけど jsonで作った変数(本来ならできない気がしますが)をスクリプト側で`var ○○ = json側で作った変数`のようにすることですね
u
スクリプトで編集するのが面倒くさいからjsonにアクセスして情報を得たいとみた
f
そうそう!そんな感じです!
u
それにはjsonで定義したデータをおそらくdataMapあたりに送るか、なんらかの形でメモリに値を格納して、スクリプトから呼び出す必要があると思うんだけど。。。 よほどスクリプトに直書きしてコメントアウト添えるほうが親切だとおもわねえか❓
c
datamapかcustom nameくらいですよね
u
どのみちめんどくせえ
c
json入りモデルパック/リソースパックを作って読み込ませるってのもあり(リアルタイム編集と反映は難しいと思うけど=js直記とあんまり変わらない?)
u
ファンクションを追加したいならカスタムボタンで追加して読み込ませれば良いし、そうでなければ状態監視をサーバースクリプトにつんで、必要ファンクションを描画と音声に流したほうが効率的 あえてjsonでやらなくて良い。。。良くない?(話の腰を折るサジェスト)
f
そうしたいところなんですが
踏切とか照明モデルとかにカスタムボタンある?って感じなんで json使うしかないんですよね
c
なにがしたいんですか?踏切に
手軽にはnameにjson(にする必要はないけど要するにデータ)を書き込み前回の電灯回転みたいな感じで読み取るのでいいんじゃないかと思うんですが
それじゃだめですか?or nameに複数データと書き込む方法に悩む?
f
名前の数字で回転させるスクリプトを書いたんですけどで赤い部分を回転軸としているので
本来入れたい回転軸(緑)と大幅にずれるんですよね
スクリプト側の回転軸(赤)
なのでスクリプト側の回転軸`var ○○ = △△`にjson側から`△△`に数字を入れたいんですよね
c
軸をモデルによって変えたいのであればrenderer.getModelName()とかでJSON記入モデル名を取ってif分岐させるなどがいいかと
f
なるほど
c
Copy code
javascript
function render(entity){
    var もでる名 = entity.getModelName();
    var 軸 = a;
    if(もでる名 == 'あ')    軸 = b;
    else if(もでる名 == 'え')    軸 = c;
}
条件文をどう書くかは自由です
switchもあり、配列から引き出すのもあり
u
switchが理想的ですね、できれば正規表現で抜き出したいところだけど。。。
c
ですね
entity.getModelName(); でモデル名抜き出したら、正規表現で角度部分だけ抜き出すみたいにできたら理想だよな それこそ、プレフィックスでz75 (例:zは偏角を示すアルファベット) みたいに角度を抜き出して、後からzを消して 角度成分を、念のためint型に揃えてから(parseint?) 角度として直打ちするとか(そうすればswitchしなくてもよい)
c
角度以外に回転軸が要るってことだからなんか違うんじゃね
u
回転軸はY軸固定でいいだろ。。。って思ったけどダメなのか
設置方向に応じて軸も可変するんスカ?
これこのスレッドじゃないほうがいいか
とりあえずは、getModelName(); でデータを送ろうね! が結論でいいか
c
分岐はカスタム名じゃなくてJSON名のことだったけど
もしかして上手く伝わってない?
f
文字列から何文字目を抜き出すみたいなことできないんですか?
u
hi03先生が正規表現を用いて文字を抜き出す方法を書いてるので参照してください
c
角度 : カスタム名 回転の基準となる位置 : JSONに書くモデル名
f
抜き出せるならgetModelName();から何文字目抜き出してできそう
u
回転基準の話は処理の話なので踏切のチャンネルに書きますね
p
ちなみにモデルとして設定しているjsonのconfig(データ)は、 1.7.10`entity.getModelSet().getConfig()` 1.12.2`entity.getResourceState().getResourceSet().getConfig()` でScriptに送ることができます。 例えば1.7.10のtrainのjsonの`"rollsignTexture": "textures/train/sign.png"`は、Scriptで`entity.getModelSet().getConfig().rollsignTexture`と打つことで`"textures/train/sign.png"`が取得できます。 ただ、RTMでは用意されたconfigの要素を個別に定義しているため、自分でconfigを追加して読み取るといったことはできません。
k
横入り失敬 機能的にはjsの分岐でも十分だとは思うんですが、json定義値がjsに定数として渡されるのは結構使い勝手良さそうなの気がするのでKaizPatchに実装したく、アイデア拝借させていただきたい
p
多分、踏切の電灯の回転軸をmodelごとに読み取りたいのかと思われます。
u
え、個人的に助かる
kaizPatchの仕組みとして、jsonのコンフィグを動的?に追加して(ユーザー判断で追加して) それをスクリプトに持ってけると、json側でいじって運転台テクスチャみたいなのを変えられたりするので
k
あ、動的にということではなく… 定数はスクリプトにとって関心の真に迫る部分ではなく、それを不定値となるjsonに置けるようになるのであれば関心の分離に役に立つんじゃないかという思想
u
たしかに いじる部分が少ないに越したことはない
p
あれ、rtmのjsonって勝手に要素追加するのはできたんでしたっけ
k
できるようにします
p
現状はその段階で弾かれる?
k
弾かれます(クラッシュはしない)
ただその値が無いように扱われる
u
行飛ばされて終わりだっけ(確かそう)
k
そもそも特定の名前の変数しか取ってこない感じです
p
renderScirpt中で、自力で到達できないんかな
getResourceやらで
u
rtm側が提供してくれてなさそうだなって思った
p
publicになってない?
k
うまいことMapあたり使ってキャッシュしつつJsonパースすれば現状でもできなくはないかと
技術的には可能だけどそこまでやるなら現状ではjs分岐でいいよね的な
u
やばい俺でもギリギリ分かりそうで分からん。。。w entity側からjsonの内容まで辿り着けるのだろうか
これこれ、ごちゃった実装を今やるなら、今できることをやってリリースした方が、開発難易度も低いしデバグもしやすくて、何より使い手に優しいと思いました それはそれとして仕組みは欲しい! jsonのコンフィグをjsに飛ばせるのはうれしい
**関心の分離**って言葉を今日知ったけど、まさにそれだよね いじるならjsonの方がjsいじるより敷居低いし
p
質問者の要求は満たせたとしても、それはそれとしてjsonのコンフィグをjsに飛ばせるようになる/方法見つけるのは、全体としてのかなりの有益かと思って話してます
u
これも然り、俺は今までやったことないけど 実際に辿り着けますかねえ?
p
多分無理ですw
u
草
entityを親にして深く掘ってってもプロパティ無さそうですよね??????????
p
RTMのmodはパッキング?されてるので
publicにされてなければ
u
それ用に他のclassをimportPackageして辿り着ける、か。。。?ごめん適当言ったかも
p
getConfig()って独自メソッドでしたっけ
k
できるはずと思い込んでたんですけどファイル名の情報欠落させてるから絶対ムリですね… https://github.com/Kai-Z-JP/KaizPatchX/blob/adf6ce22f64927f057795f3e94ec916f59bc25f0/src/main/java/jp/ngt/rtm/modelpack/ModelPackLoadThread.java#L164
Mod側からなんとかするアプローチしか無理そう
p
オーノー
u
これをKaiz先生が開けてくれて、jsonのコンフィグを追加したら、スクリプトからアクセスできるようにしてくれるっつーこと? できたらすごいけど
k
はい
u
やった!!!
k
env: { val0: [0, 1, 2] } イメージとしてはこんなみたいな感じかな