ゲーム好きな豚のしっぽ

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

net.minecraft.client.model.ModelBiped

注意事項

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

ModelBiped

二足歩行のLivingEntityのモデルの親クラス。
人型のモデルを作るならこれを基本にするので調べておく。

クラス宣言
@SideOnly(Side.CLIENT)
public class ModelBiped extends ModelBase

ModelBaseを拡張している。

フィールド
public ModelRenderer bipedHead;
public ModelRenderer bipedHeadwear;
public ModelRenderer bipedBody;
public ModelRenderer bipedRightArm;
public ModelRenderer bipedLeftArm;
public ModelRenderer bipedRightLeg;
public ModelRenderer bipedLeftLeg;

モデルの各パーツとなるレンダラ。ModelBipedでは非常にシンプルで一つのパーツに一つのレンダラ、一つのボックスしかない。

public int heldItemLeft;
public int heldItemRight;

左右の手にブロックを持っている時にそれがレンダリングするべきかどうかを記録する。
呼び出し階層で追いかけるとアイテムを手に持っている時に可能な行動であるEnumActionで判別しており、それをswitch文でintに置き換えて保持している。大変古いコードの名残と思われるが、よくないコーディングスタイル。

メソッド
public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)

実際にモデルをレンダリングするメソッド。ここでは子どもではないかとスニークしているかで処理を分けている。継承したクラスでは(スティーブ氏と同じ体系、動作でよい場合を除いて)完全に上書きする必要がある。

public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity entityIn)

各パーツの角度を決める。モデルが取る可能性のあるポーズをすべてこの中で処理するため、メソッドが長くなる傾向がある。
継承したクラスではこのメソッドを参考にしながら完全に上書きする必要がある。理想でいえばポーズや状態ごとにそれ用の角度設定メソッドを用意して、このメソッド内では分岐条件を判断してそれを呼ぶだけにしたい。
ModelBipedで行っている処理は
1.初期化
2.騎乗している時
3.両手のアイテムによる調整
4.歩行時の腕振り角度
5.スニーク時とそれ以外のときの体と頭の角度
6.弓で狙う動作
の流れ。
継承したモデルではこれらについてすべて調整したうえで、独自の動作があればその処理を追加しなくてはならない。

public void setModelAttributes(ModelBase model)

別のモデルから状態(動作のフラグなど)をコピーする。メソッドではこれのみがsuperを呼び出している。

public void setInvisible(boolean invisible)

不可視状態を設定する

public void postRenderArm(float scale)

コメントとソースの追跡によると右腕をレンダリング実行後に角度を変化させている。効果は不明。