示例#1
0
        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));
 });
示例#3
0
 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)
 {
 }
示例#4
0
    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));
        }
示例#6
0
        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);
        }
示例#7
0
        /// <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);
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
        /// <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)));
 }