public void ServerSpawnWeapon(Server server, WeaponSpawnerState weaponSpawnerState) { if (weaponSpawnerState.TimeUntilNextSpawn > 0) { return; } var weaponDefinition = WeaponSystem.Instance.GetWeaponDefinitionByType(weaponSpawnerState.Type); var bulletsLeft = weaponDefinition.MaxAmmo / 2; var bulletsLeftInMagazine = Mathf.Min(weaponDefinition.BulletsPerMagazine, bulletsLeft); var weaponSpawnerComponent = FindWeaponSpawnerComponent(weaponSpawnerState.Id); var weaponObjectState = new WeaponObjectState { Id = server.GenerateNetworkId(), Type = weaponSpawnerState.Type, BulletsLeftInMagazine = (ushort)bulletsLeftInMagazine, BulletsLeftOutOfMagazine = (ushort)(bulletsLeft - bulletsLeftInMagazine), RigidBodyState = new RigidBodyState { Position = weaponSpawnerComponent.transform.position, EulerAngles = weaponSpawnerComponent.transform.eulerAngles, Velocity = Vector3.zero, AngularVelocity = Vector3.zero }, WeaponSpawnerId = weaponSpawnerState.Id }; SpawnLocalWeaponObject(weaponObjectState); }
private IEnumerator StartSpawnWeapon() { yield return(new WaitForSeconds(spawnDelay)); activeBox = (GameObject)Instantiate(WeaponToSpawn.gameObject, transform.position + new Vector3(0, spawnHeight, 0), Quaternion.identity); NetworkServer.Spawn(activeBox); weaponSpawnerState = WeaponSpawnerState.READY; }
private void Update() { if (!isServer) { return; } if (weaponSpawnerState == WeaponSpawnerState.EMPTY) { weaponSpawnerState = WeaponSpawnerState.SPAWNING; StartCoroutine(StartSpawnWeapon()); } if (weaponSpawnerState == WeaponSpawnerState.READY) { if (activeBox == null) { weaponSpawnerState = WeaponSpawnerState.EMPTY; } } }