Exemple #1
0
    /// <summary>
    /// When the client receives a P2P message of their spawn point,
    /// this will move them to that location before sending their vehicle
    /// to the host. This will call the function that spawns the local
    /// vehicle.
    /// </summary>
    /// <param name="packet">The message sent over the network</param>
    public static void RequestSpawn_Result(Packet packet) //Run by Clients Only
    {
        Debug.Log("The host has sent back our spawn point");
        Message_RequestSpawn_Result result = (Message_RequestSpawn_Result)((PacketSingle)packet).message;

        Debug.Log($"We need to move to {result.position} : {result.rotation}");

        GameObject localVehicle = VTOLAPI.GetPlayersVehicleGameObject();

        if (localVehicle == null)
        {
            Debug.LogError("The local vehicle was null");
            return;
        }
        localVehicle.transform.position = result.position.toVector3;
        localVehicle.transform.rotation = result.rotation;

        PlayerVehicle currentVehiclet = PilotSaveManager.currentVehicle;

        localVehicle.transform.TransformPoint(currentVehiclet.playerSpawnOffset);

        if (carrierStart)
        {
            if (!carrierFound)
            {
                storedSpawnMessage = packet;
                return;
            }
        }
        SpawnLocalVehicleAndInformOtherClients(localVehicle, localVehicle.transform.position, localVehicle.transform.rotation, result.vehicleUID, result.playerCount);
        localUID = result.vehicleUID;

        Time.timeScale = 1.0f;
    }
Exemple #2
0
    public override void LateUpdate(FlybyCameraMFDPage mfdPage)
    {
        if (SCamPlus.tgpMFD != null)
        {
            mfdPage.flybyCam.transform.position = SCamPlus.tgpMFD.targetingCamera.transform.position;

            mfdPage.flybyCam.transform.rotation = Quaternion.Slerp(SCamPlus.lastRotation, SCamPlus.tgpMFD.targetingCamera.transform.rotation, Time.deltaTime * 1);
            SCamPlus.lastRotation = mfdPage.flybyCam.transform.rotation;

            mfdPage.flybyCam.fieldOfView = SCamPlus.tgpMFD.targetingCamera.fieldOfView;
            mfdPage.behaviorText.text    = "SmoothTGP";
        }
        else
        {
            SCamPlus.tgpMFD = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <TargetingMFDPage>();
            if (mfdPage.weaponManager.opticalTargeter != null)
            {
                mfdPage.flybyCam.transform.position = mfdPage.weaponManager.opticalTargeter.sensorTurret.pitchTransform.position;
                mfdPage.flybyCam.transform.rotation = mfdPage.weaponManager.opticalTargeter.sensorTurret.pitchTransform.rotation;
                mfdPage.flybyCam.fieldOfView        = 60;
                mfdPage.behaviorText.text           = "TGPOff";
            }
            else
            {
                mfdPage.behaviorText.text = "NoTGP";
            }
        }
    }
Exemple #3
0
    public static void RequestSpawn(Packet packet, CSteamID sender) //Run by Host Only
    {
        Message_RequestSpawn lastMessage = (Message_RequestSpawn)((PacketSingle)packet).message;

        Debug.Log("A player has requested for a spawn point");
        if (!Networker.hostLoaded)
        {
            Debug.Log("The host isn't ready yet, adding to queue");
            spawnRequestQueue.Enqueue(lastMessage);
            return;
        }
        if (spawnPoints == null || spawnPoints.Count == 0)
        {
            Debug.LogError("Spawn points was null, we won't be able to find any spawn point then");
            return;
        }
        Transform spawn = FindFreeSpawn(lastMessage.teaml);



        if (Networker.isHost)
        {
            Debug.Log("Telling connected client about AI units");
            AIManager.TellClientAboutAI(new CSteamID(lastMessage.senderSteamID));
        }
        GameObject localVehicle = VTOLAPI.GetPlayersVehicleGameObject();

        Debug.Log("The players spawn will be " + spawn);
        NetworkSenderThread.Instance.SendPacketToSpecificPlayer(sender, new Message_RequestSpawn_Result(new Vector3D(localVehicle.transform.position), localVehicle.transform.rotation, Networker.GenerateNetworkUID(), players.Count), EP2PSend.k_EP2PSendReliable);
    }
Exemple #4
0
        private void Start()
        {
            HarmonyInstance harmony = HarmonyInstance.Create("tacview.harmony");

            Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

            harmony.PatchAll(Assembly.GetExecutingAssembly());
            api = VTOLAPI.instance;


            System.IO.Directory.CreateDirectory("TacViewDataLogs");

            support.WriteLog($"TacView Data Logger {Globals.projectVersion} Loaded. Waiting for Scene Start!");

            SceneManager.sceneLoaded += SceneLoaded;
            SceneReloaded            += RestartScenarioDetected;


            support.WriteLog($"VR Device Refresh Rate: {UnityEngine.XR.XRDevice.refreshRate.ToString()}");
            support.WriteLog($"Target frame time: {(1 / UnityEngine.XR.XRDevice.refreshRate).ToString()}");

            minFrameTime = (1 / UnityEngine.XR.XRDevice.refreshRate) + .0005f;
            maxFrameTime = (1 / UnityEngine.XR.XRDevice.refreshRate) + .001f;
            support.WriteLog($"Min: { minFrameTime} Max: {maxFrameTime}");

            frameRateLogSize = (int)UnityEngine.XR.XRDevice.refreshRate * 2;
            frameRateLog     = new FixedSizedQueue <float>(frameRateLogSize);
        }
