private void Awake()
 {
     lastMessage      = new Message_ExtLight(false, false, false, networkUID);
     lightsController = GetComponentInChildren <ExteriorLightsController>();
     traverse         = Traverse.Create(lightsController.navLights[0]);
     traverse2        = Traverse.Create(lightsController.landingLights[0]);
 }
Пример #2
0
    public static GameObject SpawnRepresentation(ulong networkID, Vector3D position, Quaternion rotation, bool isLeft)
    {
        if (networkID == localUID)
        {
            return(null);
        }

        int playerID = FindPlayerIDFromNetworkUID(networkID);

        if (playerID == -1)
        {
            Debug.LogError("Spawn Representation couldn't find a player id.");
        }
        Player player = players[playerID];

        if (player.vehicle != null)
        {
            GameObject.Destroy(player.vehicle);
        }

        GameObject newVehicle = null;

        switch (player.vehicleType)
        {
        case VTOLVehicles.None:
            Debug.LogError("Vehcile Enum seems to be none, couldn't spawn player vehicle");
            return(null);

        case VTOLVehicles.AV42C:
            if (null == av42cPrefab)
            {
                SetPrefabs();
            }
            newVehicle = GameObject.Instantiate(av42cPrefab, VTMapManager.GlobalToWorldPoint(position), rotation);
            break;

        case VTOLVehicles.FA26B:
            if (null == fa26bPrefab)
            {
                SetPrefabs();
            }
            newVehicle = GameObject.Instantiate(fa26bPrefab, VTMapManager.GlobalToWorldPoint(position), rotation);
            break;

        case VTOLVehicles.F45A:
            if (null == f45Prefab)
            {
                SetPrefabs();
            }
            newVehicle = GameObject.Instantiate(f45Prefab, VTMapManager.GlobalToWorldPoint(position), rotation);
            break;
        }
        //Debug.Log("Setting vehicle name");
        newVehicle.name = $"Client [{player.cSteamID}]";
        Debug.Log($"Spawned new vehicle at {newVehicle.transform.position}");
        if (Networker.isHost)
        {
            HealthNetworker_Receiver healthNetworker = newVehicle.AddComponent <HealthNetworker_Receiver>();
            healthNetworker.networkUID = networkID;
        }
        else
        {
            HealthNetworker_ReceiverHostEnforced healthNetworker = newVehicle.AddComponent <HealthNetworker_ReceiverHostEnforced>();
            healthNetworker.networkUID = networkID;
        }
        RigidbodyNetworker_Receiver rbNetworker = newVehicle.AddComponent <RigidbodyNetworker_Receiver>();

        rbNetworker.networkUID = networkID;

        PlaneNetworker_Receiver planeReceiver = newVehicle.AddComponent <PlaneNetworker_Receiver>();

        planeReceiver.networkUID = networkID;

        if (player.vehicleType == VTOLVehicles.AV42C || player.vehicleType == VTOLVehicles.F45A)
        {
            //Debug.Log("Adding Tilt Controller to this vehicle " + message.networkID);
            EngineTiltNetworker_Receiver tiltReceiver = newVehicle.AddComponent <EngineTiltNetworker_Receiver>();
            tiltReceiver.networkUID = networkID;
        }

        Rigidbody rb      = newVehicle.GetComponent <Rigidbody>();
        AIPilot   aIPilot = newVehicle.GetComponent <AIPilot>();

        RotationToggle wingRotator = aIPilot.wingRotator;

        if (wingRotator != null)
        {
            WingFoldNetworker_Receiver wingFoldReceiver = newVehicle.AddComponent <WingFoldNetworker_Receiver>();
            wingFoldReceiver.networkUID     = networkID;
            wingFoldReceiver.wingController = wingRotator;
        }

        LockingRadar lockingRadar = newVehicle.GetComponentInChildren <LockingRadar>();

        if (lockingRadar != null)
        {
            Debug.Log($"Adding LockingRadarReciever to vehicle {newVehicle.name}");
            LockingRadarNetworker_Receiver lockingRadarReceiver = newVehicle.AddComponent <LockingRadarNetworker_Receiver>();
            lockingRadarReceiver.networkUID = networkID;
        }

        ExteriorLightsController extLight = newVehicle.GetComponentInChildren <ExteriorLightsController>();

        if (extLight != null)
        {
            ExtLight_Receiver extLightReceiver = newVehicle.AddComponent <ExtLight_Receiver>();
            extLightReceiver.lightsController = extLight;
            extLightReceiver.networkUID       = networkID;
        }

        aIPilot.enabled = false;
        Debug.Log($"Changing {newVehicle.name}'s position and rotation\nPos:{rb.position} Rotation:{rb.rotation.eulerAngles}");
        aIPilot.kPlane.SetToKinematic();
        aIPilot.kPlane.enabled = false;
        rb.interpolation       = RigidbodyInterpolation.None;

        aIPilot.kPlane.enabled = true;
        aIPilot.kPlane.SetVelocity(Vector3.zero);
        aIPilot.kPlane.SetToDynamic();
        rb.interpolation = RigidbodyInterpolation.Interpolate;

        Debug.Log($"Finished changing {newVehicle.name}\n Pos:{rb.position} Rotation:{rb.rotation.eulerAngles}");

        AvatarManager.SetupAircraftRoundels(newVehicle.transform, player.vehicleType, player.cSteamID, Vector3.zero);

        GameObject parent  = new GameObject("Name Tag Holder");
        GameObject nameTag = new GameObject("Name Tag");

        parent.transform.SetParent(newVehicle.transform);
        parent.transform.localRotation = Quaternion.Euler(0, 180, 0);
        nameTag.transform.SetParent(parent.transform);
        nameTag.AddComponent <Nametag>().SetText(
            SteamFriends.GetFriendPersonaName(player.cSteamID),
            newVehicle.transform, VRHead.instance.transform);
        if (isLeft != PlayerManager.teamLeftie)
        {
            aIPilot.actor.team = Teams.Enemy;
        }

        TargetManager.instance.RegisterActor(aIPilot.actor);
        player.leftie  = isLeft;
        player.vehicle = newVehicle;

        if (!VTOLVR_Multiplayer.AIDictionaries.allActors.ContainsKey(networkID))
        {
            VTOLVR_Multiplayer.AIDictionaries.allActors[networkID]            = aIPilot.actor;
            VTOLVR_Multiplayer.AIDictionaries.reverseAllActors[aIPilot.actor] = networkID;
        }
        else
        {
            VTOLVR_Multiplayer.AIDictionaries.allActors.Remove(networkID);
            VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.Remove(aIPilot.actor);

            VTOLVR_Multiplayer.AIDictionaries.allActors[networkID]            = aIPilot.actor;
            VTOLVR_Multiplayer.AIDictionaries.reverseAllActors[aIPilot.actor] = networkID;
        }

        return(newVehicle);
    }