コード例 #1
0
        protected virtual void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            if (WidgetControl.InnerControl.Viewport == viewport)
            {
                var defaultCamera = scene.CameraDefault.Value;
                if (defaultCamera == null)
                {
                    defaultCamera = scene.Mode.Value == Component_Scene.ModeEnum._3D ? scene.CameraEditor : scene.CameraEditor2D;
                }

                var position = new Vector3(27, 4, -9);
                var lookTo   = new Vector3(25, -0.6, -10);
                var up       = Vector3.ZAxis;

                //var obj = scene.GetComponent<Component_ObjectInSpace>( "Mesh in Space 68" );
                //if( obj != null )
                //{
                //	var tr = obj.TransformV;
                //	position = tr.Position + tr.Rotation * new Vector3( 0.2, 0, 0.1 );
                //	lookTo = position + tr.Rotation * new Vector3( 1, 0, 0 );
                //	up = tr.Rotation * new Vector3( 0, 0, 1 );
                //}

                var camera = (Component_Camera)defaultCamera.Clone();
                //camera = new Component_Camera();
                camera.Transform        = new NeoAxis.Transform(position, Quaternion.LookAt((lookTo - position).GetNormalize(), up));
                camera.FixedUp          = up;
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);

                processed = true;
            }
        }
コード例 #2
0
        private void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            Component_Camera camera = scene.CameraDefault;

            if (camera == null)
            {
                camera = scene.Mode.Value == Component_Scene.ModeEnum._3D ? scene.CameraEditor : scene.CameraEditor2D;
            }

            // Create new camera:
            //camera = (Component_Camera)camera.Clone();
            ////camera = new Component_Camera();
            //camera.Transform = new Transform( cameraPosition, Quaternion.LookAt( ( lookTo - cameraPosition ).GetNormalize(), up ) );
            //camera.FixedUp = up;

            if (camera != null)
            {
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);
                processed = true;
            }
            else
            {
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, 1, 90, 0.1, 1000, Vector3.Zero, Vector3.XAxis, Vector3.ZAxis, ProjectionType.Perspective, 1, 1, 1);
                processed = true;
            }
        }
コード例 #3
0
        protected override void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            base.Scene_ViewportUpdateGetCameraSettings(scene, viewport, ref processed);

            //check update preview mesh
            {
                var mesh = ProjectSettings.Get.MaterialPreviewMesh.Value;
                if (previewMeshUsed != mesh)
                {
                    UpdatePreviewMesh();
                    needCameraUpdate = true;
                }
            }

            //check update preview environment
            {
                var env = ProjectSettings.Get.GetMaterialPreviewEnvironment();
                if (!previewEnvironmentUsed.Equals(env))
                {
                    UpdatePreviewEnvironment();
                }
            }

            if (needCameraUpdate && scene.CameraEditor.Value != null)
            {
                InitCamera();
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, scene.CameraEditor);

                needCameraUpdate = false;
            }
        }
コード例 #4
0
        public static void UpdateSceneAntialiasingByAppSettings(Component_Scene scene)
        {
            var pipeline = scene.RenderingPipeline.Value;

            if (pipeline != null)
            {
                var antialising = pipeline.GetComponent <Component_RenderingEffect_Antialiasing>(true);
                if (antialising != null)
                {
                    if (Enum.TryParse <Component_RenderingEffect_Antialiasing.TechniqueEnum>(SimulationApp.Antialiasing, false, out var value))
                    {
                        // Save original value to AnyData.
                        if (antialising.AnyData == null)
                        {
                            antialising.AnyData = antialising.Technique.Value;
                        }

                        antialising.Technique = value;
                    }
                    else
                    {
                        // Restore original value from AnyData.
                        if (antialising.AnyData != null && antialising.AnyData is Component_RenderingEffect_Antialiasing.TechniqueEnum)
                        {
                            antialising.Technique = (Component_RenderingEffect_Antialiasing.TechniqueEnum)antialising.AnyData;
                        }
                    }
                }
            }
        }