Exemple #5
0
        public override void ModLoaded()
        {
            base.ModLoaded();
            stringChanged += IpChanged;
            settings       = new Settings(this);
            settings.CreateCustomLabel("The IP of the system receiving the telemetry stream.");
            settings.CreateCustomLabel("Default = 127.0.0.1");
            settings.CreateStringSetting("Current IP", stringChanged, receiverIp);

            intChanged += PortChanged;
            settings.CreateCustomLabel("The receiverPort to send the telemetry stream to.");
            settings.CreateCustomLabel("Default = 4123");
            settings.CreateIntSetting("Current Port", intChanged, receiverPort);

            udpChanged += udpEnabledChanged;
            settings.CreateCustomLabel("Output telemetry to UDP.");
            settings.CreateCustomLabel("Default = False");
            settings.CreateBoolSetting("Enable UDP Output", udpChanged, udpEnabled);

            csvChanged += csvEnabledChanged;
            settings.CreateCustomLabel("Saves the telemetry log to CSV file in VTOL VR Directory. If this is enabled features such as engine telemetry will not be saved.");
            settings.CreateCustomLabel("Default = False");
            settings.CreateBoolSetting("Enable CSV Output", csvChanged, csvEnabled);

            jsonChanged += jsonEnabledChanged;
            settings.CreateCustomLabel("Saves the telemetry log to JSON file in VTOL VR Directory. If this is enabled features such as engine telemetry will not be saved.");
            settings.CreateCustomLabel("Default = False");
            settings.CreateBoolSetting("Enable JSON Output", jsonChanged, csvEnabled);

            VTOLAPI.CreateSettingsMenu(settings);

            Debug.Log($"{Globals.projectName} - Telemetry Mod {Globals.projectVersion} by {Globals.projectAuthor} loaded!");
        }
Exemple #6
0
    public static List <HPInfo> generateLocalHpInfoList(ulong UID = 0)
    {
        GameObject    localVehicle       = VTOLAPI.GetPlayersVehicleGameObject();
        WeaponManager localWeaponManager = localVehicle.GetComponent <WeaponManager>();

        return(generateHpInfoListFromWeaponManager(localWeaponManager, HPInfoListGenerateNetworkType.generate, UID));
    }
Exemple #7
0
        public override void ModLoaded()
        {
            base.ModLoaded();
            multiplierChanged += failureRateMultiplierChanged;

            failures = GetFailures();

            List <String> failureCategories = new List <string>(failures.Keys);

            settings = new Settings(this);

            settings.CreateCustomLabel("Failure rate multiplier changes how often failures happen.");
            settings.CreateCustomLabel("Default = 1");
            settings.CreateFloatSetting("Failure multiplier:", multiplierChanged, failureRateMultiplier);

            settings.CreateCustomLabel("Failure Categories (Currently Read Only)");

            Dictionary <String, Boolean> failureCategoriesEnabled = new Dictionary <string, bool>();

            foreach (String category in failureCategories)
            {
                failureCategoriesEnabled.Add(category, true);
                settings.CreateBoolSetting(category, failureCategoryChange, true);
            }


            VTOLAPI.CreateSettingsMenu(settings);

            Debug.Log($"{Globals.projectName} - {Globals.projectVersion} by {Globals.projectAuthor} loaded!");
        }
Exemple #8
0
 private IEnumerator SetupScene()
 {
     while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady || FlightSceneManager.instance.switchingScene)
     {
         yield return(null);
     }
     chat.Create3DChat(VTOLAPI.GetPlayersVehicleGameObject(), VTOLAPI.GetPlayersVehicleEnum(), VTOLScenes.Akutan);
     manager.Start();
 }
