aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement/Waypoints
diff options
context:
space:
mode:
authorMachiavelli <none@none>2010-06-23 00:57:16 +0200
committerMachiavelli <none@none>2010-06-23 00:57:16 +0200
commitd50cb473cbb1ad0e276b6fc31b477a54d37b2255 (patch)
tree6ae8d2fd311f861b7c40cfd618d52ba652509a15 /src/server/game/Movement/Waypoints
parent1daa1c09f9c03fdc99bafb14886160f13870e277 (diff)
Use original taxipath data in taxi flight movement generator. Author: Vladimir
+ Cleanup --HG-- branch : trunk
Diffstat (limited to 'src/server/game/Movement/Waypoints')
-rw-r--r--src/server/game/Movement/Waypoints/Path.h67
1 files changed, 33 insertions, 34 deletions
diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h
index 9ec079f3c9c..de73d9270af 100644
--- a/src/server/game/Movement/Waypoints/Path.h
+++ b/src/server/game/Movement/Waypoints/Path.h
@@ -24,65 +24,64 @@
#include "Common.h"
#include <vector>
+struct SimplePathNode
+{
+ float x, y, z;
+};
+template<typename PathElem, typename PathNode = PathElem>
+
class Path
{
public:
- struct PathNode
- {
- float x,y,z;
- };
-
- void SetLength(const unsigned int sz)
- {
- i_nodes.resize(sz);
- }
+ size_t size() const { return i_nodes.size(); }
+ bool empty() const { return i_nodes.empty(); }
+ void resize(unsigned int sz) { i_nodes.resize(sz); }
+ void clear() { i_nodes.clear(); }
+ void erase(uint32 idx) { i_nodes.erase(i_nodes.begin()+idx); }
- unsigned int Size() const { return i_nodes.size(); }
- bool Empty() const { return i_nodes.empty(); }
- void Resize(unsigned int sz) { i_nodes.resize(sz); }
- void Clear(void) { i_nodes.clear(); }
- PathNode const* GetNodes(uint32 start = 0) const { return &i_nodes[start]; }
- float GetTotalLength() const { return GetTotalLength(0,Size()); }
float GetTotalLength(uint32 start, uint32 end) const
{
- float len = 0, xd, yd, zd;
- for (unsigned int idx=start+1; idx < end; ++idx)
+ float len = 0.0f;
+ for (uint32 idx=start+1; idx < end; ++idx)
{
- xd = i_nodes[ idx ].x - i_nodes[ idx-1 ].x;
- yd = i_nodes[ idx ].y - i_nodes[ idx-1 ].y;
- zd = i_nodes[ idx ].z - i_nodes[ idx-1 ].z;
+ PathNode const& node = i_nodes[idx];
+ PathNode const& prev = i_nodes[idx-1];
+ float xd = node.x - prev.x;
+ float yd = node.y - prev.y;
+ float zd = node.z - prev.z;
len += sqrtf(xd*xd + yd*yd + zd*zd);
}
return len;
}
+
+ float GetTotalLength() const { return GetTotalLength(0,size()); }
float GetPassedLength(uint32 curnode, float x, float y, float z)
{
- float len = 0, xd, yd, zd;
- for (unsigned int idx=1; idx < curnode; ++idx)
- {
- xd = i_nodes[ idx ].x - i_nodes[ idx-1 ].x;
- yd = i_nodes[ idx ].y - i_nodes[ idx-1 ].y;
- zd = i_nodes[ idx ].z - i_nodes[ idx-1 ].z;
- len += sqrtf(xd*xd + yd*yd + zd*zd);
- }
+ float len = GetTotalLength(0,curnode);
if (curnode > 0)
{
- xd = x - i_nodes[curnode-1].x;
- yd = y - i_nodes[curnode-1].y;
- zd = z - i_nodes[curnode-1].z;
+ PathNode const& node = i_nodes[curnode-1];
+ float xd = x - node.x;
+ float yd = y - node.y;
+ float zd = z - node.z;
len += sqrtf(xd*xd + yd*yd + zd*zd);
}
return len;
}
- PathNode& operator[](const unsigned int idx) { return i_nodes[idx]; }
- const PathNode& operator()(const unsigned int idx) const { return i_nodes[idx]; }
+ PathNode& operator[](size_t idx) { return i_nodes[idx]; }
+ PathNode const& operator[](size_t idx) const { return i_nodes[idx]; }
+
+ void set(size_t idx, PathElem elem) { i_nodes[idx] = elem; }
protected:
- std::vector<PathNode> i_nodes;
+ std::vector<PathElem> i_nodes;
};
+
+typedef Path<SimplePathNode> SimplePath;
+
#endif