public bool CheckInventory(InventoryController inventory) { if (inventory != null) { for (var i = 0; i < inventoryItems.Length; i++) { if (!inventory.HasItem(inventoryItems[i])) { OnDoesNotHaveItem.Invoke(); return(false); } } OnHasItem.Invoke(); return(true); } return(false); }
public bool CheckInventory(InventoryController inventory) //校对库存(带入库存控制器的一个“库存”) { if (inventory != null) //如果这个量不为空 { for (var i = 0; i < inventoryItems.Length; i++) //当i<库存项目的长度时 //var可以理解为匿名类型,它是一个声明变量的占位符。它主要用于在声明变量时,无法确定数据类型时使用 { if (!inventory.HasItem(inventoryItems[i])) //如果库存项目中的i对应的与控制器中的不同 { OnDoesNotHaveItem.Invoke(); //执行ODNHI return(false); //返回false } } OnHasItem.Invoke(); //如果一样,执行OHI return(true); //返回true } return(false); //如果这个量为空,返回false }
int ItemIndexFromController(InventoryController controller, string itemName) { if (controller.inventoryEvents.Length == 0) { return(-1); } if (string.IsNullOrEmpty(itemName)) { return(-2); } for (int i = 0; i < controller.inventoryEvents.Length; i++) { if (controller.inventoryEvents[i].key == itemName) { return(i); } } return(-3); }
public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(m_TransitioningGameObjectProp); EditorGUILayout.PropertyField(m_TransitionTypeProp); EditorGUI.indentLevel++; if ((TransitionPoint.TransitionType)m_TransitionTypeProp.enumValueIndex == TransitionPoint.TransitionType.SameScene) { EditorGUILayout.PropertyField(m_DestinationTransformProp); } else { EditorGUILayout.PropertyField(m_NewSceneNameProp); EditorGUILayout.PropertyField(m_TransitionDestinationTagProp); } EditorGUI.indentLevel--; EditorGUILayout.PropertyField(m_TransitionWhenProp); EditorGUILayout.PropertyField(m_RequiresInventoryCheckProp); if (m_RequiresInventoryCheckProp.boolValue) { EditorGUI.indentLevel++; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(m_InventoryControllerProp); if (EditorGUI.EndChangeCheck() || (m_InventoryControllerProp.objectReferenceValue != null && m_InventoryControllerItems.Length == 0)) { SetupInventoryItemGUI(); } if (m_InventoryControllerProp.objectReferenceValue != null) { InventoryController controller = m_InventoryControllerProp.objectReferenceValue as InventoryController; m_InventoryItemsProp.arraySize = EditorGUILayout.IntField("Inventory Items", m_InventoryItemsProp.arraySize); EditorGUI.indentLevel++; for (int i = 0; i < m_InventoryItemsProp.arraySize; i++) { SerializedProperty elementProp = m_InventoryItemsProp.GetArrayElementAtIndex(i); int itemIndex = ItemIndexFromController(controller, elementProp.stringValue); if (itemIndex == -1) { EditorGUILayout.LabelField("No items found in controller"); } else if (itemIndex == -2) { elementProp.stringValue = m_InventoryControllerItems[0].text; } else if (itemIndex == -3) { Debug.LogWarning("Previously listed item to check not found, resetting to item index 0"); elementProp.stringValue = m_InventoryControllerItems[0].text; } else { itemIndex = EditorGUILayout.Popup(new GUIContent("Item " + i), itemIndex, m_InventoryControllerItems); elementProp.stringValue = m_InventoryControllerItems[itemIndex].text; } } EditorGUI.indentLevel--; EditorGUILayout.PropertyField(m_OnHasItemProp); EditorGUILayout.PropertyField(m_OnDoesNotHaveItemProp); } else { for (int i = 0; i < m_InventoryItemsProp.arraySize; i++) { SerializedProperty elementProp = m_InventoryItemsProp.GetArrayElementAtIndex(i); elementProp.stringValue = ""; } } EditorGUI.indentLevel--; } serializedObject.ApplyModifiedProperties(); }