public void SetupWeaponIco() { UiManager.Instance.SetWeaponMainIcon(CurrWeapon.weaponUiIcon); if (WeaponBag.Count > 1) { UiManager.Instance.SetWeaponSecondIcon(WeaponBag.IndexOf(CurrWeapon) == 0 ? WeaponBag[1].weaponUiIcon : WeaponBag[0].weaponUiIcon); } }
/// <summary> /// 装备武器 /// 新武器将加入背包 /// </summary> /// <param name="wepRes">武器</param> /// <param name="newWeapon">是否为新武器</param> public void EquipWeapon(Weapon wepRes, bool newWeapon = true) { if (wepRes == null) { return; } if (newWeapon) { if (CurrWeapon != null) { UnEquipWeapon(WeaponBag.Count >= MaxWeapons); } var position = weaponHolder.position; CurrWeapon = Instantiate(wepRes, new Vector2(position.x, position.y) + wepRes.offsetNormal, Quaternion.identity, weaponHolder); CurrWeapon.weaponData = wepRes.weaponData ?? CurrWeapon.GetDefaultInfo(); // 加入背包 WeaponBag.Add(CurrWeapon); SetupWeaponIco(); } else { CurrWeapon = wepRes; wepRes.gameObject.SetActive(true); } CurrWeapon.owner = Health; CurrWeapon.zOrderComponent.targetSpriteRenderer = SpriteRenderer; if (CurrWeapon.weaponData is GunInfo info) { EventCenter.Broadcast(EventType.UpdateAmmo, info.clipCapacity, info.remainingBullet); } else { // TODO: 近身武器 } }
/// <summary> /// 切换至下个武器 /// </summary> public void NextWeapon() { if (CurrWeapon == null || WeaponBag.Count < 2) { return; } var index = WeaponBag.IndexOf(CurrWeapon); index++; if (index > WeaponBag.Count - 1) { index = 0; } UnEquipWeapon(false); EquipWeapon(WeaponBag[index], false); UiManager.Instance.SetWeaponMainIcon(WeaponBag[index].weaponUiIcon); UiManager.Instance.SetWeaponSecondIcon(WeaponBag[index + 1 > WeaponBag.Count - 1 ? 0 : index + 1] .weaponUiIcon); }
/// <summary> /// 取消装备武器, 同时在地上产生同武器的 weaponPickup /// <param name="remove">是否删除当前武器</param> /// </summary> public void UnEquipWeapon(bool remove) { if (CurrWeapon == null) { return; } if (remove) { var position = transform.position; var parent = GameObject.Find("LevelGrid").transform; var pickUp = Instantiate(CurrWeapon.weaponPickup, new Vector2(position.x, position.y) + Vector2.zero, Quaternion.Euler(Vector3.zero), parent); pickUp.wepRes.weaponData = CurrWeapon.weaponData; WeaponBag.Remove(CurrWeapon); Destroy(CurrWeapon.gameObject); } else { CurrWeapon.gameObject.SetActive(false); } }