Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/AI/sample.h')
-rw-r--r--Source/AI/sample.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/Source/AI/sample.h b/Source/AI/sample.h
new file mode 100644
index 00000000..02bf8573
--- /dev/null
+++ b/Source/AI/sample.h
@@ -0,0 +1,194 @@
+//-----------------------------------------------------------------------------
+// Name: sample.h
+// Developer: External
+// Author:
+// Description: This is a utility file from the Recast project which has been
+// extracted and modified by Wolfire Games LLC
+// License: Read below
+//-----------------------------------------------------------------------------
+
+//
+// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef RECASTSAMPLE_H
+#define RECASTSAMPLE_H
+
+#include "Recast.h"
+#include "sample_interfaces.h"
+
+
+/// Tool types.
+enum SampleToolType
+{
+ TOOL_NONE = 0,
+ TOOL_TILE_EDIT,
+ TOOL_TILE_HIGHLIGHT,
+ TOOL_TEMP_OBSTACLE,
+ TOOL_NAVMESH_TESTER,
+ TOOL_NAVMESH_PRUNE,
+ TOOL_OFFMESH_CONNECTION,
+ TOOL_CONVEX_VOLUME,
+ TOOL_CROWD,
+ MAX_TOOLS
+};
+
+/// These are just sample areas to use consistent values across the samples.
+/// The use should specify these base on his needs.
+enum SamplePolyAreas
+{
+ SAMPLE_POLYAREA_GROUND = 1,
+ SAMPLE_POLYAREA_WATER = 2,
+ SAMPLE_POLYAREA_ROAD = 3,
+ SAMPLE_POLYAREA_DOOR = 4,
+ SAMPLE_POLYAREA_GRASS = 5,
+ SAMPLE_POLYAREA_JUMP1 = 6,
+ SAMPLE_POLYAREA_JUMP2 = 7,
+ SAMPLE_POLYAREA_JUMP3 = 8,
+ SAMPLE_POLYAREA_JUMP4 = 9,
+ SAMPLE_POLYAREA_JUMP5 = 10,
+ SAMPLE_POLYAREA_DISABLED = 11
+};
+
+enum SamplePolyFlags
+{
+ SAMPLE_POLYFLAGS_NONE = 0x00, // Ability to walk (ground, grass, road)
+ SAMPLE_POLYFLAGS_WALK = 0x01, // Ability to walk (ground, grass, road)
+ SAMPLE_POLYFLAGS_SWIM = 0x02, // Ability to swim (water).
+ SAMPLE_POLYFLAGS_DOOR = 0x04, // Ability to move through doors.
+ SAMPLE_POLYFLAGS_JUMP1 = 0x08, // Ability to jump.
+ SAMPLE_POLYFLAGS_JUMP2 = 0x10, // Ability to jump.
+ SAMPLE_POLYFLAGS_JUMP3 = 0x20, // Ability to jump.
+ SAMPLE_POLYFLAGS_JUMP4 = 0x40, // Ability to jump.
+ SAMPLE_POLYFLAGS_JUMP5 = 0x80, // Ability to jump.
+ SAMPLE_POLYFLAGS_JUMP_ALL = 0xf8, // All jumps.
+ SAMPLE_POLYFLAGS_DISABLED = 0x100, // Disabled polygon
+ SAMPLE_POLYFLAGS_ALL = 0x00ff // All abilities.
+};
+
+enum SamplePartitionType
+{
+ SAMPLE_PARTITION_WATERSHED,
+ SAMPLE_PARTITION_MONOTONE,
+ SAMPLE_PARTITION_LAYERS
+};
+
+struct SampleTool
+{
+ virtual ~SampleTool() {}
+ virtual int type() = 0;
+ virtual void init(class Sample* sample) = 0;
+ virtual void reset() = 0;
+ virtual void handleMenu() = 0;
+ virtual void handleClick(const float* s, const float* p, bool shift) = 0;
+ virtual void handleRender() = 0;
+ virtual void handleRenderOverlay(double* proj, double* model, int* view) = 0;
+ virtual void handleToggle() = 0;
+ virtual void handleStep() = 0;
+ virtual void handleUpdate(const float dt) = 0;
+};
+
+struct SampleToolState {
+ virtual ~SampleToolState() {}
+ virtual void init(class Sample* sample) = 0;
+ virtual void reset() = 0;
+ virtual void handleRender() = 0;
+ virtual void handleRenderOverlay(double* proj, double* model, int* view) = 0;
+ virtual void handleUpdate(const float dt) = 0;
+};
+
+class Sample
+{
+protected:
+ class InputGeom* m_geom;
+ class dtNavMesh* m_navMesh;
+ class dtNavMeshQuery* m_navQuery;
+ class dtCrowd* m_crowd;
+
+ unsigned char m_navMeshDrawFlags;
+
+ float m_cellSize;
+ float m_cellHeight;
+ float m_agentHeight;
+ float m_agentRadius;
+ float m_agentMaxClimb;
+ float m_agentMaxSlope;
+ float m_regionMinSize;
+ float m_regionMergeSize;
+ float m_edgeMaxLen;
+ float m_edgeMaxError;
+ float m_vertsPerPoly;
+ float m_detailSampleDist;
+ float m_detailSampleMaxError;
+ int m_partitionType;
+
+ SampleTool* m_tool;
+ SampleToolState* m_toolStates[MAX_TOOLS];
+
+ BuildContext* m_ctx;
+
+public:
+ Sample();
+ virtual ~Sample();
+
+ void setContext(BuildContext* ctx) { m_ctx = ctx; }
+
+ void setTool(SampleTool* tool);
+ SampleToolState* getToolState(int type) { return m_toolStates[type]; }
+ void setToolState(int type, SampleToolState* s) { m_toolStates[type] = s; }
+
+ virtual void handleSettings();
+ virtual void handleTools();
+ virtual void handleDebugMode();
+ virtual void handleClick(const float* s, const float* p, bool shift);
+ virtual void handleToggle();
+ virtual void handleStep();
+ virtual void handleRender();
+ virtual void handleRenderOverlay(double* proj, double* model, int* view);
+ virtual void handleMeshChanged(class InputGeom* geom);
+ virtual bool handleBuild();
+ virtual void handleUpdate(const float dt);
+ virtual void collectSettings(struct BuildSettings& settings);
+
+ virtual class InputGeom* getInputGeom() { return m_geom; }
+ virtual class dtNavMesh* getNavMesh() { return m_navMesh; }
+ virtual class dtNavMeshQuery* getNavMeshQuery() { return m_navQuery; }
+ virtual class dtCrowd* getCrowd() { return m_crowd; }
+ virtual float getAgentRadius() { return m_agentRadius; }
+ virtual float getAgentHeight() { return m_agentHeight; }
+ virtual float getAgentClimb() { return m_agentMaxClimb; }
+
+ unsigned char getNavMeshDrawFlags() const { return m_navMeshDrawFlags; }
+ void setNavMeshDrawFlags(unsigned char flags) { m_navMeshDrawFlags = flags; }
+
+ void updateToolStates(const float dt);
+ void initToolStates(Sample* sample);
+ void resetToolStates();
+ void renderToolStates();
+ void renderOverlayToolStates(double* proj, double* model, int* view);
+
+ void resetCommonSettings();
+ void handleCommonSettings();
+
+private:
+ // Explicitly disabled copy constructor and copy assignment operator.
+ Sample(const Sample&);
+ Sample& operator=(const Sample&);
+};
+
+
+#endif // RECASTSAMPLE_H