示例#1
0
        protected override void Load()
        {
            Thread.CurrentThread.Name = "FreelancerGame UIThread";
            //Move to stop _TSGetMainThread error on OSX
            MinimumWindowSize = new Point(640, 480);
            SetVSync(Config.VSync);
            new IdentityCamera(this);
            uithread       = Thread.CurrentThread.ManagedThreadId;
            useintromovies = _cfg.IntroMovies;
            FLLog.Info("Platform", Platform.RunningOS.ToString() + (IntPtr.Size == 4 ? " 32-bit" : " 64-bit"));
            FLLog.Info("Available Threads", Environment.ProcessorCount.ToString());
            //Cache
            ResourceManager = new GameResourceManager(this);
            //Init Audio
            FLLog.Info("Audio", "Initialising Audio");
            Audio = new AudioManager(this);
            if (_cfg.MuteMusic)
            {
                Audio.Music.Volume = 0f;
            }
            //Load data
            FLLog.Info("Game", "Loading game data");
            GameData    = new GameDataManager(_cfg.FreelancerPath, ResourceManager);
            IntroMovies = GameData.GetIntroMovies();
            MpvOverride = _cfg.MpvOverride;
            Thread GameDataLoaderThread = new Thread(() =>
            {
                GameData.LoadData();
                Sound = new SoundManager(GameData, Audio);
                FLLog.Info("Game", "Finished loading game data");
                InitialLoadComplete = true;
            });

            GameDataLoaderThread.Name = "GamedataLoader";
            GameDataLoaderThread.Start();
            //
            Renderer2D      = new Renderer2D(RenderState);
            Fonts           = new FontManager(this);
            Billboards      = new Billboards();
            Nebulae         = new NebulaVertices();
            ViewportManager = new ViewportManager(RenderState);
            ViewportManager.Push(0, 0, Width, Height);
            Screenshots = new ScreenshotManager(this);

            Services.Add(Billboards);
            Services.Add(Nebulae);
            Services.Add(ResourceManager);
            Services.Add(Renderer2D);
            Services.Add(Config);
            Services.Add(Fonts);

            if (useintromovies && IntroMovies.Count > 0)
            {
                ChangeState(new IntroMovie(this, 0));
            }
            else
            {
                ChangeState(new LoadingDataState(this));
            }
        }
示例#2
0
        public SystemRenderer(ICamera camera, GameDataManager data, ResourceManager rescache, Game game)
        {
            this.camera      = camera;
            AsteroidFields   = new List <AsteroidFieldRenderer>();
            Nebulae          = new List <NebulaRenderer>();
            StarSphereModels = new IDrawable[0];
            Polyline         = new PolylineRender(commands);
            cache            = rescache;
            rstate           = cache.Game.RenderState;
            this.game        = game;
            gconfig          = game.GetService <GameConfig>();
            billboards       = game.GetService <Billboards>();
            resman           = game.GetService <ResourceManager>();
            nebulae          = game.GetService <NebulaVertices>();
            dot           = (Texture2D)rescache.FindTexture(ResourceManager.WhiteTextureName);
            DebugRenderer = new PhysicsDebugRenderer();

            if (GLExtensions.Features430)
            {
                pointLightBuffer = new ShaderStorageBuffer(MAX_POINTS * (16 * sizeof(float)));
                if (pointLightCull == null)
                {
                    pointLightCull = new ComputeShader(Resources.LoadString("LibreLancer.Shaders.lightingcull.glcompute"));
                }
            }
        }
示例#3
0
        public void LoadFontsFromGameData(GameDataManager gd)
        {
            infocardFonts = new Dictionary <int, FontVariations>();

            var v = new FontVariations();

            v.Regular    = GetSystemFont("Agency FB");
            v.Bold       = GetSystemFont("Agency FB", FontStyles.Bold);
            v.Italic     = GetSystemFont("Agency FB", FontStyles.Italic);
            v.BoldItalic = GetSystemFont("Agency FB", FontStyles.Bold | FontStyles.Italic);
            v.Size       = 14;
            infocardFonts.Add(-1, v);

            foreach (var f in gd.GetRichFonts())
            {
                //points = pixels * 72 / 96
                int sz = (int)(f.Size * 72f / 96f);

                var variations = new FontVariations();
                variations.Size       = sz;
                variations.Regular    = GetSystemFont(f.Name, FontStyles.Regular);
                variations.Bold       = GetSystemFont(f.Name, FontStyles.Bold);
                variations.Italic     = GetSystemFont(f.Name, FontStyles.Italic);
                variations.BoldItalic = GetSystemFont(f.Name, FontStyles.Bold | FontStyles.Italic);
                infocardFonts.Add(f.Index, variations);
            }
            _loaded = true;
        }