コード例 #5
0
        private void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            // Get default camera or the camera from the editor.
            Component_Camera camera = scene.CameraDefault;

            if (camera == null)
            {
                camera = scene.Mode.Value == Component_Scene.ModeEnum._3D ? scene.CameraEditor : scene.CameraEditor2D;
            }

            // Get camera settings by game mode.
            if (gameMode != null)
            {
                var cameraSettings = gameMode.GetCameraSettings(viewport, camera);
                if (cameraSettings != null)
                {
                    viewport.CameraSettings = cameraSettings;
                    processed = true;
                    return;
                }
            }

            // Create new camera:
            //camera = (Component_Camera)camera.Clone();
            ////camera = new Component_Camera();
            //camera.Transform = new Transform( cameraPosition, Quaternion.LookAt( ( lookTo - cameraPosition ).GetNormalize(), up ) );
            //camera.FixedUp = up;

            if (camera != null)
            {
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);
                processed = true;
            }
        }
コード例 #6
0
        ///////////////////////////////////////////

        public Component_Terrain_EditingMode(Component_Scene_DocumentWindow documentWindow, ModeEnum mode, object modeExtensionData = null)
            : base(documentWindow)
        {
            this.mode = mode;
            this.modeExtensionData = modeExtensionData;

            scene = documentWindow.Scene;
        }
コード例 #7
0
        protected override void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            base.Scene_ViewportUpdateGetCameraSettings(scene, viewport, ref processed);

            if (firstCameraUpdate && scene.CameraEditor2D.Value != null)
            {
                InitCamera();
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, scene.CameraEditor2D);
            }

            firstCameraUpdate = false;
        }
コード例 #8
0
		void SceneRenderEvent(Component_Scene scene, Viewport viewport)
		{
			// Find object by the cursor. 
			var obj = GetObjectByCursor(viewport);

			// Draw selection border.
			if (obj != null)
			{
				viewport.Simple3DRenderer.SetColor(new ColorValue(1, 1, 0));
				viewport.Simple3DRenderer.AddBounds(obj.SpaceBounds.CalculatedBoundingBox);
			}
		}
コード例 #9
0
        protected override void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            base.Scene_ViewportUpdateGetCameraSettings(scene, viewport, ref processed);

            //check update preview environment
            {
                var env = onlyOneMaterial ? ProjectSettings.Get.GetMaterialPreviewEnvironment() : new Reference <Component_Image>();
                if (!previewEnvironmentUsed.Equals(env))
                {
                    UpdatePreviewEnvironment();
                }
            }
        }
コード例 #10
0
 /// <summary>
 /// Destroys background scene.
 /// </summary>
 public void DestroyScene()
 {
     if (sceneViewport != null)
     {
         scene.ViewportUpdateGetCameraSettings -= Scene_ViewportUpdateGetCameraSettings;
         sceneViewport = null;
     }
     if (scene != null)
     {
         scene.Dispose();
         scene = null;
     }
 }
コード例 #11
0
        //public Vec3 GetSceneCenter()
        //{
        //	if( scene != null )
        //	{
        //		var bounds = scene.CalculateTotalBoundsOfObjectsInSpace();
        //		return bounds.GetCenter();
        //	}
        //	return Vec3.Zero;
        //}

        protected virtual void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            if (!cameraMode2D)
            {
                var cameraPosition = cameraLookTo - cameraDirection.GetVector() * cameraInitialDistance * cameraZoomFactor;
                var center         = cameraLookTo; // GetSceneCenter();

                Vector3 from = cameraPosition;     //center + cameraDirection.GetVector() * cameraDistance;
                Vector3 to   = center;
                Degree  fov  = 65;                 // 75;

                //!!!!
                Component_Camera camera = new Component_Camera();
                camera.AspectRatio   = (double)viewport.SizeInPixels.X / (double)viewport.SizeInPixels.Y;
                camera.FieldOfView   = fov;
                camera.NearClipPlane = Math.Max(cameraInitialDistance / 10000, 0.01);                  //.1;
                camera.FarClipPlane  = Math.Max(1000, cameraInitialDistance * 2);

                camera.Transform = new Transform(from, Quaternion.LookAt((to - from).GetNormalize(), Vector3.ZAxis));
                //camera.Position = from;
                //camera.Direction = ( to - from ).GetNormalize();

                camera.FixedUp          = Vector3.ZAxis;
                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);

                ////!!!!в методе больше параметров
                //double aspect = (double)viewport.SizeInPixels.X / (double)viewport.SizeInPixels.Y;
                //var settings = new Viewport.CameraSettingsClass( viewport, aspect, fov, .1f, 1000, from, ( to - from ).GetNormalize(), Vec3.ZAxis );
                //viewport.CameraSettings = settings;
            }
            else
            {
                var from = cameraLookTo + new Vector3(0, 0, scene.CameraEditor2DPositionZ);
                var to   = cameraLookTo;

                Component_Camera camera = new Component_Camera();
                camera.AspectRatio   = (double)viewport.SizeInPixels.X / (double)viewport.SizeInPixels.Y;
                camera.NearClipPlane = 0.01;               // Math.Max( cameraInitialDistance / 10000, 0.01 );//.1;
                camera.FarClipPlane  = 1000;               // Math.Max( 1000, cameraInitialDistance * 2 );
                camera.Transform     = new Transform(from, Quaternion.LookAt((to - from).GetNormalize(), Vector3.YAxis));
                camera.Projection    = ProjectionType.Orthographic;
                camera.FixedUp       = Vector3.YAxis;
                //!!!!need consider size by X
                camera.Height = cameraInitBounds.GetSize().Y * 1.4;

                viewport.CameraSettings = new Viewport.CameraSettingsClass(viewport, camera);
            }

            processed = true;
        }
