Ejemplo n.º 1
0
 public static TunableManager GetSingleton()
 {
     if (singleton == null)
     {
         singleton = new TunableManager();
     }
     return(singleton);
 }
Ejemplo n.º 2
0
        public void CreateGreets(TunableManager tm, AssetManager assetManager
                                 , string greetName
                                 , PixelFont greetFont
                                 , string greet_material
                                 , Vector3 greetColor
                                 , ShaderProgram greetShader
                                 , Vector3 greetOffset
                                 , Vector3 greetSpacing
                                 , float greetScale
                                 , float letterStep
                                 , TransformComponent parentTransform
                                 , ref List <GreetPage> greetsOut)
        {
            int gp = tm.GetInt(greetName + ".greet_pages");

            for (int pi = 0; pi < gp; pi++)
            {
                GreetPage page = new GreetPage();
                page.greets = new List <Greeting>();
                string pageName     = greetName + "_page_" + (pi + 1);
                int    greet_amount = tm.GetInt(pageName + "." + "greet_amount");
                for (int gi = 0; gi < greet_amount; gi++)
                {
                    Greeting greet = new Greeting();

                    greet.textMesh = assetManager.CreateMesh("greet" + gi
                                                             , MeshDataGenerator.CreateTextMesh(tm.GetString(pageName + "." + "greet_" + (gi + 1))
                                                                                                , greetFont, letterStep)
                                                             , greet_material
                                                             , greetShader
                                                             , new Vector3(0, 0, 0));

                    greet.alpha = 1.0f;
                    greet.color = greetColor;
                    page.greets.Add(greet);
                }
                greetsOut.Add(page);
            }

            for (int pi = 0; pi < greetsOut.Count; pi++)
            {
                GreetPage p = greetsOut[pi];
                for (int gi = 0; gi < p.greets.Count; gi++)
                {
                    Greeting g = p.greets[gi];
                    g.textMesh.Transform.Parent = parentTransform;
                    Vector3 offset = greetOffset + (greetSpacing * gi);
                    g.textMesh.Transform.Translation = new Vector4(offset, 1.0f);
                    g.textMesh.Transform.Scale       = greetScale;
                }
            }
        }
Ejemplo n.º 3
0
        private void LoadDemo()
        {
            AssetManager   asman = AssetManager.GetSingleton();
            TunableManager tm    = TunableManager.GetSingleton();

            tm.ReloadValues();
            try
            {
                demoWrapper.Demo.Load(asman, syncSystem);
            }
            catch (Exception exception)
            {
                Logger.LogError(Logger.ErrorState.Critical, "Caught exception when creating Demo instance " + exception.Message);
                return;
            }
            loadCompleted = true;
        }
Ejemplo n.º 4
0
        void LoadLightMeshList(TunableManager tm, AssetManager assetManager, TransformComponent parentTransform, string lightArrayName, int amount, ShaderProgram shader, ref List <LightMesh> list)
        {
            for (int ml = 0; ml < amount; ml++)
            {
                LightMesh lm      = new LightMesh();
                string    lightId = lightArrayName + "." + (ml + 1);

                lm.sphereRadius = tm.GetFloat(lightId + "_size");
                Vector3 position = tm.GetVec3(lightId + "_pos") + parentTransform.GetWorldPosition();
                lm.mesh = assetManager.CreateMesh(lightId
                                                  , MeshDataGenerator.CreateCubeMesh(new Vector3(lm.sphereRadius), false, false)
                                                  , "default"
                                                  , shader
                                                  , position);
                // lm.mesh.Transform.Parent = parentTransform;

                lm.fullRange = tm.GetFloat(lightId + "_range");
                Vector3 color = tm.GetVec3(lightId + "_color");
                lm.light = Light.CreatePointLight(color, lm.fullRange, position);

                list.Add(lm);
            }
        }
