예제 #1
0
        /// <summary>
        /// card情報をパースする
        /// </summary>
        /// <param name="asObject"></param>
        private void ParseCard(FluorineFx.ASObject asObject)
        {
            Object cardObj = null;
            if (asObject.TryGetValue("card", out cardObj) && cardObj != null)
            {
                Object[] cardObjs = null;

                // 配列の時とそうでない時の両方に対応する
                Type varType = cardObj.GetType();
                if (varType == typeof(FluorineFx.ASObject))
                {
                    cardObjs = new FluorineFx.ASObject[1];
                    cardObjs[0] = (FluorineFx.ASObject)cardObj;
                }
                else if (varType == typeof(Object[]))
                {
                    cardObjs = (Object[])cardObj;

                    // cardは強化合成や限界突破によって容易く減る機会が多い
                    // 配列の場合、全情報が入っていると思いたいが食事の時は対象となるモン娘の情報しかない
                    // この違いを"misc"があるかどうかで判断する。あればクリアする。
                    if (FiddlerUtil.IsExistObject(asObject, FiddlerUtil.KeyNameType.MISC) &&
                        // "misc"があってもお使いからの帰宅時は対象外
                        !IsReturnHome(asObject))
                    {
                        mCardDatas.Clear();
                    }
                }

                for (int i = 0; i < cardObjs.Length; ++i)
                {
                    FluorineFx.ASObject asObj = cardObjs[i] as FluorineFx.ASObject;
                    if (asObj != null)
                    {
                        CardData parseData = new CardData();
                        parseData.Parse(asObj);

                        // 既出なら更新する
                        Int32 findDataIndex = mCardDatas.FindIndex(
                            delegate(CardData inData)
                            {
                                return (inData.cardId == parseData.cardId);
                            }
                            );
                        if (0 <= findDataIndex)
                        {
                            mCardDatas[findDataIndex] = parseData;
                        }
                        // 新出なら追加する
                        else
                        {
                            mCardDatas.Add(parseData);
                        }
                    }
                }

                // ソートする
                mCardDatas.Sort(
                    delegate(CardData a, CardData b)
                    {
                        return a.cardId - b.cardId;
                    }
                    );
            }
        }