Exemple #9
0
    private void CreateSettingsPage()
    {
        settings = new Settings(this);


        //public bool spawnRemainingPlayersAtAirBase = false;
        //private bool spawnRemainingPlayersAtAirBase_changed;

        //public bool replaceWingmenWithClients = true;
        //private bool replaceWingmenWithClients_changed;

        //public bool restrictToHostMods = true;
        //private bool restrictToHostMods_changed;

        //public bool forceWinds = false; // not implemented
        //private bool forceWinds_changed;

        //public bool FreeForAllMode = false; // not implemented
        //private bool FreeForAllMode_changed;
        settings.CreateCustomLabel("Host Settings");

        /*spawnRemainingPlayersAtAirBase_changed += spawnRemainingPlayersAtAirBase_Setting;
         * settings.CreateCustomLabel("Spawn players at airbase if there are no wingmen available.");
         * settings.CreateBoolSetting("Default = False", spawnRemainingPlayersAtAirBase_changed, spawnRemainingPlayersAtAirBase);*/


        /*replaceWingmenWithClients_changed += replaceWingmenWithClients_Setting;
         * settings.CreateCustomLabel("Replace AI wingmen (with the same flight designation) with clients.");
         * settings.CreateBoolSetting("Default = True", replaceWingmenWithClients_changed, replaceWingmenWithClients);*/

        restrictToHostMods_changed += restrictToHostMods_Settings;
        settings.CreateCustomLabel("Require clients to use the same mods as host.");
        settings.CreateBoolSetting("Default = True", restrictToHostMods_changed, restrictToHostMods);

        /*forceWinds_changed += forceWinds_Settings;
         * settings.CreateCustomLabel("Force winds on for clients (Not functional).");
         * settings.CreateBoolSetting("Default = True", forceWinds_changed, forceWinds);*/

        debugLogs_changed += debugLog_Settings;
        settings.CreateCustomLabel("Activate Debug Logs.");
        settings.CreateBoolSetting("Default = False", debugLogs_changed, debugLogs);

        /*FreeForAllMode_changed += FreeForAllMode_Settings;
         * settings.CreateCustomLabel("Free For All Mode! Sets all clients to enemies (Not functional).");
         * settings.CreateBoolSetting("Default = True", FreeForAllMode_changed, FreeForAllMode);*/

        DisplayPing_changed += DisplayPing_Settings;
        settings.CreateCustomLabel("Show ping on the screen. (Not vr)");
        settings.CreateBoolSetting("Default = False", DisplayPing_changed, displayPing);

        VTOLAPI.CreateSettingsMenu(settings);
    }
    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;
    }
 void MPCheck()
 {
     foreach (Mod mod in VTOLAPI.GetUsersMods())
     {
         if (mod.name == "Multiplayer")
         {
             Debug.Log("Airtraffic has detected MP, enbling MP mode");
             mpMode = true;
             HostCheck();
             break;
         }
     }
     Debug.Log("The MP mod is not installed.");
 }
    private void CreateSettingsPage()
    {
        settings = new Settings(this);
        settings.CreateCustomLabel("General Settings");
        hidePlayerNameTags_changed += hidePlayerNameTags_Settings;
        hidePlayerRoundels_changed += (set) => { AvatarManager.hideAvatars = set; };
        settings.CreateCustomLabel("Hide player name tags.");
        settings.CreateBoolSetting("Default = False", hidePlayerNameTags_changed, hidePlayerNameTags);
        settings.CreateCustomLabel("Hide players roundels.");
        settings.CreateBoolSetting("Default = False", hidePlayerRoundels_changed, AvatarManager.hideAvatars);

        settings.CreateCustomLabel("Host Settings");

        /*spawnRemainingPlayersAtAirBase_changed += spawnRemainingPlayersAtAirBase_Setting;
         * settings.CreateCustomLabel("Spawn players at airbase if there are no wingmen available.");
         * settings.CreateBoolSetting("Default = False", spawnRemainingPlayersAtAirBase_changed, spawnRemainingPlayersAtAirBase);*/


        /*replaceWingmenWithClients_changed += replaceWingmenWithClients_Setting;
         * settings.CreateCustomLabel("Replace AI wingmen (with the same flight designation) with clients.");
         * settings.CreateBoolSetting("Default = True", replaceWingmenWithClients_changed, replaceWingmenWithClients);*/

        restrictToHostMods_changed += restrictToHostMods_Settings;
        settings.CreateCustomLabel("Require clients to use the same mods as host.");
        settings.CreateBoolSetting("Default = True", restrictToHostMods_changed, restrictToHostMods);

        /*forceWinds_changed += forceWinds_Settings;
         * settings.CreateCustomLabel("Force winds on for clients (Not functional).");
         * settings.CreateBoolSetting("Default = True", forceWinds_changed, forceWinds);*/

        debugLogs_changed += debugLog_Settings;
        settings.CreateCustomLabel("Activate Debug Logs.");
        settings.CreateBoolSetting("Default = False", debugLogs_changed, debugLogs);

        /*FreeForAllMode_changed += FreeForAllMode_Settings;
         * settings.CreateCustomLabel("Free For All Mode! Sets all clients to enemies (Not functional).");
         * settings.CreateBoolSetting("Default = True", FreeForAllMode_changed, FreeForAllMode);*/

        DisplayPing_changed += DisplayPing_Settings;
        settings.CreateCustomLabel("Show ping on the screen. (Not vr)");
        settings.CreateBoolSetting("Default = False", DisplayPing_changed, displayPing);

        displayClouds_changed += DisplayCloud_Settings;
        settings.CreateCustomLabel("Show C");
        settings.CreateBoolSetting("Default = False", displayClouds_changed, displayClouds);

        VTOLAPI.CreateSettingsMenu(settings);
    }
        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);
        }
Exemple #14
0
    public override void LateUpdate(FlybyCameraMFDPage mfdPage)
    {
        if (SCamPlus.extCamManager != null)
        {
            Camera currentCam = SCamPlus.extCamManager.cameras[SCamPlus.extCamManager.camIdx];

            mfdPage.flybyCam.transform.position = currentCam.transform.position;
            mfdPage.flybyCam.transform.rotation = currentCam.transform.rotation;
            mfdPage.flybyCam.fieldOfView        = currentCam.fieldOfView;

            mfdPage.behaviorText.text = "ExtCam";
        }
        else
        {
            SCamPlus.extCamManager    = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <ExternalCamManager>();
            mfdPage.behaviorText.text = "NoExtCam";
        }
    }
Exemple #15
0
 //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)
     {
     }
 }
Exemple #16
0
        public override void ModLoaded()
        {
            HarmonyInstance harmony = HarmonyInstance.Create("cheese.skijump");

            harmony.PatchAll(Assembly.GetExecutingAssembly());

            base.ModLoaded();
            //VTOLAPI.SceneLoaded += SceneLoaded;
            //VTOLAPI.MissionReloaded += MissionReloaded;

            Settings settings = new Settings(this);

            settings.CreateCustomLabel("Watch Settings");

            leftHand_changed += leftHand_Setting;
            settings.CreateBoolSetting("Watch on left hand?", leftHand_changed, leftHand);

            VTOLAPI.CreateSettingsMenu(settings);
        }
Exemple #17
0
    private IEnumerator main()
    {
        while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady || FlightSceneManager.instance.switchingScene)
        {
            yield return(null);
        }
        WeaponManager wm = VTOLAPI.GetPlayersVehicleGameObject().GetComponent <WeaponManager>();

        wma = wm;
        // wm.resourcePath = Environment.CurrentDirectory + "\\VTOLVR_ModLoader\\mods\\AEAT\\nukey";
        VTOLAPI.GetPlayersVehicleGameObject().AddComponent <BOOM>();
        Loadout cloadout = new Loadout();

        cloadout.normalizedFuel = 0.65f;
        cloadout.hpLoadout      = new string[]
        {
            null,
            null,
            "Nuke",
        };
        cloadout.cmLoadout = new int[]
        {
            1000,
            1000
        };
        Loadout loadout = new Loadout();

        loadout.normalizedFuel = 0.65f;
        loadout.hpLoadout      = new string[]
        {
            "fa26_gun"
        };

        if (!triggered)
        {
            // wm.EquipWeapons(loadout);
            EquipCustomWeapons(sloadout, wm);
        }
        Debug.Log("did hax0r");
    }
