Browse Source

add cover tool

add cover tool
some more cleanup
navmeshselecttool needs to use collideBox
duDebugDrawTorque now has the transparent blending option
marauder2k7 1 month ago
parent
commit
b5d6601b96

+ 5 - 0
Engine/source/navigation/duDebugDrawTorque.cpp

@@ -73,6 +73,11 @@ void duDebugDrawTorque::depthMask(bool state, bool isOverride)
    mOverrideState = isOverride;
 }
 
+void duDebugDrawTorque::blend(bool blend)
+{
+   mDesc.setBlend(true);
+}
+
 void duDebugDrawTorque::texture(bool state)
 {
    // need a checker texture?...... if(state is true) then set first slot to that texture.

+ 2 - 0
Engine/source/navigation/duDebugDrawTorque.h

@@ -68,6 +68,8 @@ public:
    /// <param name="isOverride">Set to true to override any future changes.</param>
    void depthMask(bool state, bool isOverride);
 
+   void blend(bool blend);
+
    /// Begin drawing primitives.
    /// @param prim [in] primitive type to draw, one of rcDebugDrawPrimitives.
    /// @param size [in] size of a primitive, applies to point size and line width only.

+ 0 - 9
Engine/source/navigation/guiNavEditorCtrl.cpp

@@ -178,9 +178,6 @@ bool GuiNavEditorCtrl::get3DCentre(Point3F &pos)
 
 void GuiNavEditorCtrl::on3DMouseDown(const Gui3DMouseEvent & event)
 {
-   if (!mMesh)
-      return;
-
    mGizmo->on3DMouseDown(event);
 
    if (mTool)
@@ -193,9 +190,6 @@ void GuiNavEditorCtrl::on3DMouseDown(const Gui3DMouseEvent & event)
 
 void GuiNavEditorCtrl::on3DMouseUp(const Gui3DMouseEvent & event)
 {
-   if (!mMesh)
-      return;
-
    // Keep the Gizmo up to date.
    mGizmo->on3DMouseUp(event);
 
@@ -207,9 +201,6 @@ void GuiNavEditorCtrl::on3DMouseUp(const Gui3DMouseEvent & event)
 
 void GuiNavEditorCtrl::on3DMouseMove(const Gui3DMouseEvent & event)
 {
-   if (!mMesh)
-      return;
-
    if (mTool)
       mTool->on3DMouseMove(event);
 

+ 5 - 0
Engine/source/navigation/navMesh.cpp

@@ -1582,7 +1582,12 @@ void NavMesh::renderToDrawer()
             m_drawMode == DRAWMODE_NAVMESH_INVIS))
       {
          if (m_drawMode != DRAWMODE_NAVMESH_INVIS)
+         {
+            if (m_drawMode == DRAWMODE_NAVMESH_TRANS)
+               mDbgDraw.blend(true);
             duDebugDrawNavMeshWithClosedList(&mDbgDraw, *n->nm, *n->mQuery, 0);
+            mDbgDraw.blend(false);
+         }
          if(m_drawMode == DRAWMODE_NAVMESH_BVTREE)
             duDebugDrawNavMeshBVTree(&mDbgDraw, *n->nm);
          if(m_drawMode == DRAWMODE_NAVMESH_PORTALS)

+ 40 - 0
Engine/source/navigation/navMeshTools/coverTool.cpp

@@ -0,0 +1,40 @@
+#include "coverTool.h"
+
+IMPLEMENT_CONOBJECT(CoverTool);
+
+CoverTool::CoverTool()
+{
+}
+
+void CoverTool::onActivated(const Gui3DMouseEvent& evt)
+{
+   Con::executef(this, "onActivated");
+}
+
+void CoverTool::onDeactivated()
+{
+   Con::executef(this, "onDeactivated");
+}
+
+void CoverTool::on3DMouseDown(const Gui3DMouseEvent& evt)
+{
+   if (mNavMesh.isNull())
+      return;
+}
+
+void CoverTool::on3DMouseMove(const Gui3DMouseEvent& evt)
+{
+   if (mNavMesh.isNull())
+      return;
+}
+
+void CoverTool::onRender3D()
+{
+   if (mNavMesh.isNull())
+      return;
+}
+
+bool CoverTool::updateGuiInfo()
+{
+   return false;
+}

+ 33 - 0
Engine/source/navigation/navMeshTools/coverTool.h

@@ -0,0 +1,33 @@
+#ifndef _COVERTOOL_H_
+#define _COVERTOOL_H_
+
+#ifndef _NAVMESH_TOOL_H_
+#include "navigation/navMeshTool.h"
+#endif
+
+#ifndef _NAVPATH_H_
+#include "navigation/navPath.h"
+#endif
+
+class CoverTool : public NavMeshTool
+{
+   typedef NavMeshTool Parent;
+public:
+   DECLARE_CONOBJECT(CoverTool);
+
+   CoverTool();
+
+   virtual ~CoverTool() {}
+
+   void onActivated(const Gui3DMouseEvent& evt) override;
+   void onDeactivated() override;
+
+   void on3DMouseDown(const Gui3DMouseEvent& evt) override;
+   void on3DMouseMove(const Gui3DMouseEvent& evt) override;
+   void onRender3D() override;
+
+   bool updateGuiInfo() override;
+};
+
+#endif // !_COVERTOOL_H_
+

+ 6 - 2
Engine/source/navigation/navMeshTools/navMeshSelectTool.cpp

@@ -44,7 +44,7 @@ void NavMeshSelectTool::on3DMouseDown(const Gui3DMouseEvent& evt)
    Point3F endPnt = evt.pos + evt.vec * 1000.0f;
 
    RayInfo ri;
-   if (gServerContainer.castRay(startPnt, endPnt, MarkerObjectType, &ri))
+   if (gServerContainer.collideBox(startPnt, endPnt, MarkerObjectType, &ri))
    {
       if (!ri.object)
          return;
@@ -53,6 +53,8 @@ void NavMeshSelectTool::on3DMouseDown(const Gui3DMouseEvent& evt)
       if (selNavMesh)
       {
          mCurEditor->selectMesh(selNavMesh);
+         mSelMesh = selNavMesh;
+         Con::executef(this, "onNavMeshSelected");
          return;
       }
    }
@@ -68,7 +70,7 @@ void NavMeshSelectTool::on3DMouseMove(const Gui3DMouseEvent& evt)
    Point3F endPnt = evt.pos + evt.vec * 1000.0f;
 
    RayInfo ri;
-   if (gServerContainer.castRay(startPnt, endPnt, MarkerObjectType, &ri))
+   if (gServerContainer.collideBox(startPnt, endPnt, MarkerObjectType, &ri))
    {
       NavMesh* selNavMesh = dynamic_cast<NavMesh*>(ri.object);
       if (selNavMesh)
@@ -90,6 +92,8 @@ void NavMeshSelectTool::onRender3D()
 {
    if (!mCurMesh.isNull())
       renderBoxOutline(mCurMesh->getWorldBox(), ColorI::LIGHT);
+   if (!mSelMesh.isNull())
+      renderBoxOutline(mSelMesh->getWorldBox(), ColorI::LIGHT);
 }
 
 bool NavMeshSelectTool::updateGuiInfo()

+ 1 - 0
Engine/source/navigation/navMeshTools/navMeshSelectTool.h

@@ -11,6 +11,7 @@ class NavMeshSelectTool : public NavMeshTool
    typedef NavMeshTool Parent;
 protected:
    SimObjectPtr<NavMesh> mCurMesh;
+   SimObjectPtr<NavMesh> mSelMesh;
 public:
    DECLARE_CONOBJECT(NavMeshSelectTool);
 

+ 13 - 6
Templates/BaseGame/game/tools/navEditor/main.tscript

@@ -73,11 +73,11 @@ function initializeNavEditor()
          buttonImage = "ToolsModule:nav_link_n_image";  
       };
 
-      new NavMeshTestTool()
+      new CoverTool()
       {
-         internalName = "TestTool";
-         toolTip = "PathFinding Test tool";
-         buttonImage = "ToolsModule:3rd_person_camera_n_image";
+         internalName = "NavCoverTool";
+         toolTip = "Cover Tool";
+         buttonImage = "ToolsModule:nav_cover_n_image";
       };
 
       new TileTool()
@@ -86,6 +86,13 @@ function initializeNavEditor()
          toolTip = "Tile selection tool";
          buttonImage = "ToolsModule:select_bounds_n_image";      
       };
+
+      new NavMeshTestTool()
+      {
+         internalName = "TestTool";
+         toolTip = "PathFinding Test tool";
+         buttonImage = "ToolsModule:3rd_person_camera_n_image";
+      };
    }; 
 
    // Bind shortcuts for the nav editor.
@@ -151,8 +158,8 @@ function EditorGui::SetNavPalletBar()
    //Adds a button to the pallete stack
                                  //Name          Icon                                     Click Command                              Tooltip text              Keybind
    EWToolsPaletteWindow.addButton("EditMode", "ToolsModule:visibility_toggle_n_image", "NavEditorGui.setActiveTool(NavMeshTools->SelectTool);", "", "Edit NavMesh", "1"); 
-   EWToolsPaletteWindow.addButton("LinkMode",    "ToolsModule:nav_link_n_image",          "NavEditorGui.setActiveTool(NavMeshTools->LinkTool);", "", "Create off-mesh links",  "2");  
-   // EWToolsPaletteWindow.addButton("CoverMode",   "ToolsModule:nav_cover_n_image",         "NavEditorGui.setMode(\"CoverMode\");", "","Edit cover",             "3");  
+   EWToolsPaletteWindow.addButton("LinkMode", "ToolsModule:nav_link_n_image",          "NavEditorGui.setActiveTool(NavMeshTools->LinkTool);", "", "Create off-mesh links",  "2");  
+   EWToolsPaletteWindow.addButton("CoverMode","ToolsModule:nav_cover_n_image",         "NavEditorGui.setActiveTool(NavMeshTools->NavCoverTool);", "", "Create Cover Points.", "3");  
    EWToolsPaletteWindow.addButton("TileMode", "ToolsModule:select_bounds_n_image",     "NavEditorGui.setActiveTool(NavMeshTools->TileTool);" , "", "View and Edit Tiles", "4");
    EWToolsPaletteWindow.addButton("TestMode", "ToolsModule:3rd_person_camera_n_image", "NavEditorGui.setActiveTool(NavMeshTools->TestTool);", "", "Test pathfinding", "5"); 
    EWToolsPaletteWindow.refresh();

+ 29 - 62
Templates/BaseGame/game/tools/navEditor/navEditor.tscript

@@ -297,7 +297,7 @@ function NavEditorGui::showSidePanel()
 }
 
 //------------------------------------------------------
