internal Request ProcessCryptoItem(ProcessTasks task, CryptoItem cryptoItem, Dictionary <string, object> properties) { Request request = new Request(); string editMetaDataURI = ""; switch (task) { case ProcessTasks.CREATE: string minValue = GraphQLClient.GraphQuery.GetEndPointData(Enjin.MeltValueURL + cryptoItem.reserve); if (properties.ContainsKey("MeltValue")) { decimal actual = (decimal)((float)properties["MeltValue"] * Mathf.Pow(10, 18)); if (actual < System.Convert.ToInt64(minValue)) { cryptoItem.meltValue = minValue; } else { cryptoItem.meltValue = actual.ToString("0"); } } else { cryptoItem.meltValue = minValue; } if (properties.ContainsKey("MetaDataURI")) { request = Enjin.CreateCryptoItem(cryptoItem, EnjinEditor.CurrentUserIdentity.id, ItemCreated => { HandleChainedRequestAction(request, ItemCreated, ProcessTasks.SETURI, cryptoItem, properties); }); } else { request = Enjin.CreateCryptoItem(cryptoItem, EnjinEditor.CurrentUserIdentity.id, ItemCreated => { HandleRequestAction(request); }); } return(request); case ProcessTasks.DELETE: break; case ProcessTasks.EDIT: if (cryptoItem.isCreator) { // handle name changes if (properties.ContainsKey("ItemName")) { string editItemName = (string)properties["ItemName"]; if (editItemName != cryptoItem.name) { Debug.Log("running name change"); string temp = cryptoItem.name; cryptoItem.name = editItemName; request = Enjin.UpdateCryptoItem(EnjinEditor.CurrentUserIdentity.id, cryptoItem, CryptoItemFieldType.NAME, ItemUpdated => { HandleRequestAction(request); }); cryptoItem.name = temp; } } // handle metadata URI changes if (properties.ContainsKey("MetaDataURI")) { editMetaDataURI = (string)properties["MetaDataURI"]; if (editMetaDataURI != cryptoItem.itemURI) { Debug.Log("running meta data URI update"); request = Enjin.SetCryptoItemURI(EnjinEditor.CurrentUserIdentity.id, cryptoItem, editMetaDataURI, URISet => { HandleRequestAction(request); }); } } return(request); } return(null); case ProcessTasks.MELT: int numToMelt = 1; if (properties.ContainsKey("NumToMelt")) { numToMelt = (int)properties["NumToMelt"]; } if (cryptoItem.nonFungible) { Debug.Log("running melt request for non-fungible CI"); request = Enjin.MeltTokens(EnjinEditor.CurrentUserIdentity.id, cryptoItem.token_id, cryptoItem.index, numToMelt, MeltItem => { HandleRequestAction(request); }); } else { Debug.Log("running melt request for fungible CI"); request = Enjin.MeltTokens(EnjinEditor.CurrentUserIdentity.id, cryptoItem.token_id, numToMelt, MeltItem => { HandleRequestAction(request); }); } return(request); case ProcessTasks.MINT: string[] addresses = new string[] { }; if (properties.ContainsKey("RecieverAddress")) { addresses = (string[])properties["RecieverAddress"]; } if (!cryptoItem.nonFungible) { int numToMint = 0; if (properties.ContainsKey("NumToMint")) { numToMint = (int)properties["NumToMint"]; } // Request should be pushed to event system to register the request by id, then the action callback should push to a method that fires off the seturi method once executed. request = Enjin.MintFungibleItem(EnjinEditor.CurrentUserIdentity.id, addresses, cryptoItem.token_id, numToMint, ItemMinted => { HandleRequestAction(request); }); } else { // Request should be pushed to event system to register the request by id, then the action callback should push to a method that fires off the seturi method once executed. request = Enjin.MintNonFungibleItem(EnjinEditor.CurrentUserIdentity.id, addresses, cryptoItem.token_id, ItemMinted => { HandleRequestAction(request); }); } return(request); case ProcessTasks.SETURI: // handle metadata URI changes if (properties.ContainsKey("MetaDataURI")) { editMetaDataURI = (string)properties["MetaDataURI"]; if (editMetaDataURI != cryptoItem.itemURI) { Debug.Log("running meta data URI update"); request = Enjin.SetCryptoItemURI(EnjinEditor.CurrentUserIdentity.id, cryptoItem, editMetaDataURI, URISet => { HandleRequestAction(request); }); } } return(request); default: break; } return(null); }