private static void CreateGadgetsForVehicle(Vehicle vehicle)
 {
     VehicleGadget[] g = VehicleGadget.GetGadgetsForVehicle(vehicle);
     if (g != null)
     {
         gadgets.AddRange(g);
     }
     vehiclesChecked.Add(vehicle.Handle);
 }
        private static void Main()
        {
            while (Game.IsLoading)
            {
                GameFiber.Sleep(1000);
            }

            bool gameFnInit = GameFunctions.Init();

            if (gameFnInit)
            {
                Game.LogTrivialDebug($"Successful {nameof(GameFunctions)} init");
            }
            else
            {
                Game.LogTrivial($"[ERROR] Failed to initialize {nameof(GameFunctions)}, unloading...");
                Game.UnloadActivePlugin();
            }

            LoadVehicleConfigs();

            while (true)
            {
                GameFiber.Yield();

                if (Game.IsPaused)
                {
                    continue;
                }

                Vehicle playerVeh = Game.LocalPlayer.Character.CurrentVehicle;

                if (playerVeh && !vehiclesChecked.Contains(playerVeh.Handle))
                {
                    CreateGadgetsForVehicle(playerVeh);
                }

                for (int i = gadgets.Count - 1; i >= 0; i--)
                {
                    VehicleGadget g = gadgets[i];
                    if (g.Vehicle)
                    {
                        g.Update(g.Vehicle == playerVeh);
                    }
                    else
                    {
                        if (vehiclesChecked.Contains(g.Vehicle.Handle))
                        {
                            vehiclesChecked.Remove(g.Vehicle.Handle);
                        }
                        g.Dispose();
                        gadgets.RemoveAt(i);
                    }
                }
            }
        }
        private static void OnUnload(bool isTerminating)
        {
            for (int i = 0; i < gadgets.Count; i++)
            {
                VehicleGadget g = gadgets[i];
                g.Dispose();
            }
            gadgets = null;

            if (SoundPlayer.IsInitialized)
            {
                SoundPlayer.Instance.Dispose();
            }
        }
Ejemplo n.º 4
0
        private static void Main()
        {
            while (Game.IsLoading)
            {
                GameFiber.Sleep(1000);
            }

            bool gameFnInit = GameFunctions.Init();

            if (gameFnInit)
            {
                Game.LogTrivialDebug($"Successful {nameof(GameFunctions)} init");
            }
            else
            {
                Game.LogTrivial($"[ERROR] Failed to initialize {nameof(GameFunctions)}, unloading...");
                Game.UnloadActivePlugin();
            }

            LoadVehicleConfigs();

            while (true)
            {
                GameFiber.Yield();

                if (Game.IsPaused)
                {
                    continue;
                }

                Vehicle playerVeh = Game.LocalPlayer.Character.CurrentVehicle;

                if (playerVeh && !vehiclesChecked.Contains(playerVeh.Handle))
                {
                    CreateGadgetsForVehicle(playerVeh);
                }

                for (int i = gadgets.Count - 1; i >= 0; i--)
                {
                    VehicleGadget g = gadgets[i];
                    if (g.Vehicle)
                    {
                        g.Update(g.Vehicle == playerVeh);
                        if (g.RequiresPoseBounds)
                        {
                            vehiclesRequiringPoseBounds.Add(g.Vehicle);
                        }
                    }
                    else
                    {
                        if (vehiclesChecked.Contains(g.Vehicle.Handle))
                        {
                            vehiclesChecked.Remove(g.Vehicle.Handle);
                        }
                        g.Dispose();
                        gadgets.RemoveAt(i);
                    }
                }


                foreach (Vehicle v in vehiclesRequiringPoseBounds)
                {
                    CVehicle *   cveh = (CVehicle *)v.MemoryAddress;
                    fragInstGta *inst = cveh->Inst;
                    if (inst == null)
                    {
                        return;
                    }

                    GameFunctions.fragInst_PoseBoundsFromSkeleton(inst, true, true, true, 0, 0);
                }
                vehiclesRequiringPoseBounds.Clear();
            }
        }