Exemple #18
0
 public static bool Prefix(ref CampaignSave __result, string campaignID)
 {
     if (!(VTOLAPI.currentScene == VTOLScenes.VehicleConfiguration) || AEAT.trueSave == null)
     {
         //Debug.Log("Not spoofing this save.");
         return(true);
     }
     Debug.Log(AEAT.trueSave.campaignID + " will be used as a campaign save.");
     __result = AEAT.trueSave;
     if (!AEAT.buttonMade)
     {
         Debug.Log(AEAT.path + " is AEAT.path");
         VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath = "hpequips/" + AEAT.path;
         LoadoutConfigurator config = Resources.FindObjectsOfTypeAll <LoadoutConfigurator>()[0];
         config.wm.resourcePath = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath;
         PilotSaveManager.currentVehicle.equipsResourcePath = "hpequips/" + AEAT.path;
         List <string> marsh      = new List <string>();
         List <GameObject> ketkev = new List <GameObject>();
         foreach (var gameobject in Resources.LoadAll <GameObject>("hpequips/" + AEAT.path))
         {
             if (!AllowedEquips.allowedEquips.Contains(gameobject.name))
             {
                 //Debug.Log("Unauthorized gameobject " + gameobject.name);
                 continue;
             }
             marsh.Add(gameobject.name);
             ketkev.Add(gameobject);
         }
         Traverse.Create(config).Field("unlockedWeaponPrefabs").SetValue(new Dictionary <string, EqInfo>());
         Traverse.Create(config).Field("allWeaponPrefabs").SetValue(new Dictionary <string, EqInfo>());
         config.lockedHardpoints = new List <int>();
         VTResources.GetScenario(PilotSaveManager.currentScenario.scenarioID, PilotSaveManager.currentCampaign).allowedEquips = marsh;
         __result.availableWeapons = marsh;
         Debug.Log("Set allowedEquips.");
         PilotSaveManager.currentVehicle.allEquipPrefabs = ketkev; // Don't need to reinit the config because this is prefixing the init statement
     }
     return(false);
 }
Exemple #19
0
    public void Rearm()
    {
        Debug.Log("Rearm!");

        GameObject            vehicle = VTOLAPI.GetPlayersVehicleGameObject();
        WeaponManager         wm      = vehicle.GetComponentInChildren <WeaponManager>();
        CountermeasureManager cm      = vehicle.GetComponentInChildren <CountermeasureManager>();

        Message_WeaponSet_Result rearm = new Message_WeaponSet_Result(
            PlaneEquippableManager.generateHpInfoListFromWeaponManager(wm, PlaneEquippableManager.HPInfoListGenerateNetworkType.generate, PlayerManager.localUID).ToArray(),
            PlaneEquippableManager.generateCounterMeasuresFromCmManager(cm).ToArray(),
            PlaneEquippableManager.generateLocalFuelValue(),
            PlayerManager.localUID);

        if (Networker.isHost)
        {
            NetworkSenderThread.Instance.SendPacketAsHostToAllClients(rearm, Steamworks.EP2PSend.k_EP2PSendReliable);
        }
        else
        {
            NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, rearm, Steamworks.EP2PSend.k_EP2PSendReliable);
        }
    }
Exemple #20
0
    public static void Postfix(RearmingUnitSpawn __instance)
    {
        if (PilotSaveManager.currentScenario.equipConfigurable == false)
        {
            return;
        }
        VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath = "hpequips/" + AEAT.path;
        LoadoutConfigurator config = (LoadoutConfigurator)Traverse.Create(__instance).Field("config").GetValue();

        config.wm.resourcePath = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <WeaponManager>().resourcePath;
        Debug.Log(AEAT.path);
        PilotSaveManager.currentVehicle.equipsResourcePath = "hpequips/" + AEAT.path;
        List <string> marsh             = new List <string>();
        List <GameObject> ketkev        = new List <GameObject>();
        Dictionary <string, EqInfo> lol = new Dictionary <string, EqInfo>();

        foreach (var gameobject in Resources.LoadAll <GameObject>("hpequips/" + AEAT.path))
        {
            if (!AllowedEquips.allowedEquips.Contains(gameobject.name))
            {
                Debug.Log("Unauthorized gameobject " + gameobject.name);
                continue;
            }
            marsh.Add(gameobject.name);
            ketkev.Add(gameobject);
            lol.Add(gameobject.name, new EqInfo(gameobject, AEAT.path));
        }
        config.availableEquipStrings = marsh;
        PilotSaveManager.currentVehicle.allEquipPrefabs = ketkev;
        Traverse.Create(config).Field("unlockedWeaponPrefabs").SetValue(new Dictionary <string, EqInfo>());
        Traverse.Create(config).Field("allWeaponPrefabs").SetValue(new Dictionary <string, EqInfo>());
        config.Initialize(PilotSaveManager.current.GetVehicleSave(PilotSaveManager.currentVehicle.vehicleName).GetCampaignSave(PilotSaveManager.currentCampaign.campaignID), false);
        if (config.fullInfo != null)
        {
            config.fullInfo.CloseInfo();
        }
    }
Exemple #21
0
        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);
            }
        }
Exemple #22
0
        public void Start()
        {
            HarmonyInstance harmony = HarmonyInstance.Create("vtolvrTelemetry.logger.logger");

            harmony.PatchAll(Assembly.GetExecutingAssembly());

            udpClient = new UdpClient();
            udpClient.Connect(receiverIp, receiverPort);

            Support.WriteLog("Running Startup and Waiting for map load");
            vtolmod_api = VTOLAPI.instance;

            StartCoroutine(WaitForMap());

            System.IO.Directory.CreateDirectory("TelemtryDataLogs");
            System.IO.Directory.CreateDirectory("TelemtryDataLogs\\" + DateTime.UtcNow.ToString("yyyy-MM-dd HHmm"));

            DataLogFolder = "TelemtryDataLogs\\" + DateTime.UtcNow.ToString("yyyy-MM-dd HHmm") + "\\";

            csv_path  = @DataLogFolder + "datalog.csv";
            json_path = @DataLogFolder + "datalog.json";

            dataGetter = new DataGetters(this);
        }
