ゲーム好きな豚のしっぽ

筆者の下手の横好きなゲーム日記、情報メモです。主にプレイするのはtrophymanager、WoT、WoWS、洋モノSLGなどの予定。

net.minecraft.client.model.ModelBase

注意事項

この記事はforge1.9-12.16.0.1797-1.9-snapshotのソースを筆者が記述した時点での拙い知識で解釈したもののメモです。
誤訳や理解不足の可能性を多分に含みます。ご覧になる際はご注意ください。

ModelBase

すべてのエンティティモデルの基底クラス。意外なほどフィールドやメソッドは少ない。
mod制作の中でも比較的大きな比重を占めるモデルづくりの根底なのできちんと調べておく。

クラス宣言
public abstract class ModelBase

基底クラスだけにいたってシンプル。

フィールド
public float swingProgress;

通常アニメーションのサイクルカウント用

public boolean isRiding;

騎乗状態か

public boolean isChild = true;

子供か(なんでridingは初期化してないのにこっちはしてるのか)

public List<ModelRenderer> boxList = Lists.<ModelRenderer>newArrayList();

実際にモデルをレンダリングするModelRendererのリスト。1パーツに1つ?

private Map<String, TextureOffset> modelTextureMap = Maps.<String, TextureOffset>newHashMap();

パーツごとのテクスチャ画像の始点位置のMap

public int textureWidth = 64;

テクスチャ画像の幅

public int textureHeight = 32;

テクスチャ画像の高さ

メソッド
public void render(Entity entityIn, float p_78088_2_, float limbSwing, float ageInTicks, float netHeadYaw, float headPitch, float scale)

モデルの様々な角度を設定してからレンダリングを行う
引数はレンダリングされるエンティティ、(bipedの実装によると)手足の前後の振りのパーセンテージ、手足の振りの最大がどれだけ遠いか、ティック数のカウント?、頭の水平方向、頭の仰俯角、スケール倍率

public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn)

モデルの様々な角度を設定する。
renderの角度設定部分の実装

public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime)

エンティティに固有なアニメーションの追加を容易にする。第二、第三の引数はSetRotationAnglesと同じ。
実はそこが一番簡単じゃない。

public ModelRenderer getRandomModelBox(Random rand)

モデルに追加されているパーツ(ボックス)から一つをランダムで取得する。ダメージなどのアニメーションに利用できる。

protected void setTextureOffset(String partName, int x, int y)

指定したパーツにテクスチャ画像の始点を指定する。

public TextureOffset getTextureOffset(String partName)

指定したパーツのテクスチャの始点を取得する。

public static void copyModelAngles(ModelRenderer source, ModelRenderer dest)

あるオブジェクトの角度を別のオブジェクトへコピーする。頭と髪の毛のように、互いが同じ方向を向くオブジェクトに利用できる。

public void setModelAttributes(ModelBase model)

与えられたモデルが持っている属性を受け取ったモデルへコピーする。

これだけでモデルが動いてくれれば苦労しないな…