Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
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)
     {
     }
 }
Exemplo n.º 3
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);
            }
        }
Exemplo n.º 4
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);
        }
    }
Exemplo n.º 5
0
    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");
         * }*/
    }
Exemplo n.º 6
0
        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);
                }
            }
        }
Exemplo n.º 7
0
 private void SceneLoaded(VTOLScenes scene)
 {
     chat.Create3DChat(VTOLAPI.GetPlayersVehicleGameObject(), VTOLAPI.GetPlayersVehicleEnum(), scene);
     manager.Start();
 }
Exemplo n.º 8
0
    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;
        }
    }
Exemplo n.º 9
0
    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);
        }
    }
Exemplo n.º 10
0
    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);
        }
    }