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(); } }
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(); }); }
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(); }
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(); } })); }; }
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 }
public void LoadWorld(CInitializer initializer, Action <CWorld> loadedCallback) { CurrentWorld = new CWorld(); CurrentWorld.Init(initializer); loadedCallback(CurrentWorld); }
public void Init(CInitializer initializer) { m_stopWatch.Start(); }