Exemplo n.º 1
0
        private void prepareListOfDrivers(RaceEventConfig eventCfg,
                                          out List <DriverCharacter> drivers, out DriverCharacter playerDriver)
        {
            playerDriver = null;
            drivers      = new List <DriverCharacter>();

            // Add player, if its required
            if (eventCfg.PlayerDriver >= 0)
            {
                playerDriver = LF.RaceAssets.Drivers[LF.RaceAssets.Names[eventCfg.PlayerDriver]];
                drivers.Add(playerDriver);
            }
            // Choose random set of opponents
            if (eventCfg.Opponents > 0)
            {
                DriverCharacter[] allDrivers = new DriverCharacter[LF.RaceAssets.Drivers.Count];
                LF.RaceAssets.Drivers.Values.CopyTo(allDrivers, 0);
                Utils.Shuffle(allDrivers, new System.Random());
                for (int i = 0, cnt = 0; cnt < eventCfg.Opponents; ++i)
                {
                    if (allDrivers[i] != playerDriver)
                    {
                        drivers.Add(allDrivers[i]);
                        cnt++;
                    }
                }
            }
        }
Exemplo n.º 2
0
 public void StartAIDemo(RaceEventConfig eventCfg)
 {
     LF.Menu.HideMenu();
     // FadeOut(50); TODO
     setupAIRace(eventCfg);
     // FadeIn(50); TODO
 }
Exemplo n.º 3
0
        private void setupRace(RaceEventConfig eventCfg)
        {
            clearRace();

            // Prepare list of drivers
            DriverCharacter        playerDriver;
            List <DriverCharacter> drivers;

            prepareListOfDrivers(eventCfg, out drivers, out playerDriver);

            // Switch to the desired AI type
            if (eventCfg.Physics == RacePhysicsMode.Safe && _aiRegionBased != null)
            {
                _ai = _aiRegionBased;
            }
            else
            {
                _ai = _aiPathBased;
            }

            // Create cars, assign AI, put on the starting grid...
            createRacingCars(drivers, playerDriver);

            // Read customizable settings for the track and vehicle behavior
            readAIAndPhysicsConfig(eventCfg.Physics == RacePhysicsMode.Safe ? "race_safe.ini" : "race_wild.ini");

            _race.Start(eventCfg.Laps, eventCfg.CarCollisions);
        }
Exemplo n.º 4
0
        public static void Load(string filepath, ref GameConfig gameCfg, ref RaceEventConfig raceCfg)
        {
            if (!File.Exists(filepath))
            {
                return;
            }
            FileIniDataParser file = new FileIniDataParser();

            file.Parser.Configuration.CommentString = "//";
            IniData   inidata = file.ReadFile(filepath);
            IniGetter ini     = new IniGetter(inidata);

            gameCfg.MusicVolume = ini.GetInt("main", "music", gameCfg.MusicVolume);

            raceCfg.PlayerDriver = ini.GetInt("race", "driver", raceCfg.PlayerDriver);
            raceCfg.Laps         = ini.GetInt("race", "laps", raceCfg.Laps);
            raceCfg.Opponents    = ini.GetInt("race", "opponents", raceCfg.Opponents);
            string          physics = ini.GetString("race", "physics", raceCfg.Physics.ToString());
            RacePhysicsMode mode;

            if (Enum.TryParse <RacePhysicsMode>(physics, out mode))
            {
                raceCfg.Physics = mode;
            }
            raceCfg.CarCollisions = ini.GetBool("race", "car_collisions", raceCfg.CarCollisions);

            /* TODO
             *
             * IsDebugMode = ini.ReadBool("main", "debug_mode", IsDebugMode);
             */
        }
Exemplo n.º 5
0
 public void StartSinglePlayer(RaceEventConfig eventCfg)
 {
     LF.Menu.HideMenu();
     // FadeOut(50); TODO
     setupSinglePlayerRace(eventCfg);
     // FadeIn(50); TODO
     runStartSequence();
 }
Exemplo n.º 6
0
        // TODO: share duplicate code with setupSinglePlayerRace
        private void setupAIRace(RaceEventConfig eventCfg)
        {
            _game.State.Paused = true;

            setupRace(new RaceEventConfig(-1, eventCfg.Opponents, eventCfg.Laps, eventCfg.Physics, eventCfg.CarCollisions));

            cameraTargetRandomCar(true);

            _isAIRace          = true;
            _game.State.Paused = false;
        }
Exemplo n.º 7
0
        private void setupSinglePlayerRace(RaceEventConfig eventCfg)
        {
            _game.State.Paused = true;

            setupRace(eventCfg);

            cameraTargetPlayerCar(true);

            _isAIRace = false;

            RaceUI.Show(_race);
            _game.State.Paused = false;
        }
Exemplo n.º 8
0
        private void onLoad()
        {
            /* TODO:
             * FadeOut(0);
             * StopAllAudio();
             */

            RaceUI.Init(_game);

            RaceEventConfig cfg = LF.Menu.RaceConfig;

            cfg.PlayerDriver = -1;                          // no player
            cfg.Opponents    = LF.RaceAssets.Drivers.Count; // max drivers
            cfg.Laps         = 0;                           // drive forever
            setupAIRace(cfg);
            _music.Play(true);

            GameStateManager.PushState(this);
        }
Exemplo n.º 9
0
        public static void Save(string filepath, GameConfig gameCfg, RaceEventConfig raceCfg)
        {
            IniData   inidata = new IniData();
            IniSetter ini     = new IniSetter(inidata);

            ini.SetInt("main", "music", gameCfg.MusicVolume);

            ini.SetInt("race", "driver", raceCfg.PlayerDriver);
            ini.SetInt("race", "laps", raceCfg.Laps);
            ini.SetInt("race", "opponents", raceCfg.Opponents);
            ini.SetString("race", "physics", raceCfg.Physics.ToString());
            ini.SetBool("race", "car_collisions", raceCfg.CarCollisions);

            FileIniDataParser file = new FileIniDataParser();

            file.Parser.Configuration.CommentString = "//";
            file.WriteFile(filepath, inidata);

            /* TODO
             *
             * IsDebugMode = ini.ReadBool("main", "debug_mode", IsDebugMode);
             */
        }