-// NAVMESHTESTTOOL
+// NAVMESHSELECTTOOL
 //------------------------------------------------------
 
 function NavMeshSelectTool::onActivated(%this)
@@ -317,6 +317,18 @@ function NavMeshSelectTool::onDeactivated(%this)
    %actions->SelectActions.setVisible(false);
 }
 
+function NavMeshSeletTool::onNavMeshSelected(%this)
+{
+   %obj = NavEditorGui.getMesh();
+   // we set the naveditorgui navmesh in source so just get it 
+   // and update here.
+   NavInspector.inspect(NavEditorGui.getMesh());
+
+   NavTreeView.clearSelection();
+   if(isObject(%obj))
+      NavTreeView.selectItem(%obj);
+}
+
 //------------------------------------------------------
 // OffMeshConnectionTool
 //------------------------------------------------------
@@ -416,6 +428,22 @@ function NavMeshLinkBiDirection::onClick(%this)
    NavMeshTools->LinkTool.updateLinkFlags();
 }
 
+//------------------------------------------------------
+// CoverTool
+//------------------------------------------------------
+
+function CoverTool::onActivated(%this)
+{
+   %actions = NavEditorOptionsWindow->ActionsBox;
+   %actions->CoverActions.setVisible(true);
+}
+
+function CoverTool::onDeactivated(%this)
+{
+   %actions = NavEditorOptionsWindow->ActionsBox;
+   %actions->CoverActions.setVisible(false);
+}
+
 //------------------------------------------------------
 // NAVMESHTESTTOOL
 //------------------------------------------------------
