summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/CampaignPlanStrategic.h
blob: 6df1ba702f97c8dc7ac2068639c0a7ed6692f94c (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
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2022, 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
    ========
    CampaignPlanStrategic prioritizes targets and defensible
    allied forces as the first step in force tasking.  This
    algorithm computes which enemy resources are most important
    to attack, based on the AI value of each combat group, and
    strategic weighting factors that help shape the strategy
    to the objectives for the current campaign.
*/

#ifndef CampaignPlanStrategic_h
#define CampaignPlanStrategic_h

#include "Types.h"
#include "CampaignPlan.h"

// +--------------------------------------------------------------------+

class CampaignPlanStrategic : public CampaignPlan
{
public:
    static const char* TYPENAME() { return "CampaignPlanStrategic"; }

    CampaignPlanStrategic(Campaign* c) : CampaignPlan(c) { }
    virtual ~CampaignPlanStrategic()                     { }

    // operations:
    virtual void   ExecFrame();

protected:
    void           PlaceGroup(CombatGroup* g);

    void           ScoreCombatant(Combatant* c);

    void           ScoreDefensible(Combatant* c);
    void           ScoreDefend(Combatant* c, CombatGroup* g);

    void           ScoreTargets(Combatant* c, Combatant* t);
    void           ScoreTarget(Combatant* c, CombatGroup* g);

    void           ScoreNeeds(Combatant* c);

    // zone alocation:
    void           BuildGroupList(CombatGroup* g, List<CombatGroup>& groups);
    void           AssignZones(Combatant* c);
    void           ResolveZoneMovement(CombatGroup* g);
};

#endif  // CampaignPlanStrategic_h