示例#4
0
        public Cutscene(IEnumerable <ThnScript> scripts, SpaceGameplay gameplay)
        {
            this.game     = gameplay.FlGame;
            this.gameData = gameplay.FlGame.GameData;
            World         = gameplay.world;
            spawnObjects  = false;
            camera        = new ThnCamera(gameplay.FlGame.Viewport);
            //thn = script;
            var evs = new List <ThnEvent>();

            foreach (var thn in scripts)
            {
                totalDuration = Math.Max(totalDuration, thn.Duration);
                foreach (var ev in thn.Events)
                {
                    ev.TimeOffset = 0;
                    evs.Add(ev);
                }
                AddEntities(thn);
            }
            evs.Sort((x, y) => x.Time.CompareTo(y.Time));
            foreach (var item in evs)
            {
                events.Enqueue(item);
            }
        }
示例#5
0
        public Cutscene(ThnScriptContext context, GameDataManager gameData, Rectangle viewport, Game game)
        {
            scriptContext = context;
            this.game = game;
            this.gameData = gameData;
			camera = new ThnCamera(viewport);
        }
示例#6
0
 public SoundManager(GameDataManager gameData, AudioManager audio, IUIThread ui)
 {
     data       = gameData;
     this.audio = audio;
     soundCache = new LRUCache <string, LoadedSound>(64, OnLoadSound);
     this.ui    = ui;
 }
示例#7
0
 public Cutscene(ThnScriptContext context, SpaceGameplay gameplay)
 {
     game = gameplay.FlGame;
     gameData = gameplay.FlGame.GameData;
     World = gameplay.world;
     spawnObjects = false;
     camera = new ThnCamera(gameplay.FlGame.RenderContext.CurrentViewport);
     scriptContext = context;
 }
示例#8
0
        public Cutscene(ThnScriptContext context, GameDataManager gameData, Viewport viewport, Game game)
        {
            this.game     = game;
            this.gameData = gameData;
            scriptContext = context;
            camera        = new ThnCamera(viewport);

            Renderer = new SystemRenderer(camera, gameData, game.GetService <GameResourceManager>(), game);
            World    = new GameWorld(Renderer, false);
            //thn = script;
            var evs = new List <ThnEvent>();

            foreach (var thn in context.Scripts)
            {
                totalDuration = Math.Max(totalDuration, thn.Duration);
                foreach (var ev in thn.Events)
                {
                    ev.TimeOffset = 0;
                    evs.Add(ev);
                }
                AddEntities(thn);
            }
            //work around SET_CAMERA not being called in disco (match vanilla behaviour)
            var firstCamera = Objects.Values.Where(x => x.Camera != null).FirstOrDefault();

            if (firstCamera != null)
            {
                camera.Transform = firstCamera.Camera;
            }
            evs.Sort((x, y) => x.Time.CompareTo(y.Time));
            foreach (var item in evs)
            {
                events.Enqueue(item);
            }
            //Add starspheres in the right order
            var sorted = ((IEnumerable <Tuple <IDrawable, ThnObject> >)layers).Reverse().OrderBy(x => x.Item2.Entity.SortGroup).ToArray();

            Renderer.StarSphereModels    = new RigidModel[sorted.Length];
            Renderer.StarSphereWorlds    = new Matrix4x4[sorted.Length];
            Renderer.StarSphereLightings = new Lighting[sorted.Length];
            starSphereObjects            = new ThnObject[sorted.Length];
            for (int i = 0; i < sorted.Length; i++)
            {
                Renderer.StarSphereModels[i]    = (sorted[i].Item1 as IRigidModelFile).CreateRigidModel(true);
                Renderer.StarSphereWorlds[i]    = sorted[i].Item2.Rotate * Matrix4x4.CreateTranslation(sorted[i].Item2.Translate);
                Renderer.StarSphereLightings[i] = Lighting.Empty;
                starSphereObjects[i]            = sorted[i].Item2;
            }
            //Add objects to the renderer
            World.RegisterAll();
        }
示例#9
0
        public void LoadFontsFromGameData(GameDataManager gd)
        {
            infocardFonts = new Dictionary <int, FontDescription>();

            var v = new FontDescription()
            {
                FontName = "Agency FB", FontSize = 16
            };

            infocardFonts.Add(-1, v);
            foreach (var f in gd.GetRichFonts())
            {
                var desc = new FontDescription()
                {
                    FontName = f.Name, FontSize = f.Size
                };
                infocardFonts.Add(f.Index, desc);
            }
            _loaded = true;
        }
