simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

CubeWalk:R Ctrl でキューブ、SideA, SideB と配置形状が切り替わる

概要

構想に近づけるため、最初のステップを踏みます
simplestar-tech.hatenablog.com


右クリックすると無限に 2 x 2 のプリズムを配置する現在
これを右クリック中 R Ctrl キーを押すと、プリズム A, プリズム B と切り替わり
その時に右クリックを終了するとプリズムが配置されるというもの

f:id:simplestar_tech:20191124010211p:plain
プリズム単位で配置
これを実現してみます。

実装イメージ

新しい InputAction をこうやって使う感じかな

        this.modeAction.performed +=
            ctx =>
            {
                if (this.locatingFlag)
                {
                    // 配置モードを切り替える
                    this.mode++;
                    if (Mode.Max == this.mode)
                    {
                        this.mode = Mode.Cube;
                    }
                }
            };

事前配置は完成

そのまま配置すると、キューブが置かれてしまった
それもそのはず、配置時にモードは渡っていない

カーソルが当たっているときに正しくキューブが出てこない

なんのこっちゃですが、見た目がおかしい不具合あり
直した

配置時に配置モードを利用する

       // 対象キューブ表面を適当なブロックに
        var sideTypeA = SideType.Air;
        var sideTypeB = SideType.Air;
        switch (this.mode)
        {
            case Mode.Cube:
                sideTypeA = SideType.Frost;
                sideTypeB = SideType.Frost;
                break;
            case Mode.SideA:
                sideTypeA = SideType.Frost;
                break;
            case Mode.SideB:
                sideTypeB = SideType.Frost;
                break;
            default:
                break;
        }
        var chunkInt3 = this.cubeDataWorld.CubePositionToChunkInt3(this.cubeCenter);
        this.cubeDataWorld.SetCubeData(this.cubeCenter, chunkInt3, CubeCategoryType.Basic, this.preLocateCubeRotationType, sideTypeA, sideTypeB);
        Destroy(this.preLocateCubeObject);
        this.preLocateCubeObject = null;

これでいいのかな?

なんか不具合
メッシュオブジェクトの作り方に問題がありそう

そう、オフセットの問題だった、解決

ということでできたー!

小ゴール達成なので、次に進めます