Exemple #1
0
        public static void Create(CInitializer initializer, bool bRunOnSeparateThread)
        {
            if (Instance != null)
            {
                throw new Exception("You cannot create multiple engines at the same time!");
            }

            Input.InitInput();

            if (bRunOnSeparateThread)
            {
                Thread engineThread = new Thread(() =>
                {
                    Instance.Run();
                });

                Instance = new CEngine(engineThread);
                Instance.Init(initializer);
                engineThread.Start();
            }
            else
            {
                Instance = new CEngine(Thread.CurrentThread);
                Instance.Init(initializer);
                Instance.Run();
            }
        }
Exemple #2
0
        internal void CreateEngineAndShow()
        {
            RenderFormSurface surface = new RenderFormSurface(this);
            CLogger           logger  = new CLogger("game.log", true, true, true);

            CInitializer initializer = new CInitializer();

            initializer.Add("Viewport");
            initializer.Add <IRenderSurface>(surface);
            initializer.Add(logger);
            CEngine.Create(initializer, true);

            CKlaxScriptRegistry dummy = CKlaxScriptRegistry.Instance;

            Input.SetReferenceHWND(Handle);
            Input.CursorVisibilitySetter = (arg) =>
            {
                if (arg)
                {
                    Cursor.Show();
                }
                else
                {
                    Cursor.Hide();
                }
            };

            Width  = WindowWidth;
            Height = WindowHeight;

            CEngine.Instance.Dispatch(EEngineUpdatePriority.BeginFrame, () => { CEngine.Instance.LoadWorld(null, WorldLoadedCallback); });

            Point size = new Point(ClientSize.Width, ClientSize.Height);

            System.Drawing.Point topLeft = PointToScreen(new System.Drawing.Point(0, 0));
            IntPtr    handlePtr          = Handle;
            CRenderer renderer           = CRenderer.Instance;

            CEngine.Instance.Dispatch(EEngineUpdatePriority.BeginFrame, () =>
            {
                renderer.Resize(size.X, size.Y, topLeft.X, topLeft.Y, handlePtr);
                CEngine.Instance.CurrentWorld.StartPlayMode();
            });
        }
Exemple #3
0
        public void Init(CInitializer initializer)
        {
            Updater.Init(initializer);

            CLogger logger = initializer.Get <CLogger>();

            if (logger != null)
            {
                logger.Init();
            }

            IRenderSurface surface = initializer.Get <IRenderSurface>();

            if (surface != null)
            {
                CRenderer.Instance.Init(surface);
            }

            RegisterAssetTypes();
        }
Exemple #4
0
        private void InitializeEngine()
        {
            CInitializer initializer  = new CInitializer();
            CLogger      editorLogger = new CLogger("editor.log", true, true, true);

            initializer.Add(editorLogger);

            CEngine.Create(initializer, true);
            Input.CursorVisibilitySetter = (arg) =>
            {
                Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() =>
                {
                    if (arg)
                    {
                        System.Windows.Forms.Cursor.Show();
                    }
                    else
                    {
                        System.Windows.Forms.Cursor.Hide();
                    }
                }));
            };
        }
