くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | プログラム | | 模型]

2013-02-12

日記

やることありすぎる。仕事もちゃんとやらんとな。

SSD移行はできた。バックアップからの復旧でNASが見つけられず手間取ったが、上手く見つけられたらあとは簡単だった。復旧を試せるいい機会だ。 M5P速いけど、今までも遅いところなかったから速さを実感できない。やっぱり安い方でよかったんだ……。

TokyoDemoFest行ってきた。あんまり書けることないかな。 楽しかったけど、会場のメインスクリーンがちゃんと見える位置が限られててコンペがよく見えなかったのが残念だった。 あと何のアナウンスもないまま1時間遅れで進行するのはちょっときつい。 いやなんか否定的なことばっかり書いてるように見えるけど、まとまらなくて楽しかったくらいしか言葉が出ないんだ。

[PeerCastStation] 設定ファイル

接続してないチャンネルの自動切断を入れてみたんだけど、こいつの自動切断までの時間をどうやって保存したものか。

今まではVisualStudioで普通に作れる設定ファイルを使ってたんだけど、これはどうしてもアセンブリ単位になってしまって外からいじれない。 他アセンブリ内にあるクラスの設定をGUIからいじりたいという時にアクセスできないんだよねぇ。

あとは保存場所がどこだかよくわからないとかいろいろと自由が効かないので自前で管理するようにしたい。 まあそんなに難しい物は必要ないだろうとぱぱっと作ってみた。 適当な設定クラスを登録しておくとそいつのオブジェクトを勝手にシリアル化して読み書きしてくれるようなクラスができた。

保存場所が悩ましいところだったが、まあ普通にユーザのローミングパスに保存しておけばよかろうとつっこんでおいた。 IsolatedStorage使おうと四苦八苦してみたが出来てからそんな必要なくて普通にローミングの下につっこめばいいじゃんと気付いたんだが。

コードからのアクセス用にstaticなPecaSettingsクラスを作ったのでぽいぽい設定をつっこんでおくだけで勝手に読み書きされる。 ちゃんと動きはするんだけどなんだかしっくりこないような……?

何がしっくりこないのか考えてみたけど、やっぱり設定が実質グローバル変数ってのがいまいちだなぁ。 設定ファイルとは本来独立しているべきロジック部分からも設定ファイルに気軽にアクセスできちゃう。 あるクラスのインスタンスを作った時にグローバル変数の状態に依存して動作が変わっちゃうというのは悪手でしょう。 ロジック部分に設定を反映させるのはロジック部分の外から明示的に行うべきだろう。

なんかプラグインのインターフェースか何かに設定読み書きメソッドを作って基本的にはそこから設定にアクセスするようにする? まあその辺が妥当かな。そっちに変更しよう。

[PeerCastStation] ばーじょん管理

WPF版のUI作ったよというPull Requestが来た。 特に問題なさそうなのでマージしてしまいたいんだが、バージョン管理に問題が。

PeerCastStationのバージョン管理はmonotoneを使っていて、monotoneからgitに書き出してgithubに上げているんだが、monotoneはgitへのエクスポートだけしかできない。gitからのインポートはできない。うごごご。

何か方法はないかと考えたけど、普通にgitに移行するしかなさそうな感じだ。まあPeerCastStationは基本的にはWindowsで開発していてTortoiseGitが使えるのでそんなに問題はない。コマンドラインのgitは難しすぎて俺のような常人には扱えないのです。

しかしgit使わずにgithubが使えればもっといいんだが何かいいものはないんだろうか。hgとかbzrでもいいけどなんかもっとしっくり来る物があるといいなー。

[PeerCastStation] その他もろもろ

PeerCastStationもやらないといけないことが沢山あるなぁ。

  • 設定あたりの整理
  • テストの整理(IronRuby Toolsに依存しない感じにしたい)
  • アップデートの整理
  • WPF版GUIの取り込み
  • GUI整理
  • ドキュメントの整理
  • インストーラ作る
  • FLVのタグ読み込み
  • UDPでのコンテンツ送信拡張
  • Ogg/Theora対応
  • Mpeg2-TS対応
  • HTTPじゃない方法でのIPC
  • IPv6対応(忘れてた…)

優先度はなんとなくだけど上の方が優先な雰囲気で。Issueに書いておけばいいんだけどGithubのIssueはオフラインでみれなくてな……。

[Ruby][OpenGL] ゲーム作り(UIなど)

ゲームはUIがちょっとかわったくらい?

ゲーム画面

ポーズ画面

UIが右にくっついたり、ポーズメニューをつくってみたりした。3がいっぱい並んでるのは3wayショットのアイコン(のつもり)。Nはノーマルショット。

背景に線がついたりもしてるか。段差の境目がわかりづらかったので影を付けたかったんだけど大変だったので線をつけるだけでごまかした……というか充分だった。

UIはレイアウトマネージャを作ってなんとなく簡単にレイアウトを作れるようにした。

@ui.build do |ui|
  ui.style :panel, padding: 8.0, border_width: 4.0, border_color: vec4(1, 1, 1, 1), fill_color: vec4(0.0, 0.0, 0.0, 0.5)
  ui.style :stack, padding: 8.0
  ui.style :text,  scale: 2
  ui.panel align: :right, width: 160 do
    ui.text 'Time: %d' % (@game.scenario.time_limit/60)
    ui.text "HP:#{@game.player.hit_point}/#{@game.player.max_hit_point}"
    ui.text "Money:#{@game.player.money}"
    ui.text "Slot #{@game.player.current_weapon==0 ? 'A' : 'B'}"
    ui.stack orientation: :vertical do
      weapons = @game.player.weapons[@game.player.current_weapon]
      weapon = weapons.first
      ui.text("#{weapon.name}: #{weapon.magazine}/#{weapon.max_magazine}")
      weapons.drop(1).each_slice(5) do |ws|
        ui.text(ws.collect {|w| w.name}.join(' '))
      end
    end
  end
end

右に出てるUIがこんな感じ。毎フレーム実行してレイアウト計算してるので重いと言えば重いんだが動く程度なのでまあいいか。 本当はUIをこうコードで組み立てるのって好きじゃなくて、どう表示されるかは別で(できればリソースとして)定義しろやと思うんだけど、今回はそんなことより早く作ることが目的なのでこんなんでいいでしょう。

ゲーム外のメニューとかも作らないとなぁと思うけど、ステージエディットとどっちが先だろうか。 うーん、ゲームルール的にはメインゲームの外も作らないと回らないのでステージエディットは後でもよさそうか。

ステージエディットは3Dだと大変だが、まずは2Dで充分じゃないかと思ったのでその方向で進むつもり。テキストファイルに記号でマッピングしたのを読み込めばいいと思うんだ。

いずれにせよPeerCastStationをちょっとばかし優先度高めで進めたいのでゲームの進みはしばらく遅くなりそうかな。


ページのトップへ | トップ «前の日記(2013-02-04) 最新 次の日記(2013-02-18)» | 編集 | kumaryu.net by kumaryu