コード例 #1
0
        private void FinishReload(NetworkedWeapon weapon, int weaponIndex)
        {
            weapon.Reload();

            //Update player's UI
            if (SelectedWeaponIndex != weaponIndex)
            {
                return;
            }
            TargetSendWeaponStatus(GetClientConnection, weapon);
        }
コード例 #2
0
        private void CmdReloadPlayerWeapon()
        {
            NetworkedWeapon weapon = GetActiveWeapon();

            if (weapon.IsReloading)
            {
                return;
            }

            if (weapon.CurrentBulletAmount == weapon.GetTCWeapon().maxBullets)
            {
                return;
            }

            reloadingCoroutine = StartCoroutine(ServerReloadPlayerWeapon());
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
 internal void TargetSendWeaponStatus(NetworkConnection conn, NetworkedWeapon weaponStatus)
 {
     WeaponUpdated?.Invoke(weaponStatus);
 }
コード例 #7
0
 /// <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);
 }