internal bool ReceiveResourceRequest(MessageRequestResources msg) { Store s = getStoreForOwner(msg.Owner); if (s == null) { return(false); // does not have resources } // check that we have the resources in store bool hasResources = checkResourcesAvailable(msg, s); if (hasResources) { // remove resources foreach (ResourceQuantity resQ in msg.ResourcesRequested) { s.StoredResources[resQ.Type] -= resQ.Quantity; //_actorTextOutput.Tell("Store removed " + resQ.Type + " " + resQ.Quantity); } return(true); } else { return(false); } }
private void requestResources(MessageTick tick) { MessageRequestResources msg = new MessageRequestResources(_bp.Consumes, _model.Owner, tick.Tick); if (_planetC.ReceiveResourceRequest(msg)) { _model.TickForNextProduction = msg.TickSent + _bp.BaseTicks; _model.Producing = true; _model.ProduceNThenStop--; } else { _model.Producing = false; } }
private bool checkResourcesAvailable(MessageRequestResources msg, Store s) { bool hasResources = true; foreach (ResourceQuantity resQ in msg.ResourcesRequested) { if (s.StoredResources.ContainsKey(resQ.Type)) { UInt64 storedResQ = getStoredResourceQtyFromStore(s, resQ.Type); if (storedResQ < resQ.Quantity) { hasResources = false; break; } } else { hasResources = false; break; } } return(hasResources); }