Exemple #23
0
    /// <summary>
    /// This gives all the people waiting their spawn points
    /// </summary>
    private static void SpawnRequestQueue() //Run by Host Only
    {
        Debug.Log($"Giving {spawnRequestQueue.Count} people their spawns");
        Transform lastSpawn;

        while (spawnRequestQueue.Count > 0)
        {
            Message_RequestSpawn lastMessage = spawnRequestQueue.Dequeue();
            lastSpawn = FindFreeSpawn(lastMessage.teaml);
            Debug.Log("The players spawn will be " + lastSpawn);


            if (Networker.isHost)
            {
                Debug.Log("Telling connected client about AI units");
                AIManager.TellClientAboutAI(new CSteamID(lastMessage.senderSteamID));
            }
            GameObject localVehicle = VTOLAPI.GetPlayersVehicleGameObject();
            NetworkSenderThread.Instance.SendPacketToSpecificPlayer(
                new CSteamID(lastMessage.senderSteamID),
                new Message_RequestSpawn_Result(new Vector3D(localVehicle.transform.position), localVehicle.transform.rotation, Networker.GenerateNetworkUID(), players.Count),
                EP2PSend.k_EP2PSendReliable);
        }
    }
Exemple #24
0
    IEnumerator RespawnTimer()
    {
        Debug.Log("Starting respawn timer.");

        yield return(new WaitForSeconds(15));

        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 < 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);
            }
        }

        GameObject newPlayer = Instantiate(PilotSaveManager.currentVehicle.vehiclePrefab);

        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;
        Rigidbody rb = newPlayer.GetComponent <Rigidbody>();

        rb.detectCollisions = false;
        rearmPoint.BeginReArm();
        rb.velocity         = Vector3.zero;
        rb.detectCollisions = true;

        PlayerManager.SetupLocalAircraft(newPlayer, newPlayer.transform.position, newPlayer.transform.rotation, networkUID);

        lastMessage.UID      = networkUID;
        lastMessage.isLeftie = PlayerManager.teamLeftie;

        if (Networker.isHost)
        {
            NetworkSenderThread.Instance.SendPacketAsHostToAllClients(lastMessage, Steamworks.EP2PSend.k_EP2PSendUnreliableNoDelay);
        }
        else
        {
            NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, lastMessage, Steamworks.EP2PSend.k_EP2PSendUnreliableNoDelay);
        }
    }
Exemple #25
0
        private IEnumerator WaitForScenario()
        {
            if (!runlogger)
            {
                while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady)
                {
                    yield return(null);
                }

                // Delaying start of capture process for two seconds to let the game catch up.
                yield return(new WaitForSeconds(2));

                mapManager                  = VTMapManager.fetch;
                actorProcessor.support      = support;
                heightmapGeneration.support = support;
                support.mm                  = mapManager;


                support.WriteLog("Map ID:");
                support.WriteLog(mapManager.map.mapID);

                if (customScene)
                {
                    VTMapCustom[] customMaps = FindObjectsOfType <VTMapCustom>();

                    foreach (VTMapCustom map in customMaps)
                    {
                        if (mapManager.map.mapID == map.mapID)
                        {
                            support.WriteLog("I THINK I CAN I THINK I CAN I THINK I CAN!");
                            gameHeightmap = map.heightMap;
                        }
                    }
                }
                else
                {
                    gameHeightmap = mapManager.fallbackHeightmap;
                }

                heightmapGeneration.gameHeightmap = gameHeightmap;


                support.WriteLog("Scenario Ready!");

                support.WriteLog("Getting Players Vehicle");
                currentVehicle = VTOLAPI.GetPlayersVehicleGameObject();

                support.WriteLog("Creating TacView Directory");
                System.IO.Directory.CreateDirectory("TacViewDataLogs\\" + DateTime.UtcNow.ToString("yyyy-MM-dd HHmm"));

                TacViewFolder = "TacViewDataLogs\\" + DateTime.UtcNow.ToString("yyyy-MM-dd HHmm") + "\\";

                path = @TacViewFolder + "datalog.acmi";

                acmi = new ACMI();

                support.WriteLog("Creating TacView File");
                // Create a file to write to.
                using (StreamWriter sw = File.CreateText(path))
                {
                    sw.WriteLine(acmi.acmi21Header());
                }

                // Setting the current recording time
                support.WriteLog("Writing Reference Time");
                string timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
                using (StreamWriter sw = File.AppendText(path))
                {
                    sw.WriteLine("0,RecordingTime=" + timestamp);
                }

                support.WriteLog($"Env Name: {VTScenario.current.envName}");


                //Setting a custom hour to simulate the time of day based on the current scenario
                if (VTScenario.current.envName == "day")
                {
                    using (StreamWriter sw = File.AppendText(path))
                    {
                        timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd");
                        string minsec = DateTime.UtcNow.ToString("mm:ss");
                        timestamp += $"T13:{minsec}Z";
                        sw.WriteLine("0,ReferenceTime=" + timestamp);
                    }
                }
                else if (VTScenario.current.envName == "morning")
                {
                    using (StreamWriter sw = File.AppendText(path))
                    {
                        timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd");
                        string minsec = DateTime.UtcNow.ToString("mm:ss");
                        timestamp += $"T06:{minsec}Z";
                        sw.WriteLine("0,ReferenceTime=" + timestamp);
                    }
                }
                else if (VTScenario.current.envName == "night")
                {
                    using (StreamWriter sw = File.AppendText(path))
                    {
                        timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd");
                        string minsec = DateTime.UtcNow.ToString("mm:ss");
                        timestamp += $"T23:{minsec}Z";
                        sw.WriteLine("0,ReferenceTime=" + timestamp);
                    }
                }
                else
                {
                    support.WriteLog($"Unknown Scenario Env (day/morning/night) {VTScenario.current.envName}");
                    using (StreamWriter sw = File.AppendText(path))
                    {
                        sw.WriteLine("0,ReferenceTime=" + timestamp);
                    }
                }

                // Custom Scene is set for anything not on the Akutan map
                support.WriteLog($"Custom Scene: {customScene}");

                getGlobalMissionProperties();
                getObjectives();

                //// Elapsed time isn't used for anything anymore apparently... I'll keep it around for a reminder of better times.
                ////missionElapsedTime = FlightSceneManager.instance.missionElapsedTime;

                support.WriteLog("Running Logger");
                runlogger = true;

                // Start the function to save the mission data
                StartCoroutine(writeString());

                //// Get the heightmap info (Requires the map manager for the built in map)
                heightmapGeneration.getHeightMap(customScene, TacViewFolder, mapManager);


                // Get the airports
                getAirports();
            }
        }
