private static void ItemDestroyed(IItemBehaviour obj) { if (instance.itemInstances.Contains(obj.itemInstance)) { obj.itemInstance.Cleanup(); instance.itemInstances.Remove(obj.itemInstance); } }
static IItemInstance ItemInstanceFactory(GameObject gameObject, IItemBehaviour it, Item data) { //ItemInstance<T> itemInstance = new ItemInstance<T>(controller, item.data, gameObject); Type itemInstanceType = it.GetType(); Type classType = typeof(ItemInstance <>); Type[] typeParams = new Type[] { itemInstanceType }; Type constructedType = classType.MakeGenericType(itemInstanceType); IItemInstance itemInstance = Activator.CreateInstance(constructedType, it, data, gameObject) as IItemInstance; it.SetItemInstance(itemInstance); it.destroyed += ItemDestroyed; return(itemInstance); }
private static IItemInstance InstantiateGameObjectForItemInstance(IItemBehaviour iitem, GameObject gameObjectInstance, Item item) { gameObjectInstance.transform.position = Vector3.zero; gameObjectInstance.SetActive(false); IItemInstance itemInstance = null; if (iitem != default) { itemInstance = ItemInstanceFactory(gameObjectInstance, iitem, item); } else { DefaultItemInstanceBehaviour behaviour = gameObjectInstance.AddComponent <DefaultItemInstanceBehaviour>(); ItemInstance <DefaultItemInstanceBehaviour> component = new ItemInstance <DefaultItemInstanceBehaviour>(behaviour, item, gameObjectInstance); itemInstance = component; behaviour.SetItemInstance(itemInstance); behaviour.destroyed += ItemDestroyed; } instance.itemInstances.Add(itemInstance); return(itemInstance); }