//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);
    }
Example #3
0
 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;
 }
Example #4
0
 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;
 }
Example #5
0
        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;
        }
    }
Example #10
0
    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;
        }
    }
Example #11
0
 public AIState_Attack(AIPilot pilot)
     : base("Attack", pilot)
 {
     substates = GetSubstates(this);
 }
Example #12
0
    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));
    }
Example #15
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);
    }
Example #16
0
    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");
            }
        }
    }
Example #17
0
 public AIState_Idle(AIPilot pilot)
     : base("Idle", pilot)
 {
     this.controls = pilot.FlightControls;
 }
Example #18
0
    /// <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++;
        }
    }
Example #19
0
 private static AIState[] CreateAIStates(AIPilot pilot)
 {
     return new AIState[] {
         new AIState_Attack(pilot),
         new AIState_GoTo(pilot),
         new AIState_Idle(pilot),
     };
 }