Пример #1
0
            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);
            }
Пример #2
0
 /// <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;
 }
Пример #3
0
            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;
            }
Пример #5
0
 /// <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;
     }
 }
Пример #6
0
 /// <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);
     }
 }
Пример #7
0
 /// <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);
 }
Пример #9
0
 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);
     }
 }
Пример #10
0
 /// <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);
     }
 }