public void CreateDrinksAutomaticallyButWithLimit()
        {
            D.onDLog += Console.WriteLine;

            Character lisa = _world.tingRunner.CreateTing <Character>("Lisa", new WorldCoordinate(TEST_ROOM, IntPoint.Zero));

            WorldTestHelper.UpdateWorld(_world, 3f);

            Drink lastDrink = null;

            for (int i = 0; i < 100; i++)
            {
                lastDrink = Behaviour_Sell.CreateTingToSell(lisa, _world.tingRunner, "WellspringSoda", _world.settings) as Drink;
            }

            WorldTestHelper.UpdateWorld(_world, 3f);

            Assert.AreEqual(21, _world.tingRunner.GetTingsOfType <Drink>().Length);

            lisa.handItem = lastDrink;

            for (int i = 0; i < 100; i++)
            {
                Behaviour_Sell.CreateTingToSell(lisa, _world.tingRunner, "WellspringSoda", _world.settings);
            }

            WorldTestHelper.UpdateWorld(_world, 3f);

            Assert.AreEqual(25, _world.tingRunner.GetTingsOfType <Drink>().Length);            // creates one extra drink each time the one Lisa holds is found when trying to create _sale_ drink
        }
Esempio n. 2
0
        public void API_CreateDrink(string type, float liquidAmount)
        {
            string prefabName  = "";
            string liquidType  = "";
            string programName = "";

            switch (type.ToLower())
            {
            case "coke":
                prefabName  = "Coke";
                liquidType  = "coke";
                programName = "Coke";
                break;

            case "beer":
                prefabName  = "Beer";
                liquidType  = "beer";
                programName = "FolkBeer";
                break;

            case "coffee":
                prefabName  = "CoffeeCup_CoffeeCup";
                liquidType  = "coffee";
                programName = "CafeCoffee";
                break;

            case "margherita":
                prefabName  = "Margherita_Margherita";
                liquidType  = "drink";
                programName = "AlcoholicDrink";
                break;

            case "drymartini":
                prefabName  = "DryMartini_DryMartini";
                liquidType  = "drink";
                programName = "AlcoholicDrink";
                break;

            case "bloodymary":
                prefabName  = "BloodyMary_BloodyMary";
                liquidType  = "drink";
                programName = "AlcoholicDrink";
                break;

            case "longislandicetea":
                prefabName  = "LongIslandIceTea_LongIslandIceTea";
                liquidType  = "drink";
                programName = "AlcoholicDrink";
                break;

            default:
                throw new Error("Can't create drink of type " + type);
            }

            int count = Behaviour_Sell.CountNrOfTingsWithPrefab(_tingRunner, prefabName);

            string safeName = prefabName + "_Drink_dispensed_" + count;
            var    newItem  = _tingRunner.GetTingUnsafe(safeName);

            if (newItem != null)
            {
                if (newItem.room.name == "Sebastian_inventory" || newItem.isBeingHeld)
                {
                    D.Log("VENDING MACHINE: There's already a " + safeName + " but a character is holding it (or avatar has it)");
                    for (int i = 0; i < 9999; i++)
                    {
                        string newName = safeName + "_safe_" + i;
                        var    item    = _tingRunner.GetTingUnsafe(newName) as MimanTing;
                        if (item == null)
                        {
                            // free name!
                            safeName = newName;
                            break;
                        }
                    }
                }
                else
                {
                    D.Log("VENDING MACHINE: There's already a " + safeName + ", will use that one instead!");
                    var foundDrink = newItem as Drink;
                    foundDrink.position          = position;
                    foundDrink.masterProgramName = programName;
                    foundDrink.liquidType        = liquidType;
                    foundDrink.amount            = liquidAmount;
                    return;
                }
            }

            var newDrink = _tingRunner.CreateTingAfterUpdate <Drink>(safeName, position, GameTypes.Direction.DOWN, prefabName);

            newDrink.masterProgramName = programName;
            newDrink.liquidType        = liquidType;
            newDrink.amount            = liquidAmount;
            //newDrink.PrepareForBeingHacked (); // MAKES A NEW PROGRAM GET GENERATED WHICH CRASHES THE PROGRAM RUNNER SINCE THE COLLECTION IS MODIFIED WHILE RUNNING
        }