Exemple #26
0
        static bool Prefix(AeroController.ControlSurfaceTransform __instance)
        {
            if (__instance.transform == null || (!__instance.transform.root.GetComponent <Actor>().isPlayer&&
                                                 __instance.transform.root.GetComponent <Actor>().team == Teams.Enemy))
            {
                return(true);
            }

            switch (__instance.transform.name)
            {
            case "canardLeft":
            {
                var leftCanard = __instance.transform.parent;

                _fakeLeftCan = GameObject.Instantiate(leftCanard.gameObject, leftCanard.parent, true);
                _fakeLeftCan.transform.name = "FakeCanardLeft";

                _fakeLeftCan.transform.localPosition = leftCanard.transform.localPosition;
                _fakeLeftCan.transform.localRotation = leftCanard.transform.localRotation;
                _fakeLeftCan.transform.localScale    = leftCanard.transform.localScale;

                _fakeLeftCan.transform.localPosition = new Vector3(1.01f, 1.12f, 8.16f);
                _fakeLeftCan.transform.Rotate(0f, 0f, 4.679f, Space.Self);
                _fakeLeftCan.transform.localScale = new Vector3(1.615172f, 1.488211f, 1f);

                foreach (Wing w in _fakeLeftCan.GetComponentsInChildren <Wing>(true))
                {
                    Destroy(w);
                }

                CreateControlSurface(
                    VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <AeroController>(true),
                    _fakeLeftCan.transform, __instance);


                var meshes = leftCanard.GetComponentsInChildren <MeshRenderer>();

                foreach (var mesh in meshes)
                {
                    mesh.enabled = false;
                }

                Debug.Log("F35 - Copied left");
                break;
            }

            case "canardRight":
            {
                var rightCanard = __instance.transform.parent;

                _fakeRightCan = GameObject.Instantiate(rightCanard.gameObject, rightCanard.parent, true);
                _fakeRightCan.transform.name = "fakeCanardRight";

                _fakeRightCan.transform.localPosition = rightCanard.transform.localPosition;
                _fakeRightCan.transform.localRotation = rightCanard.transform.localRotation;
                _fakeRightCan.transform.localScale    = rightCanard.transform.localScale;

                _fakeRightCan.transform.localPosition = new Vector3(-1.01f, 1.12f, 8.16f);
                _fakeRightCan.transform.Rotate(0f, 0f, -4.679f, Space.Self);
                _fakeRightCan.transform.localScale = new Vector3(1.615172f, 1.488211f, 1f);

                _fakeRightCan.transform.localPosition = new Vector3(-1.01f, 1.12f, 8.16f);
                _fakeRightCan.transform.Rotate(0f, 0f, -4.679f, Space.Self);
                _fakeRightCan.transform.localScale = new Vector3(1.615172f, 1.488211f, 1f);


                foreach (var w in _fakeRightCan.GetComponentsInChildren <Wing>(true))
                {
                    Destroy(w);
                }

                CreateControlSurface(
                    VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <AeroController>(true),
                    _fakeRightCan.transform, __instance);

                var meshes = rightCanard.GetComponentsInChildren <MeshRenderer>();

                foreach (var mesh in meshes)
                {
                    mesh.enabled = false;
                }

                Debug.Log("F35 - Copied right");
                break;
            }
            }

            return(true);
        }