コード例 #12
0
        public void DestroyScene()
        {
            if (scene != null)
            {
                if (ViewportControl != null && ViewportControl.Viewport != null)
                {
                    ViewportControl.Viewport.AttachedScene = null;
                }

                if (sceneNeedDispose)
                {
                    scene.Dispose();
                }
                scene            = null;
                sceneNeedDispose = false;
            }
        }
コード例 #13
0
        public void GetWeapon(Component_Scene sc, Component_Character chr, bool hasWeapon)
        {
            var wpn = (Component_Weapon)sc?.GetComponentByPath("Weapon");

            if (hasWeapon)
            {
                chr.ItemTake(wpn);
                chr.ItemActivate(wpn);
            }
            else
            {
                if (chr.ItemGetEnabledFirst() != null)
                {
                    chr.ItemDrop(chr.ItemGetEnabledFirst());
                }
            }
        }
コード例 #14
0
        protected override void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            base.Scene_ViewportUpdateGetCameraSettings(scene, viewport, ref processed);

            //check update preview
            {
                var mesh = ProjectSettings.Get.MaterialPreviewMesh.Value;
                if (previewMeshUsed != mesh)
                {
                    UpdatePreviewMesh();
                    SetCameraByBounds(Scene.CalculateTotalBoundsOfObjectsInSpace());
                    //needCameraUpdate = true;
                }
            }

            UpdatePreviewEnvironment();
        }
コード例 #15
0
        private void SceneRenderEvent(Component_Scene scene, Viewport viewport)
        {
            // Find object by the cursor.
            //var obj = GetObjectByCursor(viewport);

            // Draw selection border.
            if (last_selected_obj != null)
            {
                //	viewport.Simple3DRenderer.SetColor(new ColorValue(0.2, 0.1, 1));
                //	viewport.Simple3DRenderer.AddBounds(last_selected_obj.SpaceBounds.CalculatedBoundingBox, false,  4);
                UTools.ShowBoxAroundObject(last_selected_obj, viewport);
                if (pos != null)
                {
                    UTools.DrawSphere(viewport, (Vector3)pos, 0.01);
                }
            }
        }
コード例 #16
0
        bool LoadScene(bool canChangeUIControl)
        {
            DestroyScene();

            scene = ResourceManager.LoadSeparateInstance <Component_Scene>(PlayFileName, true, null);             //, out var error );
            if (scene == null)
            {
                return(false);
            }
            //if( !string.IsNullOrEmpty( error ) )
            //{
            //	Log.Error( error );
            //	return;
            //}

            SetScene(scene, canChangeUIControl);

            return(true);
        }
