/// <summary> /// Устанавливает необходимые пункты меню для указанного предмета /// </summary> /// <param name="menu">Контекстное меню, в котором проводится установка</param> /// <param name="item">Предмет, относительно которого устанавливаются настройки</param> public void SetupPopupMenu(InventoryPopupMenu menu, Item item) { menu.setSelectedItem(item); // устанавливаем контекстному меню ссылку на выбранный предмет menu.useItem.setEnabled(item.toGameObject().GetComponent<DynamicObject>() as IUsedType !=null); menu.dropAllItems.setEnabled(item.getMaxCount() > 1 && item.getCount() > 1); }
/// <summary> /// Создаёт список свойств, которые даёт предмет /// </summary> /// <param name="item">Предмет, свойства которого анализируются</param> /// <returns>Возвращает список свойств</returns> public List<PropertyItem> createInformationItems(Item item) { if (item == null || item.toGameObject() == null) return null; DynamicObject dynamicObject = item.toGameObject().GetComponent<DynamicObject>(); #if UNITY_EDITOR if (dynamicObject == null) { Debug.LogError("Предмет "+item.description.dName+" не имеет инициализированного gameObject!"); } #endif List<PropertyItem> result = new List<PropertyItem>(); checkStates(dynamicObject, ref result); checkTypes(dynamicObject, ref result); return result; }
/// <summary> /// Создаёт экземпляр объекта впереди камеры персонажа из предмета /// </summary> /// <param name="item">Предмет, экземпляр объекта которого надо создать</param> public void CreateNewInstance(Item item) { GameObject obj = GameObject.Instantiate<GameObject>(item.toGameObject()); obj.transform.position = mainCamera.transform.position + (mainCamera.transform.forward * 1.2f); obj.transform.rotation = Quaternion.Euler(UnityEngine.Random.Range(0, 360), UnityEngine.Random.Range(0, 360), UnityEngine.Random.Range(0, 360)); Rigidbody rigidBody = obj.GetComponent<Rigidbody>(); if (rigidBody == null) return; Ray ray = Camera.main.ScreenPointToRay(GameConfig.CenterScreen); rigidBody.AddForce(ray.direction * 5f); }