private ResourceTradePanel CreateSingleResourceTrade(ResourceTrade <ResourceType> trade) { return(ResourceTradePanel.InstantiateOnObject( singleResourceTradePrefab, singleResourceTradeContainer, trade, (int)maxTradeAmount)); }
public static ResourceTradePanel InstantiateOnObject( GameObject selfPrefab, GameObject container, ResourceTrade <ResourceType> trade, int maxTradeAmount) { var newTradeNode = GameObject.Instantiate(selfPrefab, container.transform); var selfScript = newTradeNode.GetComponent <ResourceTradePanel>(); selfScript.trade = trade; selfScript.maxTradeAmount = maxTradeAmount; return(selfScript); }
public Task <TraderState> HandleState(TraderBehavior data) { TradeExecuteStateData myState = data.stateData[stateHandle]; if (myState.remainingTrades.Count == 0) { return(Task.FromResult(TraderState.TradeTransit)); } if ((myState.lastExchangeTime + timeDelay) < Time.time) { myState.lastExchangeTime = Time.time; var trade = myState.remainingTrades[0]; var targetInventory = data.currentTradeNodeTarget?.target.tradeInventory; if (targetInventory == null) { //this is a bad state: we're trying to conduct some trade but our trade target has dissapeared // this can happen if the trade routes are cleared through the UI in teh middle of our trading // Abort!! we'll have to step back to the beginning and re-evaluate our opportunities return(Task.FromResult(TraderState.Initial)); } var option = data.inventory.TransferResourceInto(trade.type, targetInventory, Mathf.Sign(trade.amount)); var remainingToTrade = trade.amount - option.info; option.Execute(); if (Mathf.Abs(option.info) <= 1E-05 || Mathf.Abs(remainingToTrade) <= 1E-05) { myState.remainingTrades.RemoveAt(0); } else { var newTrade = new ResourceTrade <ResourceType> { amount = remainingToTrade, type = trade.type }; myState.remainingTrades[0] = newTrade; } } return(Task.FromResult(TraderState.TradeExecute)); }