Exemple #27
0
    public static List <Player> players = new List <Player>(); //This is the list of players
    /// <summary>
    /// This runs when the map has finished loading and hopefully
    /// when the player first can interact with the vehicle.
    /// </summary>
    public static IEnumerator MapLoaded()
    {
        Debug.Log("map loading started");
        while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady || FlightSceneManager.instance.switchingScene)
        {
            yield return(null);
        }
        Debug.Log("The map has loaded");
        gameLoaded = true;
        // As a client, when the map has loaded we are going to request a spawn point from the host
        SetPrefabs();

        carrierStart = FlightSceneManager.instance.playerActor.unitSpawn.unitSpawner.linkedToCarrier;

        if (!Networker.isHost)
        {
            FlightSceneManager.instance.playerActor.gameObject.transform.parent = null;
            Debug.Log($"Sending spawn request to host, host id: {Networker.hostID}, client id: {SteamUser.GetSteamID().m_SteamID}");
            Debug.Log("Killing all units currently on the map.");
            List <Actor> allActors = new List <Actor>();
            foreach (var actor in TargetManager.instance.allActors)
            {
                if (!actor.isPlayer)
                {
                    allActors.Add(actor);
                }
            }
            foreach (var actor in allActors)
            {
                TargetManager.instance.UnregisterActor(actor);
                GameObject.Destroy(actor.gameObject);
            }
            VTScenario.current.units.units.Clear();
            VTScenario.current.units.alliedUnits.Clear();
            VTScenario.current.units.enemyUnits.Clear();
            VTScenario.current.groups.DestroyAll();


            if (teamLeftie)
            {
                foreach (AirportManager airportManager in VTMapManager.fetch.airports)
                {
                    if (airportManager.team == Teams.Allied)
                    {
                        airportManager.team = Teams.Enemy;
                    }
                    else
                    if (airportManager.team == Teams.Enemy)
                    {
                        airportManager.team = Teams.Allied;
                    }
                }
            }


            var rearmPoints = GameObject.FindObjectsOfType <ReArmingPoint>();
            //back up option below

            if (teamLeftie)
            {
                foreach (ReArmingPoint rep in rearmPoints)
                {
                    if (rep.team == Teams.Allied)
                    {
                        rep.team      = Teams.Enemy;
                        rep.canArm    = true;
                        rep.canRefuel = true;
                    }
                    else
                    if (rep.team == Teams.Enemy)
                    {
                        rep.team = Teams.Allied;

                        rep.canArm    = true;
                        rep.canRefuel = true;
                    }
                }
            }


            Message_RequestSpawn msg = new Message_RequestSpawn(teamLeftie, SteamUser.GetSteamID().m_SteamID);
            NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, msg, EP2PSend.k_EP2PSendReliable);

            /*foreach (var actor in TargetManager.instance.allActors)
             * {
             *  VTScenario.current.units.AddSpawner(actor.unitSpawn.unitSpawner);
             * }*/
        }
        else
        {
            Debug.Log("Starting map loaded host routines");
            Networker.hostLoaded = true;
            Networker.hostReady  = true;
            foreach (var actor in TargetManager.instance.allActors)
            {
                AIManager.setupAIAircraft(actor);
            }
            NetworkSenderThread.Instance.SendPacketAsHostToAllClients(new Message_HostLoaded(true), EP2PSend.k_EP2PSendReliable);
            GameObject localVehicle = VTOLAPI.GetPlayersVehicleGameObject();
            if (localVehicle != null)
            {
                GenerateSpawns(localVehicle.transform);
                localUID = Networker.GenerateNetworkUID();
                UIDNetworker_Sender hostSender = localVehicle.AddComponent <UIDNetworker_Sender>();
                hostSender.networkUID = localUID;
                Debug.Log($"The host's uID is {localUID}");


                Transform hostTrans = localVehicle.transform;
                ///uncomment to randomise host spawn//
                ///

                localVehicle.transform.position = hostTrans.position;

                SpawnLocalVehicleAndInformOtherClients(localVehicle, hostTrans.transform.position, hostTrans.transform.rotation, localUID, 0);
            }
            else
            {
                Debug.Log("Local vehicle for host was null");
            }
            if (spawnRequestQueue.Count != 0)
            {
                SpawnRequestQueue();
            }
            Networker.alreadyInGame = true;
        }

        while (AIManager.AIsToSpawnQueue.Count > 0)
        {
            AIManager.SpawnAIVehicle(AIManager.AIsToSpawnQueue.Dequeue());
        }
        SpawnPlayersInPlayerSpawnQueue();


        if (!Networker.isHost)
        {
            // If the player is not the host, they only need a receiver?
            Debug.Log($"Player not the host, adding world data receiver");
            worldData = new GameObject();
            worldData.AddComponent <WorldDataNetworker_Receiver>();
        }
        else
        {
            // If the player is the host, setup the sender so they can send world data
            Debug.Log($"Player is the host, setting up the world data sender");
            worldData = new GameObject();
            worldData.AddComponent <WorldDataNetworker_Sender>();
        }
    }
