大量のbool型変数を動きを把握しやすくしたい。

質問内容

以下のコードですが、フラグ変数が大量にあり、複雑な条件分岐やtrue,false値の変化など色々噛み合い、もうこれ以上増えると手に終えません。
どうすればいいのでしょうか?

試したこと

1,取り得ず完成しています。

2,最低限の条件に簡素化する、if文内で出来るだけ一つの式にして2つ成立している時は、if文の中にif文を書くとう形式を取りました。

知りたこと

わかりやすい処理を作る方法

環境

Godot: 4.6
Lang: C#

 //プレイヤー自体の衝突
        if (GetSlideCollisionCount() > 0)
        {
            isColliding = true;
        }
        else
        {
            isColliding = false;
        }

        if(isColliding == true)
        {
            if(groundChecker.IsOnGround == true)
            {
                //地面にいるとき

                if(slopeChecker.IsOnSlope == true)
                { 
                    //傾斜にいるとき
                    
                    isJumpEnabled = true;
                    isTimeOut = false;
                    isLongJumping = false;
                    isOnSlope = true;


                }
                else
                {
                    //平面に居る時
                    
                    isJumpEnabled = true;
                    isTimeOut = false;
                    isLongJumping = false; 
                    isOnSlope = false;

                }
            } 
        }    
        else
        {
            isJumpEnabled = false;
            isOnSlope = false;
        }
        
        
        if((isJumpEnabled == true) && (isOnSlope == false))
        {
            //平面にいるときは重力をかける
            velocity.Y = GROUND_GRAVITY;
        }
        else if((isJumpEnabled == true) && (isOnSlope == true))
        {
            //傾斜にいるときは重力をかけない
            velocity.Y = 0;
        }

https://cdn.discordapp.com/attachments/1487703794421727282/1487703794992025600/PlayerController.cs?ex=69ca1ba0&is=69c8ca20&hm=2eb9ee8256b3f35cbb873aa00f9173bd7e331e6f640f2f610f8f667f5165ee12&
https://cdn.discordapp.com/attachments/1487703794421727282/1487703795348537354/GroundChecker.cs?ex=69ca1ba1&is=69c8ca21&hm=e4d20d3a8e705b506cf14cf8f538229d6a327da19f92d04feea937da252c56c9&


from Discord by amagichan00

コードはよく読んでませんが、boolの管理爆発なら、多分ステートマシンが解決策になると思いますGodotでステートマシンを実装する


from Discord by lipliidol

ちょっと調べましたが、ステートマシン自体の説明はこれがわかりやすいかもしれません~


from Discord by lipliidol

6個ぐらいならまだ「大量」でもないかなと。

冗長なところがあるので、リファクタリングしたら普通に読めるレベルになるんじゃないでしょうか?

  • フラグを1つ1つ設定しているところは、先頭で全て false にして、true になるところだけ処理を入れる
  • 同じ条件式のところはまとめる
  • == true は削除、== false は否定の演算子にする

※C#は私は触らないのと元のコードの動きを把握していないので以下をそのまま鵜呑みにしないでほしいですが、
以下のようにしてみたらどうでしょうか?

    public override void _Process(double delta)
    {
        isJumpEnabled = false;
        isTimeOut = false;
        isLongJumping = false;
        isOnSlope = false;
        isColliding = GetSlideCollisionCount() > 0; 

        if (isColliding)
        {
            if (groundChecker.IsOnGround)
            {
                if(slopeChecker.IsOnSlope)
                { 
                    isJumpEnabled = true;
                    isOnSlope = true;
                }
                else
                {
                    isJumpEnabled = true;
                }
            } 
        }
   # 略

from Discord by tkmfujise