Пример #1
0
    public Weapon Init()
    {
        currentAmmo = stat.ammo;
        shootPos    = transform.Find("ShootPos");
        muzzleFlash = transform.Find("MuzzleFlash").gameObject;
        rb          = GetComponent <Rigidbody2D>();
        // NOTE: For some stupid reason, setting the bodyType to Static rather than Kinematic still make it move for the first 2 frames when the game starts.
        rb.bodyType    = RigidbodyType2D.Kinematic;
        box            = gameObject.AddComponent <BoxCollider2D>();
        trigger        = GetComponent <TextboxTrigger>();
        trigger.weapon = this;

        return(this);
    }
Пример #2
0
    static bool ShowTextbox(TextboxTrigger trigger, DialogueBox textbox, GameObject textboxCanvas)
    {
        if (trigger)
        {
            Vector3 textboxPos = trigger.transform.position;
            switch (trigger.textboxType)
            {
            case TextboxType.None:
                return(false);    // NOTE: We never update the lastObj if the type is None

            case TextboxType.Dialogue:
            {
                textbox.ShowDialogue(null, "Press F to talk");
            } break;

            case TextboxType.Chest:
            {
                textbox.ShowDialogue(null, "Press F to open");
            } break;

            case TextboxType.Weapon:
            {
                WeaponStat stat = trigger.weapon.stat;
                System.Text.StringBuilder builder = new System.Text.StringBuilder();
                builder.Append("Damage: ").Append(stat.damage).Append("\nCritical: ").Append(stat.critDamage)
                .Append("\nFire rate:").Append(stat.fireRate).Append("\nPress F to change weapon");
                textbox.ShowDialogue("Name: " + stat.weaponName, builder.ToString());
                textboxPos = trigger.hitGroundPos;
            } break;
            }
            textboxCanvas.transform.position = textboxPos + (Vector3)trigger.textboxOffset;
        }

        textboxCanvas.SetActive(trigger);
        return(true);
    }
Пример #3
0
    // Update is called once per frame
    void Update()
    {
        if (displayHealthBar)
        {
            int health = (int)Mathf.Clamp(GameManager.player.health, 0, healthSlider.maxValue);
            healthSlider.value = health;
            healthText.text    = health.ToString();
        }

        if (displayMoneyCount)
        {
            moneyText.text = money.value.ToString();
        }

        if (displayWaveCount)
        {
            if (EnemySpawner.totalWaves > 0)
            {
                waveText.gameObject.SetActive(true);
                enemyText.gameObject.SetActive(true);
                waveText.text  = $"Waves: {EnemySpawner.waveCount}/{EnemySpawner.totalWaves}";
                enemyText.text = $"Number of enemies left: {Enemy.numberOfEnemiesAlive}";
            }
            else
            {
                waveText.gameObject.SetActive(false);
                enemyText.gameObject.SetActive(false);
            }
        }

        if (displayWeaponUI)
        {
            weaponImage.sprite = weaponController.inventory.current.stat.icon;
            ammoText.text      = $"{weaponController.inventory.current.currentAmmo}/{weaponController.inventory.current.stat.ammo}";
        }

        if (displayMinimap && GameInput.GetInput(InputType.Map))
        {
            minimap.gameObject.SetActive(!minimap.gameObject.activeSelf);
            map.gameObject.SetActive(!map.gameObject.activeSelf);
        }

        if (displayTextbox)
        {
            if (inDialogue)
            {
                if (GameInput.GetRawInput(InputType.NextDialogue))
                {
                    if (sentences.Count == 0)
                    {
                        inDialogue = false;
                        lastObj    = null; // This will make closestObj != lastObj and will show the "Press F to talk" textbox properly
                        textboxCanvas.SetActive(false);
                        GameInput.EnableAllInputs(true);
                        return;
                    }
                    textbox.ShowDialogue(null, sentences.Dequeue());
                }
                return;
            }

            closestObj = GameUtils.GetClosestCollider(weaponHolder.position, radius, overlapObjects, LayerMask.GetMask("HasTextbox"))?.gameObject;
            if (closestObj != lastObj)
            {
                if (ShowTextbox(trigger = closestObj?.GetComponent <TextboxTrigger>(), textbox, textboxCanvas))
                {
                    lastObj = closestObj;
                }
            }

            if (trigger && GameInput.GetInput(InputType.Interact))
            {
                trigger.trigger?.Invoke();

                switch (trigger.textboxType)
                {
                case TextboxType.Dialogue:
                {
                    Dialogue dialogue = trigger.GetRandomDialogue();
                    foreach (var sentence in dialogue.dialogues)
                    {
                        sentences.Enqueue(sentence);
                    }
                    inDialogue = true;
                    textbox.ShowDialogue(null, sentences.Dequeue());
                    GameInput.EnableAllInputs(false);
                } break;

                case TextboxType.Chest:
                {
                    int randomWeapon = Random.Range(0, trigger.chestData.inventory.items.Count);
                    trigger.chestData.inventory.SpawnAndDropWeapon(randomWeapon, trigger.transform.position, trigger.GetRandomDir());
                    closestObj.layer = 0;
                    Destroy(trigger);
                    textboxCanvas.SetActive(false);
                } break;

                case TextboxType.Weapon:
                {
                    inventory.SwapCurrent(new Vector2(weaponHolder.right.x, 1) * 10, trigger.weapon, weaponHolder);
                    textboxCanvas.SetActive(false);
                } break;
                }
            }
        }
    }