またまたお久しぶりです。
活動再開するとか言っておきながら、なんだかんだで1ヶ月更新してませんでした。申し訳ないです。
全く開発していなかったのかといえばそういう訳ではなく、水面下で進めておりました。
ただ、全く更新せずに進めるのも水くさいので、進捗状況をご報告します。
設計見直し
1年ぶりにソースコードを開いて、さあ開発を始めるぞとなると、そう簡単に進められるものではありません。
そこには1年前に書いた雑なソースコードと、全く仕様を覚えていないクラスがずらずら並べられているからです。
まあ仕様書とか作らず開発を始めた自分が悪いんだけどね…
なかなか報告できなかったのはこれが原因です。
開発を再開するにあたり、システムの構造を理解するついでに、将来の拡張性を考えて設計の見直しを行いました。
設計の見直しと言っても1つのクラスの機能を分割して別々のクラスにしたり、処理の無駄を省いたり、命名規則を変えたりと、
その程度なので作り直すというほどのものではないです。
今までアドオンの処理が「Addon」という1つのクラスにまとめられていましたが、
AddonType、AddonLayerと2つのクラスに機能を分散させることで拡張しやすくしました。
また、マップの処理を行う「CityMap」も、1タイルごとに処理を行う「Tile」というクラスに一部機能を分割させました。
用語の定義
これはプログラムに直接関係があることではないんですが、
Cities Boxの開発で用いる用語の定義が曖昧で表記揺れが多かったので、以後は以下のように定義します。
- タイル:マップ上の1マスのこと。(これまではマス、タイル、Squareなどが混在していた)
- オブジェクト:マップ上に設置する建築物のこと。(これまでは建物、アドオンなどが混在していた)
レイヤ構造の導入
レイヤというのは層のことです。画像編集や動画編集でよく使う言葉ですね。あれと同じです。
複数のアドオン画像を重ね合わせることで、時間帯や季節に応じてオブジェクトに別々の装飾を施したり、
アニメーション表示に対応したりできます(今のところ実装内容は前者のみ)。
実は今までもレイヤのようなものには対応していました。
夜間にオブジェクトに照明が灯るのは、別々の画像を重ね合わせることで実現しています。
この機能をもっと様々な条件下で使えるようにして、汎用性を高めようというわけです。
今対応しているのは以下の内容です。
- 地面
- 通常時(常時表示)
- 夕方
- 夜間
- 春
- 夏
- 秋
- 冬
- 春の夕方
- 夏の夕方
- 秋の夕方
- 冬の夕方
- 春の夜間
- 夏の夜間
- 秋の夜間
- 冬の夜間
時間帯や季節のほかにも、地面部分を1つのレイヤとして独立させることができるようになりました。
これにより、わざわざアドオン画像に個々に地面部分を描画する必要がなく、
1枚の地面部分の画像を複数のアドオンで共有して読み込ませることができるようになります。
アドオンデータ、セーブデータの仕様変更
これは設計見直しやレイヤ構造の導入に伴うものです。
以前のバージョンで保存したデータと互換性はありませんが、変換機能を作成する予定です。
以上です。
レイヤ構造を除いて現時点で目立った新機能はありませんが、
今の作業が一通り終わったら新機能の作成にも取り掛かりたいと思います。
今後ともよろしくお願いいたします。
Leave a Reply