//public Animator doorAnimator; //public float doorPosition; void Awake() { aircraft = GetComponent <AIAircraftSpawn>(); pilot = GetComponent <AIPilot>(); rb = GetComponent <Rigidbody>(); //doorAnimator = GetComponentInChildren<Animator>(); gearAnimator = GetComponentInChildren <GearAnimator>(); tailHook = GetComponentInChildren <Tailhook>(); catHook = GetComponentInChildren <CatapultHook>(); refuelPort = GetComponentInChildren <RefuelPort>(); wingRotator = pilot.wingRotator; kPlane = GetComponent <KinematicPlane>(); fuelTank = GetComponent <FuelTank>(); waypoint = new Waypoint(); GameObject waypointObject = new GameObject(); waypointObject.AddComponent <FloatingOriginTransform>(); waypoint.SetTransform(waypointObject.transform); tilter = GetComponent <TiltController>(); normalSpeed = pilot.navSpeed; health = GetComponent <Health>(); health.OnDeath.AddListener(OnDeath); }
private void Awake() { aiPilot = GetComponent <AIPilot>(); autoPilot = aiPilot.autoPilot; Networker.PlaneUpdate += PlaneUpdate; Networker.WeaponSet_Result += WeaponSet_Result; Networker.Disconnecting += OnDisconnect; Networker.WeaponFiring += WeaponFiring; Networker.WeaponStoppedFiring += WeaponStoppedFiring; weaponManager = GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError("Weapon Manager was null on " + gameObject.name); } cmManager = GetComponentInChildren <CountermeasureManager>(); if (cmManager == null) { Debug.LogError("CountermeasureManager was null on " + gameObject.name); } fuelTank = GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("FuelTank was null on " + gameObject.name); } traverse = Traverse.Create(weaponManager); }
public AIState(string name, AIPilot pilot) { this.name = name; this.pilot = pilot; this.entity = pilot.entity; this.transform = entity.transform; this.sensorSystem = entity.sensorSystem; this.engineSystem = entity.engineSystem; this.weaponSystem = entity.weaponSystem; this.commSystem = entity.commSystem; this.navSystem = entity.navSystem; }
public AISubstate(AIState parentState) { this.parentState = parentState; this.pilot = parentState.pilot; this.entity = parentState.pilot.entity; this.transform = entity.transform; this.sensorSystem = entity.sensorSystem; this.engineSystem = entity.engineSystem; this.weaponSystem = entity.weaponSystem; this.commSystem = entity.commSystem; this.navSystem = entity.navSystem; }
private void SpawnXWing() { xWing = Instantiate(xWingPrefab, xWingSpawnPoint.position, Quaternion.identity); xWing.transform.LookAt(GameObject.Find("Waypoints/Waypoint 1").transform); xWing.name = "Rookie " + rookieIndex++; AIPilot aiPilot = xWing.GetComponent <AIPilot>(); aiPilot.waypoints = new Transform[] { GameObject.Find("Waypoints/Waypoint 1").transform, GameObject.Find("Waypoints/Waypoint 2").transform, }; }
static void Postfix(AIPilot __instance) { if (CheesesAITweaks.settings.rockWingsOnContact || CheesesAITweaks.settings.dropTankMode == CheesesAITweaks.DropTankMode.DropOnContact) { if (CheesesAITweaks.aiToHelper.ContainsKey(__instance)) { CheeseAIHelper helper = CheesesAITweaks.aiToHelper[__instance]; if (__instance.commandState == AIPilot.CommandStates.Combat && helper.lastInCombat == false) { helper.BeginContact(); } } } }
static bool Prefix(AIPilot __instance) { switch (CheesesAITweaks.settings.collisionMode) { case CheesesAITweaks.CollisionMode.Normal: return(true); case CheesesAITweaks.CollisionMode.CollidersAlwaysOn: return(true); case CheesesAITweaks.CollisionMode.CollidersAlwaysOff: return(false); } return(true); }
void Spawn() { Debug.Log("Spawning CAP F/A-26B"); gameObject = GameObject.Instantiate(UnitCatalogue.GetUnitPrefab("FA-26B AI")); gameObject.AddComponent <FloatingOriginTransform>(); transform = gameObject.transform; aircraft = gameObject.GetComponent <AIAircraftSpawn>(); pilot = gameObject.GetComponent <AIPilot>(); rb = gameObject.GetComponent <Rigidbody>(); rb.interpolation = RigidbodyInterpolation.Interpolate; gameObject.GetComponent <KinematicPlane>().SetToKinematic(); Loadout loadout = new Loadout(); loadout.hpLoadout = new string[] { "af_gun", "af_aim9", "af_aim9", "af_amraamRail", "af_amraam", "af_amraam", "af_amraam", "af_amraam", "af_amraamRail", "af_aim9", "af_aim9", "fa26_droptank", "fa26_droptank", "fa26_droptank", "af_tgp", "" }; loadout.cmLoadout = new int[] { 120, 120 }; loadout.normalizedFuel = 1; gameObject.GetComponent <WeaponManager>().EquipWeapons(loadout); }
static void Postfix(AIPilot __instance) { __instance.gameObject.AddComponent <CheeseAIHelper>(); Traverse aiTraverse = Traverse.Create(__instance); switch (CheesesAITweaks.settings.collisionMode) { case CheesesAITweaks.CollisionMode.Normal: break; case CheesesAITweaks.CollisionMode.CollidersAlwaysOn: aiTraverse.Method("SetCollidersToVessel").GetValue(); break; case CheesesAITweaks.CollisionMode.CollidersAlwaysOff: aiTraverse.Method("SetCollidersForTaxi").GetValue(); break; } }
private void Start() { Debug.Log("Setting up aircraft noise!"); pitchOffset = UnityEngine.Random.Range(-10f, 10f); yawOffset = UnityEngine.Random.Range(-10f, 10f); rollOffset = UnityEngine.Random.Range(-10f, 10f); throttleOffset = UnityEngine.Random.Range(-10f, 10f); pitchTimeOffset = UnityEngine.Random.Range(-60f, 60f); yawTimeOffset = UnityEngine.Random.Range(-60f, 60f); rollTimeOffset = UnityEngine.Random.Range(-60f, 60f); throttleTimeOffset = UnityEngine.Random.Range(-60f, 60f); ap = GetComponent <AutoPilot>(); if (CheesesAITweaks.apToHelper.ContainsKey(ap) == false) { CheesesAITweaks.apToHelper.Add(ap, this); } ai = GetComponent <AIPilot>(); if (CheesesAITweaks.aiToHelper.ContainsKey(ai) == false) { CheesesAITweaks.aiToHelper.Add(ai, this); } rb = GetComponent <Rigidbody>(); rp = GetComponent <RefuelPlane>(); largeAircraft = ai.parkingSize >= 20; if (largeAircraft) { frequncy = CheesesAITweaks.settings.controlNoiseLargeAircraftFrequency; } else { frequncy = CheesesAITweaks.settings.controlNoiseFrequency; } }
public AIState_Attack(AIPilot pilot) : base("Attack", pilot) { substates = GetSubstates(this); }
public IEnumerator main() { Vector3 PitchYawRoll = new Vector3(); bool tiltC = false; while (VTMapManager.fetch == null || !VTMapManager.fetch.scenarioReady) { yield return(null); } foreach (var thing in FindObjectsOfType <AIPilot>()) { Stuff += thing.gameObject.name + " "; } goOn = true; while (GoOn == false) { Stuff = ""; foreach (var thing in FindObjectsOfType <AIPilot>()) { Stuff += thing.gameObject.name + " "; } yield return(null); } AIPilot toControl = new AIPilot(); bool found = false; AIPilot[] wut = FindObjectsOfType <AIPilot>(); for (int i = 0; i < wut.Length; i++) { if (wut[i].gameObject.name.Contains(toEdit)) { toControl = wut[i]; found = true; break; } } if (!found) { Debug.LogError("Couldn't find AIPilot, defaulting to 0."); toControl = wut[0]; } toControl.commandState = AIPilot.CommandStates.Override; foreach (var thing in FindObjectsOfType <AIPilot>()) { Debug.Log(thing); } GameObject targetVehicle = toControl.gameObject; if (targetVehicle != null) { Debug.Log("GOT THE TARGET VEHICLE!!!"); } TiltController TC = targetVehicle.GetComponent <TiltController>(); if (TC != null) { tiltC = true; } Transform transform = FlightSceneManager.instance.playerActor.transform; FloatingOriginShifter playerfos = transform.GetComponent <FloatingOriginShifter>(); if (playerfos) { playerfos.enabled = false; } GameObject empty = new GameObject(); GameObject Cammy = Instantiate(empty, transform.position, Quaternion.identity); Actor targetActor = targetVehicle.GetComponent <Actor>(); // targetActor.team = Teams.Allied; Camera CammyCam = Cammy.AddComponent <Camera>(); CameraFollowMe cam = Cammy.AddComponent <CameraFollowMe>(); cam.targets = new List <Transform>(); Debug.Log("Target list created."); cam.AddTarget(targetActor.transform); Debug.Log("Added our actor to the target."); if (targetActor.transform == null) { Debug.LogError("Actor transform is null."); } if (cam.gameObject == null) { Debug.LogError("cam gameObject is null."); } cam.cam = CammyCam; cam.gameObject.SetActive(true); cam.AddTarget(FlightSceneManager.instance.playerActor.transform); GameSettings.SetGameSettingValue("HIDE_HELMET", true, true); Debug.Log("Cam should be set."); VehicleInputManager control = targetVehicle.AddComponent <VehicleInputManager>(); AutoPilot AP = targetVehicle.GetComponent <AutoPilot>(); control.pyrOutputs = AP.outputs; AP.steerMode = AutoPilot.SteerModes.Aim; List <ModuleEngine> Engines = AP.engines; AP.enabled = false; control.wheelSteerOutputs = targetVehicle.GetComponents <WheelsController>(); GearAnimator gear = toControl.gearAnimator; targetVehicle.GetComponent <AIPilot>().enabled = false; Radar targetRadar = toControl.detectionRadar; LockingRadar lTargetRadar = new LockingRadar(); if (targetRadar != null) { targetRadar.teamsToDetect = Radar.DetectionTeams.Both; lTargetRadar = toControl.lockingRadar; radarActive = true; } if (lTargetRadar != null) { lockingRadar = true; } foreach (var thing in targetVehicle.GetComponents(typeof(Component))) { Debug.Log(thing); } WeaponManager wm = targetVehicle.GetComponent <WeaponManager>(); if (wm != null) { hasWM = true; wm.SetMasterArmed(true); foreach (var internalBays in wm.internalWeaponBays) { internalBays.openOnAnyWeaponMatch = true; } } MissileDetector rwr = toControl.rwr; MeasurementManager MM = MeasurementManager.instance; float t = 0f; float v = 0f; CameraScreenshot CS = new CameraScreenshot(); PitchYawRoll = new Vector3(0f, 0f, 0f); FlightInfo FI = targetActor.flightInfo; // RefuelPlane rPlane = targetVehicle.GetComponent<RefuelPlane>(); float x = 0f; float y = 0f; float z = 0f; float flaps = 0f; float brakes = 0f; int idx = -1; int p = 2; float headingNum = 0; bool locked = false; bool tDep = false; bool hDep = false; if (toControl.tailHook != null) { tDep = toControl.tailHook.isDeployed; } if (toControl.catHook != null) { hDep = toControl.catHook.deployed; } infAmmo iA = targetVehicle.AddComponent <infAmmo>(); iA.wepMan = wm; iA.enabled = false; Actor lockSelection = new Actor(); Debug.Log("Controlling " + targetVehicle); while (true) { // Pitch Yaw Roll controls if (Input.GetKey(KeyCode.S)) { x = -1f; } else if (Input.GetKey(KeyCode.W)) { x = 1f; } else { x = 0f; } if (Input.GetKey(KeyCode.A)) { y = -1f; } else if (Input.GetKey(KeyCode.D)) { y = 1f; } else { y = 0f; } if (Input.GetKey(KeyCode.E)) { z = -1f; } else if (Input.GetKey(KeyCode.Q)) { z = 1f; } else { z = 0f; } // Tilt Controller if (Input.GetKey(KeyCode.Z)) { if (v >= 90) { } else { if (TC) { v += 1; TC.SetTiltImmediate(v); } } } if (Input.GetKey(KeyCode.X)) { if (v <= 0) { } else { if (tiltC) { v -= 1; TC.SetTiltImmediate(v); } } } // Screen Shot if (Input.GetKeyDown(KeyCode.L)) { try { if (CS.cam == null) { CS.cam = CameraFollowMe.instance.cam; Debug.Log("NULL in assigning cam to CS"); } CS.Screenshot(); } catch (NullReferenceException) { Debug.Log("This dude really tried screenshotting without having the debug cam on, LOSER!"); } } // WeaponManager code if (wm != null) { if (Input.GetKeyDown(KeyCode.R)) { wm.CycleActiveWeapons(); } if (iA.enabled) { if (Input.GetKey(KeyCode.Space)) { if (wm.currentEquip is HPEquipIRML || wm.currentEquip is HPEquipRadarML) { wm.SingleFire(); } else { wm.StartFire(); } } if (Input.GetKeyUp(KeyCode.Space)) { if (!(wm.currentEquip is HPEquipIRML || wm.currentEquip is HPEquipRadarML)) { wm.EndFire(); } } } else { if (Input.GetKeyDown(KeyCode.Space)) { if (wm.currentEquip is HPEquipIRML || wm.currentEquip is HPEquipRadarML) { wm.SingleFire(); } else { wm.StartFire(); } } if (Input.GetKeyUp(KeyCode.Space)) { if (!(wm.currentEquip is HPEquipIRML || wm.currentEquip is HPEquipRadarML)) { wm.EndFire(); } } } Weapon = wm.currentEquip.name; Ammo = wm.currentEquip.GetCount().ToString(); } // Gear Toggle if (Input.GetKeyDown(KeyCode.G)) { if (gear != null) { gear.Toggle(); } } // Thrrottle code if (Input.GetKey(KeyCode.LeftControl)) // Increase { if (t > 0) { t -= 0.0125f; } } if (Input.GetKey(KeyCode.LeftShift)) // Decrease { if (t < 1) { t += 0.0125f; } } // CMS dispenser if (Input.GetKey(KeyCode.C)) { toControl.FireFlares(); toControl.FireChaff(); } // Radar code if (targetRadar != null) { if (lTargetRadar != null) { if (Input.GetKeyDown(KeyCode.M)) // Move right in the array { idx += 1; if (idx > targetRadar.detectedUnits.Count - 1) { idx = targetRadar.detectedUnits.Count - 1; } if (targetRadar.detectedUnits.Count > 0) { lockSelection = targetRadar.detectedUnits[idx]; sRadarTargets = lockSelection.actorName; } } if (Input.GetKeyDown(KeyCode.N)) // Move left in the array { idx -= 1; if (idx < 0) { idx = 0; } if (targetRadar.detectedUnits.Count > 0) { lockSelection = targetRadar.detectedUnits[idx]; sRadarTargets = lockSelection.actorName; } } if (Input.GetKeyDown(KeyCode.J)) // Lock { if (!locked) { if (targetRadar.detectedUnits.Count > 0) { if (idx >= 0) { if (lTargetRadar.GetLock(lockSelection)) { lRadarTargets = lockSelection.ToString(); locked = !locked; } } } } else { lTargetRadar.Unlock(); lRadarTargets = "No lock"; locked = !locked; } } if (!lTargetRadar.IsLocked()) { lRadarTargets = "Lock Dropped"; if (locked) { locked = !locked; } } } radarTargets = ""; foreach (var thing in targetRadar.detectedUnits) { headingNum = Mathf.Round(VectorUtils.SignedAngle(Vector3.forward, thing.transform.forward, Vector3.right)); if (headingNum < 0) { headingNum += 360; } radarTargets += thing + " " + headingNum.ToString() + " " + MM.ConvertedDistance(Mathf.Round((targetRadar.transform.position - thing.position).magnitude)).ToString() + " " + DistanceLabel() + " " + MM.ConvertedAltitude(Mathf.Round((WaterPhysics.GetAltitude(thing.position)))).ToString() + " " + AltitudeLabel() + "\n"; } } // RWR code if (rwr != null) { Missiles = ""; if (rwr.missileDetected) { MissileDetected = true; foreach (var Missile in rwr.detectedMissiles) { headingNum = Mathf.Round(VectorUtils.SignedAngle(Vector3.forward, Missile.transform.forward, Vector3.right)); if (headingNum < 0) { headingNum += 360; } Missiles += Missile.ToString() + " " + headingNum.ToString() + " " + MM.ConvertedDistance(Mathf.Round((rwr.transform.position - Missile.transform.position).magnitude)).ToString() + " " + DistanceLabel() + " " + MM.ConvertedAltitude(Mathf.Round((WaterPhysics.GetAltitude(Missile.transform.position)))).ToString() + " " + AltitudeLabel() + "\n"; } } } // Flaps if (Input.GetKeyDown(KeyCode.F)) { if (flaps == 0f) { flaps = .5f; } else if (flaps == .5f) { flaps = 1f; } else { flaps = 0f; } foreach (var thing in toControl.autoPilot.outputs) { thing.SetFlaps(flaps); } } // Brakes if (Input.GetKeyDown(KeyCode.B)) { if (brakes == 0f) { brakes = 1f; } else { brakes = 0f; } foreach (var thing in toControl.autoPilot.outputs) { thing.SetBrakes(brakes); } } // Wing Folding if (Input.GetKeyDown(KeyCode.K)) { if (toControl.wingRotator != null) { if (toControl.wingRotator.deployed) { toControl.wingRotator.SetDefault(); } else { toControl.wingRotator.SetDeployed(); } } } // Tail Hook if (Input.GetKeyDown(KeyCode.H)) { if (toControl.tailHook != null) { if (tDep) { toControl.tailHook.RetractHook(); tDep = !tDep; } else { toControl.tailHook.ExtendHook(); tDep = !tDep; } } } // Launch Bar if (Input.GetKeyDown(KeyCode.T)) { if (toControl.catHook != null) { if (hDep) { toControl.catHook.Retract(); hDep = !hDep; } else { toControl.catHook.Extend(); hDep = !hDep; } } } // Debug if (Input.GetKeyDown(KeyCode.O)) { iA.enabled = !iA.enabled; } // Misc Stuff PitchYawRoll.Set(x, y, z); control.SetJoystickPYR(PitchYawRoll); foreach (ModuleEngine Engine in Engines) { Engine.SetThrottle(t); } headingNum = VectorUtils.SignedAngle(Vector3.forward, targetActor.transform.forward, Vector3.right); if (headingNum < 0f) { headingNum += 360f; } heading = FI.heading.ToString(); altitude = MM.ConvertedAltitude(FI.altitudeASL).ToString() + " " + AltitudeLabel(); speed = MM.ConvertedSpeed(FI.surfaceSpeed).ToString() + " " + SpeedLabel(); yield return(null); } }
private void Awake() { firstMessageReceived = false; aiPilot = GetComponent <AIPilot>(); autoPilot = aiPilot.autoPilot; aiPilot.enabled = false; Networker.PlaneUpdate += PlaneUpdate; Networker.WeaponSet_Result += WeaponSet_Result; Networker.Disconnecting += OnDisconnect; Networker.WeaponFiring += WeaponFiring; Networker.JettisonUpdate += JettisonUpdate; // Networker.WeaponStoppedFiring += WeaponStoppedFiring; Networker.FireCountermeasure += FireCountermeasure; weaponManager = GetComponent <WeaponManager>(); mostCurrentUpdateNumber = 0; if (weaponManager == null) { Debug.LogError("Weapon Manager was null on " + gameObject.name); } else { traverse = Traverse.Create(weaponManager); } foreach (var iwb in weaponManager.internalWeaponBays) { iwb.openOnAnyWeaponMatch = true; } cmManager = GetComponentInChildren <CountermeasureManager>(); if (cmManager == null) { Debug.LogError("CountermeasureManager was null on " + gameObject.name); } fuelTank = GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("FuelTank was null on " + gameObject.name); } ownerActor = this.GetComponentInParent <Actor>(); collidersStore = new List <int>(); //?fix gun sight jitter if (ownerActor != null) { ownerActor.flightInfo.PauseGCalculations(); //FlightSceneManager.instance.playerActor.flightInfo.OverrideRecordedAcceleration(Vector3.zero); foreach (Rigidbody rb in ownerActor.gameObject.GetComponentsInChildren <Rigidbody>()) { rb.detectCollisions = false; } foreach (Collider collider in ownerActor.gameObject.GetComponentsInChildren <Collider>()) { if (collider) { Hitbox hitbox = collider.GetComponent <Hitbox>(); if (hitbox != null) { hitbox.health.invincible = true; collidersStore.Add(collider.gameObject.layer); collider.gameObject.layer = 9; } else { collider.gameObject.layer = 9; } } } } StartCoroutine(colliderTimer()); }
/// <summary> /// When the user has received a message of spawn vehicle, /// this creates the vehilc and removes any thing which shouldn't /// be on it. /// </summary> /// <param name="packet">The message</param> public static void SpawnVehicle(Packet packet) { Debug.Log("Recived a Spawn Vehicle Message"); if (!gameLoaded) { Debug.LogWarning("Our game isn't loaded, adding spawn vehicle to queue"); playersToSpawnQueue.Enqueue(packet); return; } Message_SpawnVehicle message = (Message_SpawnVehicle)((PacketSingle)packet).message; 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 Networker.SendP2P(new CSteamID(message.csteamID), 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"); continue; } PlaneNetworker_Receiver existingPlayersPR = players[i].vehicle.GetComponent <PlaneNetworker_Receiver>(); //We first send the new player to an existing spawned in player Networker.SendP2P(players[i].cSteamID, message, EP2PSend.k_EP2PSendReliable); //Then we send this current player to the new player. Networker.SendP2P(new CSteamID(message.csteamID), new Message_SpawnVehicle( players[i].vehicleName, VTMapManager.WorldToGlobalPoint(players[i].vehicle.transform.position), new Vector3D(players[i].vehicle.transform.rotation.eulerAngles), players[i].cSteamID.m_SteamID, players[i].vehicleUID, existingPlayersPR.GenerateHPInfo(), existingPlayersPR.GetCMS(), existingPlayersPR.GetFuel()), 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. Networker.SendP2P(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."); } } GameObject newVehicle = null; switch (message.vehicle) { case VTOLVehicles.None: Debug.LogError("Vehcile Enum seems to be none, couldn't spawn player vehicle"); return; case VTOLVehicles.AV42C: newVehicle = GameObject.Instantiate(av42cPrefab, message.position.toVector3, Quaternion.Euler(message.rotation.toVector3)); break; case VTOLVehicles.FA26B: newVehicle = GameObject.Instantiate(fa26bPrefab, message.position.toVector3, Quaternion.Euler(message.rotation.toVector3)); break; case VTOLVehicles.F45A: newVehicle = GameObject.Instantiate(f45Prefab, message.position.toVector3, Quaternion.Euler(message.rotation.toVector3)); break; } Debug.Log("Setting vehicle name"); newVehicle.name = $"Client [{message.csteamID}]"; Debug.Log($"Spawned new vehicle at {newVehicle.transform.position}"); RigidbodyNetworker_Receiver rbNetworker = newVehicle.AddComponent <RigidbodyNetworker_Receiver>(); rbNetworker.networkUID = message.networkID; PlaneNetworker_Receiver planeReceiver = newVehicle.AddComponent <PlaneNetworker_Receiver>(); planeReceiver.networkUID = message.networkID; if (message.vehicle == VTOLVehicles.AV42C || message.vehicle == VTOLVehicles.F45A) { Debug.Log("Adding Tilt Controller to this vehicle " + message.networkID); EngineTiltNetworker_Receiver tiltReceiver = newVehicle.AddComponent <EngineTiltNetworker_Receiver>(); tiltReceiver.networkUID = message.networkID; } Rigidbody rb = newVehicle.GetComponent <Rigidbody>(); AIPilot aIPilot = newVehicle.GetComponent <AIPilot>(); 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.commandState = AIPilot.CommandStates.Override; rb.position = message.position.toVector3; rb.rotation = Quaternion.Euler(message.rotation.toVector3); 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}"); 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(new CSteamID(message.csteamID)), newVehicle.transform, VRHead.instance.transform); WeaponManager weaponManager = newVehicle.GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError("Failed to get weapon manager on " + newVehicle.name); } List <string> hpLoadoutNames = new List <string>(); for (int i = 0; i < message.hpLoadout.Length; i++) { hpLoadoutNames.Add(message.hpLoadout[i].hpName); } Debug.Log("Setting Loadout on this new vehicle spawned"); for (int i = 0; i < hpLoadoutNames.Count; i++) { Debug.Log("HP " + i + " Name: " + hpLoadoutNames[i]); } Loadout loadout = new Loadout(); loadout.normalizedFuel = message.normalizedFuel; loadout.hpLoadout = hpLoadoutNames.ToArray(); loadout.cmLoadout = message.cmLoadout; weaponManager.EquipWeapons(loadout); FuelTank fuelTank = newVehicle.GetComponent <FuelTank>(); if (fuelTank == null) { Debug.LogError("Failed to get fuel tank on " + newVehicle.name); } fuelTank.startingFuel = loadout.normalizedFuel * fuelTank.maxFuel; fuelTank.SetNormFuel(loadout.normalizedFuel); players.Add(new Player(new CSteamID(message.csteamID), newVehicle, message.vehicle, message.networkID)); }
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); }
void Update() { if (!gameOver) { if (paused) { if (Input.GetKeyDown(KeyCode.Escape)) { unPause(); } else { return; } } else if (Input.GetKeyDown(KeyCode.Escape)) { pauseGame(); } if (currentTier <= tierPrefabs.Count - 1 && activeShips.Count <= numShipPerTier) { for (int i = 0; i < numShipPerTier; i++) { Ship ship = CreateShip(tierPrefabs[currentTier - 1], currentTier); activeShips.Add(ship); axes.Add(Vector3.Normalize(new Vector3(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f)))); } ++currentTier; if (currentTier == tierPrefabs.Count) { hud.setTillNextTier(activeShips.Count, currentTier); } else { hud.setTillNextTier(numShipPerTier, currentTier); } soundManager.PlayShipSpawn(); } if (playerShip.CollidedWithValidEnemy()) { playerShip.collidedShip.GetComponent <Ship>().pilot = playerShip.pilot; Ship validEnemy = playerShip.collidedShip.GetComponent <Ship>(); validEnemy.gameObject.transform.rotation = playerShip.gameObject.transform.rotation; Destroy(playerShip.gameObject); playerShip = validEnemy; activeShips.Remove(validEnemy); playerShip.gameObject.layer = 8; playerShip.gameObject.transform.GetChild(0).GetChild(0).GetComponent <Renderer>().material = playerMaterial; playerShip.invulnerable = true; playerShip.material = playerMaterial; playerShip.hitMaterial = playerHitMaterial; StartCoroutine(InvinciFrames()); hud.setTier(playerShip.tier); if (playerShip.tier == tierPrefabs.Count) { playerShip.color = 1; } foreach (Ship ship in activeShips) { AIPilot pilot = (AIPilot)ship.pilot; if (ship.tier - playerShip.tier == 1) { ship.material = nextTierMaterial; ship.gameObject.transform.GetChild(0).GetChild(0).GetComponent <Renderer>().material = nextTierMaterial; pilot.ChangeBulletMaterial(nextTierMaterial); } else { ship.material = enemyMaterial; ship.gameObject.transform.GetChild(0).GetChild(0).GetComponent <Renderer>().material = enemyMaterial; pilot.ChangeBulletMaterial(enemyMaterial); } } GameObject shipDeath = Instantiate(shipExplosion) as GameObject; ParticleSystem system = shipDeath.transform.GetComponentInChildren <ParticleSystem>(); system.transform.position = playerShip.transform.position; system.startColor = playerShip.material.color; system.Play(); soundManager.PlayShipTakeover(); } List <Ship> destroyedShips = new List <Ship>(); foreach (Ship ship in activeShips) { if (ship.health <= 0) { destroyedShips.Add(ship); GameObject shipDeath = Instantiate(shipExplosion) as GameObject; ParticleSystem system = shipDeath.transform.GetComponentInChildren <ParticleSystem>(); system.transform.position = ship.transform.position; system.startColor = ship.material.color; system.Play(); } } foreach (Ship ship in destroyedShips) { activeShips.Remove(ship); Destroy(ship.gameObject); hud.enemyDestroyed(); soundManager.PlayShipDestruction(); } hud.checkHealth(playerShip.health); IndicatorColorChange(); if (playerShip.health <= 0) { GameObject shipDeath = Instantiate(shipExplosion) as GameObject; ParticleSystem system = shipDeath.transform.GetComponentInChildren <ParticleSystem>(); system.transform.position = playerShip.transform.position; system.startColor = playerShip.material.color; system.Play(); gameOverLose.SetActive(true); gameOver = true; Destroy(playerShip.gameObject); playerShip = null; foreach (Ship ship in activeShips) { ship.gameOver = true; } soundManager.PlayShipDestruction(); } else if (activeShips.Count == 0 && !finalShip) { soundManager.PlayShipSpawn(); Ship ship = CreateShip(tierPrefabs[currentTier - 1], currentTier); activeShips.Add(ship); axes.Add(Vector3.Normalize(new Vector3(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f)))); hud.setFinalTilNextTier(); finalShip = true; } else if (activeShips.Count == 0 && finalShip) { blackHole.SetActive(true); gameOver = true; win = true; playerShip.gameOver = true; } } else if (win) { timePassed += Time.deltaTime; Vector3 leftDirection = Vector3.Normalize(-playerShip.transform.right) * speed * Time.deltaTime; playerShip.transform.RotateAround(Vector3.zero, leftDirection, -speed * Time.deltaTime); if (timePassed >= secondsToPortal) { Application.LoadLevel("BossScene"); } } }
public AIState_Idle(AIPilot pilot) : base("Idle", pilot) { this.controls = pilot.FlightControls; }
/// <summary> /// This is used by the client and only the client to spawn ai vehicles. /// </summary> public static void SpawnAIVehicle(Packet packet) // This should never run on the host { if (Networker.isHost) { Debug.LogWarning("Host shouldn't be trying to spawn an ai vehicle."); return; } Message_SpawnAIVehicle message = (Message_SpawnAIVehicle)((PacketSingle)packet).message; if (!PlayerManager.gameLoaded) { Debug.LogWarning("Our game isn't loaded, adding spawn vehicle to queue"); AIsToSpawnQueue.Enqueue(packet); return; } foreach (ulong id in spawnedAI) { if (id == message.rootActorNetworkID) { Debug.Log("Got a spawnAI message for a vehicle we have already added! Name == " + message.unitName + " Returning..."); return; } } spawnedAI.Add(message.rootActorNetworkID); //Debug.Log("Got a new aiSpawn uID."); if (message.unitName == "Player") { Debug.LogWarning("Player shouldn't be sent to someones client...."); return; } Debug.Log("Trying to spawn AI " + message.aiVehicleName); GameObject prefab = UnitCatalogue.GetUnitPrefab(message.unitName); if (prefab == null) { Debug.LogError(message.unitName + " was not found."); return; } GameObject newAI = GameObject.Instantiate(prefab, VTMapManager.GlobalToWorldPoint(message.position), message.rotation); //Debug.Log("Setting vehicle name"); newAI.name = message.aiVehicleName; Actor actor = newAI.GetComponent <Actor>(); if (actor == null) { Debug.LogError("actor is null on object " + newAI.name); } if (message.redfor) { actor.team = Teams.Enemy; } else { actor.team = Teams.Allied; } AirportManager airport = newAI.GetComponent <AirportManager>(); UnitSpawn unitSP = newAI.GetComponent <UnitSpawn>(); GameObject.Destroy(unitSP); if (airport != null) { newAI.AddComponent <UnitSpawn>(); } else { newAI.AddComponent <AICarrierSpawn>(); } unitSP = newAI.GetComponent <UnitSpawn>(); UnitSpawner UnitSpawner = new UnitSpawner(); actor.unitSpawn = unitSP; actor.unitSpawn.unitSpawner = UnitSpawner; unitSP.actor = actor; Traverse.Create(actor.unitSpawn.unitSpawner).Field("_spawnedUnit").SetValue(unitSP); Traverse.Create(actor.unitSpawn.unitSpawner).Field("_spawned").SetValue(true); Traverse.Create(actor.unitSpawn.unitSpawner).Field("_unitInstanceID").SetValue(message.unitInstanceID); // To make objectives work. UnitSpawner.team = actor.team; UnitSpawner.unitName = actor.unitSpawn.unitName; if (!PlayerManager.teamLeftie) { UnitSpawner.team = actor.team; } else { if (actor.team == Teams.Enemy) { foreach (Actor subActor in newAI.GetComponentsInChildren <Actor>()) { subActor.team = Teams.Allied; TargetManager.instance.UnregisterActor(subActor); TargetManager.instance.RegisterActor(subActor); } } else if (actor.team == Teams.Allied) { foreach (Actor subActor in newAI.GetComponentsInChildren <Actor>()) { subActor.team = Teams.Enemy; TargetManager.instance.UnregisterActor(subActor); TargetManager.instance.RegisterActor(subActor); } } UnitSpawner.team = actor.team; if (airport != null) { airport.team = actor.team; SetUpCarrier(newAI, message.rootActorNetworkID, actor.team); } } TargetManager.instance.UnregisterActor(actor); TargetManager.instance.RegisterActor(actor); VTScenario.current.units.AddSpawner(actor.unitSpawn.unitSpawner); if (message.hasGroup) { VTScenario.current.groups.AddUnitToGroup(UnitSpawner, message.unitGroup); } Debug.Log(actor.name + $" has had its unitInstanceID set at value {actor.unitSpawn.unitSpawner.unitInstanceID}."); VTScenario.current.units.AddSpawner(actor.unitSpawn.unitSpawner); Debug.Log($"Spawned new vehicle at {newAI.transform.position}"); newAI.AddComponent <FloatingOriginTransform>(); newAI.transform.position = VTMapManager.GlobalToWorldPoint(message.position); newAI.transform.rotation = message.rotation; Debug.Log("This unit should have " + message.networkIDs.Length + " actors! "); int currentSubActorID = 0; foreach (Actor child in newAI.GetComponentsInChildren <Actor>()) { Debug.Log("setting up actor: " + currentSubActorID); UIDNetworker_Receiver uidReciever = child.gameObject.AddComponent <UIDNetworker_Receiver>(); uidReciever.networkUID = message.networkIDs[currentSubActorID]; if (child.gameObject.GetComponent <Health>() != null) { HealthNetworker_Receiver healthNetworker = child.gameObject.AddComponent <HealthNetworker_Receiver>(); healthNetworker.networkUID = message.networkIDs[currentSubActorID]; //HealthNetworker_Sender healthNetworkerS = newAI.AddComponent<HealthNetworker_Sender>(); //healthNetworkerS.networkUID = message.networkID; // Debug.Log("added health Sender to ai"); // Debug.Log("added health reciever to ai"); } else { Debug.Log(message.aiVehicleName + " has no health?"); } if (child.gameObject.GetComponent <ShipMover>() != null) { ShipNetworker_Receiver shipNetworker = child.gameObject.AddComponent <ShipNetworker_Receiver>(); shipNetworker.networkUID = message.networkIDs[currentSubActorID]; } else if (child.gameObject.GetComponent <GroundUnitMover>() != null) { if (child.gameObject.GetComponent <Rigidbody>() != null) { GroundNetworker_Receiver groundNetworker = child.gameObject.AddComponent <GroundNetworker_Receiver>(); groundNetworker.networkUID = message.networkIDs[currentSubActorID]; } } else if (child.gameObject.GetComponent <Rigidbody>() != null) { Rigidbody rb = child.gameObject.GetComponent <Rigidbody>(); RigidbodyNetworker_Receiver rbNetworker = child.gameObject.AddComponent <RigidbodyNetworker_Receiver>(); rbNetworker.networkUID = message.networkIDs[currentSubActorID]; } if (child.role == Actor.Roles.Air) { PlaneNetworker_Receiver planeReceiver = child.gameObject.AddComponent <PlaneNetworker_Receiver>(); planeReceiver.networkUID = message.networkIDs[currentSubActorID]; AIPilot aIPilot = child.gameObject.GetComponent <AIPilot>(); aIPilot.enabled = false; aIPilot.kPlane.SetToKinematic(); aIPilot.kPlane.enabled = false; aIPilot.commandState = AIPilot.CommandStates.Navigation; aIPilot.kPlane.enabled = true; aIPilot.kPlane.SetVelocity(Vector3.zero); aIPilot.kPlane.SetToDynamic(); RotationToggle wingRotator = aIPilot.wingRotator; if (wingRotator != null) { WingFoldNetworker_Receiver wingFoldReceiver = child.gameObject.AddComponent <WingFoldNetworker_Receiver>(); wingFoldReceiver.networkUID = message.networkIDs[currentSubActorID]; wingFoldReceiver.wingController = wingRotator; } if (aIPilot.isVtol) { //Debug.Log("Adding Tilt Controller to this vehicle " + message.networkID); EngineTiltNetworker_Receiver tiltReceiver = child.gameObject.AddComponent <EngineTiltNetworker_Receiver>(); tiltReceiver.networkUID = message.networkIDs[currentSubActorID]; } if (child.gameObject.GetComponentInChildren <ExteriorLightsController>() != null) { ExtLight_Receiver extLight = child.gameObject.AddComponent <ExtLight_Receiver>(); extLight.networkUID = message.networkIDs[currentSubActorID]; } Rigidbody rb = child.gameObject.GetComponent <Rigidbody>(); foreach (Collider collider in child.gameObject.GetComponentsInChildren <Collider>()) { if (collider) { collider.gameObject.layer = 9; } } Debug.Log("Doing weapon manager shit on " + child.gameObject.name + "."); WeaponManager weaponManager = child.gameObject.GetComponent <WeaponManager>(); if (weaponManager == null) { Debug.LogError(child.gameObject.name + " does not seem to have a weapon maanger on it."); } else { PlaneEquippableManager.SetLoadout(child.gameObject, message.networkIDs[currentSubActorID], message.normalizedFuel, message.hpLoadout, message.cmLoadout); } } AIUnitSpawn aIUnitSpawn = child.gameObject.GetComponent <AIUnitSpawn>(); if (aIUnitSpawn == null) { Debug.LogWarning("AI unit spawn is null on respawned unit " + aIUnitSpawn); } // else // newAI.GetComponent<AIUnitSpawn>().SetEngageEnemies(message.Aggresive); VehicleMover vehicleMover = child.gameObject.GetComponent <VehicleMover>(); if (vehicleMover != null) { vehicleMover.enabled = false; vehicleMover.behavior = GroundUnitMover.Behaviors.Parked; } else { GroundUnitMover ground = child.gameObject.GetComponent <GroundUnitMover>(); if (ground != null) { ground.enabled = false; ground.behavior = GroundUnitMover.Behaviors.Parked; } } Debug.Log("Checking for gun turrets on child " + child.name); if (child.gameObject.GetComponentsInChildren <Actor>().Length <= 1) {//only run this code on units without subunits Debug.Log("This is a child, with " + child.gameObject.GetComponentsInChildren <Actor>().Length + " actors, so it could have guns!"); ulong turretCount = 0; foreach (ModuleTurret moduleTurret in child.gameObject.GetComponentsInChildren <ModuleTurret>()) { TurretNetworker_Receiver tRec = child.gameObject.AddComponent <TurretNetworker_Receiver>(); tRec.networkUID = message.networkIDs[currentSubActorID]; tRec.turretID = turretCount; Debug.Log("Added turret " + turretCount + " to actor " + message.networkIDs[currentSubActorID] + " uid"); turretCount++; } ulong gunCount = 0; foreach (GunTurretAI turretAI in child.gameObject.GetComponentsInChildren <GunTurretAI>()) { turretAI.SetEngageEnemies(false); AAANetworker_Reciever aaaRec = child.gameObject.AddComponent <AAANetworker_Reciever>(); aaaRec.networkUID = message.networkIDs[currentSubActorID]; aaaRec.gunID = gunCount; Debug.Log("Added gun " + gunCount + " to actor " + message.networkIDs[currentSubActorID] + " uid"); gunCount++; } } else { Debug.Log("This isnt a child leaf thing, it has " + child.gameObject.GetComponentsInChildren <Actor>().Length + " actors"); } IRSamLauncher iLauncher = child.gameObject.GetComponent <IRSamLauncher>(); if (iLauncher != null) { //iLauncher.ml.RemoveAllMissiles(); iLauncher.ml.LoadAllMissiles(); iLauncher.SetEngageEnemies(false); MissileNetworker_Receiver mlr; //iLauncher.ml.LoadCount(message.IRSamMissiles.Length); Debug.Log($"Adding IR id's on IR SAM, len = {message.IRSamMissiles.Length}."); for (int i = 0; i < message.IRSamMissiles.Length; i++) { mlr = iLauncher.ml.missiles[i]?.gameObject.AddComponent <MissileNetworker_Receiver>(); mlr.thisML = iLauncher.ml; mlr.networkUID = message.IRSamMissiles[i]; } Debug.Log("Added IR id's."); } Soldier soldier = child.gameObject.GetComponent <Soldier>(); if (soldier != null) { soldier.SetEngageEnemies(false); if (soldier.soldierType == Soldier.SoldierTypes.IRMANPAD) { soldier.SetEngageEnemies(false); IRMissileLauncher ir = soldier.irMissileLauncher; if (ir != null) { //ir.RemoveAllMissiles(); ir.LoadAllMissiles(); MissileNetworker_Receiver mlr; //ir.LoadCount(message.IRSamMissiles.Length); Debug.Log($"Adding IR id's on manpads, len = {message.IRSamMissiles.Length}."); for (int i = 0; i < message.IRSamMissiles.Length; i++) { mlr = ir.missiles[i]?.gameObject.AddComponent <MissileNetworker_Receiver>(); mlr.thisML = ir; mlr.networkUID = message.IRSamMissiles[i]; } Debug.Log("Added IR id's on manpads."); } else { Debug.Log($"Manpad {message.networkIDs} forgot its rocket launcher pepega."); } } } Debug.Log("Checking for SAM launchers"); SAMLauncher launcher = child.gameObject.GetComponent <SAMLauncher>(); if (launcher != null) { Debug.Log("I found a sam launcher!"); SamNetworker_Reciever samNetworker = launcher.gameObject.AddComponent <SamNetworker_Reciever>(); samNetworker.networkUID = message.networkIDs[currentSubActorID]; samNetworker.radarUIDS = message.radarIDs; //Debug.Log($"Added samNetworker to uID {message.networkID}."); launcher.SetEngageEnemies(false); launcher.fireInterval = float.MaxValue; launcher.lockingRadars = null; } /*IRSamLauncher ml = actor.gameObject.GetComponentInChildren<IRSamLauncher>(); * if (ml != null) * { * ml.SetEngageEnemies(false); * MissileNetworker_Receiver lastRec; * for (int i = 0; i < ml.ml.missiles.Length; i++) * { * lastRec = ml.ml.missiles[i].gameObject.AddComponent<MissileNetworker_Receiver>(); * lastRec.networkUID = message.IRSamMissiles[i]; * lastRec.thisML = ml.ml; * } * }*/ //this code for ir missiles was here twice, so i dissable the seccond copy Debug.Log("Checking for locking radars"); foreach (LockingRadar radar in child.GetComponentsInChildren <LockingRadar>()) { if (radar.GetComponent <Actor>() == child) { Debug.Log($"Adding radar receiver to object {child.name} as it is the same game object as this actor."); LockingRadarNetworker_Receiver lastLockingReceiver = child.gameObject.AddComponent <LockingRadarNetworker_Receiver>(); lastLockingReceiver.networkUID = message.networkIDs[currentSubActorID]; Debug.Log("Added locking radar!"); } else if (radar.GetComponentInParent <Actor>() == child) { Debug.Log($"Adding radar receiver to object {child.name} as it is a child of this actor."); LockingRadarNetworker_Receiver lastLockingReceiver = child.gameObject.AddComponent <LockingRadarNetworker_Receiver>(); lastLockingReceiver.networkUID = message.networkIDs[currentSubActorID]; Debug.Log("Added locking radar!"); } else { Debug.Log("This radar is not direct child of this actor, ignoring"); } } AIVehicles.Add(new AI(child.gameObject, message.aiVehicleName, child, message.networkIDs[currentSubActorID])); Debug.Log("Spawned in AI " + child.gameObject.name); if (!VTOLVR_Multiplayer.AIDictionaries.allActors.ContainsKey(message.networkIDs[currentSubActorID])) { VTOLVR_Multiplayer.AIDictionaries.allActors.Add(message.networkIDs[currentSubActorID], child); } if (!VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.ContainsKey(actor)) { VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.Add(child, message.networkIDs[currentSubActorID]); } currentSubActorID++; } }
private static AIState[] CreateAIStates(AIPilot pilot) { return new AIState[] { new AIState_Attack(pilot), new AIState_GoTo(pilot), new AIState_Idle(pilot), }; }