public IStateData Clone()
        {
            CocoLockableStateData data = Create();

            data.CloneContent(this);
            return(data);
        }
        public virtual void CloneContent(CocoLockableStateData source)
        {
            // temp unlock
            m_TempUnlockedItemIdSet = new HashSet <string> (source.m_TempUnlockedItemIdSet);

            // purchase
            purchasedItemIds     = new List <string> (source.purchasedItemIds);
            m_PurchasedItemIdSet = new HashSet <string> (source.m_PurchasedItemIdSet);
        }
        public override void CloneContent(CocoLockableStateData source)
        {
            base.CloneContent(source);

            CocoDressStateData sourceData = (CocoDressStateData)source;

            roleDressItemIds = new Dictionary <string, List <string> > ();
            sourceData.roleDressItemIds.ForEach((roleId, dressItems) => {
                roleDressItemIds.Add(roleId, dressItems);
            });
        }