おしらせ
本記事は非公開のまま何故か数ヶ月ほったらかされたものです
時系列は当時に準じます
こんにちは、Hourierです
今回は変愚蛮怒史上最大のリファクタリングを実現できました!
2つあります、早速見ていきましょう
1つはここです
神構造体と(悪)名高いplayer_typeさんですが、こいつをplayer-status.h からplayer-type-definition.h に分離しました
変更ファイル数が1200個もあったのが、影響範囲の広さを物語っています
player_type構造体はplayer-statusとは本来無関係で、何となくplayerだからって理由で入っていたものですもっと昔、v2.2.1当時はtypes.h というところへ雑多に何でもかんでも格納されていました
この作業で何がいいかって、今後player_type構造体を拡張する時にplayer-status.h を触らなくても良くなったことです
2つ目のリファクタリングにも大いに関係してきますが、player-status.h は別に(ゲーム内ではなく)ゲーム外、コンパイル環境としてのC/C++ に必要なヘッダではありません
必要なのは、system/h-*.h に代表される、「OSごとの面倒な違いを吸収するヘッダ」です
去年の内に随分削りましたが、まだOSX/Linux/BSDでは動作するように作ってあります
これは昔作ったインクルード構造ですが、ものの見事に循環してます
特に下から2番目のgeometryはクソヘッダオブザイヤー受賞級の発狂ヘッダでした
今回のリファクタリングで完全に解体され、今のgeometry.h は数あるヘッダの内の1つに過ぎません

2つのリファクタリングは別々のブランチで行いました
これはOSDN時代 (バカでかい単一の修正ブランチを、担当者の作業に誤りがない前提でエイヤとマージしていた)とGitHub時代 (小さな複数の修正ブランチをレビューしながらマージする)でやり方が異なります
いわゆるステップ・バイ・ステップですね
GitHub方式の方が好みです
2つ目はここです
とうとうplayer-status.h をangband.h から掃き出すことに成功しました
これで変愚蛮怒は、今まで「OSごとの違いを吸収する処理」と「プレーヤーが吟遊詩人だった場合の歌関係処理」が設計上の根幹だったのが、前者だけが根幹設計に修正されました
明らかに後者は根幹じゃなかったので分離は感慨深いものです
長かった……
結果、player-status.h をインクルードしているファイル数が、04/29 21時現在で約750個から86個まで減りました!!
更に一部のフィールド値をクラス化してアクセス範囲を閉じ込めたので、player_typeの使いやすさも激増です
この調子でどんどんC++の機能をふんだんに使ったゲームに仕上げていきたいですね!
長くなりましたが今日はここまで
次回もお楽しみに♪