Ejemplo n.º 5
0
        public DemoSettings GetDemoSettings()
        {
            TunableManager tm = TunableManager.GetSingleton();

            settings.AudioEnabled = tm.GetBool("demosettings.audio_enabled");
            string audio_engine = tm.GetString("demosettings.audio_engine");

            if (audio_engine == "system")
            {
                settings.AudioEngineSetting = DemoSettings.AudioEngine.System;
            }

            settings.SyncEnabled = tm.GetBool("demosettings.sync_enabled");
            settings.LightServer = tm.GetBool("demosettings.light_server_enabled");

            settings.Resolution = tm.GetVec2("demosettings.resolution");
            settings.Fullscreen = tm.GetBool("demosettings.fullscreen");

            settings.UpdatesPerSecond = tm.GetInt("demosettings.updates_per_second");
            settings.WindowTitle      = tm.GetString("demosettings.window_title");
            settings.SyncFilePrefix   = tm.GetString("sync.track_file_prefix");
            return(settings);
        }
Ejemplo n.º 6
0
        protected override void OnLoad(EventArgs e)
        {
            PauseSyncButton = new Button(Key.Space);
            PrevSceneButton = new Button(Key.F3);
            NextSceneButton = new Button(Key.F4);

            ReloadDemoButton = new Button(Key.F5);
            RestartDemoOrRetreatSceneButton = new Button(Key.F6);
            AdvanceSceneButton = new Button(Key.F7);
            InputEnabledButton = new Button(Key.F8);

            CameraModeButton      = new Button(Key.F9);
            CameraSpeedDownButton = new Button(Key.F10);
            CameraSpeedUpButton   = new Button(Key.F11);
            PrintFrameButton      = new Button(Key.F12);

            tunableManager = TunableManager.GetSingleton();
            syncSystem     = SyncSystem.GetSingleton();
            renderer       = Renderer.GetSingleton();

            string dataFolder = "data";

            AssetManager.WorkingDir = dataFolder;
            AssetManager assetManager = AssetManager.GetSingleton();

            Logger.LogPhase("Asset manager is created");
            assetManager.LoadAll();
            assetManager.printLoadedAssets();
            Logger.LogPhase("Assets have been loaded");

            tunableManager.ReloadValues();
            Logger.LogPhase("Config file have been loaded");

            demoWrapper = new DemoWrapper();
            demoWrapper.Create();
            demoSettings = demoWrapper.Demo.GetDemoSettings();

            // Audio ....................................

            Logger.LogPhase("Initializing audio system");

            if (demoSettings.AudioEngineSetting == DemoSettings.AudioEngine.System)
            {
                audioSystem = new SystemAudio();
            }
            if (demoSettings.AudioEngineSetting == DemoSettings.AudioEngine.Dummy)
            {
                if (demoSettings.AudioEnabled == true)
                {
                    Logger.LogError(Logger.ErrorState.User, "Initialized dummy audio when Audio is enabled.");
                }
                audioSystem = new DummyAudioSystem();
            }
            bool audioInitOk = audioSystem.Initialize();

            if (!audioInitOk)
            {
                Logger.LogError(Logger.ErrorState.Critical, "Audio system failed to initialize.");
                return;
            }
            Logger.LogPhase("Audio has been initialized");
            demoWrapper.SetAudioSystem(audioSystem);


            // Sync.............................

            if (demoSettings.SyncEnabled)
            {
                syncSystem.Start(demoSettings.SyncFilePrefix);
            }
            else
            {
                syncSystem.StartManual();
            }

            // Rendering .................
            Size windowSize = new Size((int)demoSettings.Resolution.X, (int)demoSettings.Resolution.Y);

            base.Size = windowSize;
            if (demoSettings.Fullscreen)
            {
                base.WindowState = WindowState.Fullscreen;
            }
            renderer.ResizeScreen((int)demoSettings.Resolution.X, (int)demoSettings.Resolution.Y);


            CursorVisible = false;
            testScene     = new TestScene();
            testScene.Load(assetManager);

            loadingScene = new LoadingScene();
            loadingScene.Load(assetManager);

            applicationTime = new Stopwatch();

            LoadDemo();
            Logger.LogPhase("OnLoad complete");
            loadCompleted = true;
            running       = true;
            applicationTime.Start();
        }