@@ -573,71 +601,11 @@ function TileTool::onDeactivated(%this)
    %properties->TileProperties.setVisible(false);
 }
 
-//------------------------------------------------------
-
-function NavEditorGui::onModeSet(%this, %mode)
-{
-   // Callback when the nav editor changes mode. Set the appropriate dynamic
-   // GUI contents in the properties/actions boxes.
-   NavInspector.setVisible(false);
-
-   %actions = NavEditorOptionsWindow->ActionsBox;
-   %actions->SelectActions.setVisible(false);
-   %actions->LinkActions.setVisible(false);
-   %actions->CoverActions.setVisible(false);
-   %actions->TileActions.setVisible(false);
-   %actions->TestActions.setVisible(false);
-
-   %properties = NavEditorOptionsWindow->PropertiesBox;
-   %properties->LinkProperties.setVisible(false);
-   %properties->TileProperties.setVisible(false);
-   %properties->TestProperties.setVisible(false);
-
-   switch$(%mode)
-   {
-   case "SelectMode":
-      NavInspector.setVisible(true);
-      %actions->SelectActions.setVisible(true);
-   case "LinkMode":
-      %actions->LinkActions.setVisible(true);
-      %properties->LinkProperties.setVisible(true);
-   case "CoverMode":
-      // 
-      %actions->CoverActions.setVisible(true);
-   case "TileMode":
-      %actions->TileActions.setVisible(true);
-      %properties->TileProperties.setVisible(true);
-   case "TestMode":
-      %actions->TestActions.setVisible(true);
-      %properties->TestProperties.setVisible(true);
-   }
-}
-
 function NavEditorGui::onEscapePressed(%this)
 {
    return false;
 }
 
