制作日記

こういうの作った方が、逃げにくいじゃない

リダイレクト

http://samsara01.blog.fc2.com/blog-entry-18339.html
捏造なりでparent弄ったとして、parent,IDやらがいつ反映されるかってーと
書いた通り即時

たしか自キャラver1.19のヘルパー親捏造はparent,IDでいつものとこのアドレス取ってた気がする

で、こっちで書きたいのは↓の話、つまりソフトウェアの設計の話や
実装の都合から察するに、ほとんどのトリガーが勝手に反映されるはず

実装上の都合とザックリ書いたけど、拡張性とか使いやすさやね

get_trigger(const void* ch_addr,uint32_t trigger_id,const vod* data)
get_trigger(const void* ch_addr,uint32_t trigger_id,...)
みたいな感じかなーとは察してる
であとは各トリガー用に
get_ID(const void* ch_addr)
とか、第2引数以降はトリガー次第
戻り値は考慮してない、受け取る用の引数がもう一個あるか、ポインタ返すんじゃね?

以降、そこら辺の話を適当に

IDを取得するという関数を実装する場合
ダメなのはプレイヤーそれぞれにAPIを用意する、ID_P1、ID_P2~ID_Pxxって感じで
※常にダメなわけではない、MUGENのトリガーだとP1Name、P2Nameあたりは問題ない

なんでだめって、単純に全プレイヤー分書くのはあほらしい
それとヘルパーの数が可変だからダメ
winはヘルパー数の上限あるけど、新は上限廃止するとかいう話もある
上限1000になったら、1000個用意するのかと

じゃー、こいつのID欲しいってときの「こいつ」の情報も一緒に渡せば、
関数1つで事足りるんじゃね?ってなるそれが
get_ID(const void* ch_addr)
中身はアドレスからIDの場所計算してその値をとってくるだけ
これを上述のget_triggerみたいな関数でラップしてる

引数はアドレスじゃなくて管理用の番号のほうが良いとかそういうのは
プレイヤーが増えたらどうするんだとか、アドレス自体がすでにユニークなIDなのにまたID振るの?とか
同一アドレスで別キャラが仕様変更であり得るかもとか、面倒なので割愛
実際のとこ、アドレス引っ張ってくるときは番号から計算してたりする

で、リダイレクトの話で
これも関数的にはトリガーと変わらんはず
get_parent(const void* addr)とかあって、
自身のアドレス渡して、これ呼べば親のアドレス(parentに入っている値)がとれる
あとは、その親の値でget_ID呼べば、勝手に計算してやってくれる

ここの引数がIDだったらどうなってたかはわからん
そもそもparentがなくなって、所謂影のIDだけでの管理になってたかもだし
そうなったら、今の親捏造ほど自由度高くないね

と、いうわけで使いやすさとか拡張性考えたらそうなるよね


こういう話って要はオブジェクト指向とか仮想化の話なわけで、結構面白い
C++とかのクラスはどういう実装になっているのか、動的多態性はどう実現しているのかとか
OSだとHAL層とかVFS層みたいな仮想化層の話とか
自分が割と関わる範囲に絞っても、いくらでもネタを出せる話題

コメントの投稿

非公開コメント

プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク