using System.Collections.Generic;
namespace GFGGame
{
public class MyDressUpHelper
{
private static DressUpObj _dressUpObj;
public static DressUpObj dressUpObj
{
get
{
if (_dressUpObj == null)
{
_dressUpObj = new DressUpObj();
}
return _dressUpObj;
}
}
public static CustomSuitData GetCurSuitDataClone(int index)
{
CustomSuitData suitSavedData = new CustomSuitData(index);
suitSavedData.dressUpData = MyDressUpHelper.dressUpObj.DressUpDataClone();
return suitSavedData;
}
///
/// 检测是否穿戴完整(穿着连衣裙或同时穿着上装下装)
///
///
public static bool CheckPutOnFinish()
{
if (MyDressUpHelper.dressUpObj.suitId > 0) return true;
List equipDatas = MyDressUpHelper.dressUpObj.itemList;
bool isLianYiQun = false;
bool isShangYi = false;
bool isXiaZhuang = false;
for (int i = 0; i < equipDatas.Count; i++)
{
ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]);
if (itemCfg.subType == ConstDressUpItemType.LIAN_YI_QUN && itemCfg.id != ConstItemID.DEFULT_LIAN_YI_QUN)
{
isLianYiQun = true; break;
}
if (itemCfg.subType == ConstDressUpItemType.SHANG_YI && itemCfg.id != ConstItemID.DEFULT_NEI_DA)
{
isShangYi = true;
}
if (itemCfg.subType == ConstDressUpItemType.XIA_ZHUANG && itemCfg.id != ConstItemID.DEFULT_XIA_ZHUANG)
{
isXiaZhuang = true;
}
}
return isLianYiQun || isXiaZhuang && isShangYi;
}
public static bool CheckEquipedFightNeeded()
{
StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
if (fightCfg.needItemId > 0)
{
return dressUpObj.CheckDressUpItemIsOn(fightCfg.needItemId);
}
else if (fightCfg.needSuitId > 0)
{
return dressUpObj.CheckSuitIsOn(fightCfg.needSuitId);
}
return true;
}
public static void PutOnSuitSavedByPos(int index)
{
CustomSuitData suitSavedData = CustomSuitDataManager.GetSuitList(index);
dressUpObj.PutOnDressUpData(suitSavedData.dressUpData);
}
//返回当前饰品穿戴数量
public static int GetCurrentOrnamentCount()
{
int count = 0;
for (int i = 0; i < dressUpObj.itemList.Count; i++)
{
if (DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(dressUpObj.itemList[i])) count++;
}
return count;
}
public static void PutOnRecommendItems()
{
List recommendList = DressUpMenuItemDataManager.GetRecommendItemList();
StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
int liangyiqunIndex = -1;
int shangyiIndex = -1;
int xiazhuangIndex = -1;
int neidaIndex = -1;
for (int i = 0; i < recommendList.Count; i++)
{
int subType = ItemUtilCS.GetItemSubType(recommendList[i]);
if (subType == ConstDressUpItemType.LIAN_YI_QUN)
{
liangyiqunIndex = i;
continue;
}
if (subType == ConstDressUpItemType.SHANG_YI)
{
shangyiIndex = i;
continue;
}
if (subType == ConstDressUpItemType.XIA_ZHUANG)
{
xiazhuangIndex = i;
continue;
}
if (subType == ConstDressUpItemType.NEI_DA)
{
neidaIndex = i;
continue;
}
}
if (liangyiqunIndex >= 0 && (shangyiIndex >= 0 || xiazhuangIndex >= 0))
{
if (shangyiIndex < 0 && xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);//上衣下装只有一件,则保留连衣裙
if (xiazhuangIndex < 0 && shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
if (shangyiIndex >= 0 && xiazhuangIndex >= 0)//同时拥有上衣、下装、连衣裙
{
int lianyiqunScore = ItemDataManager.GetItemAdditionScore(recommendList[liangyiqunIndex], InstanceZonesDataManager.currentScoreType);
int shangyiScore = ItemDataManager.GetItemAdditionScore(recommendList[shangyiIndex], InstanceZonesDataManager.currentScoreType);
int xiazhuangScore = ItemDataManager.GetItemAdditionScore(recommendList[xiazhuangIndex], InstanceZonesDataManager.currentScoreType);
int neidaScore = neidaIndex >= 0 ? ItemDataManager.GetItemAdditionScore(recommendList[neidaIndex], InstanceZonesDataManager.currentScoreType) : 0;
int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
if (fightCfg.needItemId > 0 && recommendList.IndexOf(fightCfg.needItemId) >= 0 && (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA || subType == ConstDressUpItemType.LIAN_YI_QUN))//推荐列表里有必需品且,必需品类型为上衣或下装或连衣裙,有先穿戴必须品,其次穿戴高分服装
{
if (subType == ConstDressUpItemType.LIAN_YI_QUN)
{
shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
}
else if (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA)
{
liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
}
}
else
{
if (lianyiqunScore > shangyiScore + xiazhuangScore + neidaScore)
{
shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
}
else
{
liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
}
}
}
}
//推荐搭配自动穿必穿品
if (fightCfg.needItemId > 0 && DressUpMenuItemDataManager.CheckHasItem(fightCfg.needItemId) && recommendList.IndexOf(fightCfg.needItemId) < 0)
{
int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
for (int i = 0; i < recommendList.Count; i++)
{
int recommendSubType = ItemUtilCS.GetItemSubType(recommendList[i]);
if (recommendSubType == subType)
{
recommendList.RemoveAt(i);
break;
}
}
recommendList.Add(fightCfg.needItemId);
}
else if (fightCfg.needSuitId > 0 && DressUpMenuSuitDataManager.CheckHaveSuit(fightCfg.needSuitId))
{
recommendList.Clear();
SuitCfg cfg = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId);
recommendList.AddRange(cfg.partsArr);
}
dressUpObj.PutOnItemList(recommendList);
}
public static void PutOnRecommendItems2()
{
GetRecommendItems(out Dictionary> needListBySubType, out Dictionary> recommendListBySubType);
}
//获取每个类型里分数最高的服装部件Dictionary
private static void GetRecommendItems(out Dictionary> needListBySubType, out Dictionary> recommendListBySubType)
{
StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
needListBySubType = new Dictionary>();
recommendListBySubType = new Dictionary>();
Dictionary> itemDatasDic = DressUpMenuItemDataManager.ItemDatasBySubTypeDic;
foreach (int subType in itemDatasDic.Keys)
{
if (DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(subType)) continue;
if (!needListBySubType.ContainsKey(subType))
{
needListBySubType.Add(subType, new List());
}
List itemDatas = new List(itemDatasDic[subType]);
DressUpMenuItemDataManager.SortItemListByHighScore(itemDatas);
if (fightCfg.needSuitId > 0)
{
int[] suitParts = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId).partsArr;
for (int i = 0; i < suitParts.Length; i++)
{
if (itemDatas.IndexOf(suitParts[i]) >= 0)//当前类型里是否包含此部件,
{
needListBySubType[subType].Add(suitParts[i]);
}
}
}
if (fightCfg.needItemId > 0)
{
if (itemDatas.IndexOf(fightCfg.needItemId) >= 0 && needListBySubType[subType].IndexOf(fightCfg.needItemId) < 0)
{
needListBySubType[subType].Add(fightCfg.needItemId);
}
}
DressUpMenuItemDataManager.SortItemListByHighScore(needListBySubType[subType]);
int maxCount = subType == (int)ConstDressUpItemType.TE_SHU ? 3 : 1;//特殊部件最多穿3个,其他部件只能穿一个;
needListBySubType[subType] = needListBySubType[subType].GetRange(0, maxCount);//多余3个取前三
int index = 0;
while (recommendListBySubType[subType].Count < maxCount && itemDatasDic[subType].Count > index)//不足3个从列表里补足
{
int partId = itemDatasDic[subType][index];
if (needListBySubType[subType].IndexOf(partId) < 0)//必需品列表里还没有此部件才会被添加进去
{
if (!recommendListBySubType.ContainsKey(subType))
{
recommendListBySubType.Add(subType, new List());
}
recommendListBySubType[subType].Add(partId);
}
index++;
}
DressUpMenuItemDataManager.SortItemListByHighScore(recommendListBySubType[subType]);
}
}
private static int CheckIndex(int _subType, List recommendList)
{
for (int i = 0; i < recommendList.Count; i++)
{
int itemSubType = ItemUtilCS.GetItemSubType(recommendList[i]);
if (itemSubType == _subType)
{
return i;
}
}
return -1;
}
}
}