Beispiel #1
0
 /// <summary>予約名パスをフラグで使うパスに変換</summary>
 public MyFlagItem toFlagPath(MyFlagItem aItem)
 {
     if (aItem is MyFlagSingleItem)
     {
         MyFlagSingleItem tSingle = ((MyFlagSingleItem)aItem).copy();
         tSingle.mPath = toFlagPath(tSingle.mPath);
         return(tSingle);
     }
     else if (aItem is MyFlagAndItems)
     {
         MyFlagAndItems tAnd = ((MyFlagAndItems)aItem).copy();
         for (int i = 0; i < tAnd.mItems.Length; ++i)
         {
             tAnd.mItems[i].mPath = toFlagPath(tAnd.mItems[i].mPath);
         }
         return(tAnd);
     }
     else if (aItem is MyFlagOrItems)
     {
         MyFlagAndItems tOr = ((MyFlagAndItems)aItem).copy();
         for (int i = 0; i < tOr.mItems.Length; ++i)
         {
             tOr.mItems[i].mPath = toFlagPath(tOr.mItems[i].mPath);
         }
         return(tOr);
     }
     throw new System.Exception("MyMap : FlagItemのパス変換失敗「" + aItem.GetType().ToString() + "」");
 }
    public bool check(MyFlagItem aItem)
    {
        switch (aItem)
        {
        case MyFlagBoolItem bItem:
            object bO = getFlag(bItem.mPath);
            if (bO is bool && (bool)bO == bItem.mValue)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case MyFlagStringItem sItem:
            object sO = getFlag(sItem.mPath);
            if (sO is string && (string)sO == sItem.mValue)
            {
                return(true);
            }
            else
            {
                return(false);
            }

        case MyFlagFloatItem fItem:
            object fO = getFlag(fItem.mPath);
            float  f;
            if (fO is int)
            {
                f = (int)fO;
            }
            else if (fO is float)
            {
                f = (float)fO;
            }
            else
            {
                return(false);
            }
            switch (fItem.mCompare)
            {
            case MyFlagFloatItem.Compare.equal:
#pragma warning disable RECS0018 // 等値演算子による浮動小数点値の比較
                return(fItem.mValue == (float)f);

#pragma warning restore RECS0018 // 等値演算子による浮動小数点値の比較
            case MyFlagFloatItem.Compare.lessThan:
                return(fItem.mValue < (float)f);

            case MyFlagFloatItem.Compare.moreThan:
                return(fItem.mValue > (float)f);

            case MyFlagFloatItem.Compare.orLess:
                return(fItem.mValue <= (float)f);

            case MyFlagFloatItem.Compare.orMore:
                return(fItem.mValue >= (float)f);
            }
            throw new System.Exception("MyFlag : FloatItem未定義の比較手法「" + fItem.mCompare.ToString() + "」");

        case MyFlagAndItems andItem:
            foreach (MyFlagItem tItem in andItem.mItems)
            {
                if (!check(tItem))
                {
                    return(false);
                }
            }
            return(true);

        case MyFlagOrItems orItem:
            foreach (MyFlagItem tItem in orItem.mItems)
            {
                if (check(tItem))
                {
                    return(true);
                }
            }
            return(false);
        }
        throw new System.Exception("MyFlag : 未定義のフラグCheck「" + aItem.GetType().ToString() + "」");
    }