public void TestGetAllAvailableContents() { var w = MakePlainComponent <Warehouse>(); var resourceContents = new ResourceProfile[] { new ResourceProfile(ResourceKind.Fish, 2), new ResourceProfile(ResourceKind.Gold, 2), }; w.SetContents(resourceContents); var availables = w.GetAllAvailableContents(); CollectionAssert.AreEquivalent( new Dictionary <ResourceKind, float>() { { ResourceKind.Fish, 2 }, { ResourceKind.Gold, 2 }, }, availables); w.ReserveContents(dummyObject, ResourceKind.Fish, 2); w.ReserveContents(dummyObject, ResourceKind.Gold, 1); availables = w.GetAllAvailableContents(); Assert.AreEqual(0, availables[ResourceKind.Fish]); Assert.AreEqual(1, availables[ResourceKind.Gold]); }
/// <summary> /// Creates profiles for Starcounter tables /// </summary> public static ResourceProfile Profile(IEntityResource <T> resource) => ResourceProfile.Make(resource, rows => { var resourceSQLName = typeof(T).RESTarTypeName(); var scColumns = Db.SQL <Column>(ColumnByTable, resourceSQLName).Select(c => c.Name).ToList(); var columns = resource.Members.Values.Where(p => scColumns.Contains(p.Name)).ToList(); return(rows.Sum(e => columns.Sum(p => p.ByteCount(e)) + 16)); });
public PersistenceBlahMemory( ICacheManager <Guid, Blah> cacheManager = null, ResourceProfile profile = null) : base( (k) => k.ContentId , (s) => new Guid(s) , versionPolicy: new VersionPolicy <Blah>((e) => e.VersionId.ToString("N"), (e) => e.VersionId = Guid.NewGuid()) //, referenceMaker: MondayMorningBluesHelper.ToReferences , cacheManager: cacheManager , resourceProfile: profile) { }
bool MatchesFilter(ResourceProfile item) { bool exclude = false; if (namePattern != null && namePattern != "") { exclude = !item.ResourceName.ToLower().Contains(namePattern.ToLower()); } if (!exclude && classPattern != null) { exclude = !classPattern.IsAssignableFrom(item.GetType()); } return(!exclude); }
public void TestFoodValue() { var network = MakePlainComponent <LogisticsNetwork>(); ResourceProfile[] resources; resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Meat, 1), new ResourceProfile(ResourceKind.Vegetables, 1), new ResourceProfile(ResourceKind.Fish, 1), }; Assert.AreEqual(6.0f, network.CalcFoodValue(resources)); resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Meat, 2.0), new ResourceProfile(ResourceKind.Vegetables, 1), new ResourceProfile(ResourceKind.Fish, 1), }; Assert.AreEqual(7.0f, network.CalcFoodValue(resources)); resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Meat, 0.5), new ResourceProfile(ResourceKind.Vegetables, 0.75), new ResourceProfile(ResourceKind.Fish, 1), }; Assert.AreEqual(4.0f, network.CalcFoodValue(resources)); resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Vegetables, 2.0), new ResourceProfile(ResourceKind.Fish, 1), }; Assert.AreEqual(4.0f, network.CalcFoodValue(resources)); resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Meat, 1), new ResourceProfile(ResourceKind.Fish, 0.5), }; Assert.AreEqual(2.0f, network.CalcFoodValue(resources)); resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Meat, 1.5), }; Assert.AreEqual(1.5f, network.CalcFoodValue(resources)); resources = new ResourceProfile[] { new ResourceProfile(ResourceKind.Vegetables, 1), }; Assert.AreEqual(1, network.CalcFoodValue(resources)); }
public void SetDown() { preserved = false; var neoObject = GetComponent <NeolithicObject>(); neoObject.snapToGround = true; neoObject.selectable = true; neoObject.SnapToGround(); transform.parent = transform.parent ? transform.parent.parent : null; GameController.Factory.AddComponent <LogisticsNode>(gameObject); Warehouse w = GameController.Factory.AddComponent <Warehouse>(gameObject); ResourceProfile[] rp = new ResourceProfile[] { new ResourceProfile(resourceKind, amount) }; w.SetLimits(rp); w.SetContents(rp); }
/// <summary> /// Attempts to withdraw the given resource profile from any warehouse. /// Note that on failure to withdraw the full amount it is possible that partial widthrawals may /// happen and then those resources will be lost permanently. This function should only be called /// when total available resources have already been verified. /// </summary> /// <param name="rp"></param> /// <returns>True on success, false on failure</returns> public bool WithdrawFromAnyWarehouse(ResourceProfile rp) { var warehouses = FindObjectsOfType <Warehouse>(); foreach (var w in warehouses) { double avail = w.GetAvailableContents(rp.ResourceKind); double amount = (rp.Amount < avail ? rp.Amount : avail); if (amount > 0) { w.WithdrawContents(rp.ResourceKind, amount); rp.Amount -= amount; } if (rp.Amount <= 0) { return(true); } } return(false); }
public void TestContentsMissingFromLimits2() { MakeTestComponent <GameController>(); Warehouse w = MakeTestComponent <Warehouse>(); var resourceLimits = new ResourceProfile[] { new ResourceProfile(ResourceKind.Wood, 2), new ResourceProfile(ResourceKind.Fish, 2), new ResourceProfile(ResourceKind.Gold, 2), new ResourceProfile(ResourceKind.Stone, 2), }; var resourceContents = new ResourceProfile[] { new ResourceProfile(ResourceKind.Fish, 2), new ResourceProfile(ResourceKind.Gold, 2), }; w.SetContents(resourceContents); w.SetLimits(resourceLimits); Assert.False(w.ReserveStorage(dummyObject, ResourceKind.Stone, 3)); Assert.IsNull(dummyObject.GetComponent <StorageReservation>()); Assert.True(w.ReserveStorage(dummyObject, ResourceKind.Stone, 1)); var res = dummyObject.GetComponent <StorageReservation>(); Assert.IsNotNull(res); Assert.True(res.Ready); w.DepositReservation(res); Assert.True(res.Released); Assert.AreEqual(1, w.GetAvailableContents(ResourceKind.Stone)); Assert.False(w.ReserveContents(dummyObject, ResourceKind.Wood, 1)); Assert.IsNull(dummyObject.GetComponent <ResourceReservation>()); Assert.True(w.ReserveContents(dummyObject, ResourceKind.Stone, 1)); var res2 = dummyObject.GetComponent <ResourceReservation>(); Assert.IsNotNull(res2); w.WithdrawReservation(res2); Assert.True(res2.Released); }
public void StartTraceSetup() { var resourceContainer = CreateResourceContainer(); var tracker = resourceContainer.SharedServices.GetService <IResourceTracker>(); Assert.IsNotNull(tracker); resourceContainer.Start(); var profile1 = new ResourceProfile("v1"); var profile2 = (ResourceProfile)"v2"; var consumer1 = tracker.RegisterConsumer("fredo1", profile1); var consumer2 = tracker.RegisterConsumer("fredo2", profile2); var id = consumer1.Start("", Guid.NewGuid()); consumer1.End(id, Environment.TickCount - 100, ResourceRequestResult.Success); var tracker1 = tracker.RegisterRequestRateLimiter("freda", profile1, profile2); }
/// <summary> /// Starts the construction process, disabling and caching some key components /// </summary> public void StartConstruction() { if (instabuild) { foreach (var r in resourceRequirements) { var resourceType = (ResourceKind)Enum.Parse(typeof(ResourceKind), r.name); var rp = new ResourceProfile(resourceType, r.amount); if (!GameController.WithdrawFromAnyWarehouse(rp)) { throw new InvalidOperationException("Failed to build building, unable to withdraw " + r.name); } } FinishContruction(); } else { NeolithicObject no = GetComponent <NeolithicObject>(); no.actionProfile = (ActionProfile)Resources.Load("ActionProfiles/Constructable"); GhostNeutral(); } }
/// <summary> /// Creates profiles for DDictionary tables /// </summary> public static ResourceProfile Profile(IEntityResource <T> resource) { return(ResourceProfile.Make(resource, rows => rows.Sum(row => row.KeyValuePairs.Sum(kvp => kvp.ByteCount) + 16))); }