Files
firestorm/Gameleap/code/mw4/Code/MW4/planeai.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

183 lines
5.5 KiB
C++

//===========================================================================//
// File: mechai.hpp //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 07/13/99 AHF Created File //
//---------------------------------------------------------------------------//
// Copyright (C) 1999, Microsoft //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#pragma once
#include "aiutils.hpp"
#include "rail_move.hpp"
#include "vehicle.hpp"
#include "path.hpp"
#include "aiMoveData.hpp"
#include "combatai.hpp"
namespace MechWarrior4
{
class Airplane;
typedef MechWarrior4::CombatAI__CreateMessage PlaneAI__CreateMessage;
//##########################################################################
//########################### PlaneAI #################################
//##########################################################################
class PlaneAI : public MechWarrior4::CombatAI
{
typedef CombatAI inherited;
friend class CMoveData;
public:
static void InitializeClass();
static void TerminateClass();
static ClassData *DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Inheritance Support
//
public:
typedef PlaneAI__CreateMessage CreateMessage;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Run-time Construction and Destruction Support
//
public:
virtual void Save (MemoryStream *stream) {CombatAI::Save(stream);}
virtual void Load (MemoryStream *stream) {CombatAI::Load(stream);}
static PlaneAI* Make(CreateMessage *message,ReplicatorID *base_id);
protected:
Airplane *m_Airplane;
PlaneAI(ClassData *class_data,CreateMessage *message,ReplicatorID *base_id,ElementRenderer::Element *element);
virtual ~PlaneAI();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Message Support
//
public:
enum {
DebugTextMessageID = MechWarrior4::CombatAI::NextMessageID,
NextMessageID
};
void DebugTextMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
protected:
static const MessageEntry MessageEntries[];
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execution Support
//
protected:
int m_InMove;
int m_InMoveDir;
void ExecutePath (Stuff::Time till);
void ExecuteMoveCommand (Stuff::Time till);
void ExecuteMoveHead (Stuff::Time till);
void PathDone (Stuff::Time till,bool failed=false);
virtual void TurnOn (void);
virtual void TurnOff (void);
public:
void PreCollisionExecute(Stuff::Time till);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Obstacle Support
//
protected:
struct AvoidData
{
PlaneAI *who;
Stuff::Time active;
AvoidData (PlaneAI *p1,Stuff::Time p2)
{ who = p1; active = p2; }
};
stlport::vector<MW4AI::Rect4D *> m_AirLockedRects;
stlport::vector<AvoidData> m_AvoidList;
Stuff::Time m_EndStart;
bool m_AttackRun,m_Aborting;
Stuff::Point3D m_AttackPoint;
bool m_FinishedFlyBy;
Stuff::Point3D m_ContinuousFlybySwingPoint;
virtual void AttackRunDone (void);
virtual void AbortAttackRun (void);
bool ValidAttackPoint (const Point3D& point);
void EndAttackRun (void);
Point3D FindAvoidPoint (MW4AI::Rect4D *rect);
bool Avoiding (PlaneAI *who);
void AddAvoid (PlaneAI *who);
void RemoveAvoid (PlaneAI *who);
void KillAvoidList (void);
void CleanAvoidList (void);
virtual void NotifyNoPath(void);
virtual void NotifyReachedDestination(void);
virtual void NotifyCollided(Entity *who);
bool AddLockRect (MW4AI::Rect4D *p1,bool carecollide,Stuff::Time till);
virtual void HandleObstacle (MW4AI::Rect4D *p1,Adept::Entity *p2);
void HandleObstacle (MW4AI::Rect4D *p1)
{ HandleObstacle (p1,NULL); }
void HandleObstacle (Adept::Entity *p1)
{ HandleObstacle (NULL,p1); }
void HandleObstacle (void)
{ HandleObstacle (NULL,NULL); }
public:
virtual bool FlyBy (const Point3D& point);
virtual void ContinuousFlyBy (const Point3D& point);
virtual bool StartAttackRun (const Stuff::Point3D& loc);
virtual bool PointIsOK(const Stuff::Point3D& point) const;
virtual void ClearPathLock (bool quitting,bool fromram);
virtual bool PathLock (bool secondpass,bool fromram);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Order Support
//
public:
virtual void orderMoveLookOut (void);
virtual void orderMoveSit (bool shutdown);
virtual bool orderTakeOff(int distance);
virtual bool orderLand(void);
virtual bool orderDoorOpen(void);
virtual bool orderDoorClose(void);
void hellteleport (void);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Command Support
//
protected:
virtual void ExecuteMoveCommand (MW4AI::CommandEntry *command);
public:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Support
//
public:
void TestInstance() const;
};
}