Files
firestorm/Gameleap/code/mw4/Code/AI test/airailpath.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

110 lines
1.9 KiB
C++

#ifndef __AIRAILPATHHPP__
#define __AIRAILPATHHPP__
#pragma warning (disable:4786)
#include "utils\utils.h"
#include <vector>
#include <map>
class CRailNode;
class CRailLink
{
private:
CRailNode *m_Loc[2];
float m_Weight;
bool m_Jump;
public:
CRailLink (void)
{
m_Loc[0] = m_Loc[1] = NULL;
m_Weight = 0;
m_Jump = false;
}
CRailLink (CRailNode *loc1,CRailNode *loc2,float nweight,bool njump = false)
{
m_Loc[0] = loc1;
m_Loc[1] = loc2;
m_Weight = nweight;
m_Jump = njump;
}
float Weight (void) const
{ return m_Weight; }
bool Jump (void) const
{ return m_Jump; }
const CRailNode *Location (int id) const
{
assert ((id>=0) && (id<=1));
return m_Loc[id];
}
};
class CRailNode
{
private:
CPoint m_Location;
public:
CRailNode (CPoint loc);
~CRailNode (void);
CPoint Location (void) const
{ return m_Location; }
};
class CRailGraph
{
private:
std::map<int,CRailNode *> m_Nodes;
std::vector<CRailLink *> m_Links;
public:
CRailGraph (void);
~CRailGraph (void);
void AddNode (CRailNode *node,int id);
void AddLink (CRailLink *link);
void AddLink (int n1,int n2,float weight,bool jump=false)
{
assert (m_Nodes.find (n1) != m_Nodes.end ());
assert (m_Nodes.find (n2) != m_Nodes.end ());
AddLink (new CRailLink (m_Nodes[n1],m_Nodes[n2],weight,jump));
}
float Connect (CRailNode *src,CRailNode *dest) const;
};
class CRailPath
{
private:
CPoint m_Start;
CPoint m_End;
int m_CurrentLink;
std::vector<CRailLink *> m_Links;
public:
CRailPath (CPoint start,CPoint end);
~CRailPath (void);
void CalcPath (void);
const CRailLink *CurrentLink (void) const
{
assert (m_CurrentLink >= 0);
assert (m_CurrentLink < m_Links.size ());
return m_Links[m_CurrentLink];
}
bool NextLink (void) // true if path still exists
{
m_CurrentLink++;
return m_CurrentLink != m_Links.size ();
}
};
#endif