#ifndef __MAPMAKERIGC_H_
#define __MAPMAKERIGC_H_
typedef Slist_utl<ImapMakerIGC*> MapMakerListIGC;
typedef Slink_utl<ImapMakerIGC*> MapMakerLinkIGC;
const int c_MaxClustersPerMap = 50;
const int c_NumClusterNames = 69;
const int c_NumberOfPlanetPosters = 25;
const int c_FriendlyAleph = 0; const int c_EnemyAleph = 1; const int c_PlayerToNeutralAleph = 2; const int c_NeutralToPlayerAleph = 3; const int c_NeutralAleph = 4; const int c_HiddenToPlayerAleph = 5;
class CMapData
{
protected:
static const char * smszClusterName[c_NumClusterNames];
protected:
ImissionIGC * mpMission;
const MissionParams * mpMissionParams;
Time mNow;
SectorID mClusterNamesLeft[c_NumClusterNames];
SectorID mcClusterNamesLeft;
IclusterIGC * mpCluster[c_MaxClustersPerMap];
SideID msideIDCluster[c_MaxClustersPerMap];
SectorID mcTeamClustersPerTeam;
SectorID mcNeutralClustersPerTeam;
SectorID mcOtherClusters;
WarpID mIDNextWarp;
public:
CMapData();
~CMapData();
ImissionIGC * GetMission()
{ return(mpMission); }
const MissionParams * GetMissionParams()
{ return(mpMissionParams); }
Time GetTime()
{ return(mNow); }
IclusterIGC * GetCluster(SectorID sID)
{ return(mpCluster[sID]); }
SideID GetClusterSide(SectorID sID)
{ return(msideIDCluster[sID]); }
SectorID GetTeamClustersPerTeam()
{ return(mcTeamClustersPerTeam); }
SectorID GetNeutralClustersPerTeam()
{ return(mcNeutralClustersPerTeam); }
SectorID GetClustersPerTeam()
{ return(mcTeamClustersPerTeam + mcNeutralClustersPerTeam); }
SideID GetTeams()
{ return(mpMissionParams->nTeams); }
SectorID GetTeamClusters()
{ return(GetTeamClustersPerTeam() * GetTeams()); }
SectorID GetNeutralClusters()
{ return(GetNeutralClustersPerTeam() * GetTeams()); }
SectorID GetTotalClusters()
{ return(GetClustersPerTeam() * GetTeams() + mcOtherClusters); }
SectorID GetOtherClusters()
{ return(mcOtherClusters); }
short GetPlayerClusterMineableAsteroids()
{ return(mpMissionParams->nPlayerSectorMineableAsteroids); }
short GetPlayerClusterSpecialAsteroids()
{ return(mpMissionParams->nPlayerSectorSpecialAsteroids); }
short GetPlayerClusterGenericAsteroids()
{ return(mpMissionParams->nPlayerSectorAsteroids); }
short GetPlayerClusterTreasure()
{ return(mpMissionParams->nPlayerSectorTreasures); }
short GetNeutralClusterMineableAsteroids()
{ return(mpMissionParams->nNeutralSectorMineableAsteroids); }
short GetNeutralClusterSpecialAsteroids()
{ return(mpMissionParams->nNeutralSectorSpecialAsteroids); }
short GetNeutralClusterGenericAsteroids()
{ return(mpMissionParams->nNeutralSectorAsteroids); }
short GetNeutralClusterTreasure()
{ return(mpMissionParams->nNeutralSectorTreasures); }
short GetMinableAsteroids(void)
{
return mpMissionParams->nPlayerSectorMineableAsteroids *
GetTeamClusters() +
mpMissionParams->nNeutralSectorMineableAsteroids *
(GetOtherClusters() + GetNeutralClusters());
}
short GetPlayerStartTSI()
{ return mpMissionParams->tsiPlayerStart; }
short GetNeutralStartTSI()
{ return mpMissionParams->tsiNeutralStart; }
short GetMaxPlayersOnTeam()
{ return(mpMissionParams->nMaxPlayersPerTeam); }
short GetMapSize()
{ return (mpMissionParams->iMapSize); }
short GetMaxPlayersInMission()
{ return(GetMaxPlayersOnTeam() * GetTeams()); }
CivID GetCivID(SideID sideID)
{ return(mpMissionParams->rgCivID[sideID]); }
WarpID GetNextWarpID()
{ return(mIDNextWarp++); }
VOID SetMission(ImissionIGC * pMission)
{ mpMission = pMission; }
VOID SetMissionParams(const MissionParams * pMissionParams)
{ mpMissionParams = pMissionParams; }
VOID SetTime(Time now)
{ mNow = now; }
VOID SetTeamClustersPerTeam(SectorID sID)
{ mcTeamClustersPerTeam = sID; }
VOID SetNeutralClustersPerTeam(SectorID sID)
{ mcNeutralClustersPerTeam = sID; }
VOID SetOtherClusters(SectorID sID)
{ mcOtherClusters = sID; }
VOID SetCluster(SectorID sID, IclusterIGC * pCluster, SideID sideID);
VOID SetClusterSide(SectorID sID, SideID sideID)
{ msideIDCluster[sID] = sideID; }
VOID GetNewClusterName(CHAR * szClusterName);
} ;
class CmapMakerIGC : public ImapMakerIGC
{
protected:
static const char * smszPlanetName[c_NumberOfPlanetPosters];
MapMakerID mMMID;
char mszName[c_cbDescription + 4];
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerIGC();
virtual ~CmapMakerIGC();
virtual MapMakerID GetMapMakerID() const { return(mMMID); }
virtual VOID SetMapMakerID(MapMakerID mmID) { mMMID = mmID; }
virtual char const* GetName() const
{ return(mszName); }
virtual VOID SetName(const char * newVal)
{ strcpy(mszName, newVal); }
virtual VOID GenerateMission(Time now,
const MissionParams * pmp,
ImissionIGC * pMission);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual IclusterIGC * GenerateTeamCluster(CMapData * pMapData,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual IclusterIGC * GenerateNeutralCluster(CMapData * pMapData,
SectorID sID);
virtual VOID GenerateRingClusters(CMapData * pMapData);
virtual VOID GenerateWarp(CMapData* pMapData,
IclusterIGC* pCluster,
DataWarpIGC* pdw);
virtual VOID LinkClusters(CMapData* pMapData,
SectorID sID1,
SectorID sID2,
int alephType = NA);
virtual VOID CrossLinkClusters(CMapData * pMapData,
SectorID sFirstID);
virtual VOID LinkClusters(CMapData * pMapData);
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateStarbase(CMapData * pMapData,
IclusterIGC* pcluster);
virtual VOID PopulateCluster(CMapData* pMapData,
IclusterIGC* pcluster,
float amountHe3);
virtual VOID PopulateClusters(CMapData * pMapData);
virtual VOID RevealHomeClusters(ImissionIGC * pMission);
virtual VOID RevealMap(ImissionIGC * pMission);
virtual VOID ActivateSides(ImissionIGC * pMission);
} ;
class CmapMakerSingleRingIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
};
class CmapMakerDoubleRingIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerDoubleRingIGC();
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerHiLoIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerHiLoIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerHiHigherIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerHiHigherIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerStarIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerStarIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerBigRingIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerBigRingIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerBrawlIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp);
CmapMakerBrawlIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
virtual VOID PopulateCluster(CMapData* pMapData,
IclusterIGC* pcluster,
float amountHe3);
} ;
class CmapMakerPinWheelIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp);
CmapMakerPinWheelIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
virtual VOID PopulateCluster(CMapData* pMapData,
IclusterIGC* pcluster,
float amountHe3);
} ;
class CmapMakerDiamondRingIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp);
CmapMakerDiamondRingIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerSnowFlakeIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerSnowFlakeIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
class CmapMakerLargeSplitIGC : public CmapMakerHiHigherIGC
{
public:
static const char* IsValid(const MissionParams* pmp);
CmapMakerLargeSplitIGC();
};
class CmapMakerInsideOutIGC : public CmapMakerHiHigherIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerInsideOutIGC();
};
class CmapMakerGridIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp)
{
return NULL;
}
CmapMakerGridIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
};
class CmapMakerEastWestIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp);
CmapMakerEastWestIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
virtual VOID PopulateCluster(CMapData* pMapData,
IclusterIGC* pcluster,
float amountHe3);
};
class CmapMakerSplitBaseIGC : public CmapMakerIGC
{
public:
static const char* IsValid(const MissionParams* pmp);
CmapMakerSplitBaseIGC();
virtual VOID GenerateLayout(CMapData * pMapData);
virtual VOID GenerateTeamClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID GenerateNeutralClusterScreenPosition(
CMapData * pMapData,
DataClusterIGC * pdc,
SectorID sID);
virtual VOID LinkClusters(CMapData * pMapData);
} ;
#endif