public override bool OnPick(MouseEventArgs e, CSharpFramework.Contexts.KeyModifier eKeyMod) { // base implementation releases the pick handler base.OnPick(e, eKeyMod); ShapeCollection selection = EditorManager.SelectedShapes; foreach (ShapeBase shape in selection) { if (shape is HavokAiEditorPlugin.Shapes.HavokNavMeshTestPathShape) { Vector3F vStart = new Vector3F(); Vector3F vEnd = new Vector3F(); EditorManager.EngineManager.GetRayAtScreenPos(out vStart, out vEnd, e.X, e.Y, EditorManager.Settings.MaxPickingDistance); ShapeTraceResult result = new ShapeTraceResult(); ShapeCollection relevantShapes = EditorManager.Scene.RootShapes; foreach (ShapeBase relevantShape in relevantShapes) { relevantShape.TraceShape(ShapeTraceMode_e.ShapePicking, vStart, vEnd, ref result, true); } if (result.bHit) { Vector3F dir = vEnd - vStart; dir.Normalize(); Vector3F hitPoint = vStart + dir * result.fHitDistance; HavokAiEditorPlugin.Shapes.HavokNavMeshTestPathShape path = shape as HavokAiEditorPlugin.Shapes.HavokNavMeshTestPathShape; if (m_start) { path.StartPoint = hitPoint; } else { path.EndPoint = hitPoint; } } break; } } return(true); }
/// <summary> /// Overridden trace function /// </summary> /// <param name="mode"></param> /// <param name="rayStart">ray start position</param> /// <param name="rayEnd">ray end position</param> /// <param name="result">trace result</param> public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart,Vector3F rayEnd, ref ShapeTraceResult result) { if (mode!=ShapeTraceMode_e.ShapePicking) return; if (ConversionUtils.TraceOrientedBoundingBox(LocalBoundingBox,Position,RotationMatrix, rayStart,rayEnd, ref result)) result.hitShape = this; }
public override bool OnPick(MouseEventArgs e, CSharpFramework.Contexts.KeyModifier eKeyMod) { // base implementation releases the pick handler base.OnPick(e, eKeyMod); ShapeCollection selection = EditorManager.SelectedShapes; foreach (ShapeBase shape in selection) { if (shape is HavokAiEditorPlugin.Shapes.HavokNavMeshTestPathShape) { Vector3F vStart = new Vector3F(); Vector3F vEnd = new Vector3F(); EditorManager.EngineManager.GetRayAtScreenPos(out vStart, out vEnd, e.X, e.Y, EditorManager.Settings.MaxPickingDistance); ShapeTraceResult result = new ShapeTraceResult(); ShapeCollection relevantShapes = EditorManager.Scene.RootShapes; foreach (ShapeBase relevantShape in relevantShapes) relevantShape.TraceShape(ShapeTraceMode_e.ShapePicking, vStart, vEnd, ref result, true); if (result.bHit) { Vector3F dir = vEnd - vStart; dir.Normalize(); Vector3F hitPoint = vStart + dir * result.fHitDistance; HavokAiEditorPlugin.Shapes.HavokNavMeshTestPathShape path = shape as HavokAiEditorPlugin.Shapes.HavokNavMeshTestPathShape; if (m_start) path.StartPoint = hitPoint; else path.EndPoint = hitPoint; } break; } } return true; }
public override bool OnPick(MouseEventArgs e, CSharpFramework.Contexts.KeyModifier eKeyMod) { base.OnPick(e, eKeyMod); Vector3F vStart = new Vector3F(); Vector3F vEnd = new Vector3F(); EditorManager.EngineManager.GetRayAtScreenPos(out vStart, out vEnd, e.X, e.Y, EditorManager.Settings.MaxPickingDistance); ShapeComponentType compClass = (ShapeComponentType)EditorManager.EngineManager.ComponentClassManager.GetCollectionType("VMeshPaintingComponent"); if (compClass == null) return false; ShapeTraceResult result = new ShapeTraceResult(); ShapeCollection relevantShapes = EditorManager.Scene.RootShapes; foreach (ShapeBase shape in relevantShapes) shape.TraceShape(ShapeTraceMode_e.ShapePicking, vStart, vEnd, ref result, true); if (result.bHit && result.hitShape != null) { // first find whether a componen of this type is already added: ShapeComponent component = null; if (result.hitShape.ComponentCount > 0) component = result.hitShape.Components.GetComponentByType(compClass); if (_bAdd) { if (component != null) return true; // already attached component = (ShapeComponent)compClass.CreateInstance(null); AddShapeComponentAction action = new AddShapeComponentAction(result.hitShape, component); if (action.Valid) { EditorManager.Actions.Add(action); _terrainPanel.UpdateDecoration(false); } else EditorManager.EngineManager.LogPrintWarning("Cannot attach vegetation painting component to shape " + result.hitShape.ShapeName); } else { if (component == null) // no component of this type attached return true; RemoveShapeComponentAction action = new RemoveShapeComponentAction(result.hitShape, component); EditorManager.Actions.Add(action); _terrainPanel.UpdateDecoration(false); } } return true; }
/// <summary> /// Pick the shape in the view. Use helper function to trace the local bounding box. /// </summary> /// <param name="rayStart">trace ray start</param> /// <param name="rayEnd">trace ray end</param> /// <param name="result">result structure to fill in</param> public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart, Vector3F rayEnd, ref ShapeTraceResult result) { if (mode != ShapeTraceMode_e.ShapePicking) { return; } if (ConversionUtils.TraceOrientedBoundingBox(LocalBoundingBox, Position, RotationMatrix, rayStart, rayEnd, ref result)) { result.hitShape = this; } }
/// <summary> /// Pick the shape in the view. Use helper function trace the local bounding box. /// </summary> /// <param name="rayStart">trace ray start</param> /// <param name="rayEnd">trace ray end</param> /// <param name="result">esult structure to fill in</param> public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart, Vector3F rayEnd, ref ShapeTraceResult result) { if (HasEngineInstance() && mode == ShapeTraceMode_e.ShapePicking) { EngineNode.TraceShape(this, rayStart, rayEnd, ref result); } }
/// <summary> /// Overridden trace function /// </summary> /// <param name="mode"></param> /// <param name="rayStart">ray start position</param> /// <param name="rayEnd">ray end position</param> /// <param name="result">trace result</param> public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart, Vector3F rayEnd, ref ShapeTraceResult result) { if (mode == ShapeTraceMode_e.ShapePicking) // accurate picking should only be implemented for picking, not drop to floor base.OnTraceShape(mode, rayStart, rayEnd, ref result); }
public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart, Vector3F rayEnd, ref ShapeTraceResult result) { if (mode == ShapeTraceMode_e.ShapePicking && _engineInstance != null) _engineInstance.TraceShape(this, rayStart, rayEnd, ref result); }
public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart, Vector3F rayEnd, ref ShapeTraceResult result) { if (mode == ShapeTraceMode_e.ShapePicking && _engineInstance != null) { _engineInstance.TraceShape(this, rayStart, rayEnd, ref result); } }
/// <summary> /// Pick the shape in the view. Use helper function trace the local bounding box. /// </summary> /// <param name="rayStart">trace ray start</param> /// <param name="rayEnd">trace ray end</param> /// <param name="result">esult structure to fill in</param> public override void OnTraceShape(ShapeTraceMode_e mode, Vector3F rayStart, Vector3F rayEnd, ref ShapeTraceResult result) { if (HasEngineInstance()) { EngineNode.TraceShape(this, rayStart, rayEnd, ref result); } }