Ejemplo n.º 7
0
        public void Load(AssetManager assetManager, SyncSystem syncSystem)
        {
            TunableManager tm = TunableManager.GetSingleton();

            lightController = new InstanssiLightController(
                tm.GetString("demosettings.light_server_ip")
                , tm.GetString("demosettings.light_server_host_name")
                , tm.GetInt("demosettings.light_server_port")
                , tm.GetInt("bunny_lights.amount")
                , tm.GetInt("demosettings.physical_lights_amount")
                , tm.GetInt("demosettings.light_server_interval"));

            mountainsNumber = tm.GetInt("scene_number.mountains");
            moonNumber      = tm.GetInt("scene_number.moon");
            bunnyNumber     = tm.GetInt("scene_number.bunny");
            warpNumber      = tm.GetInt("scene_number.warp");
            seaNumber       = tm.GetInt("scene_number.sea");
            crystalsNumber  = tm.GetInt("scene_number.crystals");

            // Audio
            Logger.LogInfo("Loading demo audio");
            string audioFileName = tm.GetString("audio.filename");

            music = audioSystem.LoadAudioFile(audioFileName);

            syncSystem.SetAudioProperties(tm.GetInt("audio.bpm"), tm.GetFloat("audio.length_seconds")
                                          , tm.GetInt("audio.rows_per_beat"));
            syncSystem.SetManualSceneAdvanceRate(tm.GetFloat("sync.manual_scene_advance_speed"));

            // Camera
            CameraComponent camera = Renderer.GetSingleton().GetCamera();

            camera.FOV       = tm.GetFloat("camera.fov");
            camera.Speed     = tm.GetFloat("camera.speed");
            camera.SpeedStep = tm.GetFloat("camera.speed_step");
            camera.Near      = tm.GetFloat("camera.near_plane");
            camera.Far       = tm.GetFloat("camera.far_plane");
            camera.CreateMatrices();

            // Camera frames
            Logger.LogInfo("Loading demo frames");
            List <PosAndDir> frames = new List <PosAndDir>();
            int frameAmount         = tm.GetInt("camera_frames.amount");

            for (int frameI = 0; frameI < frameAmount; frameI++)
            {
                Vector3 pos = tm.GetVec3("camera_frames.frame_" + frameI + "_pos");
                Vector3 dir = tm.GetVec3("camera_frames.frame_" + frameI + "_dir");
                frames.Add(new PosAndDir(pos, dir));
            }
            Renderer.GetSingleton().SetCameraFrames(frames);

            // Shaders
            Logger.LogInfo("Loading demo shaders");
            ShaderProgram diamondShader = assetManager.GetShaderProgram("diamond");
            ShaderProgram texShader     = assetManager.GetShaderProgram("texturedobjmesh");
            ShaderProgram gridShader    = assetManager.GetShaderProgram("gridmesh");
            ShaderProgram objShader     = assetManager.GetShaderProgram("litobjmesh");
            ShaderProgram skyboxProgram = assetManager.GetShaderProgram("skybox");
            ShaderProgram starProgram   = assetManager.GetShaderProgram("sky");

            guiShader = assetManager.GetShaderProgram("gui");

            cameraFOV = syncSystem.GetTrack("FOV");
            warpFOV   = syncSystem.GetTrack("W_FOV");


            // Fade
            if (guiShader == null)
            {
                Logger.LogError(Logger.ErrorState.Critical, "Did not get gui shader");
            }
            fadeoutAlpha = syncSystem.GetTrack("FadeOut");

            Material fadeoutMaterial = new Material("blackfadeout");

            fadeoutMaterial.textureMaps.Add(ShaderUniformName.DiffuseMap, MaterialManager.GetSingleton().GetColorTextureByName("black"));
            MaterialManager.GetSingleton().AddNewMaterial(fadeoutMaterial);

            fadeoutQuad = assetManager.CreateMesh("black_overlay"
                                                  , MeshDataGenerator.CreateQuadMesh(false, true)
                                                  , fadeoutMaterial.materialName
                                                  , guiShader
                                                  , tm.GetVec3("fade.position"));

            fadeoutQuad.Transform.Scale = tm.GetFloat("fade.scale");


            // Skybox
            starSkyBox = assetManager.CreateMesh("stars"
                                                 , MeshDataGenerator.CreateSkybox()
                                                 , null
                                                 , skyboxProgram
                                                 , new Vector3(0, 0, 0));

            starSkyboxMaterial = assetManager.GetMaterial(tm.GetString("mountain_scene.skybox_material"));

            starSkyBox.Transform.SetRotationAxis(tm.GetVec3("mountain_scene.star_rotation_axis"));
            skyRotation = syncSystem.GetTrack("Sky_R");

            // Lights

            mountainLight = Light.CreateDirectionalLight(tm.GetVec3("mountain_light.color")
                                                         , tm.GetFloat("mountain_light.ambient"), tm.GetFloat("mountain_light.intensity")
                                                         , tm.GetVec3("mountain_light.direction"));

            // Models
            Logger.LogInfo("Loading demo models");
            Logger.LogInfo(" - Bunny");
            bunnyMesh = assetManager.GetMesh("bunny"
                                             , tm.GetString("bunny.model")
                                             , tm.GetString("bunny.material")
                                             , assetManager.GetShaderProgram(tm.GetString("bunny.shader"))
                                             , tm.GetVec3("bunny.position"));

            bunnyMesh.Transform.Scale = tm.GetFloat("bunny.scale");
            bunnyMesh.Transform.SetRotationAxis(new Vector3(0, 1, 0));
            bunnyRotation = syncSystem.GetTrack("bunny_R");

            bunnyLights = new List <LightMesh>();
            int bunnyLightAmount = tm.GetInt("bunny_lights.amount");

            LoadLightMeshList(tm, assetManager, bunnyMesh.Transform, "bunny_lights", bunnyLightAmount, texShader, ref bunnyLights);

            bunnyLightsSizesLocations = new List <int>();
            for (int i = 0; i < bunnyLights.Count; i++)
            {
                int location = bunnyMesh.ShaderProgram.GetCustomUniformLocation("ucLightSizes[" + i + "]");
                bunnyLightsSizesLocations.Add(location);
            }

            bunnyLightProgress = syncSystem.GetTrack("bunny_L");

            Logger.LogInfo(" - Monolith");
            monolith = assetManager.CreateMesh("monolith"
                                               , MeshDataGenerator.CreateCubeMesh(tm.GetVec3("monolith.size")
                                                                                  , true, true)
                                               , tm.GetString("monolith.material")
                                               , objShader
                                               , tm.GetVec3("monolith.position"));

            monolith.Transform.SetRotationAxis(new Vector3(0, 1, 0));
            monolith.Transform.Scale = tm.GetFloat("monolith.scale");
            monolithRotation         = syncSystem.GetTrack("mono_R");
            monolithElevation        = syncSystem.GetTrack("mono_Y");

            // DEBUG
            monolith_normals = assetManager.CreateMesh("mono_N"
                                                       , MeshDataGenerator.CreateNormalDebug(monolith.Data.positions, monolith.Data.normals)
                                                       , null
                                                       , gridShader
                                                       , monolith.Transform.GetWorldPosition());

            monolith_normals.Transform.Parent = monolith.Transform;

            Logger.LogInfo(" - Telescope");
            telescope = new Telescope();

            telescope.tower = assetManager.GetMesh("tele_tower"
                                                   , tm.GetString("telescope.tower_model")
                                                   , tm.GetString("telescope.material")
                                                   , objShader
                                                   , tm.GetVec3("telescope.tower_position"));

            telescope.tower.Transform.Scale = tm.GetFloat("telescope.tower_scale");
            telescope.tower.Transform.SetRotationAxis(new Vector3(0, 1, 0));

            telescope.antenna = assetManager.GetMesh("tele_antenna"
                                                     , tm.GetString("telescope.antenna_model")
                                                     , tm.GetString("telescope.material")
                                                     , objShader
                                                     , tm.GetVec3("telescope.antenna_position"));
            telescope.antenna.Transform.Scale = tm.GetFloat("telescope.antenna_scale");
            telescope.antenna.Transform.SetRotationAxis(new Vector3(0, 0, 1));

            telescope.antenna.Transform.Parent = telescope.tower.Transform;
            telescopeElevation = syncSystem.GetTrack("Tele_Elev");
            telescopeRotation  = syncSystem.GetTrack("Tele_Rot");

            mainTelescopePosition = tm.GetVec3("telescope.tower_position");

            // Telescope array
            int     teleAmount      = tm.GetInt("telescope_array.amount");
            Vector3 teleArrayCorner = tm.GetVec3("telescope_array.position");
            Vector3 teleArrayDir1   = tm.GetVec3("telescope_array.dir");
            Vector3 teleArrayDir2   = tm.GetVec3("telescope_array.dir2");
            float   spacing         = tm.GetFloat("telescope_array.spacing");

            telescopeArrayPositions = new List <Vector3>();
            for (int t = 0; t < teleAmount; t++)
            {
                telescopeArrayPositions.Add(teleArrayCorner + teleArrayDir1 * spacing * (t + 1));
                telescopeArrayPositions.Add(teleArrayCorner + teleArrayDir2 * spacing * (t + 1));
            }

            // Sea
            Logger.LogInfo(" - Sea");
            seaShader = assetManager.GetShaderProgram("heightMapTerrain");

            Vector2 seaSize             = tm.GetVec2("sea.size");
            float   seaTrianglesDensity = tm.GetFloat("sea.detail_level");
            Vector2 seaUVRepeat         = tm.GetVec2("sea.UV_repeat");

            seaMesh = assetManager.CreateMesh("sea"
                                              , MeshDataGenerator.CreateTerrain(seaSize.X, seaSize.Y, seaTrianglesDensity, true, true
                                                                                , seaUVRepeat.X, seaUVRepeat.Y)
                                              , tm.GetString("sea.material")
                                              , objShader
                                              , tm.GetVec3("sea.position"));

            // Planet mountains
            Logger.LogInfo(" - Planet Mountains");
            planetMountains = assetManager.CreateMesh("planet_mountains"
                                                      , MeshDataGenerator.CreateMountains(
                                                          tm.GetFloat("planet_mountain.size")
                                                          , true, tm.GetInt("planet_mountain.iterations")
                                                          , tm.GetFloat("planet_mountain.height_variation")
                                                          , tm.GetFloat("planet_mountain.flat_start")
                                                          , tm.GetFloat("planet_mountain.flat_end")
                                                          , tm.GetInt("planet_mountain.random_seed"))
                                                      , tm.GetString("planet_mountain.material")
                                                      , objShader
                                                      , tm.GetVec3("planet_mountain.position"));

            planetLight = Light.CreateDirectionalLight(tm.GetVec3("planet_light.color")
                                                       , tm.GetFloat("planet_light.ambient"), tm.GetFloat("planet_light.intensity")
                                                       , tm.GetVec3("planet_light.direction"));

            planetSkyBox = assetManager.CreateMesh("planet_skybox"
                                                   , MeshDataGenerator.CreateSkybox()
                                                   , null
                                                   , skyboxProgram
                                                   , new Vector3(0, 0, 0));

            planetSkyboxMaterial = assetManager.GetMaterial("planet_skybox");


            // Mountains
            Logger.LogInfo(" - Mountains");
            mountains = assetManager.CreateMesh("mountains"
                                                , MeshDataGenerator.CreateMountains(
                                                    tm.GetFloat("mountain.size")
                                                    , true, tm.GetInt("mountain.iterations")
                                                    , tm.GetFloat("mountain.height_variation")
                                                    , tm.GetFloat("mountain.flat_start")
                                                    , tm.GetFloat("mountain.flat_end")
                                                    , tm.GetInt("mountain.random_seed"))
                                                , tm.GetString("mountain.material")
                                                , objShader
                                                , tm.GetVec3("mountain.position"));

            // Crystals
            Logger.LogInfo(" - Crystals");

            crystalMeshes = new List <Crystal>();
            int     crystalAmount = tm.GetInt("crystals.amount");
            Random  randomizer    = new Random(0);
            float   areaSize      = tm.GetFloat("crystals.area_size");
            float   areaTop       = tm.GetFloat("crystals.area_top");
            Vector3 areaPos       = tm.GetVec3("crystals.area_pos");
            float   maxSpeed      = tm.GetFloat("crystals.max_speed");
            float   sizeMin       = tm.GetFloat("crystals.min_size");
            float   sizeMax       = tm.GetFloat("crystals.max_size");

            for (int s = 0; s < crystalAmount; s++)
            {
                Crystal c = new Crystal();

                Vector3 position = new Vector3((float)randomizer.NextDouble() - 0.5f
                                               , (float)randomizer.NextDouble()
                                               , (float)randomizer.NextDouble() - 0.5f);

                position  = position * new Vector3(areaSize, areaSize, areaSize);
                position += areaPos;

                c.mesh = assetManager.CreateMesh("crystal_" + s
                                                 , MeshDataGenerator.CreateStar(new Vector3(1.0f, 0, 0), new Vector3(0, 1, 0)
                                                                                , 1.0f, 2.0f, 0.5f, 0.8f, true)
                                                 , tm.GetString("crystals.material")
                                                 , assetManager.GetShaderProgram(tm.GetString("crystals.shader"))
                                                 , position);

                c.mesh.Transform.Scale = sizeMin + (float)randomizer.NextDouble() * (sizeMax - sizeMin);
                c.mesh.Transform.SetRotationAxis(position.Normalized());
                c.speed = (float)randomizer.NextDouble() * maxSpeed;
                crystalMeshes.Add(c);
            }

            crystalsGravity = tm.GetFloat("crystals.gravity");

            Logger.LogInfo("Creating greetings");
            // Title, Greets and credits
            TextGenerator textgen        = TextGenerator.GetSingleton();
            string        greet_font     = tm.GetString("text.font");
            PixelFont     greetFont      = textgen.GetFont(greet_font);
            string        greet_material = tm.GetString("text.material");
            ShaderProgram greetShader    = assetManager.GetShaderProgram(tm.GetString("text.shader"));
            float         textStep       = tm.GetFloat("text.step");

            // Title
            string titleMaterial = tm.GetString("mountain_text.title_material");
            string groupMaterial = tm.GetString("mountain_text.group_material");

            DrawableMesh groupName = assetManager.CreateMesh("groupText"
                                                             , MeshDataGenerator.CreateQuadMesh(false, true)
                                                             , groupMaterial
                                                             , greetShader
                                                             , tm.GetVec3("mountain_scene.group_name_position"));

            groupName.Transform.Scale = tm.GetFloat("mountain_scene.group_name_scale");

            groupNameGreet          = new Greeting();
            groupNameGreet.textMesh = groupName;
            groupNameGreet.alpha    = 0.0f;
            groupNameGreet.color    = tm.GetVec3("mountain_text.color");


            DrawableMesh demoName = assetManager.CreateMesh("groupText"
                                                            , MeshDataGenerator.CreateQuadMesh(false, true)
                                                            , titleMaterial
                                                            , greetShader
                                                            , tm.GetVec3("mountain_scene.demo_name_position"));

            demoName.Transform.Scale = tm.GetFloat("mountain_scene.demo_name_scale");

            demoNameGreet          = new Greeting();
            demoNameGreet.textMesh = demoName;
            demoNameGreet.alpha    = 0.0f;
            demoNameGreet.color    = tm.GetVec3("mountain_text.color");

            // Greets
            Vector3 greetOffset  = tm.GetVec3("text.offset");
            Vector3 greetSpacing = tm.GetVec3("text.spacing");
            float   greetScale   = tm.GetFloat("text.scale");

            group_greetings = new List <GreetPage>();
            Vector3 monoGreetColor = tm.GetVec3("monolith_greets.color");

            CreateGreets(tm, assetManager, "monolith_greets", greetFont, greet_material, monoGreetColor, greetShader
                         , greetOffset, greetSpacing, greetScale
                         , textStep, monolith.Transform, ref group_greetings);

            // Credits
            credits = new List <GreetPage>();
            Vector3 creditsOffset    = tm.GetVec3("credits.offset");
            Vector3 creditsSpacing   = tm.GetVec3("credits.spacing");
            float   creditsScale     = tm.GetFloat("credits.scale");
            Vector3 creditGreetColor = tm.GetVec3("credits.color");

            CreateGreets(tm, assetManager, "credits", greetFont, greet_material, creditGreetColor, greetShader
                         , creditsOffset, creditsSpacing, creditsScale
                         , textStep, monolith.Transform, ref credits);

            textAlpha = syncSystem.GetTrack("text_A");

            Logger.LogInfo("Creating title and name");
            title = new List <GreetPage>();
            GreetPage titlePage = new GreetPage();

            titlePage.greets.Add(groupNameGreet);
            titlePage.greets.Add(demoNameGreet);

            title.Add(titlePage);

            if (settings.LightServer)
            {
                lightController.StartSync();
            }
            Logger.LogPhase("Bunny demo is loaded");
            syncSystem.PrintEditorRowAmount();
        }