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); }
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; } } }