Exemple #5
0
        public void Init(CInitializer initializer)
        {
            UpdateScheduler = new CUpdateScheduler();

            CreateLevel();
            GameConsole.Init();
            PhysicsWorld.Init(this);


            #region Sponza
            CModelAsset sponzaAsset = CImportManager.Instance.MeshImporter.LoadModelAsync("TestResources/SponzaAtrium/sponza.obj");
            m_sponzaEntity = SpawnEntity <CEntity>();
            CModelComponent modelComponent = m_sponzaEntity.AddComponent <CModelComponent>(true, true);
            m_sponzaEntity.SetWorldPosition(new Vector3(0, -5, -5));
            m_sponzaEntity.SetWorldRotation(Quaternion.RotationAxis(Axis.Up, MathUtil.DegreesToRadians(90)));
            m_sponzaEntity.SetWorldScale(new Vector3(0.03f));
            CStaticModelColliderComponent staticModelCollider = m_sponzaEntity.AddComponent <CStaticModelColliderComponent>(true, true);
            staticModelCollider.ModelAsset  = sponzaAsset;
            modelComponent.Model            = sponzaAsset;
            m_sponzaEntity.IsPhysicsStatic  = true;
            m_sponzaEntity.IsPhysicsEnabled = true;
            #endregion

            CMeshAsset cubeAsset = CImportManager.Instance.MeshImporter.LoadMeshAsync("EngineResources/DefaultMeshes/DefaultCube.obj");

            CEntity floorEntity = SpawnEntity <CEntity>();
            floorEntity.AddComponent <CSceneComponent>(true, true);
            CMeshComponent floorMesh = floorEntity.AddComponent <CMeshComponent>(true, true);
            floorMesh.Mesh       = cubeAsset;
            floorMesh.LocalScale = new Vector3(500, 1, 500);
            CBoxColliderComponent floorCollider = floorEntity.AddComponent <CBoxColliderComponent>(true, true);
            floorCollider.Height = 1;
            floorCollider.Width  = 500;
            floorCollider.Length = 500;
            floorEntity.SetLocalPosition(new Vector3(0, -15, 0));
            floorEntity.IsPhysicsStatic         = true;
            floorEntity.IsPhysicsEnabled        = true;
            floorEntity.PhysicalStatic.Material = new Material(1, 0.8f, 1f);

            #region LightSetup
            m_lightEntity = SpawnEntity <CEntity>();
            m_lightEntity.AddComponent <CSceneComponent>(true, true);

            CDirectionalLightComponent directionalLight = m_lightEntity.AddComponent <CDirectionalLightComponent>(true, true);
            directionalLight.LocalRotation = MathUtilities.CreateLookAtQuaternion(Vector3.Normalize(new Vector3(0.2f, -0.5f, 0.2f)), Axis.Up);
            directionalLight.LightColor    = Color4.White * 0.8f;

            CSpotLightComponent spotLight = m_lightEntity.AddComponent <CSpotLightComponent>(true, true);
            spotLight.ConstantAttenuation  = 0.01f;
            spotLight.LinearAttenuation    = 0.3f;
            spotLight.QuadraticAttenuation = 0.0f;
            spotLight.Enabled    = true;
            spotLight.SpotAngle  = MathUtil.DegreesToRadians(30.0f);
            spotLight.LightColor = new Color4(0.1f, 0.8f, 0.1f, 1.0f);
            spotLight.Range      = 100.0f;
            Quaternion deltaRotation = Quaternion.RotationAxis(Axis.Right, MathUtil.DegreesToRadians(10));
            spotLight.LocalRotation = deltaRotation;
            spotLight.LocalPosition = new Vector3(0, 1, -4);

            CPointLightComponent pointLight1 = m_lightEntity.AddComponent <CPointLightComponent>(true, true);
            pointLight1.ConstantAttenuation = 1;
            pointLight1.LinearAttenuation   = 0.2f;
            pointLight1.Enabled             = true;
            pointLight1.Range         = 100.0f;
            pointLight1.LightColor    = new Color4(0.8f, 0.1f, 0.1f, 1.0f);
            pointLight1.LocalPosition = new Vector3(0, 0, 3.0f);

            CPointLightComponent pointLight2 = m_lightEntity.AddComponent <CPointLightComponent>(true, true);
            pointLight2.ConstantAttenuation = 1;
            pointLight2.LinearAttenuation   = 0.4f;
            pointLight2.Enabled             = true;
            pointLight2.Range         = 100.0f;
            pointLight2.LightColor    = new Color4(0.1f, 0.1f, 0.8f, 1.0f);
            pointLight2.LocalPosition = new Vector3(0, -3, -8.0f);

            CAmbientLightComponent ambientLight = m_lightEntity.AddComponent <CAmbientLightComponent>(true, true);
            ambientLight.LightColor = Color4.White * 0.15f;
            #endregion
        }
Exemple #6
0
 public void LoadWorld(CInitializer initializer, Action <CWorld> loadedCallback)
 {
     CurrentWorld = new CWorld();
     CurrentWorld.Init(initializer);
     loadedCallback(CurrentWorld);
 }
 public void Init(CInitializer initializer)
 {
     m_stopWatch.Start();
 }