夏休みだからまとまった時間がとれる!と思ったらそんなものがありました。
あるのはわかってたけど、正直ナメてました。
だけどそんなものには負けたくない。ちゃんと完成させるんだ!
というわけで、授業中も時間をみて仕様の設計です。やや悪い子でございます。
・・・で、
やはり若いもんが出しゃばって設計なんてするもんじゃありません。
毎日が仕様変更だよ!昨日の自分はもう他人だよ!
実はわたくし、今回の講習で時間がとられることを見越して記事をいくつか書き置きしてました。
でも、じっくり設計してる間に何回か仕様が変わって、
書き置きした記事が使い物にならなくなってしまいました。
実際にプログラミング始める前の変更だからまだいいと言えばいいですけど・・・。
この日記も2、3日に1回くらいのペースで更新していければいいなーとか考えてましたけど、
それは難しくなりそうなのです。現実は非情なのです。
とりあえず、ここまでで考えたモジュールの構成なんかを張っておきます。
namespace LNote
{
// コアモジュール。システム(OS)に依存しない部分
namespace Core
{
namespace Base // エラー処理、型宣言、参照文字列型など
namespace Math // 算術。ベクトル、行列、クォータニオン、sin cosテーブルなど
namespace Memory // メモリ管理
namespace Resource // 埋め込みリソース
namespace FileIO // ファイル入出力。暗号化アーカイブ、非同期読み込み
namespace Thread // 今はwindowsのスレッド使ってるけど、後で boost でも実装したいところ
...
}
// エンジン。アプリケーションレイヤーとかそんな感じの。システムに近いもの
namespace Engine
{
namespace Audio // ゲームオーディオ、3D音声など
namespace Graphics // 基本的な描画機能
namespace Input // (仮想)ゲームコントローラ、キーコンフィグなど
namespace System // ウィンドウの作成、メッセージ処理など
...
}
// Core、Engine の上位モジュール
namespace Utility
{
namespace Framework // ライブラリ全体の動作管理 (時間管理もここ)
namespace Scene // Graphics の上位。スプライト、3Dモデル、ポリラインなど
namespace Effect // エフェクトエディタで作ったエフェクトを扱う。ウリのひとつになるかも
namespace GUI // GUIモジュール。ボタン、テキストボックスなど
...
}
}
で、以下はこれらをもっと簡単に使えるようにしたもの。
ライブラリのラッパーみたいな感じ。
namespace LNote
{
// Base モジュール
class LString
class LWString
class LList
class LNodeList
...
// Audio モジュール
class LAudio
class LSound
...
// Graphics モジュール
class LRenderer
class LVertexBuffer
class LIndecBuffer
class LTexture
class LShader
...
// Scene モジュール
class LSprite
class LPanel
class LMesh
class LSkinMesh
...
// Math モジュール
class LVector3
class LMatrix
...
}
これらは機能充実っていうよりもお手軽さを重視したもの。
さらっと使ってみたいのに LNote::Engine::Graphics::Texture とか長いもの書かせるのは忍びないことです。
とくに「C++ 勉強中!」っていう方に使っていただくのであればなおさらのこと。
結構な数ありますけど、Thread Input Audio Math あたりは殆ど前回までの
ライブラリのものを見直しながら持ってくるだけでよい感じだったり。
実質作りこむ必要があるのは Graphics と、その上位である Scene。
そんな感じなので、週末くらいにはグラフィックス機能以外(ェ・・・)を実装した
デモを配布できればいいなぁ・・・といったところです。
以下、余談です。
Dixqさんに触発されてDXライブラリの3D機能を勉強してみたところ、
結構いろんなことができることに驚きました。
3Dの機能はおまけ程度みたいな話を聞いたことがあり、
これまでずっとそんな感じなんだろうなーとか思ってましたけど、
これはなかなか充実の内容。すごい!
LightNote の方で対抗できる機能があるとすれば・・・
一番大きいのはゲームエフェクトの機能かなぁ・・・
でもコレ独自仕様強いしなぁ・・・
(付属のエフェクトエディタで作ったエフェクトをゲームで使える機能。詳しくは別の記事で書きます)
ってなると、ある程度の規模のゲーム開発をサポートしていく方向で作った方がいいのでしょうか。
ふむむ・・・
とりあえず pmd の読み込みと物理演算はサポートしたいなとか思ってみたり。
っていか、そもそもいち学生がそんなDXライブラリ様に挑もうとするのがおこがましいのでしょうか。
ふむむ・・・ふむむ・・・
でも作りたいんだもん!
さて、デモの作成をいそいそいそ・・・