예제 #1
0
    // update
    void Update()
    {
        // refresh equipment models all the time
        for (int i = 0; i < slots.Count; ++i)
        {
            RefreshLocation(i);
        }

        // left click to use weapon(s)
        if (Input.GetMouseButton(0) &&
            Cursor.lockState == CursorLockMode.Locked &&
            health.current > 0 &&
            movement.state != MoveState.CLIMBING &&
            !look.IsFreeLooking() &&
            !Utils.IsCursorOverUserInterface() &&
            Input.touchCount <= 1)
        {
            // find right hand item
            int index = GetEquipmentTypeIndex("RightHand");
            if (index != -1)
            {
                // use current weapon or hands
                TryUseItem(GetCurrentUsableItemOrHands(), index);
            }
        }
    }
예제 #2
0
 void LateUpdate()
 {
     if (look.IsFreeLooking())
     {
         return;
     }
     if (hotbar.GetCurrentUsableItemOrHands().shoulderLookAtWhileHolding)
     {
         AdjustShoulder(leftShoulder);
         AdjustShoulder(rightShoulder);
     }
 }
예제 #3
0
 void Update()
 {
     equipment.RefreshLocation(equipment.weaponMount, slots[selection]);
     if (isLocalPlayer)
     {
         if (Input.GetMouseButton(0) &&
             Cursor.lockState == CursorLockMode.Locked &&
             health.current > 0 &&
             movement.state != MoveState.CLIMBING &&
             reloading.ReloadTimeRemaining() == 0 &&
             !look.IsFreeLooking() &&
             !Utils.IsCursorOverUserInterface() &&
             Input.touchCount <= 1)
         {
             TryUseItem(GetCurrentUsableItemOrHands());
         }
     }
 }
예제 #4
0
    // after animations, IK, etc. using Update would cause race conditions where
    // the weapon twitches
    void LateUpdate()
    {
        // not while free looking
        if (look.IsFreeLooking())
        {
            return;
        }

        // make shoulders look at IK target if usable item requires it
        // (usually for ranged weapon aiming)
        // -> on the server too for weapon firing raycasts etc.
        // -> only ranged weapons because melee weapons like the axe might be
        //    carried on shoulder without any aiming being required
        // -> works for hands item too (see GetCurrentUsableItem())
        if (equipment.GetCurrentUsableItemOrHands().shoulderLookAtWhileHolding)
        {
            AdjustShoulder(leftShoulder);
            AdjustShoulder(rightShoulder);
        }
    }
예제 #5
0
    void Update()
    {
        GameObject player = Player.player;

        panel.SetActive(player != null); // hide while not in the game world
        if (!player)
        {
            return;
        }

        // get components
        Skillbar        skillbar  = player.GetComponent <Skillbar>();
        PlayerSkills    skills    = player.GetComponent <PlayerSkills>();
        PlayerInventory inventory = player.GetComponent <PlayerInventory>();
        PlayerEquipment equipment = player.GetComponent <PlayerEquipment>();
        PlayerLook      look      = player.GetComponent <PlayerLook>();

        // instantiate/destroy enough slots
        UIUtils.BalancePrefabs(slotPrefab.gameObject, skillbar.slots.Length, content);

        // refresh all
        for (int i = 0; i < skillbar.slots.Length; ++i)
        {
            UISkillbarSlot slot = content.GetChild(i).GetComponent <UISkillbarSlot>();
            slot.dragAndDropable.name = i.ToString(); // drag and drop index

            // hotkey overlay (without 'Alpha' etc.)
            string pretty = skillbar.slots[i].hotKey.ToString().Replace("Alpha", "");
            slot.hotkeyText.text = pretty;

            // skill, inventory item or equipment item?
            int skillIndex     = skills.GetSkillIndexByName(skillbar.slots[i].reference);
            int inventoryIndex = inventory.GetItemIndexByName(skillbar.slots[i].reference);
            int equipmentIndex = equipment.GetItemIndexByName(skillbar.slots[i].reference);
            if (skillIndex != -1)
            {
                Skill skill = skills.skills[skillIndex];

                bool canUse = skill.CanCast(player) && !look.IsFreeLooking();

                // hotkey pressed and not typing in any input right now?
                if (Input.GetKeyDown(skillbar.slots[i].hotKey) &&
                    !UIUtils.AnyInputActive() &&
                    canUse)
                {
                    skills.StartCast(skillIndex);
                }

                // refresh skill slot
                slot.button.interactable = canUse;
                slot.button.onClick.SetListener(() => {
                    skills.StartCast(skillIndex);
                });
                slot.tooltip.enabled          = true;
                slot.tooltip.text             = skill.ToolTip();
                slot.dragAndDropable.dragable = true;
                slot.image.color  = Color.white;
                slot.image.sprite = skill.image;
                float cooldown = skill.CooldownRemaining();
                slot.cooldownOverlay.SetActive(cooldown > 0);
                slot.cooldownText.text         = cooldown.ToString("F0");
                slot.cooldownCircle.fillAmount = skill.cooldown > 0 ? cooldown / skill.cooldown : 0;
                slot.amountOverlay.SetActive(false);
            }
            else if (inventoryIndex != -1)
            {
                ItemSlot itemSlot = inventory.slots[inventoryIndex];

                // hotkey pressed and not typing in any input right now?
                if (Input.GetKeyDown(skillbar.slots[i].hotKey) && !UIUtils.AnyInputActive())
                {
                    inventory.UseItem(inventoryIndex);
                }

                // refresh inventory slot
                slot.button.onClick.SetListener(() => {
                    inventory.UseItem(inventoryIndex);
                });
                slot.tooltip.enabled          = true;
                slot.tooltip.text             = itemSlot.ToolTip();
                slot.dragAndDropable.dragable = true;
                slot.image.color  = Color.white;
                slot.image.sprite = itemSlot.item.image;
                slot.cooldownOverlay.SetActive(false);
                slot.cooldownCircle.fillAmount = 0;
                slot.amountOverlay.SetActive(itemSlot.amount > 1);
                slot.amountText.text = itemSlot.amount.ToString();
            }
            else if (equipmentIndex != -1)
            {
                ItemSlot itemSlot = equipment.slots[equipmentIndex];

                // refresh equipment slot
                slot.button.onClick.RemoveAllListeners();
                slot.tooltip.enabled          = true;
                slot.tooltip.text             = itemSlot.ToolTip();
                slot.dragAndDropable.dragable = true;
                slot.image.color  = Color.white;
                slot.image.sprite = itemSlot.item.image;
                slot.cooldownOverlay.SetActive(false);
                slot.cooldownCircle.fillAmount = 0;
                slot.amountOverlay.SetActive(itemSlot.amount > 1);
                slot.amountText.text = itemSlot.amount.ToString();
            }
            else
            {
                // clear the outdated reference
                skillbar.slots[i].reference = "";

                // refresh empty slot
                slot.button.onClick.RemoveAllListeners();
                slot.tooltip.enabled          = false;
                slot.dragAndDropable.dragable = false;
                slot.image.color  = Color.clear;
                slot.image.sprite = null;
                slot.cooldownOverlay.SetActive(false);
                slot.cooldownCircle.fillAmount = 0;
                slot.amountOverlay.SetActive(false);
            }
        }
    }
