Deleted User
11/12/2024, 1:05 PMyukiyuki_mahuyu
11/12/2024, 2:45 PMjs
var dataMap = entity.getResourceState().getDataMap();
のように宣言した後、
js
datamap.getHoge("key");
のようにデータを呼び出し、処理を挟んだ後、最後に
js
dataMap.setHoge("key", data, flug);
のようにデータを記録して次回の処理に持ち越します。
"Hoge"の部分には保存したいデータの型を入れ、整数の"Int"、浮動少数値の"Double"、文字列の"String"、真偽値の"Boolean"などを使うことが出来ます。
"key"は変数名のように、データの名前を付けてあげて、
"data"に保存したいデータの変数などを、
"flug"は0~4を入れてサーバーとの同期や保存の有無などを選びます。アニメーション変数など描画スクリプト内だけで完結する場合は"0"で良いでしょう。yukiyuki_mahuyu
11/12/2024, 3:04 PMjs
//宣言
var dataMap = entity.getResourceState().getDataMap();
var moveA = dataMap.getDouble("moveA");
var moveB = dataMap.getDouble("moveB");
//Aの動き
if(trigger && moveA < 1.0 && (detectTick(entity) == true)){
moveA += 0.01;
dataMap.setDouble("moveA",moveA,0 && (detectTick(entity) == true));
}else if(!trigger && moveA > 0.0 && moveB <= 0.0 && (detectTick(entity) == true)){
moveA -= 0.01;
dataMap.setDouble("moveA",moveA,0);
}
//Bの動き
if(trigger && moveB < 1.0 && moveA >= 1.0 && (detectTick(entity) == true)){
moveB += 0.01;
dataMap.setDouble("moveB",moveB,0);
}else if(!trigger && moveB > 0.0 && frontHoodState <= 0.0 && (detectTick(entity) == true)){
moveB -= 0.01;
dataMap.setDouble("moveB",moveB,0);
}
あとは可動幅の設定と描画構文を書きます。
js
var door_X = (0.05 * moveA);//X軸に0.05m(5cm)の可動幅を設定
var door_Z = (1.0 * moveB);//Z軸に1.0m(100cm)の可動幅を設定
//描画構文
GL11.glPushMatrix();//パーツ位置を呼び出し
GL11.glTranslatef(door_X, 0.0, door_Z);//パーツ移動処理
door_FL.render(renderer);//パーツ描画
GL11.glPopMatrix();//パーツ位置を保存
これにて基本的なプラグドアのコードは完成です。
補足ですが、コード内の
js
(detectTick(entity) == true)
はtick処理と呼ばれ、毎フレーム動いてしまって速さがfps依存になってしまう処理速度を、1tick(通常1/20秒)毎に固定するためのコードです。私はだいたいhi03氏作成の以下の関数をお借りして呼び出してます。
js
function detectTick(entity){//tick管理
var entityID = entity.func_145782_y(),
tick = renderer.getTick(entity),
prevTickID = 1,
prevTick = renderer.getData(entityID << prevTickID);
renderer.setData(entityID << prevTickID,tick);
if(prevTick==tick){
return false;
}else{
return true;
}
}yukiyuki_mahuyu
11/12/2024, 3:05 PMyukiyuki_mahuyu
11/12/2024, 3:09 PMjs
//1.7.10
var doorState = entity.getTrainStateData(4);
//1.12.2
var doorState = entity.getVehicleState(TrainState.getStateType(4));
で取得できます。0が両閉、1で右開、2で左開、3で両開です。作動トリガーに使ってみて下さい。yukiyuki_mahuyu
11/12/2024, 3:12 PMDeleted User
11/12/2024, 10:48 PMDeleted User
11/14/2024, 10:14 AMDeleted User
11/14/2024, 10:16 AMDeleted User
11/14/2024, 10:16 AMDeleted User
11/14/2024, 10:20 AMDeleted User
11/14/2024, 10:37 AMyukiyuki_mahuyu
11/14/2024, 11:23 AMjs
if(entity == null){
return;
}
みたいなコードを入れて、車両選択画面でその関数が動かないようにしてあげると落ちなくなるかもですDeleted User
11/14/2024, 12:08 PMyukiyuki_mahuyu
11/14/2024, 12:29 PMhi03
11/14/2024, 3:52 PMhi03
11/14/2024, 3:56 PMDeleted User
11/15/2024, 8:05 AMDeleted User
11/15/2024, 8:06 AMDeleted User
11/15/2024, 8:10 AMDeleted User
11/15/2024, 8:12 AMyukiyuki_mahuyu
11/15/2024, 9:04 AMDeleted User
11/15/2024, 11:38 PM