Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            lastDown = Time.time;
        }

        if (Input.GetMouseButtonUp(0) && Time.time - lastDown < clickDelay)
        {
            Shop shop = mover.GetShop();

            IntPair shopCoords = shop.worldToShopCoordinates(Camera.main.ScreenToWorldPoint(Input.mousePosition));

            if (shop.IsPositionInGrid(shopCoords))
            {
                if (movingCoroutine != null)
                {
                    StopCoroutine(movingCoroutine);
                }

                movingCoroutine = mover.MoveToPosition(shopCoords, MoveCallback);
                StartCoroutine(movingCoroutine);
            }
        }
    }
    private IEnumerator CustomerGeneralBehaviour()
    {
        Game game = Game.current;

        if (game == null)
        {
            Debug.Log("Game.current is null; Customer won't do anything.");
            yield break;
        }

        for (int i = 0; i < Random.Range(1, 4); i++)
        {
            yield return(myShopMover.MoveToPosition(myCharacter.WhereToGo()));

            yield return(new WaitForSeconds(1 + Random.value * 2));
        }
    }
Exemple #3
0
    // Update is called once per frame
    void Update()
    {
        if (!isMoving && Time.time > nextMoveTime)
        {
            Shop shop = shopMover.GetShop();

            int numFurniture = shop.GetFurnitureAmount();

            if (numFurniture > 0)
            {
                int       idx       = Random.Range(0, numFurniture);
                Furniture furniture = shop.GetFurnitureAtIndex(idx);

                isMoving = true;
                StartCoroutine(shopMover.MoveToPosition(furniture.GetStandingPosition(),
                                                        (s) => {
                    isMoving     = false;
                    nextMoveTime = Time.time + 2 + Random.value * 3;
                }));
            }
        }
    }
    private IEnumerator BeginAI()
    {
        while (true)
        {
            switch (Random.Range(0, 2))
            {
            case 0:
                // Offer a trade.
                var info = MetaInformation.Instance();

                if (info != null)
                {
                    int numMappings = info.GetNumberOfRegisteredItems();

                    if (numMappings != 0)
                    {
                        ItemType offType = info.GetItemTypeMappings().ElementAt(Random.Range(0, numMappings)).Value;
                        ItemType reqType = info.GetItemTypeMappings().ElementAt(Random.Range(0, numMappings)).Value;

                        int numOfferedItem = Random.Range(1, 10);
                        int numRequestItem = Random.Range(1, 10);

                        TradingOffer offer = TradingOffer.MakeOffer(
                            new ItemStack(offType, numOfferedItem),
                            new ItemStack(reqType, numRequestItem));

                        bool didSucceed = false;
                        yield return(TradingDialogUtility.OfferTrade(offer, (result) => {
                            didSucceed = result == TradingResult.SUCCEED;
                        }));


                        if (didSucceed)
                        {
                            NotificationSystem.ShowNotificationIfPossible("Trade succeeded.");
                        }
                        else
                        {
                            NotificationSystem.ShowNotificationIfPossible("Trade failed.");
                        }


                        break;
                    }
                    else
                    {
                        goto case 1;
                    }
                }
                else
                {
                    Debug.Log("No MetaInformation instance found. AI will not make a random trade offer.");
                    goto case 1;
                }


            case 1:
                // Move to a random piece of furniture in the shop.
                Shop shop = myShopMover.GetShop();

                Furniture target = shop.GetFurnitureAtIndex(Random.Range(0, shop.GetFurnitureAmount()));

                yield return(myShopMover.MoveToPosition(target.GetStandingPosition(), (succ) => {}));

                break;
            }
        }
    }
    private IEnumerator BasicCustomerRoutine()
    {
        Game game = Game.current;

        if (game == null)
        {
            Debug.Log("Game.current is null; Customer won't do anything.");
            yield break;
        }


        // Walk to a random furniture.
        bool succeededMovingIntoShop = false;

        while (!succeededMovingIntoShop)
        {
            var allFurniture = game.furnitureInShop;

            if (allFurniture.Count > 0)
            {
                IntPair randomFurniturePosition = allFurniture [Random.Range(0, allFurniture.Count)].furnitureRef.GetStandingPosition();
                yield return(myShopMover.MoveToPosition(randomFurniturePosition, (suc) => succeededMovingIntoShop = suc));
            }
            else
            {
                yield return(myShopMover.MoveToPosition(new IntPair(0, 0)));

                succeededMovingIntoShop = true;
            }

            if (!succeededMovingIntoShop)
            {
                yield return(new WaitForSeconds(0.1f));                 // to prevent rapid looping
            }
        }

        // Pop up a trading dialog.
        var possibleOffers = character.possibleTradingOffers.Where((off) => Game.current.inventory.HasItem(off.Request.ItemType)).ToList();

        if (possibleOffers.Count <= 0)
        {
            Debug.Log("No offers possible.");
        }
        else
        {
            TradingOffer trade = possibleOffers [Random.Range(0, possibleOffers.Count)];

            string myTradingText;
            if (character.formattedTradingStrings.Length > 0)
            {
                var strs = character.formattedTradingStrings;
                var idx  = Random.Range(0, strs.Length);
                myTradingText = string.Format(strs [idx], trade.Offer.ItemType.Name, trade.Request.ItemType.Name,
                                              trade.Offer.Count, trade.Request.Count);
            }
            else
            {
                myTradingText = "UNIMPLEMENTED TRADING TEXT";
            }

            yield return(TradingDialogUtility.OfferTrade(trade, myTradingText, (result) => {
                switch (result)
                {
                case TradingResult.SUCCEED:
                    NotificationSystem.ShowNotificationIfPossible(string.Format("Trade succeeded! You got {0} {1}.", trade.Offer.Count, trade.Offer.ItemType.Name));
                    break;

                case TradingResult.FAILACCEPT:
                    NotificationSystem.ShowNotificationIfPossible(string.Format("Couldn't do the trade. You didn't have enough {0}", trade.Request.ItemType.Name));
                    break;

                case TradingResult.FAILDENY:
                    NotificationSystem.ShowNotificationIfPossible("Declined trade.");
                    break;
                }
            }));
        }


        // Return to start position.
        yield return(myShopMover.MoveToPosition(startPosition, (suc) => {}));

        // Despawn self!
        Destroy(gameObject);
    }