Exemple #28
0
    /// <summary>
    /// When the user has received a message of spawn player vehicle,
    /// this creates the player vehicle and removes any thing which shouldn't
    /// be on it.
    /// </summary>
    /// <param name="packet">The message</param>
    public static void SpawnPlayerVehicle(Packet packet, CSteamID sender) //Both, but never spawns the local vehicle, only executes spawn vehicle messages from other clients
    {
        // We don't actually need the "sender" id, unless we're a client and want to check that the packet came from the host
        // which we're not doing right now.
        Message_SpawnPlayerVehicle message = (Message_SpawnPlayerVehicle)((PacketSingle)packet).message;

        if (message.networkID == PlayerManager.localUID)
        {
            return;
        }

        Debug.Log($"Recived a Spawn Vehicle Message from: {message.csteamID}");
        CSteamID spawnerSteamId = new CSteamID(message.csteamID);

        if (!gameLoaded)
        {
            Debug.LogWarning("Our game isn't loaded, adding spawn vehicle to queue");
            playersToSpawnQueue.Enqueue(packet);
            playersToSpawnIdQueue.Enqueue(sender);
            return;
        }
        //foreach (ulong id in spawnedVehicles)
        //{
        //    if (id == message.csteamID)
        //    {
        //        Debug.Log("Got a spawnedVehicle message for a vehicle we have already added! Returning....");
        //        return;
        //    }
        //}
        //spawnedVehicles.Add(message.csteamID);
        Debug.Log("Got a new spawnVehicle uID.");
        if (Networker.isHost)
        {
            //Debug.Log("Generating UIDS for any missiles the new vehicle has");
            for (int i = 0; i < message.hpLoadout.Length; i++)
            {
                for (int j = 0; j < message.hpLoadout[i].missileUIDS.Length; j++)
                {
                    if (message.hpLoadout[i].missileUIDS[j] != 0)
                    {
                        //Storing the old one
                        ulong clientsUID = message.hpLoadout[i].missileUIDS[j];
                        //Generating a new global UID for that missile
                        message.hpLoadout[i].missileUIDS[j] = Networker.GenerateNetworkUID();
                        //Sending it back to that client
                        NetworkSenderThread.Instance.SendPacketToSpecificPlayer(spawnerSteamId,
                                                                                new Message_RequestNetworkUID(clientsUID, message.hpLoadout[i].missileUIDS[j]),
                                                                                EP2PSend.k_EP2PSendReliable);
                    }
                }
            }

            Debug.Log("Telling other clients about new player and new player about other clients. Player count = " + players.Count);
            for (int i = 0; i < players.Count; i++)
            {
                if (players[i].cSteamID == SteamUser.GetSteamID())
                {
                    //Debug.LogWarning("Skiping this one as it's the host");
                    //Send the host player to the new player.
                    //Debug.Log($"Running host code to tell new player about host vehicle.");

                    GameObject    localVehicle       = VTOLAPI.GetPlayersVehicleGameObject();
                    WeaponManager localWeaponManager = localVehicle.GetComponent <WeaponManager>();

                    List <HPInfo> hpInfos = PlaneEquippableManager.generateHpInfoListFromWeaponManager(localWeaponManager,
                                                                                                       PlaneEquippableManager.HPInfoListGenerateNetworkType.sender);
                    CountermeasureManager cmManager = localVehicle.GetComponentInChildren <CountermeasureManager>();
                    List <int>            cm        = PlaneEquippableManager.generateCounterMeasuresFromCmManager(cmManager);
                    float fuel = PlaneEquippableManager.generateLocalFuelValue();

                    NetworkSenderThread.Instance.SendPacketToSpecificPlayer(spawnerSteamId,
                                                                            new Message_SpawnPlayerVehicle(
                                                                                players[i].vehicleType,
                                                                                VTMapManager.WorldToGlobalPoint(players[i].vehicle.transform.position),
                                                                                players[i].vehicle.transform.rotation,
                                                                                players[i].cSteamID.m_SteamID,
                                                                                players[i].vehicleUID,
                                                                                hpInfos.ToArray(),
                                                                                cm.ToArray(),
                                                                                fuel, players[i].leftie),
                                                                            EP2PSend.k_EP2PSendReliable);

                    //Debug.Log($"We have told the new player about the host and NOT the other way around.");
                    //Debug.Log($"We don't need to resync the host weapons, that's guaranteed to already be up to date.");
                    continue;
                }

                if (players[i].vehicle != null)
                {
                    PlaneNetworker_Receiver existingPlayersPR = players[i].vehicle.GetComponent <PlaneNetworker_Receiver>();
                    //We first send the new player to an existing spawned in player
                    NetworkSenderThread.Instance.SendPacketToSpecificPlayer(players[i].cSteamID, message, EP2PSend.k_EP2PSendReliable);
                    //Then we send this current player to the new player.
                    NetworkSenderThread.Instance.SendPacketToSpecificPlayer(spawnerSteamId,
                                                                            new Message_SpawnPlayerVehicle(
                                                                                players[i].vehicleType,
                                                                                VTMapManager.WorldToGlobalPoint(players[i].vehicle.transform.position),
                                                                                players[i].vehicle.transform.rotation,
                                                                                players[i].cSteamID.m_SteamID,
                                                                                players[i].vehicleUID,
                                                                                existingPlayersPR.GenerateHPInfo(),
                                                                                existingPlayersPR.GetCMS(),
                                                                                existingPlayersPR.GetFuel(), players[i].leftie),
                                                                            EP2PSend.k_EP2PSendReliable);
                    //Debug.Log($"We have told {players[i].cSteamID.m_SteamID} about the new player ({message.csteamID}) and the other way round.");

                    //We ask the existing player what their load out just incase the host's player receiver was out of sync.
                    NetworkSenderThread.Instance.SendPacketToSpecificPlayer(players[i].cSteamID,
                                                                            new Message(MessageType.WeaponsSet),
                                                                            EP2PSend.k_EP2PSendReliable);
                    //Debug.Log($"We have asked {players[i].cSteamID.m_SteamID} what their current weapons are, and now waiting for a responce."); // marsh typo response lmao
                }
                else
                {
                    Debug.Log("players[" + i + "].vehicle is null");
                }
            }
        }

        if (Networker.isHost)
        {
            Debug.Log("Telling connected client about AI units");
            AIManager.TellClientAboutAI(spawnerSteamId);
        }
        AddToPlayerList(new Player(spawnerSteamId, null, message.vehicle, message.networkID, message.leftie));

        GameObject puppet = SpawnRepresentation(message.networkID, message.position, message.rotation, message.leftie);

        if (puppet != null)
        {
            PlaneEquippableManager.SetLoadout(puppet, message.networkID, message.normalizedFuel, message.hpLoadout, message.cmLoadout);
        }
    }
Exemple #29
0
        public IEnumerator main()
        {
            while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady || FlightSceneManager.instance.switchingScene)
            {
                yield return(null);
            }
            buttonMade = false;
            Debug.Log("AAAAAAAA");
            wm           = VTOLAPI.GetPlayersVehicleGameObject().GetComponent <WeaponManager>();
            flightAssist = VTOLAPI.GetPlayersVehicleGameObject().GetComponentInChildren <FlightAssist>();
            Main.flightAssist.assistEnabled = false;
            {
                Main.MFDP = wm.gameObject.GetComponentInChildren <MFDPortalManager>();
                MFDPStoresManagement MFDP = (MFDPStoresManagement)Main.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");
                }
                //THANK YOU TEMPERZ87 FOR BUTTON CODE
                //create button object
                GameObject emptyButton = Instantiate(toCopy, MFDP.displayObj.gameObject.transform);
                //get transform object (position)
                RectTransform rt = emptyButton.GetComponent <RectTransform>();
                Main.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 = "FltAst";
                Debug.Log("flightassist");
                interactable.OnInteract = new UnityEvent();
                Debug.Log("new UnityEvent()");
                interactable.interactableName = "Toggle Flight Assist";
                Debug.Log("toggle Flight Assist");
                interactable.OnInteract.AddListener(new UnityAction(() =>
                {
                    Main.flightAssist.assistEnabled = !Main.flightAssist.assistEnabled;
                    Main.MFDP.PlayInputSound();
                    Main.text1.color = Main.flightAssist.assistEnabled ? Color.green : Color.red;
                }));
                Debug.Log("listener");
                Main.text1.color = Main.flightAssist.assistEnabled ? 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 = "Thrust";
                Debug.Log("Thrust Event");
                interactable2.OnInteract = new UnityEvent();
                Debug.Log("new UnityEvent()");
                interactable2.interactableName = "Toggle Ultra Thrust";
                Debug.Log("Create Thrust Listener");
                interactable2.OnInteract.AddListener(new UnityAction(() =>
                {
                    enableSuperThrust = !enableSuperThrust;
                    Main.MFDP.PlayInputSound();
                    Main.text2.color = enableSuperThrust ? Color.green : Color.red;
                }));
                Main.text2.color = enableSuperThrust ? Color.green : Color.red;
            }
        }
Exemple #30
0
    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);
        }
    }