private void FinishReload(NetworkedWeapon weapon, int weaponIndex) { weapon.Reload(); //Update player's UI if (SelectedWeaponIndex != weaponIndex) { return; } TargetSendWeaponStatus(GetClientConnection, weapon); }
private void CmdReloadPlayerWeapon() { NetworkedWeapon weapon = GetActiveWeapon(); if (weapon.IsReloading) { return; } if (weapon.CurrentBulletAmount == weapon.GetTCWeapon().maxBullets) { return; } reloadingCoroutine = StartCoroutine(ServerReloadPlayerWeapon()); }
private void ServerWeaponCallback(SyncList <NetworkedWeapon> .Operation op, int itemIndex, NetworkedWeapon oldWeapon, NetworkedWeapon newWeapon) { switch (op) { case SyncList <NetworkedWeapon> .Operation.OP_ADD when newWeapon == null: Logger.Error("Passed in weapon to be added is null!"); weapons.Remove(weapons[itemIndex]); return; case SyncList <NetworkedWeapon> .Operation.OP_ADD: RpcInstantiateWeaponOnClients(newWeapon.Weapon); break; case SyncList <NetworkedWeapon> .Operation.OP_CLEAR: RpcRemoveAllActiveWeapons(); break; } }
internal IEnumerator ServerReloadPlayerWeapon() { Logger.Debug($"Reloading player `{transform.name}`'s active weapon"); //Get our players weapon NetworkedWeapon networkedWeapon = GetActiveWeapon(); networkedWeapon.IsReloading = true; networkedWeapon.CurrentBulletAmount = 0; TargetSendWeaponStatus(GetClientConnection, networkedWeapon); int weaponIndex = SelectedWeaponIndex; TCWeapon weapon = networkedWeapon.GetTCWeapon(); yield return(new WaitForSeconds(weapon.reloadTime)); FinishReload(networkedWeapon, weaponIndex); }
internal void AddWeapon(string weapon) { TCWeapon tcWeapon = WeaponsResourceManager.GetWeapon(weapon); if (tcWeapon == null) { return; } NetworkedWeapon netWeapon = new NetworkedWeapon(tcWeapon); weapons.Add(netWeapon); Logger.Debug($"Added weapon {weapon} for {transform.name} with {tcWeapon.maxBullets} bullets"); //Setup the new added weapon, and stop any reloading going on with the current weapon TargetSendWeaponStatus(GetClientConnection, netWeapon); if (weapons.Count > 1) { SetClientWeaponIndex(weapons.Count - 1); } }
internal void TargetSendWeaponStatus(NetworkConnection conn, NetworkedWeapon weaponStatus) { WeaponUpdated?.Invoke(weaponStatus); }
/// <summary> /// Writes a <see cref="NetworkedWeapon" /> /// </summary> /// <param name="writer"></param> /// <param name="weapon"></param> public static void WriteNetworkedWeapon(this NetworkWriter writer, NetworkedWeapon weapon) { writer.WriteString(weapon.Weapon); writer.WriteInt32(weapon.CurrentBulletAmount); writer.WriteBoolean(weapon.IsReloading); }