-function NavEditorGui::selectObject(%this, %obj)
-{
-   NavTreeView.clearSelection();
-   if(isObject(%obj))
-      NavTreeView.selectItem(%obj);
-   %this.onObjectSelected(%obj);
-}
-
-function NavEditorGui::onObjectSelected(%this, %obj)
-{
-   if(isObject(%this.selectedObject))
-      %this.deselect();
-   %this.selectedObject = %obj;
-   if(isObject(%obj))
-   {
-      %this.selectMesh(%obj);
-      NavInspector.inspect(%obj);
-   }
-}
-
 function NavEditorGui::deleteMesh(%this)
 {
    if(isObject(%this.selectedObject))
@@ -732,7 +700,6 @@ function NavTreeView::onInspect(%this, %obj)
 function NavTreeView::onSelect(%this, %obj)
 {
    NavInspector.inspect(%obj);
-   NavEditorGui.onObjectSelected(%obj);
 }
 
 function NavEditorGui::prepSelectionMode(%this)

+ 8 - 9
Templates/BaseGame/game/tools/worldEditor/gui/ToolsPaletteGroups/NavEditorPalette.ed.gui

@@ -11,7 +11,6 @@ $paletteId = new GuiControl(NavEditorPalette,EditorGuiGroup) {
    canSave = "1";
    Visible = "1";
    hovertime = "1000";
-   
    new GuiBitmapButtonCtrl(ENavEditorSelectModeBtn) {
       canSaveDynamicFields = "1";
       class = ENavEditorPaletteButton;
@@ -26,9 +25,9 @@ $paletteId = new GuiControl(NavEditorPalette,EditorGuiGroup) {
       MinExtent = "8 2";
       canSave = "1";
       Visible = "1";
-      Command = "NavEditorGui.prepSelectionMode();";
+      Command = "NavEditorGui.setActiveTool(NavMeshTools->SelectTool);";
       tooltipprofile = "GuiToolTipProfile";
-      ToolTip = "View NavMesh (1).";
+      ToolTip = "Edit NavMesh (1).";
       DetailedDesc = "";
       hovertime = "1000";
       bitmapAsset = "ToolsModule:visibility_toggle_n_image";
@@ -49,10 +48,10 @@ $paletteId = new GuiControl(NavEditorPalette,EditorGuiGroup) {
       MinExtent = "8 2";
       canSave = "1";
       Visible = "1";
-      Command = "NavEditorGui.setMode(\"LinkMode\");";
+      Command = "NavEditorGui.setActiveTool(NavMeshTools->LinkTool);";
       tooltipprofile = "GuiToolTipProfile";
-      ToolTip = "Create off-mesh links (2).";
-      DetailedDesc = "Click to select/add. Shift-click to add multiple end points.";
+      ToolTip = "Edit Links (2).";
+      DetailedDesc = "";
       hovertime = "1000";
       bitmapAsset = "ToolsModule:nav_link_n_image";
       buttonType = "RadioButton";
@@ -72,7 +71,7 @@ $paletteId = new GuiControl(NavEditorPalette,EditorGuiGroup) {
       MinExtent = "8 2";
       canSave = "1";
       Visible = "1";
-      Command = "NavEditorGui.setMode(\"CoverMode\");";
+      Command = "NavEditorGui.setActiveTool(NavMeshTools->NavCoverTool);";
       tooltipprofile = "GuiToolTipProfile";
       ToolTip = "Edit cover (3).";
       DetailedDesc = "";
@@ -95,7 +94,7 @@ $paletteId = new GuiControl(NavEditorPalette,EditorGuiGroup) {
       MinExtent = "8 2";
       canSave = "1";
       Visible = "1";
-      Command = "NavEditorGui.setMode(\"TileMode\");";
+      Command = "NavEditorGui.setActiveTool(NavMeshTools->TileTool);";
       tooltipprofile = "GuiToolTipProfile";
       ToolTip = "View tiles (4).";
       DetailedDesc = "Click to select.";
@@ -118,7 +117,7 @@ $paletteId = new GuiControl(NavEditorPalette,EditorGuiGroup) {
       MinExtent = "8 2";
       canSave = "1";
       Visible = "1";
-      Command = "NavEditorGui.setMode(\"TestMode\");";
+      Command = "NavEditorGui.setActiveTool(NavMeshTools->TestTool);";
       tooltipprofile = "GuiToolTipProfile";
       ToolTip = "Test pathfinding (5).";
       DetailedDesc = "Click to select/move character, CTRL-click to spawn, SHIFT-click to deselect.";