コード例 #17
0
		//!!!!
		//OnGetRenderSceneData		
		private void Scene_RenderEvent( Component_Scene sender, Viewport viewport )
		{
			//!!!!было
			////!!!!пока так
			//TempObstaclesUpdate( false );

			var context2 = viewport.RenderingContext.objectInSpaceRenderingContext;

			bool display = AlwaysDisplayNavMesh || context2.selectedObjects.Contains( this );// || context.canSelectObjects.Contains( this ) ;
			if( display )
			{
				DebugDrawNavMesh( viewport );

				//var renderer = context.viewport.Simple3DRenderer;
				//renderer.SetColor( new ColorValue( 0, 0, 1 ) );
				//Bounds bounds = new Bounds( boundsMin, boundsMax );
				//camera.DebugGeometry.AddBounds( bounds );
			}
		}
コード例 #18
0
        public void SetScene(Component_Scene scene, bool canChangeUIControl)
        {
            this.scene = scene;

            sceneViewport                          = ParentContainer.Viewport;
            scene.ViewportUpdateBegin             += Scene_ViewportUpdateBegin;
            scene.ViewportUpdateGetCameraSettings += Scene_ViewportUpdateGetCameraSettings;
            scene.RenderEvent                     += Scene_RenderEvent;
            sceneViewport.AttachedScene            = scene;

            //init GameMode
            gameMode = scene.GetComponent <Component_GameMode>(onlyEnabledInHierarchy: true);

            // Load UI screen of the scene.
            if (canChangeUIControl)
            {
                var uiScreen = scene.UIScreen.Value;
                if (uiScreen != null)
                {
                    //if( uiScreen.ParentRoot != scene.ParentRoot )
                    //{
                    var fileName = uiScreen.HierarchyController?.CreatedByResource?.Owner.Name;
                    if (!string.IsNullOrEmpty(fileName) && VirtualFile.Exists(fileName))
                    {
                        uiControl = ResourceManager.LoadSeparateInstance <UIControl>(fileName, false, null);
                        if (uiControl != null)
                        {
                            AddComponent(uiControl);
                        }
                    }
                    //}
                    //else
                    //{
                    //	//!!!!impl?
                    //}
                }
            }
        }
コード例 #19
0
        public void LoadScene(string fileName)
        {
            DestroyScene();

            if (string.IsNullOrEmpty(fileName))
            {
                scene = ComponentUtility.CreateComponent <Component_Scene>(null, true, true);
                scene.BackgroundColor = new ColorValue(0.4, 0.4, 0.4);
            }
            else
            {
                scene = ResourceManager.LoadSeparateInstance <Component_Scene>(fileName, true, null);
            }
            if (scene == null)
            {
                return;
            }

            sceneViewport                          = ParentContainer.Viewport;
            scene.ViewportUpdateBegin             += Scene_ViewportUpdateBegin;
            scene.ViewportUpdateGetCameraSettings += Scene_ViewportUpdateGetCameraSettings;
            sceneViewport.AttachedScene            = scene;
        }
コード例 #20
0
        //protected override void Viewport_UpdateGetObjectInSceneRenderingContext( Viewport viewport, ref Component_ObjectInSpace.RenderingContext context )
        //{
        //	preview.PerformViewportUpdateGetObjectInSceneRenderingContext( ref context );
        //}
        //public void PerformBaseViewportUpdateGetObjectInSceneRenderingContext( ref Component_ObjectInSpace.RenderingContext context )
        //{
        //	base.Viewport_UpdateGetObjectInSceneRenderingContext( Viewport, ref context );
        //}

        protected override void Scene_ViewportUpdateGetCameraSettings(Component_Scene scene, Viewport viewport, ref bool processed)
        {
            preview.PerformSceneViewportUpdateGetCameraSettings(ref processed);
        }
コード例 #21
0
 private void Scene_GetDisplayDevelopmentDataInThisApplicationOverride(Component_Scene sender, ref bool display)
 {
     display = RenderToFile.DisplayDevelopmentData;
 }
コード例 #22
0
 void CreateObjects(Component_Scene scene)
 {
     Component_SurfaceUtility.CreatePreviewObjects(scene, Surface);
     lastUpdateTime = Time.Current;
 }
コード例 #23
0
 private void Scene_ViewportUpdateBegin(Component_Scene scene, Viewport viewport, Viewport.CameraSettingsClass overrideCameraSettings)
 {
     ProjectUtility.UpdateSceneAntialiasingByAppSettings(scene);
 }
