private void Awake() { //Asset bundle file name needs to be "custombobblehead" (not case sensitive) PathToBundle = Directory.GetCurrentDirectory() + @"\VTOLVR_ModLoader\mods\CustomBobbleHead\custombobblehead"; vehicleType = VTOLAPI.GetPlayersVehicleEnum(); //If we haven't already loaded the Asset Bundle if (!AssetLoaded) { //--------------------------------------------Prefab inside the asset bundle needs to be named "CustomBobbleHead" (case sensitive) newBobblePrefab = FileLoader.GetAssetBundleAsGameObject(PathToBundle, "CustomBobbleHead.prefab"); AssetLoaded = true; } VTOLAPI.SceneLoaded += SceneLoaded; VTOLAPI.MissionReloaded += OnMissionRestart; DontDestroyOnLoad(this.gameObject); }
//This method is called every frame by Unity. Here you'll probably put most of your code void Update() { try { if (plane == null) { plane = VTOLAPI.GetPlayersVehicleGameObject(); return; } if (VTOLAPI.GetPlayersVehicleEnum().Equals(VTOLVehicles.F45A)) { UltraInstinct(plane); } } catch (Exception) { } }
public static void Postfix(MFDPTacticalSituationDisplay __instance, ref TSDContactIcon __result) { if (VTOLAPI.GetPlayersVehicleEnum() == VTOLVehicles.F45A) { GameObject f45 = VTOLAPI.GetPlayersVehicleGameObject(); GameObject soiButton = GetChildWithName(f45, "ScaleButton (1)"); GameObject hvrObj = GetChildWithName(soiButton, "hvrObj"); tsdTraverse = Traverse.Create(__instance); GameObject contactHvrObj = UnityEngine.Object.Instantiate(hvrObj, __result.transform); float scaler = 1.3f; Vector2 hvrObjOrigSize = contactHvrObj.GetComponent <Image>().rectTransform.sizeDelta; contactHvrObj.GetComponent <Image>().rectTransform.sizeDelta *= scaler; __result.gameObject.SetActive(false); VRInteractable interact = __result.gameObject.AddComponent <VRInteractable>(); interact.interactableName = "Select"; interact.button = VRInteractable.Buttons.Trigger; interact.radius = 0; interact.useRect = true; interact.rect.center = Vector3.zero; interact.rect.extents = new Vector3(10, 10, 20); interact.requireMotion = false; interact.toggle = false; interact.tapOrHold = false; interact.sqrRadius = 0; interact.OnInteract = new UnityEvent(); interact.OnInteract.AddListener(f45.GetComponentInChildren <MFDPortalManager>().PlayInputSound); interact.OnInteract.AddListener(delegate { moveCursor(__instance, interact.gameObject); }); VRIHoverToggle hoverToggle = __result.gameObject.AddComponent <VRIHoverToggle>(); hoverToggle.hoverObj = contactHvrObj; __result.gameObject.SetActive(true); } }
public static void SetupLocalAircraft(GameObject localVehicle, Vector3 pos, Quaternion rot, ulong UID) { VTOLVehicles currentVehicle = VTOLAPI.GetPlayersVehicleEnum(); Actor actor = localVehicle.GetComponent <Actor>(); if (VTOLVR_Multiplayer.AIDictionaries.allActors.ContainsKey(UID)) { VTOLVR_Multiplayer.AIDictionaries.allActors[UID] = actor; } else { VTOLVR_Multiplayer.AIDictionaries.allActors.Add(UID, actor); } if (VTOLVR_Multiplayer.AIDictionaries.allActors.ContainsKey(UID)) { VTOLVR_Multiplayer.AIDictionaries.reverseAllActors[actor] = UID; } else { VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.Add(actor, UID); } RigidbodyNetworker_Sender rbSender = localVehicle.AddComponent <RigidbodyNetworker_Sender>(); rbSender.networkUID = UID; //rbSender.SetSpawn(pos, rot); if (currentVehicle == VTOLVehicles.AV42C) { rbSender.originOffset = av42Offset; } Debug.Log("Adding Plane Sender"); PlaneNetworker_Sender planeSender = localVehicle.AddComponent <PlaneNetworker_Sender>(); planeSender.networkUID = UID; if (currentVehicle == VTOLVehicles.AV42C || currentVehicle == VTOLVehicles.F45A) { Debug.Log("Added Tilt Updater to our vehicle"); EngineTiltNetworker_Sender tiltSender = localVehicle.AddComponent <EngineTiltNetworker_Sender>(); tiltSender.networkUID = UID; } if (actor != null) { if (actor.unitSpawn != null) { if (actor.unitSpawn.unitSpawner == null) { Debug.Log("unit spawner was null, adding one"); actor.unitSpawn.unitSpawner = actor.gameObject.AddComponent <UnitSpawner>(); } } } if (localVehicle.GetComponent <Health>() != null) { HealthNetworker_Sender healthNetworker = localVehicle.AddComponent <HealthNetworker_Sender>(); PlayerNetworker_Sender playerNetworker = localVehicle.AddComponent <PlayerNetworker_Sender>(); healthNetworker.networkUID = UID; playerNetworker.networkUID = UID; Debug.Log("added health sender to local player"); } else { Debug.Log("local player has no health?"); } if (localVehicle.GetComponentInChildren <WingFoldController>() != null) { WingFoldNetworker_Sender wingFold = localVehicle.AddComponent <WingFoldNetworker_Sender>(); wingFold.wingController = localVehicle.GetComponentInChildren <WingFoldController>().toggler; wingFold.networkUID = UID; } if (localVehicle.GetComponentInChildren <StrobeLightController>() != null) { ExtLight_Sender extLight = localVehicle.AddComponent <ExtLight_Sender>(); extLight.networkUID = UID; } if (localVehicle.GetComponentInChildren <LockingRadar>() != null) { Debug.Log($"Adding LockingRadarSender to player {localVehicle.name}"); LockingRadarNetworker_Sender radarSender = localVehicle.AddComponent <LockingRadarNetworker_Sender>(); radarSender.networkUID = UID; } if (currentVehicle == VTOLVehicles.AV42C) { AvatarManager.SetupAircraftRoundels(localVehicle.transform, currentVehicle, GetPlayerCSteamID(localUID), av42Offset); } else { AvatarManager.SetupAircraftRoundels(localVehicle.transform, currentVehicle, GetPlayerCSteamID(localUID), Vector3.zero); } if (Multiplayer.SoloTesting) { pos += new Vector3(20, 0, 0); } List <HPInfo> hpInfos = PlaneEquippableManager.generateLocalHpInfoList(UID); CountermeasureManager cmManager = localVehicle.GetComponentInChildren <CountermeasureManager>(); List <int> cm = PlaneEquippableManager.generateCounterMeasuresFromCmManager(cmManager); float fuel = PlaneEquippableManager.generateLocalFuelValue(); Debug.Log("Assembled our local vehicle"); if (!Networker.isHost || Multiplayer.SoloTesting) { // Not host, so send host the spawn vehicle message Debug.Log($"Sending spawn vehicle message to: {Networker.hostID}"); NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, new Message_SpawnPlayerVehicle(currentVehicle, new Vector3D(pos), rot, SteamUser.GetSteamID().m_SteamID, UID, hpInfos.ToArray(), cm.ToArray(), fuel, PlayerManager.teamLeftie), EP2PSend.k_EP2PSendReliable); } else { //Debug.Log("I am host, no need to immediately forward my assembled vehicle"); NetworkSenderThread.Instance.SendPacketAsHostToAllClients(new Message_SpawnPlayerVehicle(currentVehicle, new Vector3D(pos), rot, SteamUser.GetSteamID().m_SteamID, UID, hpInfos.ToArray(), cm.ToArray(), fuel, PlayerManager.teamLeftie), EP2PSend.k_EP2PSendReliable); } }
public static void SpawnLocalVehicleAndInformOtherClients(GameObject localVehicle, Vector3 pos, Quaternion rot, ulong UID, int playercount = 0) //Both { Debug.Log("Sending our location to spawn our vehicle"); VTOLVehicles currentVehicle = VTOLAPI.GetPlayersVehicleEnum(); Actor actor = localVehicle.GetComponent <Actor>(); Player localPlayer = new Player(SteamUser.GetSteamID(), localVehicle, currentVehicle, UID, PlayerManager.teamLeftie); AddToPlayerList(localPlayer); ReArmingPoint[] rearmPoints = GameObject.FindObjectsOfType <ReArmingPoint>(); ReArmingPoint rearmPoint = rearmPoints[UnityEngine.Random.Range(0, rearmPoints.Length - 1)]; int rand = UnityEngine.Random.Range(0, rearmPoints.Length - 1); int counter = 0; float lastRadius = 0.0f; Rigidbody rb = localVehicle.GetComponent <Rigidbody>(); //rb.detectCollisions = false; if (PlayerManager.carrierStart) { foreach (ReArmingPoint rep in rearmPoints) { if (rep.team == Teams.Allied) { if (rep.radius > 17.0f && rep.radius < 19.0f) { rearmPoint = rep; } } } } else { foreach (ReArmingPoint rep in rearmPoints) { if (rep.team == Teams.Allied && rep.CheckIsClear(actor)) { if (rep.radius > lastRadius) { rearmPoint = rep; lastRadius = rep.radius; } } } } if (Networker.isHost && firstSpawnDone == false) { if (firstSpawnDone) { rearmPoint.BeginReArm(); } rb.velocity = Vector3.zero; } else { if (teamLeftie) { rearmPoint.BeginReArm(); rb.velocity = Vector3.zero; } else { if (firstSpawnDone == false) { PlayerSpawn ps = GameObject.FindObjectOfType <PlayerSpawn>(); if (ps.initialSpeed < 5.0f) { rearmPoint.BeginReArm(); rb.velocity = Vector3.zero; } } } } //prevent fall through ground if ((bool)VTMapGenerator.fetch) { VTMapGenerator.fetch.BakeColliderAtPosition(localVehicle.transform.position); } //rb.detectCollisions = true; SetupLocalAircraft(localVehicle, pos, rot, UID); firstSpawnDone = true; /*if(!firstSpawn) * if (!Networker.isHost) { * actor.health.Kill(); * localVehicle.transform.position = new Vector3(1000000, 10000, 10000); * } */ /// * //bad code we ran this before in SetupLocalAircraft(localVehicle, pos, rot, UID); /*List<HPInfo> hpInfos = PlaneEquippableManager.generateLocalHpInfoList(UID); * CountermeasureManager cmManager = localVehicle.GetComponentInChildren<CountermeasureManager>(); * List<int> cm = PlaneEquippableManager.generateCounterMeasuresFromCmManager(cmManager); * float fuel = PlaneEquippableManager.generateLocalFuelValue(); * * * * * Debug.Log("Assembled our local vehicle"); * if (!Networker.isHost || Multiplayer.SoloTesting) * { * // Not host, so send host the spawn vehicle message * Debug.Log($"Sending spawn vehicle message to: {Networker.hostID}"); * NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, * new Message_SpawnPlayerVehicle(currentVehicle, * new Vector3D(pos), * rot, * SteamUser.GetSteamID().m_SteamID, * UID, * hpInfos.ToArray(), * cm.ToArray(), * fuel, PlayerManager.teamLeftie), * EP2PSend.k_EP2PSendReliable); * } * else * { * Debug.Log("I am host, no need to immediately forward my assembled vehicle"); * }*/ }
private void SetupNewBobbleHead() { //Make sure we were able to load the prefab - more null checks == better :*) if (newBobblePrefab != null) { //Vehicle specific default local offsets and actions Vector3 localOffset = Vector3.zero; bool bobbleEnabled = false; //Adding localOffset to offset the bobblehead on a per vehicle basis to a location that looks better in my opinion. //(especially in the AV-42C, the default location is terrible, i guess just to get out of the way of the old quicksave buttons) VTOLVehicles cv = VTOLAPI.GetPlayersVehicleEnum(); switch (cv) { case VTOLVehicles.FA26B: localOffset = new Vector3(-0.4512793f, 1.0411f, 5.863763f); bobbleEnabled = true; break; case VTOLVehicles.F45A: //Might find a better place to stick it later localOffset = new Vector3(-0.4056f, 0.4991f, 5.4594f); bobbleEnabled = true; break; case VTOLVehicles.AV42C: localOffset = new Vector3(-0.5683f, 0.7659f, 0.5186f); bobbleEnabled = true; break; default: bobbleEnabled = false; break; } if (bobbleEnabled) { GameObject defaultBobbleHead = GameObject.Find("BobblePilot"); newBobbleHead = GameObject.Instantiate(newBobblePrefab); GameObject bobbleRoot = GameObject.Instantiate(defaultBobbleHead); bobbleRoot.transform.SetParent(defaultBobbleHead.transform.parent, false); bobbleRoot.transform.localPosition = localOffset; bobbleRoot.transform.localRotation = defaultBobbleHead.transform.localRotation; for (int i = 0; i < bobbleRoot.transform.childCount; i++) { Destroy(bobbleRoot.transform.GetChild(i).gameObject); } bobbleInteractive = bobbleRoot.GetComponent <InteractiveBobbleHead>(); bobbleScale = newBobbleHead.transform.localScale; newBobbleHead.transform.parent = bobbleRoot.transform; newBobbleHead.transform.localPosition = Vector3.zero; newBobbleHead.transform.localRotation = Quaternion.identity; Transform HeadTF = null; Transform colliderCenter = newBobbleHead.transform.Find("CustomBobbleHead/ColliderCenter"); try { HeadTF = newBobbleHead.transform.Find("CustomBobbleHead/HeadTF"); } catch (NullReferenceException e) { base.LogError("CustomBobbleHead: 'HeadTF' was not found under 'CustomBobbleHead/CustomBobbleHead/'. BobbleHead interaction will based on bobble position."); } if (HeadTF != null) { bobbleInteractive.headTransform = HeadTF; bobbleInteractive.headLocalTarget = HeadTF.localPosition; if (colliderCenter) { bobbleInteractive.headColliderCenter = colliderCenter.localPosition; } } else { bobbleInteractive.headTransform = newBobbleHead.transform; bobbleInteractive.headLocalTarget = Vector3.zero; bobbleInteractive.headColliderCenter = Vector3.zero; } Destroy(defaultBobbleHead); } } }
private void SceneLoaded(VTOLScenes scene) { chat.Create3DChat(VTOLAPI.GetPlayersVehicleGameObject(), VTOLAPI.GetPlayersVehicleEnum(), scene); manager.Start(); }
private IEnumerator main() { while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady || FlightSceneManager.instance.switchingScene) { yield return(null); } // Main code here buttonMade = false; Debug.Log("AAAAAAAA"); wm = VTOLAPI.GetPlayersVehicleGameObject().GetComponent <WeaponManager>(); inf = VTOLAPI.GetPlayersVehicleGameObject().AddComponent <infAmmo>(); inf.enabled = false; paired = VTOLAPI.GetPlayersVehicleGameObject().AddComponent <PairedGuns>(); paired.enabled = false; if (VTOLAPI.GetPlayersVehicleEnum() != VTOLVehicles.F45A) { WeaponManagerUI wmUI = wm.ui; Debug.Log("wmUI"); mfd = wmUI.mfdPage; if (mfd == null) { Debug.LogError("OOPIES."); } mfd.OnActivatePage.AddListener(new UnityAction(() => { lastMFD = mfd.mfd; Debug.Log("="); MFDPage.MFDButtonInfo[] allButtons = mfd.buttons; MFDPage.MFDButtonInfo newButton = new MFDPage.MFDButtonInfo(); newButton.button = MFD.MFDButtons.T4; newButton.toolTip = "Toggle infinite ammo"; newButton.label = "infAmmo"; newButton.OnPress.AddListener(new UnityAction(() => { AEAT.inf.enabled = !AEAT.inf.enabled; mfd.mfd.buttons[13].GetComponentInChildren <Text>().color = AEAT.inf.enabled ? Color.green : Color.red; })); if (mfd.mfd == null) { Debug.LogError("FOUND YA!"); } MFDPage.MFDButtonInfo newButton2 = new MFDPage.MFDButtonInfo(); newButton2.button = MFD.MFDButtons.T2; newButton2.toolTip = "Pair all guns"; newButton2.label = "pairGuns"; newButton2.OnPress.AddListener(new UnityAction(() => { AEAT.paired.enabled = !AEAT.paired.enabled; Debug.Log("Button pressed."); mfd.mfd.buttons[11].GetComponentInChildren <Text>().color = AEAT.paired.enabled && wm.equippedGun ? Color.green : Color.red; })); mfd.SetPageButton(newButton); mfd.SetPageButton(newButton2); mfd.mfd.buttons[13].GetComponentInChildren <Text>().color = AEAT.inf.enabled ? Color.green : Color.red; mfd.mfd.buttons[11].GetComponentInChildren <Text>().color = AEAT.paired.enabled ? Color.green : Color.red; })); mfd.OnDeactivatePage.AddListener(new UnityAction(() => { if (lastMFD != null) { lastMFD.buttons[13].GetComponentInChildren <Text>().color = Color.white; lastMFD.buttons[11].GetComponentInChildren <Text>().color = Color.white; lastMFD = null; } })); } else { AEAT.MFDP = wm.gameObject.GetComponentInChildren <MFDPortalManager>(); MFDPStoresManagement MFDP = (MFDPStoresManagement)AEAT.MFDP.gameObject.GetComponentInChildren <MFDPortalManager>().pages[5]; Debug.Log("got MFPD"); GameObject toCopy = null; foreach (var resource in Resources.FindObjectsOfTypeAll <VRInteractable>()) { if (resource.interactableName == "Weapon Bay Door Overrides") { toCopy = resource.gameObject; break; } } if (toCopy == null) { Debug.LogError("To copy is null"); } GameObject emptyButton = Instantiate(toCopy, MFDP.displayObj.gameObject.transform); RectTransform rt = emptyButton.GetComponent <RectTransform>(); AEAT.text1 = emptyButton.gameObject.GetComponentInChildren <Text>(); rt.localPosition = new Vector3(rt.localPosition.x - 50, rt.localPosition.y, rt.localPosition.z); rt.localScale = new Vector3(rt.localScale.x * 0.85f, rt.localScale.y * 0.85f, rt.localScale.z * 0.85f); rt.GetComponentInChildren <Image>().color = Color.black; Debug.Log("instantiate"); VRInteractable interactable = emptyButton.GetComponentInChildren <VRInteractable>(); Debug.Log("vr interactable"); Text text = emptyButton.GetComponentInChildren <Text>(); Debug.Log("text"); text.text = "infAmmo"; Debug.Log("infAmmo"); interactable.OnInteract = new UnityEvent(); Debug.Log("new UnityEvent()"); interactable.interactableName = "Toggle infinite ammo"; Debug.Log("toggle infinite ammo"); interactable.OnInteract.AddListener(new UnityAction(() => { AEAT.inf.enabled = !AEAT.inf.enabled; AEAT.MFDP.PlayInputSound(); AEAT.text1.color = AEAT.inf.enabled ? Color.green : Color.red; })); Debug.Log("listener"); AEAT.text1.color = AEAT.inf.enabled ? Color.green : Color.red; GameObject emptyButton2 = Instantiate(toCopy, MFDP.displayObj.gameObject.transform); RectTransform rt2 = emptyButton2.GetComponent <RectTransform>(); rt2.localPosition = new Vector3(rt2.localPosition.x - 85, rt.localPosition.y, rt.localPosition.z); rt2.localScale = new Vector3(rt2.localScale.x * 0.85f, rt2.localScale.y * 0.85f, rt2.localScale.z * 0.85f); rt2.GetComponentInChildren <Image>().color = Color.black; Debug.Log("instantiate"); VRInteractable interactable2 = emptyButton2.GetComponentInChildren <VRInteractable>(); Debug.Log("vr interactable"); text2 = emptyButton2.GetComponentInChildren <Text>(); Debug.Log("text"); text2.text = "pairGuns"; Debug.Log("pairGuns"); interactable2.OnInteract = new UnityEvent(); Debug.Log("new UnityEvent()"); interactable2.interactableName = "Pair All Guns"; Debug.Log("Pair all guns"); interactable2.OnInteract.AddListener(new UnityAction(() => { AEAT.paired.enabled = !AEAT.paired.enabled; AEAT.MFDP.PlayInputSound(); AEAT.text2.color = AEAT.paired.enabled ? Color.green : Color.red; })); AEAT.text2.color = AEAT.paired.enabled ? Color.green : Color.red; } }
IEnumerator RespawnTimer() { Debug.Log("Starting respawn timer."); GameObject button = Multiplayer.CreateVehicleButton(); yield return(new WaitForSeconds(respawnTimer)); Destroy(button); Debug.Log("Finished respawn timer."); ReArmingPoint[] rearmPoints = GameObject.FindObjectsOfType <ReArmingPoint>(); ReArmingPoint rearmPoint = rearmPoints[Random.Range(0, rearmPoints.Length - 1)]; float lastRadius = 0; if (PlayerManager.carrierStart) { foreach (ReArmingPoint rep in rearmPoints) { if (rep.team == Teams.Allied) { if (rep.radius > 17.8f && rep.radius < 19.0f) { rearmPoint = rep; } } } } else { foreach (ReArmingPoint rep in rearmPoints) { Debug.Log("finding rearm pt"); if (rep.team == Teams.Allied && rep.CheckIsClear(actor)) { if (rep.radius > lastRadius) { rearmPoint = rep; lastRadius = rep.radius; } } } } //UnEject(); //PutPlayerBackInAircraft(); //RepairAircraft(); //foreach (GearAnimator gear in gears) { // gear.ExtendImmediate(); //} //GetComponent<Rigidbody>().velocity = Vector3.zero; //transform.position = rearmPoint.transform.position + Vector3.up * 10; //transform.rotation = rearmPoint.transform.rotation; Destroy(VTOLAPI.GetPlayersVehicleGameObject()); Destroy(detacher.cameraRig); Destroy(detacher.gameObject); Destroy(ejection.gameObject); Destroy(BlackoutEffect.instance); Destroy(GetComponent <PlayerSpawn>()); foreach (EngineEffects effect in effects) { Destroy(effect); } //as much stuff as im destroying, some stuff is most likely getting through, future people, look into this AudioController.instance.ClearAllOpenings(); UnitIconManager.instance.UnregisterAll(); TargetManager.instance.detectedByAllies.Clear(); TargetManager.instance.detectedByEnemies.Clear(); foreach (var actor in TargetManager.instance.allActors) { if (actor != null) { actor.discovered = false; actor.drawIcon = true; //actor.DiscoverActor(); actor.permanentDiscovery = true; Traverse.Create(actor).Field("detectedByAllied").SetValue(false); Traverse.Create(actor).Field("detectedByEnemy").SetValue(false); if (actor.team == Teams.Allied) { actor.DetectActor(Teams.Allied); actor.UpdateKnownPosition(actor.team); } //actor.DiscoverActor(); <----------------breaks and only works on every 2nd spawn // UnitIconManager.instance.RegisterIcon(actor, 0.07f * actor.iconScale, actor.iconOffset); } } if (PlayerManager.selectedVehicle == "FA-26B") { PlayerManager.selectedVehicle = "F/A-26B"; } PilotSaveManager.currentVehicle = VTResources.GetPlayerVehicle(PlayerManager.selectedVehicle); string campID; if (PlayerManager.selectedVehicle == "AV-42C") { campID = "av42cQuickFlight"; } else if (PlayerManager.selectedVehicle == "F/A-26B") { campID = "fa26bFreeFlight"; } else { campID = "f45-quickFlight"; } Campaign campref = VTResources.GetBuiltInCampaign(campID).ToIngameCampaign(); PilotSaveManager.currentCampaign = campref; if (PilotSaveManager.currentVehicle == null) { Debug.LogError("current vehicle is null"); } GameObject newPlayer = Instantiate(PilotSaveManager.currentVehicle.vehiclePrefab); if (newPlayer == null) { Debug.LogError("new vehicle is null"); } newPlayer.GetComponent <Actor>().designation = FlightSceneManager.instance.playerActor.designation;//reassigning designation FlightSceneManager.instance.playerActor = newPlayer.GetComponent <Actor>(); FlightSceneManager.instance.playerActor.flightInfo.PauseGCalculations(); FlightSceneManager.instance.playerActor.flightInfo.OverrideRecordedAcceleration(Vector3.zero); rearmPoint.voiceProfile.PlayMessage(GroundCrewVoiceProfile.GroundCrewMessages.Success); PilotSaveManager.currentScenario.totalBudget = 999999; PilotSaveManager.currentScenario.initialSpending = 0; PilotSaveManager.currentScenario.inFlightSpending = 0; PilotSaveManager.currentScenario.equipConfigurable = true; PlayerVehicleSetup pvSetup = newPlayer.GetComponent <PlayerVehicleSetup>(); pvSetup.SetupForFlight(); Rigidbody rb = newPlayer.GetComponent <Rigidbody>(); GearAnimator gearAnim = newPlayer.GetComponent <GearAnimator>(); if (gearAnim != null) { if (gearAnim.state != GearAnimator.GearStates.Extended) { gearAnim.ExtendImmediate(); } } // PlayerManager.StartRearm(rearmPoint); //rb.velocity = Vector3.zero; //rb.detectCollisions = true; PlayerManager.SpawnLocalVehicleAndInformOtherClients(newPlayer, newPlayer.transform.position, newPlayer.transform.rotation, networkUID); //PlayerManager.SetupLocalAircraft(newPlayer, newPlayer.transform.position, newPlayer.transform.rotation, networkUID); lastMessage.UID = networkUID; lastMessage.isLeftie = PlayerManager.teamLeftie; lastMessage.tagName = Steamworks.SteamFriends.GetPersonaName(); lastMessage.vehicle = VTOLAPI.GetPlayersVehicleEnum(); if (Networker.isHost) { NetworkSenderThread.Instance.SendPacketAsHostToAllClients(lastMessage, Steamworks.EP2PSend.k_EP2PSendReliable); } else { NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, lastMessage, Steamworks.EP2PSend.k_EP2PSendReliable); } }
void Awake() { lastMessage = new Message_Respawn(networkUID, new Vector3D(), new Quaternion(), false, Steamworks.SteamFriends.GetPersonaName(), VTOLAPI.GetPlayersVehicleEnum()); actor = GetComponent <Actor>(); health = actor.health; if (health == null) { Debug.LogError("health was null on player " + gameObject.name); } else { health.OnDeath.AddListener(Death); } detacher = GetComponentInChildren <TempPilotDetacher>(); //gears = GetComponentsInChildren<GearAnimator>(); //shifter = GetComponentInChildren<FloatingOriginShifter>(); ejection = GetComponentInChildren <EjectionSeat>(); ejection.OnEject.AddListener(Eject); detacher.OnDetachPilot.AddListener(Eject); //ejectorSeatPos = ejection.transform.localPosition; //ejectorSeatRot = ejection.transform.localRotation; //target = detacher.cameraRig.transform.parent; //ejectorParent = ejection.gameObject.transform.parent; //if (ejection.canopyObject != null) { // canopyParent = ejection.canopyObject.transform.parent; // canopyPos = ejection.canopyObject.transform.localPosition; // canopyRot = ejection.canopyObject.transform.localRotation; //} effects = GetComponentsInChildren <EngineEffects>(); }
/// <summary> /// Sends the message to other clients to spawn their vehicles /// </summary> /// <param name="localVehicle">The local clients gameobject</param> public static void SendSpawnVehicle(GameObject localVehicle, Vector3 pos, Vector3 rot, ulong UID) //Both { Debug.Log("Sending our location to spawn our vehicle"); VTOLVehicles currentVehicle = VTOLAPI.GetPlayersVehicleEnum(); players.Add(new Player(SteamUser.GetSteamID(), localVehicle, currentVehicle, UID)); RigidbodyNetworker_Sender rbSender = localVehicle.AddComponent <RigidbodyNetworker_Sender>(); rbSender.networkUID = UID; rbSender.spawnPos = pos; rbSender.spawnRot = rot; rbSender.SetSpawn(); Debug.Log("Adding Plane Sender"); PlaneNetworker_Sender planeSender = localVehicle.AddComponent <PlaneNetworker_Sender>(); planeSender.networkUID = UID; if (currentVehicle == VTOLVehicles.AV42C || currentVehicle == VTOLVehicles.F45A) { Debug.Log("Added Tilt Updater to our vehicle"); EngineTiltNetworker_Sender tiltSender = localVehicle.AddComponent <EngineTiltNetworker_Sender>(); tiltSender.networkUID = UID; } if (Multiplayer.SoloTesting) { pos += new Vector3(20, 0, 0); } List <int> cm = new List <int>(); float fuel = 0.65f; //Setting up missiles with MissileUpdate Scripts Debug.Log("Setting up missiles"); WeaponManager weaponManager = localVehicle.GetComponent <WeaponManager>(); List <HPInfo> hpInfos = new List <HPInfo>(); HPEquippable lastEquippable = null; for (int i = 0; i < weaponManager.equipCount; i++) { Debug.Log("Weapon Manager, Equip " + i); lastEquippable = weaponManager.GetEquip(i); if (lastEquippable == null) //If this is null, it means there isn't any weapon in that slot. { continue; } Debug.Log("Last Equippable = " + lastEquippable.fullName); List <ulong> missileUIDS = new List <ulong>(); if (lastEquippable.weaponType != HPEquippable.WeaponTypes.Gun && lastEquippable.weaponType != HPEquippable.WeaponTypes.Rocket) { Debug.Log("This last equip is a missile launcher"); HPEquipMissileLauncher HPml = lastEquippable as HPEquipMissileLauncher; if (HPml.ml == null) { Debug.LogError("The Missile Launcher was null on this Missile Launcher"); Debug.LogError("Type was = " + lastEquippable.weaponType); continue; } if (HPml.ml.missiles == null) { Debug.LogError("The missile list is null"); continue; } Debug.Log($"This has {HPml.ml.missiles.Length} missiles"); for (int j = 0; j < HPml.ml.missiles.Length; j++) { //There shouldn't be any shot missiles, but if so this skips them as they are null. if (HPml.ml.missiles[j] == null) { missileUIDS.Add(0); Debug.LogError("It seems there wa sa missile shot as it was null"); continue; } Debug.Log("Adding Missle Networker to missile"); MissileNetworker_Sender sender = HPml.ml.missiles[j].gameObject.AddComponent <MissileNetworker_Sender>(); sender.networkUID = Networker.GenerateNetworkUID(); missileUIDS.Add(sender.networkUID); } } hpInfos.Add(new HPInfo( lastEquippable.gameObject.name.Replace("(Clone)", ""), lastEquippable.weaponType, missileUIDS.ToArray())); } //Getting Counter Measure flares. Debug.Log("Setting up Counter Measure"); CountermeasureManager cmManager = localVehicle.GetComponentInChildren <CountermeasureManager>(); for (int i = 0; i < cmManager.countermeasures.Count; i++) { cm.Add(cmManager.countermeasures[i].count); } //Getting Fuel if (VehicleEquipper.loadoutSet) { fuel = VehicleEquipper.loadout.normalizedFuel; } if (!Networker.isHost || Multiplayer.SoloTesting) { Networker.SendP2P(Networker.hostID, new Message_SpawnVehicle(currentVehicle, new Vector3D(pos), new Vector3D(rot), SteamUser.GetSteamID().m_SteamID, UID, hpInfos.ToArray(), cm.ToArray(), fuel), EP2PSend.k_EP2PSendReliable); } }