H1rono / physical-simulation

Processing (Java)で物理シミュレーション
MIT License
0 stars 0 forks source link

アニメーションシステムを体系化する #5

Closed H1rono closed 3 years ago

H1rono commented 3 years ago

PhysicalObjインターフェースとWorldクラスを作り、各フレームの物理演算をdraw関数本体から分離する案

interface PhysicalObj {
    // 物体が持っている力を管理する
    public PVector get_force();
    public void set_force(PVector force);
    public void add_force(PVector force);

    public PVector get_velocity();
    public PVector get_center();
    public float get_mass();

    // pointから物体に到達するのに最も近いベクトルを計算する
    // pointが物体に含まれている場合は0ベクトルを返す
    public PVector closest_vector(PVector point);

    public boolean is_collide(PhysicalObj other);

    // otherとこの物体が衝突しているものとして、otherに与える影響(力と力積)を返す
    // 詳しくは #3 を参照
    // 反発係数と摩擦係数どうしよう...
    public Effect effect_on(PhysicalObj other);

    // 影響を受け取る
    // 名前がイマイチ
    public void add_effect(Effect effect);

    // delta_timeだけ時間を進める
    public void update(float delta_time);

    // 描画関数
    public void draw();
}
class World {
    // ここのコンストラクタで重力加速度、空気抵抗、1フレームで進む時間を設定する
    public World(PVector gravity, float air_resistance, float delta_time);

    // objを演算システムに登録する
    public void add_obj(PhysicalObj obj);

    // 登録したPhysicalObjの重力を再設定する
    public void reset_gravity();

    // 登録したPhysicalObjの衝突判定とその影響を計算
    // ここで重たい処理をやっつける
    public void calc_collide();

    // 時間を進める
    // 登録したPhysicalObjについて、空気抵抗を追加してからupdate(delta_time)を呼ぶ
    public void update();

    // 描画
    // 登録したPhysicalObjのdraw()を呼ぶ
    public void draw();
}
H1rono commented 3 years ago

7