/// <summary> /// Spawn the vehicle and enter it. /// </summary> public void Spawn() { // Create a reference to the vehicle Vehicle vehicle = null; // Create the vehicle switch (vehicleSpawnType) { case VehicleSpawnType.Loadout: int playerVehicleIndex = PlayerData.GetSelectedVehicleIndex(itemManager); if (playerVehicleIndex == -1) { if (itemManager != null && itemManager.vehicles.Count > 0) { playerVehicleIndex = 0; } } if (playerVehicleIndex != -1) { // Create the vehicle Transform vehicleTransform = ((GameObject)Instantiate(itemManager.vehicles[playerVehicleIndex].gameObject, vehicleSpawnPoint.position, vehicleSpawnPoint.rotation)).transform; vehicle = vehicleTransform.GetComponent <Vehicle>(); vehicle.name = vehicleName; // Get the vehicle loadout List <int> selectedModuleIndexesByMount = PlayerData.GetModuleLoadout(playerVehicleIndex, itemManager); bool hasLoadout = false; for (int i = 0; i < selectedModuleIndexesByMount.Count; ++i) { if (selectedModuleIndexesByMount[i] != -1) { hasLoadout = true; } } // Create the vehicle loadout if (hasLoadout) { for (int i = 0; i < selectedModuleIndexesByMount.Count; ++i) { if (selectedModuleIndexesByMount[i] == -1) { continue; } Module module = GameObject.Instantiate(itemManager.modulePrefabs[selectedModuleIndexesByMount[i]], null); vehicle.ModuleMounts[i].AddMountableModule(module, itemManager.modulePrefabs[selectedModuleIndexesByMount[i]], true); } } else { for (int i = 0; i < vehicle.ModuleMounts.Count; ++i) { vehicle.ModuleMounts[i].createDefaultModulesAtStart = true; } } } break; case VehicleSpawnType.Prefab: vehicle = Instantiate(vehiclePrefab, vehicleSpawnPoint.position, vehicleSpawnPoint.rotation); break; } if (vehicle != null) { // Set child vehicle that the game agent will exit to when exiting this vehicle. VehicleEnterExitManager enterExitManager = vehicle.GetComponent <VehicleEnterExitManager>(); if (startingChildVehicle != null) { if (enterExitManager != null) { if (startingChildVehicle.CanEnter(enterExitManager)) { enterExitManager.SetChild(startingChildVehicle); } } } // Make the starting occupant enter the vehicle if (startingOccupant != null) { GameAgent occupant; if (spawnOccupantFromPrefab) { occupant = Instantiate(startingOccupant, Vector3.zero, Quaternion.identity); } else { occupant = startingOccupant; } occupant.EnterVehicle(vehicle); } // Call the event onVehicleSpawned.Invoke(vehicle); } }