예제 #6
0
    void Update()
    {
        GameObject player = Player.player;

        if (!player)
        {
            return;
        }

        PlayerSkills skills = player.GetComponent <PlayerSkills>();
        PlayerLook   look   = player.GetComponent <PlayerLook>();

        // instantiate/destroy enough slots
        // (we only care about non status skills)
        UIUtils.BalancePrefabs(slotPrefab.gameObject, skills.skills.Count, content);

        // refresh all
        for (int i = 0; i < skills.skills.Count; ++i)
        {
            UISkillSlot slot  = content.GetChild(i).GetComponent <UISkillSlot>();
            Skill       skill = skills.skills[i];

            bool isPassive = skill.data is PassiveSkill;

            // drag and drop name has to be the index in the real skill list,
            // not in the filtered list, otherwise drag and drop may fail
            slot.dragAndDropable.name = i.ToString();

            // click event
            slot.button.interactable = skill.level > 0 &&
                                       !isPassive &&
                                       skill.CanCast(player) && // checks mana, cooldown etc.
                                       !look.IsFreeLooking();
            int icopy = i;
            slot.button.onClick.SetListener(() => {
                // try use the skill or walk closer if needed
                skills.StartCast(icopy);
            });

            // set state
            slot.dragAndDropable.dragable = skill.level > 0 && !isPassive;

            // image
            if (skill.level > 0)
            {
                slot.image.color  = Color.white;
                slot.image.sprite = skill.image;
            }

            // description
            slot.descriptionText.text = skill.ToolTip(showRequirements: skill.level == 0);

            // learn / upgrade
            if (skill.level < skill.maxLevel && skills.CanUpgrade(skill))
            {
                slot.upgradeButton.gameObject.SetActive(true);
                slot.upgradeButton.GetComponentInChildren <Text>().text = skill.level == 0 ? "Learn" : "Upgrade";
                slot.upgradeButton.onClick.SetListener(() => { skills.Upgrade(icopy); });
            }
            else
            {
                slot.upgradeButton.gameObject.SetActive(false);
            }

            // cooldown overlay
            float cooldown = skill.CooldownRemaining();
            slot.cooldownOverlay.SetActive(skill.level > 0 && cooldown > 0);
            slot.cooldownText.text         = cooldown.ToString("F0");
            slot.cooldownCircle.fillAmount = skill.cooldown > 0 ? cooldown / skill.cooldown : 0;
        }

        // skill experience
        skillExperienceText.text = skills.skillExperience.ToString();
    }