示例#10
0
        public static NetCharacter FromDb(ServerCharacter character, GameDataManager gameData)
        {
            var nc = new NetCharacter();

            nc.Name      = character.Name;
            nc.gData     = gameData;
            nc.Base      = character.Base;
            nc.Ship      = gameData.GetShip(character.Ship);
            nc.Credits   = character.Credits;
            nc.Equipment = new List <NetEquipment>(character.Equipment.Count);
            foreach (var equip in character.Equipment)
            {
                nc.Equipment.Add(new NetEquipment()
                {
                    Hardpoint = equip.Hardpoint,
                    Equipment = gameData.GetEquipment(equip.Equipment),
                    Health    = equip.Health
                });
            }
            return(nc);
        }
 public void SetGameData(GameDataManager data)
 {
     this.data = data;
 }
示例#12
0
        protected override void Load()
        {
            Thread.CurrentThread.Name = "FreelancerGame UIThread";
            //Move to stop _TSGetMainThread error on OSX
            MinimumWindowSize = new Point(640, 480);
            SetVSync(Config.Settings.VSync);
            Config.Settings.RenderContext = RenderContext;
            new IdentityCamera(this);
            uithread       = Thread.CurrentThread.ManagedThreadId;
            useintromovies = _cfg.IntroMovies;
            FLLog.Info("Platform", Platform.RunningOS.ToString() + (IntPtr.Size == 4 ? " 32-bit" : " 64-bit"));
            FLLog.Info("Available Threads", Environment.ProcessorCount.ToString());
            //Cache
            ResourceManager = new GameResourceManager(this);
            //Init Audio
            FLLog.Info("Audio", "Initialising Audio");
            Audio = new AudioManager(this);
            Audio.WaitReady();
            Audio.MasterVolume = _cfg.Settings.MasterVolume;
            Audio.Music.Volume = _cfg.Settings.MusicVolume;
            //Load data
            FLLog.Info("Game", "Loading game data");
            GameData    = new GameDataManager(_cfg.FreelancerPath, ResourceManager);
            IntroMovies = GameData.GetIntroMovies();
            MpvOverride = _cfg.MpvOverride;
            Saves       = new SaveGameFolder();
            var    saveLoadTask         = Task.Run(() => Saves.Load(GetSaveFolder()));
            Thread GameDataLoaderThread = new Thread(() =>
            {
                GameData.LoadData(this, () =>
                {
                    Sound = new SoundManager(GameData, Audio, this);
                    Services.Add(Sound);
                    InisLoaded = true;
                });
                FLLog.Info("Game", "Finished loading game data");
                saveLoadTask.Wait();
                Saves.Infocards     = GameData.Ini.Infocards;
                InitialLoadComplete = true;
            });

            GameDataLoaderThread.Name = "GamedataLoader";
            GameDataLoaderThread.Start();
            //
            Fonts      = new FontManager();
            Billboards = new Billboards();
            Nebulae    = new NebulaVertices();
            RenderContext.PushViewport(0, 0, Width, Height);
            Screenshots = new ScreenshotManager(this);
            Typewriter  = new Typewriter(this);

            Services.Add(Billboards);
            Services.Add(Nebulae);
            Services.Add(ResourceManager);
            Services.Add(Config);
            Services.Add(Fonts);
            Services.Add(GameData);
            Services.Add(Sound);
            Services.Add(Typewriter);
            Debug = new DebugView(this);
            if (useintromovies && IntroMovies.Count > 0)
            {
                ChangeState(new IntroMovie(this, 0));
            }
            else
            {
                ChangeState(new LoadingDataState(this));
            }
        }
示例#13
0
 public GameServer(string fldir)
 {
     Resources = new ServerResourceManager();
     GameData  = new GameDataManager(fldir, Resources);
 }
示例#14
0
 public GameServer(string fldir)
 {
     GameData = new GameDataManager(fldir, null);
 }
示例#15
0
 public EmbeddedServer(GameDataManager gameData)
 {
     Client             = new LocalPacketClient();
     Server             = new GameServer(gameData);
     Server.LocalPlayer = new Player(Client, Server, Guid.Empty);
 }
 public GameServer(GameDataManager gameData)
 {
     Resources    = new ServerResourceManager();
     GameData     = gameData;
     needLoadData = false;
 }
示例#17
0
 public void LoadFontsFromGameData(GameDataManager gd)
 {
     LoadFonts(gd.Ini.Fonts, gd.Ini.RichFonts, gd.VFS, gd.Ini.Freelancer.DataPath);
 }
示例#18
0
 public SoundManager(GameDataManager gameData, AudioManager audio)
 {
     data       = gameData;
     this.audio = audio;
 }
示例#19
0
 public ServerDatabase(string connectionString, GameDataManager gameData)
 {
     //FLLog.Info("MySQL", "Connecting to database");
     //connection = new MySqlConnection(connectionString);
     //connection.Open();
 }