I’m making a switching weapons script but I can’t seem to find anywhere where it tells me how to do this or what I’m doing wrong. It would be a huge help if someone could look at my code and tell me what I’m doing wrong. Sorry if it’s messy ive been kinda rushing. Thanks!
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class WeaponManager : NetworkBehaviour
{
private string WeaponLayerName = "WeaponLayer";
public int[] equippedWeapons;
[SerializeField]
private Transform weaponHolder;
[SerializeField]
private PlayerWeapon primaryWeapon;
[SerializeField]
private PlayerWeapon secondaryWeapon;
[SerializeField]
private PlayerWeapon specialWeapon;
[SerializeField]
private PlayerWeapon MeleeWeapon;
[SyncVar (hook = "SwitchWeaponCallback")]
private int currentWeaponIndex = 0;
private PlayerWeapon currentWeapon;
private WeaponGraphics currentGraphics;
public bool isSwitchingWeapon = false;
bool canSwitchAgain = true;
private PlayerWeapon weaponToLoad;
private bool firstEquip = true;
// Use this for initialization
void Start()
{
//EquipWeapon(equippedWeapons[0]);
isSwitchingWeapon = false;
}
public PlayerWeapon GetCurrentWeapon()
{
return currentWeapon;
}
public WeaponGraphics GetCurrentGraphics()
{
return currentGraphics;
}
public override void OnStartLocalPlayer()
{
EquipWeaponStart(currentWeaponIndex);
}
public override void OnStartServer()
{
base.OnStartServer();
firstEquip = true;
currentWeaponIndex = equippedWeapons[0];
}
public void SwitchWeaponCallback(int _weapon)
{
print("Changed");
currentWeaponIndex = _weapon;
EquipWeapon(currentWeaponIndex);
}
public override void OnStartClient()
{
EquipWeaponStart(equippedWeapons[0]);
}
void EquipWeaponStart(int _weapon)
{
if (_weapon == currentWeaponIndex) return;
if (firstEquip)
firstEquip = false;
gameObject.GetComponent<PlayerShoot>().aiming = false;
StopCoroutine(gameObject.GetComponent<PlayerShoot>().Reload());
StartCoroutine(DrawTimer(_weapon));
}
void EquipWeapon(int _weapon)
{
if (_weapon == currentWeaponIndex) return;
print("switch" + _weapon);
// CmdEquipWeapon(_weapon);
DoEquipWeapon(_weapon);
}
IEnumerator DrawTimer(int _weapon)
{
while (gameObject.GetComponent<PlayerShoot>().fireRateTimer > 0)
{
yield return null;
}
while (isSwitchingWeapon == true)
{
yield return null;
}
canSwitchAgain = false;
isSwitchingWeapon = true;
gameObject.GetComponent<Player>().SetAnimationParameter("IsSwitchingWeapon", 3, 0, 0, true, true);
if (currentWeapon != null)
yield return new WaitForSeconds(currentWeapon.putAwayTime);
EquipWeapon(_weapon);
canSwitchAgain = true;
if (currentWeapon != null)
yield return new WaitForSeconds(currentWeapon.drawTime);
gameObject.GetComponent<Player>().SetAnimationParameter("IsSwitchingWeapon", 3, 0, 0, false, true);
isSwitchingWeapon = false;
}
void DoEquipWeapon(int _weapon)
{
currentWeaponIndex = _weapon;
if (currentWeapon != null)
{
currentWeapon.graphics.SetActive(false);
}
switch (_weapon)
{
case 0:
// no weapon
currentWeapon = null;
break;
case 1:
// primary
currentWeapon = primaryWeapon;
break;
case 2:
// secondary
currentWeapon = secondaryWeapon;
break;
case 3:
// special
currentWeapon = specialWeapon;
break;
case 4:
// Melee
currentWeapon = MeleeWeapon;
break;
}
currentGraphics = currentWeapon.graphics.GetComponent<WeaponGraphics>();
if (isLocalPlayer)
{
Util.SetLayerRecursively(currentWeapon.graphics, LayerMask.NameToLayer(WeaponLayerName));
}
currentWeapon.graphics.SetActive(true);
currentWeapon.spreadFactorSet = currentWeapon.spreadFactor;
gameObject.GetComponent<Player>().SetAnimationParameter("CurrentWeapon", 2, 0f, currentWeaponIndex, false, true);
gameObject.GetComponent<PlayerShoot>().fireRateTimer = 0;
gameObject.GetComponent<PlayerShoot>().aiming = false;
if (GetComponent<PlayerSetup>().playerUIInstance != null)
{
GetComponent<PlayerSetup>().playerUIInstance.GetComponent<PlayerUI>().crossHair.SetActive(true);
}
}
void Update()
{
if (!isLocalPlayer)
return;
if (Input.GetKeyDown("1"))
{
EquipWeaponStart(equippedWeapons[0]);
}
if (Input.GetKeyDown("2"))
{
EquipWeaponStart(equippedWeapons[1]);
}
if (Input.GetKeyDown("3"))
{
EquipWeaponStart(equippedWeapons[2]);
}
if (Input.GetKeyDown("4"))
{
EquipWeaponStart(equippedWeapons[3]);
}
}
public void loadAmmoStart()
{
for (int i = 0; i < equippedWeapons.Length; i++)
{
SetAmmo(i);
}
}
public void SetAmmo(int _weapon)
{
switch (_weapon)
{
case 0:
// no weapon
weaponToLoad = null;
break;
case 1:
// primary
weaponToLoad = primaryWeapon;
break;
case 2:
// secondary
weaponToLoad = secondaryWeapon;
break;
case 3:
// special
weaponToLoad = specialWeapon;
break;
case 4:
// Melee
weaponToLoad = MeleeWeapon;
break;
}
if (weaponToLoad != null)
weaponToLoad.currentAmmo = weaponToLoad.magazineSize;
}
}