Exemplo n.º 1
0
    public override void dialogueCompleted()
    {
        ForestGameController controller = FindObjectOfType <ForestGameController>();

        if (controller.fireTreesExtinguished >= controller.fireTreesTarget)
        {
            Destroy(gameObject);
        }
    }
Exemplo n.º 2
0
    public override void interact(NPC npc)
    {
        ForestGameController controller = FindObjectOfType <ForestGameController>();

        if (controller.fireTreesExtinguished >= controller.fireTreesTarget)
        {
            List <string> sentences = new List <string>();
            sentences.Add("You shall pass");
            FindObjectOfType <DialogueTrigger>().TriggerDialogue(npc, sentences);
        }
        else
        {
            List <string> sentences = new List <string>();
            sentences.Add("You shall not pass");
            FindObjectOfType <DialogueTrigger>().TriggerDialogue(npc, sentences);
        }
    }
Exemplo n.º 3
0
    // Start is called before the first frame update
    void Start()
    {
        animator          = GetComponent <Animator>();
        myRigidbody       = GetComponent <Rigidbody2D>();
        hp                = 100;
        onFire            = false;
        alive             = true;
        canMove           = true;
        selectedItemIndex = 0;
        //selectedItem = GameManager.getInstance().items[selectedItemIndex];

        controller = FindObjectOfType <ForestGameController>();

        if (controller)
        {
            updateItemView();
        }
    }
Exemplo n.º 4
0
    void updateKeyboard()
    {
        // update the direction the player is facing
        // this doesn't actually change how they're rendered, but we need this information later
        if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))
        {
            facingDirection = Direction.UP;
        }
        else if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))
        {
            facingDirection = Direction.DOWN;
        }
        else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.D))
        {
            facingDirection = Direction.LEFT;
        }
        else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.A))
        {
            facingDirection = Direction.RIGHT;
        }

        // if 'x' pressed
        if (Input.GetKeyDown(KeyCode.X) || Input.GetKeyDown(KeyCode.Space))
        {
            // calculate what square the player is facing
            Vector2 offset;
            switch (facingDirection)
            {
            case Direction.UP:
                offset = new Vector2(0f, 1f);
                break;

            case Direction.DOWN:
                offset = new Vector2(0f, -1f);
                break;

            case Direction.LEFT:
                offset = new Vector2(-1f, 0f);
                break;

            case Direction.RIGHT:
                offset = new Vector2(1f, 0f);
                break;

            default:
                offset = new Vector2(0f, 0f);
                break;
            }

            Vector2 targetPosition = myRigidbody.position + offset;

            // 1/2 interaction zone
            float delta = 0.75f;

            bool interactedWithNPC = false;

            if (controller != null)
            {
                // if the player is facing an npc, interact with it
                foreach (NPC npc in controller.getNPCs())
                {
                    if (npc == null)
                    {
                        continue;
                    }

                    Vector2 npcPosition = new Vector2(npc.gameObject.transform.position.x, npc.gameObject.transform.position.y);
                    if (npcPosition.x - delta < targetPosition.x && npcPosition.x + delta > targetPosition.x)
                    {
                        if (npcPosition.y - delta < targetPosition.y && npcPosition.y + delta > targetPosition.y)
                        {
                            if (canMove)
                            {
                                interactedWithNPC = true;
                                npc.talkTo();
                                break;
                            }
                        }
                    }
                }

                ForestGameController forest = controller as ForestGameController;
                if (forest)
                {
                    if (!interactedWithNPC)
                    {
                        if (selectedItem.name == "Water Bucket")
                        {
                            if (selectedItem.useOtherSprite)   // bucket is empty
                            {
                                GameObject fountain = GameObject.FindWithTag("Fountain");
                                float      distance = Mathf.Sqrt(Mathf.Pow(Mathf.Abs(fountain.transform.position.x - transform.position.x), 2.0f) + Mathf.Pow(Mathf.Abs(fountain.transform.position.y - transform.position.y), 2.0f));
                                if (distance <= 2.0f)
                                {
                                    selectedItem.useOtherSprite = false;
                                    updateItemView();
                                }
                            }
                        }

                        // if the player is facing a firetree that is on fire, extinguish it
                        foreach (FireTree fireTree in forest.fireTrees)
                        {
                            Vector2 fireTreePosition = new Vector2(fireTree.gameObject.transform.position.x, fireTree.gameObject.transform.position.y);
                            if (fireTreePosition.x - delta < targetPosition.x && fireTreePosition.x + delta > targetPosition.x)
                            {
                                if (fireTreePosition.y - delta < targetPosition.y && fireTreePosition.y + delta > targetPosition.y)
                                {
                                    if (fireTree.isOnFire())
                                    {
                                        if (selectedItem.name == "Water Bucket")
                                        {
                                            if (selectedItem.useOtherSprite)
                                            {
                                                FindObjectOfType <ToastMessage>().show("Your bucket is empty!");
                                            }
                                            else
                                            {
                                                animator.SetBool("acting", true);
                                                fireTree.putOut();
                                                forest.fireTreesExtinguished++;
                                                FindObjectOfType <AudioManager>().Play("PutOut");
                                                Invoke("resetActingAnimationState", 0.5f);
                                                forest.score -= 1;
                                                selectedItem.useOtherSprite = true;
                                                updateItemView();
                                            }
                                        }
                                        else
                                        {
                                            FindObjectOfType <ToastMessage>().show("That won't put out the fire.");
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (controller != null && selectedItem != null)
        {
            if (Input.GetKey(KeyCode.X))
            {
                switch (selectedItem.name)
                {
                case "Water Gun":
                    shootWaterball();
                    break;

                case "Gun":
                    shootBullet();
                    break;

                default:
                    break;
                }
            }
        }

        if (controller != null && selectedItem != null)
        {
            if (Input.GetKeyDown(KeyCode.Q))
            {
                changeItem(-1);
            }
            else if (Input.GetKeyDown(KeyCode.E))
            {
                changeItem(1);
            }
        }

        shielded = controller != null && selectedItem != null && selectedItem.name == "Shield" && (Input.GetKey(KeyCode.X) || Input.GetKey(KeyCode.Space));
        animator.SetBool("shielded", shielded);
    }