public void Update()
        {
            UpdateTime();
            _Camera3d.Update(gameTime);
            Engine.CameraPosition = _Camera3d.CameraPos;
            Engine.View           = Camera.viewMatrix;
            Engine.Projection     = Camera.projMatrix;

            UpdateGizmo();
            ray = RayHelpers.ConvertMouseToRay(STATIC_GLOBAL_INPUT.GetMousePos(), GraphicsDevice, Camera.viewMatrix, Camera.projMatrix);
        }
예제 #2
0
        private void editorControl1_MouseDown(object sender, MouseEventArgs e)
        {
            STATIC_GLOBAL_INPUT.HandleMouseButtons(e, true);
            switch (editorControl1.Gizmo.ActiveMode)
            {
            case GizmoMode.Placement: {
                if (tabControl1.SelectedTab == tabPage1)
                {
                    // we are on the model page
                    if (e.Button == MouseButtons.Left)
                    {
                        if (listBox_Models.SelectedItem != null)
                        {
                            if (IsValidContentFile(@"Models\" + listBox_Models.SelectedItem, typeof(Model)))
                            {
                                BoundingBox bb         = new BoundingBox();
                                var         useTerrain = false;
                                var         terrains   = STATIC_EDITOR_MODE.LevelInstance.Entities.Where(entity => entity is TerrainEntity).ToList();
                                if (terrains.Count > 0)
                                {
                                    bb = terrains[0].BoundingBox;
                                    terrains.Remove(terrains[0]);
                                    useTerrain = true;
                                    foreach (var terrain in terrains)
                                    {
                                        bb = BoundingBox.CreateMerged(bb, terrain.BoundingBox);
                                    }
                                }

                                terrains = null;

                                var rayHitPos = RayHelpers.GetHitPoint(editorControl1.ray, (useTerrain? bb : Grid3D.BB));
                                if (rayHitPos != null)
                                {
                                    var fileName = listBox_Models.SelectedItem.ToString();
                                    var obj      = STATIC_EDITOR_MODE.contentMan.Load <object>(Path.Combine("Models", fileName));
                                    var se       = new SceneEntity(obj as Model, fileName)
                                    {
                                        Position = (Vector3)rayHitPos
                                    };
                                    se.LoadAsset(STATIC_EDITOR_MODE.contentMan);
                                    Engine.Entities.Add(se);
                                    STATIC_EDITOR_MODE.LevelInstance.Entities.Add(se);
                                    AddTreeNodeFromSceneEntity(se, hierarchyTreeView);
                                    editorControl1.SetSelectionTo(se);
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("This is not a Model asset", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                }
                else if (tabControl1.SelectedTab == tabPage2)
                {
                    // we are on the texture page
                    if (listBox_Heights.SelectedItem != null)
                    {
                        if (IsValidContentFile(@"HeightMaps\" + listBox_Heights.SelectedItem, typeof(Texture2D)))
                        {
                            // ?? to a default position
                            var rayHitPos = RayHelpers.GetHitPoint(editorControl1.ray, Grid3D.BB) ?? new Vector3(0, 0, 0);

                            var fileName = listBox_Heights.SelectedItem.ToString();
                            var obj      = STATIC_EDITOR_MODE.contentMan.Load <object>(Path.Combine("HeightMaps", fileName));
                            var se       = new TerrainEntity(obj as Texture2D, fileName)
                            {
                                Position = rayHitPos
                            };
                            se.LoadAsset(STATIC_EDITOR_MODE.contentMan);
                            //remove all terrains
                            //Engine.Entities.RemoveAll(entity => entity is TerrainEntity);

                            Engine.Entities.Add(se);
                            STATIC_EDITOR_MODE.LevelInstance.Entities.Add(se);
                            //STATIC_EDITOR_MODE.LevelInstance.Terrain = se;
                            // rebuild the tree
                            PopulateHeirarchy();
                            editorControl1.SetSelectionTo(se);
                        }
                    }
                }
                break;
            }
            }
        }