blob: ad56644496a86330aa140ff7d4e2b7723654d27c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
AUTHOR: John DiCamillo
OVERVIEW
========
Fighter (low-level) Artifical Intelligence class
*/
#pragma once
#include <cstdint>
#include "ShipAI.h"
// +--------------------------------------------------------------------+
class Ship;
class Shot;
class InboundSlot;
// +--------------------------------------------------------------------+
class FighterAI : public ShipAI
{
public:
FighterAI(SimObject* s);
virtual ~FighterAI();
virtual void ExecFrame(double seconds);
virtual int Subframe() const { return true; }
// convert the goal point from world to local coords:
virtual void FindObjective();
virtual void FindObjectiveNavPoint();
protected:
// behaviors:
virtual Steer AvoidTerrain();
virtual Steer SeekTarget();
virtual Steer EvadeThreat();
virtual Point ClosingVelocity();
// accumulate behaviors:
virtual void Navigator();
// steering functions:
virtual Steer Seek(const Point& point);
virtual Steer SeekFormationSlot();
// fire on target if appropriate:
virtual void FireControl();
virtual void HelmControl();
virtual void ThrottleControl();
virtual double CalcDefensePerimeter(Ship* starship);
virtual void ReturnToBase(Ship* controller);
Shot* decoy_missile;
double missile_time;
int terrain_warning;
int drop_state;
char dir_info[32];
double brakes;
double z_shift;
double time_to_dock;
InboundSlot* inbound;
int rtb_code;
bool evading;
std::uint32_t jink_time;
Point jink;
bool over_threshold;
bool form_up;
bool go_manual;
};
|