summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/Campaign.h
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-04-01 21:23:39 +0200
committerAki <please@ignore.pl>2022-04-01 21:23:39 +0200
commit3c487c5cd69c53d6fea948643c0a76df03516605 (patch)
tree72730c7b8b26a5ef8fc9a987ec4c16129efd5aac /StarsEx/Campaign.h
parent8f353abd0bfe18baddd8a8250ab7c4f2d1c83a6e (diff)
downloadstarshatter-3c487c5cd69c53d6fea948643c0a76df03516605.zip
starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.gz
starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.bz2
Moved Stars45 to StarsEx
Diffstat (limited to 'StarsEx/Campaign.h')
-rw-r--r--StarsEx/Campaign.h281
1 files changed, 281 insertions, 0 deletions
diff --git a/StarsEx/Campaign.h b/StarsEx/Campaign.h
new file mode 100644
index 0000000..1343fec
--- /dev/null
+++ b/StarsEx/Campaign.h
@@ -0,0 +1,281 @@
+/* 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
+ ========
+ Campaign defines a strategic military scenario. This class
+ owns (or generates) the Mission list that defines the action
+ in the campaign.
+*/
+
+#ifndef Campaign_h
+#define Campaign_h
+
+#include "Types.h"
+#include "Bitmap.h"
+#include "Geometry.h"
+#include "Text.h"
+#include "Term.h"
+#include "List.h"
+
+// +--------------------------------------------------------------------+
+
+class Campaign;
+class CampaignPlan;
+class Combatant;
+class CombatAction;
+class CombatEvent;
+class CombatGroup;
+class CombatUnit;
+class CombatZone;
+class DataLoader;
+class Mission;
+class MissionTemplate;
+class StarSystem;
+
+// +--------------------------------------------------------------------+
+
+class MissionInfo
+{
+public:
+ static const char* TYPENAME() { return "MissionInfo"; }
+
+ MissionInfo();
+ ~MissionInfo();
+
+ int operator == (const MissionInfo& m) const { return id == m.id; }
+ int operator < (const MissionInfo& m) const { return id < m.id; }
+ int operator <= (const MissionInfo& m) const { return id <= m.id; }
+
+ bool IsAvailable();
+
+ int id;
+ Text name;
+ Text player_info;
+ Text description;
+ Text system;
+ Text region;
+ Text script;
+ int start;
+ int type;
+
+ int min_rank;
+ int max_rank;
+ int action_id;
+ int action_status;
+ int exec_once;
+ int start_before;
+ int start_after;
+
+ Mission* mission;
+};
+
+class TemplateList
+{
+public:
+ static const char* TYPENAME() { return "TemplateList"; }
+
+ TemplateList();
+ ~TemplateList();
+
+ int mission_type;
+ int group_type;
+ int index;
+ List<MissionInfo> missions;
+};
+
+// +--------------------------------------------------------------------+
+
+class Campaign
+{
+public:
+ static const char* TYPENAME() { return "Campaign"; }
+
+ enum CONSTANTS {
+ TRAINING_CAMPAIGN = 1,
+ DYNAMIC_CAMPAIGN,
+ MOD_CAMPAIGN = 100,
+ SINGLE_MISSIONS = 1000,
+ MULTIPLAYER_MISSIONS,
+ CUSTOM_MISSIONS,
+
+ NUM_IMAGES = 6
+ };
+
+ enum STATUS {
+ CAMPAIGN_INIT,
+ CAMPAIGN_ACTIVE,
+ CAMPAIGN_SUCCESS,
+ CAMPAIGN_FAILED
+ };
+
+ Campaign(int id, const char* name=0);
+ Campaign(int id, const char* name, const char* path);
+ virtual ~Campaign();
+
+ int operator == (const Campaign& s) const { return name == s.name; }
+ int operator < (const Campaign& s) const { return campaign_id < s.campaign_id; }
+
+ // operations:
+ virtual void Load();
+ virtual void Prep();
+ virtual void Start();
+ virtual void ExecFrame();
+ virtual void Unload();
+
+ virtual void Clear();
+ virtual void CommitExpiredActions();
+ virtual void LockoutEvents(int seconds);
+ virtual void CheckPlayerGroup();
+ void CreatePlanners();
+
+ // accessors:
+ const char* Name() const { return name; }
+ const char* Description() const { return description; }
+ const char* Path() const { return path; }
+
+ const char* Situation() const { return situation; }
+ const char* Orders() const { return orders; }
+
+ void SetSituation(const char* s) { situation = s; }
+ void SetOrders(const char* o) { orders = o; }
+
+ int GetPlayerTeamScore();
+ List<MissionInfo>& GetMissionList() { return missions; }
+ List<Combatant>& GetCombatants() { return combatants; }
+ List<CombatZone>& GetZones() { return zones; }
+ List<StarSystem>& GetSystemList() { return systems; }
+ List<CombatAction>& GetActions() { return actions; }
+ List<CombatEvent>& GetEvents() { return events; }
+ CombatEvent* GetLastEvent();
+
+ CombatAction* FindAction(int id);
+
+ int CountNewEvents() const;
+
+ int GetPlayerIFF();
+ CombatGroup* GetPlayerGroup() { return player_group; }
+ void SetPlayerGroup(CombatGroup* pg);
+ CombatUnit* GetPlayerUnit() { return player_unit; }
+ void SetPlayerUnit(CombatUnit* pu);
+
+ Combatant* GetCombatant(const char* name);
+ CombatGroup* FindGroup(int iff, int type, int id);
+ CombatGroup* FindGroup(int iff, int type, CombatGroup* near_group=0);
+ CombatGroup* FindStrikeTarget(int iff, CombatGroup* strike_group);
+
+ StarSystem* GetSystem(const char* sys);
+ CombatZone* GetZone(const char* rgn);
+ MissionInfo* CreateNewMission();
+ void DeleteMission(int id);
+ Mission* GetMission();
+ Mission* GetMission(int id);
+ Mission* GetMissionByFile(const char* filename);
+ MissionInfo* GetMissionInfo(int id);
+ MissionInfo* FindMissionTemplate(int msn_type, CombatGroup* player_group);
+ void ReloadMission(int id);
+ void LoadNetMission(int id, const char* net_mission);
+ void StartMission();
+ void RollbackMission();
+
+ void SetCampaignId(int id);
+ int GetCampaignId() const { return campaign_id; }
+ void SetMissionId(int id);
+ int GetMissionId() const { return mission_id; }
+ Bitmap* GetImage(int n) { return &image[n]; }
+ long double GetTime() const { return time; }
+ long double GetStartTime() const { return startTime; }
+ void SetStartTime(long double t) { startTime = t; }
+ long double GetLoadTime() const { return loadTime; }
+ void SetLoadTime(long double t) { loadTime = t; }
+ long double GetUpdateTime() const { return updateTime; }
+ void SetUpdateTime(long double t) { updateTime = t; }
+
+ bool InCutscene() const;
+ bool IsDynamic() const;
+ bool IsTraining() const;
+ bool IsScripted() const;
+ bool IsSequential() const;
+ bool IsSaveGame() const { return loaded_from_savegame; }
+ void SetSaveGame(bool s) { loaded_from_savegame = s; }
+
+ bool IsActive() const { return status == CAMPAIGN_ACTIVE; }
+ bool IsComplete() const { return status == CAMPAIGN_SUCCESS; }
+ bool IsFailed() const { return status == CAMPAIGN_FAILED; }
+ void SetStatus(int s);
+ int GetStatus() const { return status; }
+
+ int GetAllCombatUnits(int iff, List<CombatUnit>& units);
+
+ static void Initialize();
+ static void Close();
+ static Campaign* GetCampaign();
+ static List<Campaign>&
+ GetAllCampaigns();
+ static int GetLastCampaignId();
+ static Campaign* SelectCampaign(const char* name);
+ static Campaign* CreateCustomCampaign(const char* name, const char* path);
+
+ static long double Stardate();
+
+protected:
+ void LoadCampaign(DataLoader* loader, bool full=false);
+ void LoadTemplateList(DataLoader* loader);
+ void LoadMissionList(DataLoader* loader);
+ void LoadCustomMissions(DataLoader* loader);
+ void ParseGroup(TermStruct* val,
+ CombatGroup* force,
+ CombatGroup* clone,
+ const char* filename);
+ void ParseAction(TermStruct* val,
+ const char* filename);
+ CombatGroup* CloneOver(CombatGroup* force,
+ CombatGroup* clone,
+ CombatGroup* group);
+ void SelectDefaultPlayerGroup(CombatGroup* g, int type);
+ TemplateList* GetTemplateList(int msn_type, int grp_type);
+
+ // attributes:
+ int campaign_id;
+ int status;
+ char filename[64];
+ char path[64];
+ Text name;
+ Text description;
+ Text situation;
+ Text orders;
+ Bitmap image[NUM_IMAGES];
+
+ bool scripted;
+ bool sequential;
+ bool loaded_from_savegame;
+
+ List<Combatant> combatants;
+ List<StarSystem> systems;
+ List<CombatZone> zones;
+ List<CampaignPlan> planners;
+ List<MissionInfo> missions;
+ List<TemplateList> templates;
+ List<CombatAction> actions;
+ List<CombatEvent> events;
+ CombatGroup* player_group;
+ CombatUnit* player_unit;
+
+ int mission_id;
+ Mission* mission;
+ Mission* net_mission;
+
+ long double time;
+ long double loadTime;
+ long double startTime;
+ long double updateTime;
+ int lockout;
+};
+
+#endif // Campaign_h
+