void Start() { dialogueWithGroundskeeperScript = Groundskeeper.GetComponent <DialogueWithGroundskeeper>(); dialogueWithVanessaScript = Vanessa.GetComponent <DialogueWithVanessa>(); lockedWithNPC = false; UhhhhMaybeYouShouldWait = FMODUnity.RuntimeManager.CreateInstance("event:/Dialogue/Player/UhhhhMaybeYouShouldWait"); turulSFXScript = turul.GetComponent <PlayTurulSFX>(); TurulSingleSquawk = FMODUnity.RuntimeManager.CreateInstance("event:/SFX/TurulSquawk"); LockComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/LockComment"); StillMausoleumComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/StillMausoleumComment"); StillClockComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/StillClockComment"); BlankGraveComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/GraveWithoutWordsComment"); TreeOfLifeComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/TreeOfLife"); BangingMausoleumComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/BangingMausoleumComment"); CreepyClockComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/CreepyClockComment"); FilledInGravesComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/FilledInGravesComment"); IgnoreTheGhostComment = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/IgnoreTheGhostComment"); obtainLighterFromCharlieComment = FMODUnity.RuntimeManager.CreateInstance("event:/Dialogue/Player/ObtainLighterComment"); obtainFanFromVanessaComment = FMODUnity.RuntimeManager.CreateInstance("event:/Dialogue/Player/ObtainFanComment"); IHaveAShovel = FMODUnity.RuntimeManager.CreateInstance("event:/ItemInteractions/IHaveAShovel"); lightScript = lights.GetComponent <ProgressiveLights>(); gateCloseScript = bathroomCutsceneHolder.GetComponent <TriggerGateClose>(); waterBottleSlotSelectItemScript = waterBottleSlot.GetComponent <SelectItem>(); inventoryScript = GetComponent <Inventory>(); inventoryItemManagerScript = InventoryCanvas.GetComponent <InventoryItemManager>(); LeaveForintOnTheGround = FMODUnity.RuntimeManager.CreateInstance("event:/Monologue/LeaveForintOnTheGround"); }
/// <summary> /// 全部合成完毕 /// </summary> public void CraftingAllOK() { Debug.Log("减少材料数或者销毁"); for (int i = 0; i < slotList.Count; i++) { //找到面板中的材料 Transform materialTransform = slotList[i].transform.Find("InventoryItem"); if (materialTransform != null) { InventoryItemManager iim = materialTransform.GetComponent <InventoryItemManager>(); //如果材料数本身就是1 if (iim.ItemNum == MinMaterialNum) { Debug.Log("材料销毁"); //销毁 Destroy(iim.gameObject); craftingCraft.NorCraft(); } else { Debug.Log("材料-1"); iim.ItemNum -= MinMaterialNum; } } } MinMaterialNum = 999999; Debug.Log("全部合成完毕更新最小材料数:" + MinMaterialNum); StartCoroutine("CraftingOKMaterialsBackInventory"); }
/// <summary> /// 单个合成点击 /// </summary> private void CraftClick() { SendMessageUpwards("CalcMinMaterial"); Debug.Log("单个合成"); GameObject go = Instantiate <GameObject>(newItem); //设置父物体 go.transform.SetParent(goodItem_Transform); //查找组件,预制体上面有了 InventoryItemManager iim = go.GetComponent <InventoryItemManager>(); //设置初始值 iim.SetItemValue(tempSpriteName, tempId, 1, 1); //重置位置 go.GetComponent <RectTransform>().localPosition = Vector3.zero; //重置大小 iim.ResetSpriteSize(go.GetComponent <RectTransform>(), 110, 110); //不在背包里 iim.IsInventory = false; //变为普通按钮 //NorCraft(); //结果槽显示数量 CraftResultNum(); Debug.Log("结果槽里面" + go.GetComponent <InventoryItemManager>().ToString()); //向C层发送消息 SendMessageUpwards("CraftingOK"); }
public void RemoveItem(string name) { //remove item from inventory, making that spot empty for (int i = 0; i < inventoryList1.Count; i++) { if (inventoryList1[i].name == name) { InventoryItem temp; temp.item = inventoryList1[i].item; temp.empty = true; temp.name = "Empty"; inventoryList1[i] = temp; InventoryItemManager itemManager = temp.item.GetComponent <InventoryItemManager>(); itemManager.SetText("Empty"); //TODO: change image displayed return; } } for (int i = 0; i < inventoryList2.Count; i++) { if (inventoryList2[i].name == name) { InventoryItem temp; temp.item = inventoryList2[i].item; temp.empty = true; temp.name = "Empty"; inventoryList2[i] = temp; InventoryItemManager itemManager = temp.item.GetComponent <InventoryItemManager>(); itemManager.SetText("Empty"); //TODO: change image displayed return; } } Debug.Log("Item not found"); }
/// <summary> /// 全部合成点击 /// </summary> private void CraftAllClick() { SendMessageUpwards("CalcMinMaterial"); Debug.Log("全部合成"); Debug.Log("最小数是:" + min); for (int i = 0; i < min; i++) { GameObject go = Instantiate <GameObject>(newItem); //设置父物体 go.transform.SetParent(goodItem_Transform); //查找组件,预制体上面有了 InventoryItemManager iim = go.GetComponent <InventoryItemManager>(); //设置初始值 iim.SetItemValue(tempSpriteName, tempId, 1, 1); //重置位置 go.GetComponent <RectTransform>().localPosition = Vector3.zero; //重置大小 iim.ResetSpriteSize(go.GetComponent <RectTransform>(), 110, 110); //不在背包里 iim.IsInventory = false; } //结果槽显示数量 CraftResultNum(); //向C层发送消息 SendMessageUpwards("CraftingAllOK"); }
public void AddItem(string name) { //add item to inventory in empty spot for (int i = 0; i < inventoryList1.Count; i++) { if (inventoryList1[i].empty) { InventoryItem temp; temp.item = inventoryList1[i].item; temp.empty = false; temp.name = name; inventoryList1[i] = temp; InventoryItemManager itemManager = temp.item.GetComponent <InventoryItemManager>(); itemManager.SetText(name); //TODO: change image displayed return; } } for (int i = 0; i < inventoryList2.Count; i++) { if (inventoryList2[i].empty) { InventoryItem temp; temp.item = inventoryList2[i].item; temp.empty = false; temp.name = name; inventoryList2[i] = temp; InventoryItemManager itemManager = temp.item.GetComponent <InventoryItemManager>(); itemManager.SetText(name); //TODO: change image displayed return; } } Debug.Log("Inventory full"); }
/// <summary> /// 创建所有的Item /// </summary> private void CreateAllItem() { List <InventoryItem> jsonItemList = inventoryPanelModel.GetJsonByName("InventoryJsonData"); for (int i = 0; i < jsonItemList.Count; i++) { GameObject item = Instantiate(inventoryPanelView.InventoryItem, slotList[i].transform); itemList.Add(item); InventoryItemManager manager = item.GetComponent <InventoryItemManager>(); manager.SetItemValue(jsonItemList[i].ItemName, jsonItemList[i].ItemId, jsonItemList[i].ItemNum, jsonItemList[i].ItemBar); } }
/// <summary> /// 更新Json文件数据 /// </summary> private void UpdataJsonData() { List <InventoryItem> iiList = new List <InventoryItem>(); for (int i = 0; i < slotList.Count; i++) { //当前背包槽里有物品 if (slotList[i].transform.Find("InventoryItem") != null) { InventoryItemManager iim = slotList[i].transform.Find("InventoryItem").GetComponent <InventoryItemManager>(); InventoryItem ii = new InventoryItem(iim.ItemId, iim.ItemName, iim.ItemNum, iim.ItemBar); iiList.Add(ii); } } JsonTools.UpdateJsonFile <InventoryItem>(iiList, "InventoryJsonData"); }
///// <summary> ///// 合成栏丢下背包栏中的ID相同的融合(明天要做的) 这个太垃圾了 ///// </summary> //private void IdFuse(List<InventoryItemManager> tempList) { // Debug.Log("合成栏丢下背包栏中的ID相同的融合"); // Debug.Log("tempList:" + tempList.Count); // int index = 1; // for (int i = 0; i < tempList.Count; i++) // { // //到底了(都判断完了)就返回 // if (index == tempList.Count) break; // //如果这一个的ID和下一个的id相同 // if (tempList[i].ItemId == tempList[index].ItemId) // { // //调用合成方法 // tempList[i].MergeMaterials(tempList[index]); // } // index++; // } //} /// <summary> /// 集合中的材料ID相同的融合到第一个 /// </summary> public void IdFuse() { int index = 1; for (int i = 0; i < slotList.Count; i++) { //获得引用 Transform itemTransform = slotList[i].transform.Find("InventoryItem"); //如果这个槽有东西,就从这个槽往后开始循环整个背包找到Id相同(且没有耐久值)的然后融合在一起 if (itemTransform != null) { Debug.Log(i); Debug.Log("第" + (i + 1) + "个槽有东西"); for (int j = index; j < slotList.Count; j++) { Debug.Log(j); Debug.Log("从第" + (j + 1) + "个槽开始查找。"); if (index == slotList.Count) { Debug.Log("判断到最后一个槽了"); break; } //后面的槽有材料 if (slotList[j].transform.Find("InventoryItem") != null) { //前面的槽的引用 InventoryItemManager currentIIM = slotList[i].transform.Find("InventoryItem").GetComponent <InventoryItemManager>(); //后面的槽的引用 InventoryItemManager backIIM = slotList[j].transform.Find("InventoryItem").GetComponent <InventoryItemManager>(); //如果后面的槽跟前面的槽材料ID是一样的且二者的耐久度都不等于1(就是没有耐久度) if (currentIIM.ItemId == backIIM.ItemId && currentIIM.ItemBar != 1 && backIIM.ItemBar != 1) { //调用合成方法,把后一位的数量累加到前一位身上 backIIM.MergeMaterials(currentIIM); Debug.Log("找到ID相同的了,进行合成,当前总数" + currentIIM.ItemNum); } } } } //循环累加 index++; } }
/// <summary> /// 拆分材料 /// </summary> private void BreakMaterials() { if (itemNum <= 1) { return; } if (isBreakIn) { return; } Debug.Log("拆分"); isBreakIn = true; isBreak = true; //复制一份出来 GameObject tempB = GameObject.Instantiate <GameObject>(gameObject); InventoryItemManager iim = tempB.GetComponent <InventoryItemManager>(); //获取复制出来的引用以防用户把分离的材质丢到不能接收的地方去 breakMaterials = tempB.GetComponent <InventoryItemManager>(); Debug.Log("复制出来的的isInventory标志位是:" + iim.IsInventory); //如果是在背包栏里拆分材料 if (IsInventory) { //把复制出来的物品的InCrafting设置为否 iim.InCrafting = false; iim.IsInventory = true; } //如果是在合成栏里拆分材料 if (inCrafting) { //把复制出来的物品的IsInventory设置为否,inCrafting设置为true iim.IsInventory = false; iim.InCrafting = true; } //赋值出来的东西设置父物体 tempB.transform.SetParent(selfParent); //计算拆分数量 int TotleNum = itemNum; int tempNumB = TotleNum / 2; int tempNumA = TotleNum - tempNumB; //重新赋值 iim.ItemNum = tempNumB; ItemNum = tempNumA; //重置位置 iim.m_RectTransform.localPosition = Vector3.zero; //重置ID iim.ItemId = ItemId; iim.IsDrag = false; //复制的物体重新接收射线 tempB.GetComponent <CanvasGroup>().blocksRaycasts = true; Debug.Log("复制出来的" + tempB.GetComponent <InventoryItemManager>().ToString()); Debug.Log("刚刚拖拽的" + ToString()); }
/// <summary> /// 合成材料 /// </summary> /// <param name="target">传过来一个目标~~就是不用销毁的那个</param> public void MergeMaterials(InventoryItemManager target) { target.ItemNum += ItemNum; Destroy(gameObject); }
/// <summary> /// 拖拽逻辑 /// </summary> /// <param name="target">落点</param> private void DragCtrl(GameObject placement) { //拖拽到UI区域 if (placement != null) { //输出拖拽物体落点的名字 Debug.Log("落点的名字" + placement.name); #region //落点在背包中的槽 if (placement.tag == "InventorySlot") { //如果是空槽就放进去 if (placement.transform.Find("InventoryItem") == null) { //设置父物体 m_RectTransform.SetParent(placement.transform); Debug.Log("父物体的名字" + placement.transform.name); //重设雪碧图 ResetSpriteSize(m_RectTransform, 85, 85); //在背包内 IsInventory = true; //不在合成面板里 InCrafting = false; isDrag = false; //是否正在拖拽中,用来判断是否可以拆分材料 isBreak = false; //是否是拆分的材料 以防拆分之后拖拽到不是能接收的次图标的区域然后消失。 isBreakIn = false; //是否正在拆分中,如果是不允许二次拆分 Debug.Log("拖拽到背包中的空槽" + ToString()); } //不是空槽就判断ID是否一样 else { //id一样(以防拖拽到边框不增加,因为边框和图标并不是一样大的.或者结果槽里的东西丢到背包栏里) if (placement.transform.Find("InventoryItem").GetComponent <InventoryItemManager>().ItemId == ItemId) { //没有耐久度。 if (placement.transform.Find("InventoryItem").GetComponent <InventoryItemManager>().itemBar == 0 && itemBar == 0) { MergeMaterials(placement.transform.Find("InventoryItem").GetComponent <InventoryItemManager>()); } //有耐久度。 else { //重新设置回父物体 m_RectTransform.SetParent(selfParent); } } //ID不一样 直接返回 else { ReturnPosition(); } } //(安全校验)如果目标的有大于1个子物体的时候,就重新设置回父物体 Debug.Log("这个背包槽有物体:" + placement.transform.GetComponentsInChildren <InventoryItemManager>().Length + "个"); //id一样而且原本就有一个物品就叠加起来 if (placement.transform.GetComponentsInChildren <InventoryItemManager>().Length > 1) //在孩子中查找会包括自己身上的脚本 { //重新设置回父物体 m_RectTransform.SetParent(selfParent); } } #endregion #region //落点在合成栏内 else if (placement.tag == "CraftingCenterSlot") { Debug.Log(placement.GetComponent <CraftingMapItemManager>().IsReceive); //如果拖到的位置是可以接收物品的 if (placement.GetComponent <CraftingMapItemManager>().IsReceive) { //如果拖拽的物品的ID和图谱槽中图片的id一样 if (ItemId == placement.GetComponent <CraftingMapItemManager>().ItemMapId) { //如果合成槽里面没有东西那么就可以放进去,如果有那就叠加 if (placement.transform.Find("InventoryItem") == null) { m_RectTransform.SetParent(placement.transform); ResetSpriteSize(m_RectTransform, 70, 60); //是否在背包内,用于判断是否可以互换位置 IsInventory = false; //是否在合成面板中拆分材料 InCrafting = true; //变成不是拆分的材料不然会出现漏洞 isBreak = false; isDrag = false; //是否正在拖拽中,用来判断是否可以拆分材料 isBreakIn = false; //是否正在拆分中,如果是不允许二次拆分 Debug.Log("添加进来的材料数是:" + gameObject.GetComponent <InventoryItemManager>().ItemNum); } else { MergeMaterials(placement.transform.Find("InventoryItem").GetComponent <InventoryItemManager>()); } } else { ReturnPosition(); } //(安全校验) 如果目标的有大于1个子物体的时候,就重新设置回父物体 Debug.Log("这个合成槽有物体:" + placement.transform.GetComponentsInChildren <InventoryItemManager>().Length + "个"); //id一样而且原本就有一个物品就叠加起来 if (placement.transform.GetComponentsInChildren <InventoryItemManager>().Length > 1) //在孩子中查找会包括自己身上的脚本 { m_RectTransform.SetParent(selfParent); } } //合成栏中不能接收材料的地方 else { ReturnPosition(); } } #endregion #region 物品互换与叠加 else if (placement.tag == "InventoryItem") { //获得目标位置的this InventoryItemManager iim = placement.GetComponent <InventoryItemManager>(); //目标位置 Transform targetTransform = placement.GetComponent <Transform>(); //如果ID一样 if (ItemId == iim.ItemId) { //如果都没有耐久值 if (itemBar == 0 && iim.itemBar == 0) { MergeMaterials(iim); } //其中一个有耐久值或者都有耐久值 else { if (IsInventory && iim.IsInventory) { //设置为目标父物体 m_RectTransform.SetParent(targetTransform.parent); //目标物体设置父物体 targetTransform.SetParent(selfParent); //还原目标位置 拖拽的位置在通用代码中执行 targetTransform.localPosition = Vector3.zero; Debug.Log("有耐久值的两个ID相同的物体互换位置"); } else { ReturnPosition(); } } } //ID不一样 else { //如果是材质分离(break)出来的 if (isBreak) { //把材料数累加到复制出来的那个然后销毁自身 MergeMaterials(breakMaterials); //isBreak标志位重新设置为false isBreak = false; } else { if (IsInventory && iim.IsInventory) { Debug.Log("拖拽中的IsInventory标志位是:" + IsInventory + ",需要互换位置的IsInventory标志位是" + placement.GetComponent <InventoryItemManager>().IsInventory); //设置为目标父物体 m_RectTransform.SetParent(targetTransform.parent); //目标物体设置父物体 targetTransform.SetParent(selfParent); //还原目标位置 拖拽的位置在通用代码中执行 targetTransform.localPosition = Vector3.zero; } else { //重新设置回父物体 m_RectTransform.SetParent(selfParent); } } } //(安全校验) 如果目标的有大于1个子物体的时候,就重新设置回父物体 Debug.Log("这个合成槽有物体:" + placement.transform.GetComponentsInChildren <InventoryItemManager>().Length + "个"); //id一样而且原本就有一个物品就叠加起来 if (placement.transform.GetComponentsInChildren <InventoryItemManager>().Length > 1) //在孩子中查找会包括自己身上的脚本 { m_RectTransform.SetParent(selfParent); } } #endregion #region//落点不是在三个背包槽,合成槽,物品上面 else { ReturnPosition(); Debug.Log("拖拽到的区域是UI地方但是这个UI不接受分离出来的材质"); } #endregion Debug.Log("撒手之后拖拽的" + ToString()); } //拖拽到了非ui区域 else { ReturnPosition(); } }
/// <summary> /// 接收合成面板返回来的材料放到背包里面(先看看背包里面有没有同id的,如果有就放回同id的地方,没有就找一个材料的地方放下) /// </summary> /// <param name="list">材料列表</param> public bool ReciveMaterial(List <GameObject> materialList) { int tempIndex = 0; for (int i = 0; i < materialList.Count; i++) { if (tempIndex == materialList.Count) { break; } for (int j = 0; j < slotList.Count; j++) { //当前背包槽里有物品且槽里面的东西没用耐久值就允许叠加 if (slotList[j].transform.Find("InventoryItem") != null) { if (materialList[tempIndex].GetComponent <InventoryItemManager>().ItemId == slotList[j].transform.Find("InventoryItem").GetComponent <InventoryItemManager>().ItemId) { //二重判断,结果槽里的东西丢回背包栏可能会有耐久度,因此不能叠加 if (materialList[tempIndex].GetComponent <InventoryItemManager>().ItemBar == 0 && slotList[j].transform.Find("InventoryItem").GetComponent <InventoryItemManager>().ItemBar == 0) { materialList[tempIndex].GetComponent <InventoryItemManager>().MergeMaterials(slotList[j].transform.Find("InventoryItem").GetComponent <InventoryItemManager>()); tempIndex++; Debug.Log("材料放回到背包的已经有次材料的地方了"); break; } //id相同的话有耐久值就什么也不做,等着出循环然后最后会在空槽里放这个东西。 } } //在空槽里放这个东西 else { materialList[tempIndex].transform.SetParent(slotList[j].transform); InventoryItemManager iim = materialList[tempIndex].GetComponent <InventoryItemManager>(); iim.IsInventory = true; iim.InCrafting = false; Debug.Log("材料放回到背包的空槽:" + iim.ToString()); iim.ResetSpriteSize(materialList[tempIndex].GetComponent <RectTransform>(), 85, 85); tempIndex++; break; } } } //如果当前材料都放回背包槽了,就返回true if (tempIndex == materialList.Count) { return(true); } //如果当前材料放回背包放不下,就返回false return(false); ////临时引用 (直接丢回来不加判断) //int tempIndex = 0; //for (int i = 0; i < slotList.Count; i++) //{ // Transform itemTransform = slotList[i].transform.Find("InventoryItem"); // //如果背包栏的位置是空的且当前索引小于传过来的材料列表的大小,因为大于或者等于了就等于说材料都放回背包里面了 // if (itemTransform == null && tempIndex < materialList.Count) // { // materialList[tempIndex].transform.SetParent(slotList[i].transform); // InventoryItemManager iim = materialList[tempIndex].GetComponent<InventoryItemManager>(); // iim.IsInventory = true; // iim.InCrafting = false; // Debug.Log("材料放回背包:" + iim.ToString()); // iim.ResetSpriteSize(materialList[tempIndex].GetComponent<RectTransform>(), 85, 85); // tempIndex++; // } //} //背包栏中的ID相同的融合 //IdFuse(slotList); }