// 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); } } }
void LateUpdate() { if (look.IsFreeLooking()) { return; } if (hotbar.GetCurrentUsableItemOrHands().shoulderLookAtWhileHolding) { AdjustShoulder(leftShoulder); AdjustShoulder(rightShoulder); } }
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()); } } }
// 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); } }
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); } } }
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(); }