summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/FighterAI.h
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;
};