Files
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

117 lines
2.2 KiB
C++

#pragma warning (disable:4786)
#include "ai.hpp"
#include "ai move.hpp"
#include "globals.hpp"
#include <stack>
#include <utils\utils.h>
AIMove::AIMove (AI *parent)
{
m_Parent = parent;
while (!m_CurPath.empty ())
m_CurPath.pop ();
}
AIMove::~AIMove (void)
{
}
bool AIMove::JoinFormation (AIFormation& formation)
{
if (formation.AddMove (this))
{
m_InFormation = true;
return true;
}
return false;
}
CommandEntry *AIMove::Think (double value,CommandEntry *lastcom)
{
CommandEntry *com;
if (newdes)
{
if (lastcom)
{
m_Parent->RemoveCommand (lastcom);
delete lastcom;
}
if (!g_Map[curdes.x][curdes.y].passable)
return NULL;
newdes = false;
if (!CalcPath (&m_CurPath,m_Parent->Location(),curdes,-1,true))
return NULL;
}
if (m_CurPath.empty())
return NULL;
com = new CommandEntry ();
memset (com,0,sizeof (CommandEntry));
com->commandType = MOVE_CMD;
PATHELEMENT temp = m_CurPath.top();
m_CurPath.pop ();
// com->commandData.moveData.dx = temp.x;
// com->commandData.moveData.dy = temp.y;
return com;
}
void AIMove::SetDestination (int x,int y)
{
if ((x == m_Parent->Location().x) && (y == m_Parent->Location().y))
return;
curdes.x = x;
curdes.y = y;
newdes = true;
}
bool AIMove::SetFormationDes (int x,int y)
{
/*
int i,min;
int curx,cury;
const int OFFSIZE = 8;
float cost[OFFSIZE];
int offset[OFFSIZE][2] = {
{-1,-1},
{-1,0},
{-1,1},
{0,-1},
{0,1},
{1,-1},
{1,0},
{1,1}
};
min = 0;
curx = m_Parent->Location().x;
cury = m_Parent->Location().y;
if ((curx == x) && (cury == y))
return true;
for (i=0;i<OFFSIZE;i++)
{
if ((cost[i] = GetOneCost (curx,cury,curx+offset[i][0],cury+offset[i][1])) != -1)
cost[i] += PathCostGuess (curx+offset[i][0],cury+offset[i][1],x,y);
if (cost[min] == -1)
min = i;
else if ((cost[i] != -1) && (cost[i] < cost[min]))
min = i;
}
if (cost[min] == -1)
return false;
while (!m_CurPath.empty())
m_CurPath.pop();
curx = m_Parent->Location().x;
cury = m_Parent->Location().y;
m_CurPath.push (PATHELEMENT (curx+offset[min][0],cury+offset[min][1]));
*/
return true;
}