public Player(CSteamID cSteamID, GameObject vehicle, VTOLVehicles vehicleName, ulong vehicleUID) { this.cSteamID = cSteamID; this.vehicle = vehicle; this.vehicleName = vehicleName; this.vehicleUID = vehicleUID; }
public static bool hideAvatars = false;//set this when we implement an option to dissable avatars public static void SetupAircraftRoundels(Transform aircraft, VTOLVehicles type, CSteamID steamID, Vector3 offset) { if (hideAvatars) { return; } Texture2D pfpTexture = GetAvatar(steamID); RoundelLayout layout = layouts[(int)type]; foreach (RoundelPosition roundelPosition in layout.roundels) { GameObject roundel = GameObject.CreatePrimitive(PrimitiveType.Quad); roundel.transform.parent = aircraft; roundel.transform.localPosition = roundelPosition.position + offset; roundel.transform.localRotation = roundelPosition.rotation; roundel.transform.localScale = roundelPosition.scale; GameObject.Destroy(roundel.GetComponent <Collider>()); roundel.GetComponent <Renderer>().material.mainTexture = pfpTexture; roundel.GetComponent <Renderer>().material.mainTextureScale = new Vector2(1, -1); } }
public Message_Respawn(ulong uID, Vector3D position, Quaternion rotation, bool leftTeam, string name, VTOLVehicles vehicle) { UID = uID; this.position = position; this.rotation = rotation; this.isLeftie = leftTeam; this.tagName = name; this.vehicle = vehicle; type = MessageType.Respawn; }
public Player(CSteamID cSteamID, GameObject vehicle, VTOLVehicles vehicleType, ulong vehicleUID, bool leftTeam) { this.cSteamID = cSteamID; this.vehicle = vehicle; this.vehicleType = vehicleType; this.vehicleUID = vehicleUID; this.leftie = leftTeam; timeSinceLastResponse = 0.0f; }
public void Create3DChat(GameObject jet, VTOLVehicles type, VTOLScenes scene) { GameObject temp = new GameObject(); GameObject temp3 = UnityEngine.Object.Instantiate(temp); textMesh = temp3.AddComponent <TextMeshPro>(); textMesh.outlineColor = Color.black; textMesh.outlineWidth = 0.2f; textMesh.fontSize = 0.5f; textMesh.enableWordWrapping = false; textMesh.alignment = TextAlignmentOptions.Bottom; textMesh.richText = false; if (jet != null) { textMesh.transform.parent = jet.transform; switch (type) { case VTOLVehicles.AV42C: textMesh.transform.localPosition = new Vector3(-1, 0.4f, 0); break; case VTOLVehicles.FA26B: textMesh.transform.localPosition = new Vector3(-1, 0.5f, 5.5f); break; case VTOLVehicles.F45A: textMesh.transform.localPosition = new Vector3(-1, 0, 6); break; default: textMesh.transform.localPosition = new Vector3(-1, 1, 0); break; } textMesh.transform.localPosition += Vector3.up * 3; textMesh.transform.LookAt(textMesh.transform.position + -jet.transform.right); } else { switch (scene) { case VTOLScenes.ReadyRoom: textMesh.transform.position = new Vector3(-3, -0.5f, -0.5f); break; default: textMesh.transform.position = new Vector3(0, 1, 1); break; } textMesh.transform.position += Vector3.up * 3; } Update3DChat(); }
public Message_SpawnVehicle(VTOLVehicles vehicle, Vector3D position, Vector3D rotation, ulong csteamID, ulong networkID, HPInfo[] hpLoadout, int[] cmLoadout, float normalizedFuel) { this.vehicle = vehicle; this.position = position; this.rotation = rotation; this.csteamID = csteamID; this.networkID = networkID; this.hpLoadout = hpLoadout; this.cmLoadout = cmLoadout; this.normalizedFuel = normalizedFuel; type = MessageType.SpawnVehicle; }
// public int playerCount; public Message_SpawnPlayerVehicle(VTOLVehicles vehicle, Vector3D position, Quaternion rotation, ulong csteamID, ulong networkID, HPInfo[] hpLoadout, int[] cmLoadout, float normalizedFuel, bool isLeftie) { this.vehicle = vehicle; this.position = position; this.rotation = rotation; this.csteamID = csteamID; this.networkID = networkID; this.hpLoadout = hpLoadout; this.cmLoadout = cmLoadout; this.normalizedFuel = normalizedFuel; this.leftie = isLeftie; // this.playerCount = playerCount; type = MessageType.SpawnPlayerVehicle; }
private IEnumerator SetupScene() { while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady || FlightSceneManager.instance.switchingScene) { yield return(null); } aircrarftType = VTOLAPI.GetPlayersVehicleEnum(); tgpMFD = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <TargetingMFDPage>(); player = VTOLAPI.GetPlayersVehicleGameObject().GetComponent <Actor>(); aceMaxDistance = Mathf.Tan((90 - aceFovRange.min) * Mathf.Deg2Rad) * 30; }
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); }
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); } } }
/// <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); } }
public RoundelLayout(VTOLVehicles vehicleType, RoundelPosition[] roundels) { this.vehicleType = vehicleType; this.roundels = roundels; }