どこかのだれかへ

ボク、プログラマ。

Elastic tabstops、というコードの整列を勝手にやってくれるヤツ。

Vimプラグインでコードを整列してくれる良いプラグインないかと探しているときに見つけたのがElastic tabstopsです。

f:id:Tepp:20181225200131g:plain

※Elastic tabstopsのWebサイトより引用。
Elastic tabstops - a better way to indent and align code

公式サイトではVisual Studioプラグイン版の紹介もあるので、普段Visual Studioでコーディングしている人は導入してみても良いんじゃないでしょうか。 Webサイトではその実装方法までもが載っているので、いつかVimに組み込みたいです。

コロプラ特許訴訟って今どうなっている?

ということでググってみたら、つい先日、第5回審理やったみたいです。

毎回よくまとめてくれている方がいるので、そこから引用。

任天堂 VS コロプラ特許訴訟・第5回戦。ユーザに内緒で『ぷにコン』の仕様が変わっていた! | パテントマスター・宮寺達也のブログ

白猫プロジェクト特許訴訟 | パテントマスター・宮寺達也のブログ

名前の末尾の数字をカウントアップして返すメソッド

ツールとかで要素をコピーした時の新しい名前は、賢く末尾の数字がカウントアップしていくのが嬉しいと思うのです。

static string CountUpName( string name )
{
    Match match = Regex.Match( name, "(^.*)([0-9]+$)", RegexOptions.RightToLeft );
    if( match.Success ) {
        int digit = match.Groups[ 2 ].Value.Length;
        int value = int.Parse( match.Groups[ 2 ].Value ) + 1;

        name = match.Groups[ 1 ].Value + value.ToString( "D" + digit );
    }
    else {
        name = name + "0";
    }
    return name;
}

match.Groups[0]はマッチした全体なので、今回は使いません。

実際に使うときはこの後に名前の重複チェックして、重複してたらもう一回CountUpNameを通して~ということをやっています。

このメソッドだと「test1」「test001」とかにも対応出来るので便利です。まあ単純に内部的に変数持ってて複製の度にカウントアップさせてくでも問題ないとは思うんですけどね。

子が別のクラスのツリービュー

WPFにおける、親と子が同じ、再帰的なツリービューの表示は

GitHub - tepp91/WPFSampleCollection: Function sample of WPF

の中でサンプルとして提示していますが、親と子が別々のクラスの場合は、

<UserControl.Resources>
    <HierarchicalDataTemplate DataType="{x:Type mdl:Texture}" ItemsSource="{Binding PartList}">
        <TextBlock Text="{Binding}" />
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate DataType="{x:Type mdl:TexturePart}">
        <TextBlock Text="{Binding}" />
    </HierarchicalDataTemplate>
</UserControl.Resources>

<Grid>
    <TreeView ItemsSource="{Binding TextureList}" />
</Grid>

みたいにDataTypeにクラスを指定して別々のHierarchialDataTemplateを定義しておくとうまく行きます。TreeView自体に指定はないけど問題ありません。

UIエディタを作る上で決めていること:その2

続きです。

のちのちスクリプトを書けるようにする

これは将来的に、ですがMayaのmelが目標です。つまりあらゆる処理をスクリプトを介して行う事が出来るようにすることで大量のファイルを一括で処理できるようにしたいです。これをすぐにやるつもりはないのですが、最初の方で意識して設計していかないと難しいので、頑張りたいです。

tepp.hatenablog.jp

pathlib.globを複数の拡張子でフィルタリングする

pathlib.globをさらにジェネレータ式で書くことでフィルタリングが可能です。

C++ファイルの再帰リストアップの例です。

import itertools as it
from pathlib import Path


exts = ['.cpp', '.h', '.inl']
for filepath in (x for x in Path('.').glob('**/*') if x.suffix in exts):
    print(filepath)

UIエディタを作る上で決めていること

CEGUIを使おうと思ったけど、自分でビルドする必要があってその用意が大変でやってられないので、自分で作る事にしました。そして自分で作るならと、幾つか決めていることがあります。

ワークスペースはインゲームランタイムを使用する

UIエディタでありがちなのは、すべてをC#で作り、ワークスペース(見た目を確認するところ)もツール側で完結させることが多い気がします。少なくとも今の会社のUIエディタはそうなんですが、そうすると問題になってくるのが実際にゲームにのせた時とエディタ上で見た目が異なる事です。そのため、最終的に実機側で確認する必要があり二度手間なのでこれをなくしたい。常に見ているモノがそのままインゲームでも表示されるようにしたいのです。

テクスチャのアトラス情報はテクスチャファイル毎に別ファイルで持つ。

hoge.pngというテクスチャがあればhoge.uvみたいな感じで。基本的にテクスチャとアトラス情報(テクスチャ内の各パーツのUV情報)は一対一です。UIにおいてテクスチャを複数のUIで使い回すというのはよくあることなので、複数のUIで設定が共有できるようにUIファイルとは別にすべきと考えています。

今のところはこの2点。前者の実装のためにはゲーム側でもツール側から使えるように調整する必要があるのでちょっと面倒です。