コード例 #24
0
        public Component_Scene CreateScene(bool enable)
        {
            DestroyScene();

            //!!!!можно было бы где-то хранить файлом. где еще так

            scene            = ComponentUtility.CreateComponent <Component_Scene>(null, true, enable);
            sceneNeedDispose = true;

            //!!!!что еще отключать?
            scene.OctreeEnabled = false;

            //rendering pipeline
            {
                var pipeline = (Component_RenderingPipeline)scene.CreateComponent(RenderingSystem.RenderingPipelineDefault, -1, false);
                scene.RenderingPipeline = pipeline;

                //!!!!что еще отключать?
                pipeline.DeferredShading = AutoTrueFalse.False;
                pipeline.LODRange        = new RangeI(0, 0);

                double c  = 1.3;
                double c2 = 0.4;

                if (EditorAPI.DarkTheme)
                {
                    scene.BackgroundColor = new ColorValue(40.0 / 255 * c, 40.0 / 255 * c, 40.0 / 255 * c);
                }
                else
                {
                    scene.BackgroundColor = new ColorValue(22.0 / 255 * c, 44.0 / 255 * c, 66.0 / 255 * c);
                }
                scene.BackgroundColorEnvironmentOverride = new ColorValue(0.8, 0.8, 0.8);

                var backgroundEffects = pipeline.CreateComponent <Component>();
                backgroundEffects.Name = "Background Effects";

                var vignetting = backgroundEffects.CreateComponent <Component_RenderingEffect_Vignetting>();
                if (EditorAPI.DarkTheme)
                {
                    vignetting.Color = new ColorValue(45.0 / 255 * c2, 45.0 / 255 * c2, 45.0 / 255 * c2);
                }
                else
                {
                    vignetting.Color = new ColorValue(24.0 / 255 * c2, 48.0 / 255 * c2, 72.0 / 255 * c2);
                }
                vignetting.Radius = 2;

                var noise = backgroundEffects.CreateComponent <Component_RenderingEffect_Noise>();
                noise.Multiply = new Range(0.9, 1.1);

                var sceneEffects = pipeline.CreateComponent <Component>();
                sceneEffects.Name = "Scene Effects";

                //antialiasing
                var toLDRType        = MetadataManager.GetType("NeoAxis.Component_RenderingEffect_ToLDR");
                var antialiasingType = MetadataManager.GetType("NeoAxis.Component_RenderingEffect_Antialiasing");
                if (toLDRType != null && antialiasingType != null)
                {
                    sceneEffects.CreateComponent(toLDRType);
                    sceneEffects.CreateComponent(antialiasingType);
                }

                pipeline.Enabled = true;
            }

            //ambient light
            {
                var light = scene.CreateComponent <Component_Light>();
                light.Type       = Component_Light.TypeEnum.Ambient;
                light.Brightness = ReferenceUtility.MakeReference("Base\\ProjectSettings.component|PreviewAmbientLightBrightness");
                //light.Brightness = ProjectSettings.Get.PreviewAmbientLightBrightness.Value;
            }

            //directional light
            {
                var light = scene.CreateComponent <Component_Light>();
                light.Type       = Component_Light.TypeEnum.Directional;
                light.Transform  = new Transform(new Vector3(0, 0, 0), Quaternion.FromDirectionZAxisUp(new Vector3(0, 0, -1)), Vector3.One);
                light.Brightness = ReferenceUtility.MakeReference("Base\\ProjectSettings.component|PreviewDirectionalLightBrightness");
                //light.Brightness = ProjectSettings.Get.PreviewDirectionalLightBrightness.Value;
                light.Shadows = false;
                //light.Type = Component_Light.TypeEnum.Point;
                //light.Transform = new Transform( new Vec3( 0, 0, 2 ), Quat.Identity, Vec3.One );
            }

            //!!!!как когда внешне сцена цепляется
            scene.ViewportUpdateGetCameraSettings += Scene_ViewportUpdateGetCameraSettings;

            //connect scene to viewport
            if (ViewportControl != null && ViewportControl.Viewport != null)
            {
                ViewportControl.Viewport.AttachedScene = scene;
            }

            return(scene);
        }
コード例 #25
0
 private void Scene_RenderEvent(Component_Scene sender, Viewport viewport)
 {
     // Game mode.
     gameMode?.PerformRender(this, viewport);
 }