public void EditTerrain(MapEditorOperation operation, Vector3 MousePos, MOIS.MouseButtonID id) { if (!Edit) return; float intens = 0; if (operation == MapEditorOperation.TERRAIN_DEFFORM) { intens = 0.05f; if (id == MOIS.MouseButtonID.MB_Right) intens = -intens; Map.mTMgr.Deform((int)MousePos.x, (int)MousePos.z, EditingBrush, intens); //DrawEditCursor(); } if (operation == MapEditorOperation.TERRAIN_TEXTURING) { intens = 0.5f; Map.mSMgr.Paint(BufferTextureNumber, (int)MousePos.x, (int)MousePos.z, EditingBrush, intens); } }
public Vector3 GetCursorPosition(MapEditorOperation operation) { Vector3 ret = Vector3.ZERO; Mogre.Ray ray = OgreEngine.mCam.GetCameraToViewportRay(0.5f, 0.5f); Mogre.Vector3 result = Map.mTInfo.RayIntersects(ray); if (result != null) { if (operation == MapEditorOperation.TERRAIN_DEFFORM) { ret.x = Map.mTInfo.PosToVertexX(result.x); ret.z = Map.mTInfo.PosToVertexZ(result.z); } if (operation == MapEditorOperation.TERRAIN_TEXTURING) { ret.x = (float)System.Math.Round(result.x / Map.Size.x * Map.TerrainTextureSize - 0.5); ret.z = (float)System.Math.Round(result.z / Map.Size.z * Map.TerrainTextureSize - 0.5); } if (operation == MapEditorOperation.OBJECT) { ret = result; } /*if (operation == MapEditorOperation.VEGETATION) { /*float snapDelta = (OgreEngine.mCam.Position - result).Length / 10f; MousePosInTerrain.X = result.x; MousePosInTerrain.Y = result.z; RbVegetation oldSelVeg = SelectedVegetation; SelectedVegetation = null; float distanceToClosesVegetation = ActiveLand.RubikonLand.SizeX * 2; //big value foreach (RbVegetation veg in ActiveLand.RubikonLand.VegetationList) { float dist = veg.Position.GetDistanceTo(MousePosInTerrain); if (dist < distanceToClosesVegetation && dist < snapDelta) { distanceToClosesVegetation = dist; SelectedVegetation = veg; MousePosInTerrain = veg.Position.Clone(); break; } } // deselect if (SelectedVegetation != oldSelVeg && oldSelVeg != null) foreach (RbVegetationSegment seg in oldSelVeg.Segments) { if (VisibleTrees.Contains(seg)) { foreach (RbVegetationElement tree in seg.Trees) { ActiveLand.Manager.GetEntity(tree.TreeUniqueName()).ParentSceneNode.ShowBoundingBox = false; } } } // select if (SelectedVegetation != null && SelectedVegetation != oldSelVeg) foreach (RbVegetationSegment seg in SelectedVegetation.Segments) { if (VisibleTrees.Contains(seg)) { foreach (RbVegetationElement tree in seg.Trees) { ActiveLand.Manager.GetEntity(tree.TreeUniqueName()).ParentSceneNode.ShowBoundingBox = true; } } } } DrawEditCursor(); } else { }*/ } return ret; }
public void KeyPressed(MOIS.KeyEvent arg) { if (Edit) { #region Textures if (arg.key == MOIS.KeyCode.KC_F1) { BufferTextureNumber = 0; } if (arg.key == MOIS.KeyCode.KC_F2) { BufferTextureNumber = 1; } if (arg.key == MOIS.KeyCode.KC_F3) { BufferTextureNumber = 2; } if (arg.key == MOIS.KeyCode.KC_F4) { BufferTextureNumber = 3; } if (arg.key == MOIS.KeyCode.KC_F5) { BufferTextureNumber = 4; } if (arg.key == MOIS.KeyCode.KC_F6) { BufferTextureNumber = 5; } #endregion if (arg.key == MOIS.KeyCode.KC_U) { Map.UpdateLightMap(); Map.UpdateTerrain(); } if (arg.key == MOIS.KeyCode.KC_SUBTRACT) { SetEditingBrush((ushort)(EditingBrush.Width / 2)); } if (arg.key == MOIS.KeyCode.KC_ADD) { SetEditingBrush((ushort)(EditingBrush.Width * 2)); } if (arg.key == MOIS.KeyCode.KC_F8) { SaveTerrain(true); } if (arg.key == MOIS.KeyCode.KC_PGDOWN) { Map.mWater.Position += new Vector3(0, -1, 0); } if (arg.key == MOIS.KeyCode.KC_PGUP) { Map.mWater.Position += new Vector3(0, +1, 0); } if (arg.key == MOIS.KeyCode.KC_F7) { SaveTerrain(false); } if (arg.key == MOIS.KeyCode.KC_TAB) { Operation = Operation == MapEditorOperation.TERRAIN_DEFFORM ? MapEditorOperation.TERRAIN_TEXTURING : MapEditorOperation.TERRAIN_DEFFORM; } } }