129 lines
3.9 KiB
C++
129 lines
3.9 KiB
C++
#pragma once
|
|
#if !defined(RM_MISSION_H_INC)
|
|
#define RM_MISSION_H_INC
|
|
|
|
#ifdef DEBUG_LINKING
|
|
#pragma message("...including RM_Mission.h")
|
|
#endif
|
|
|
|
// maximum random choices
|
|
#define MAX_RANDOM_CHOICES 100
|
|
|
|
typedef vector<int> rmIntVector_t;
|
|
|
|
|
|
class CRMMission
|
|
{
|
|
private:
|
|
|
|
rmObjectiveList_t mObjectives;
|
|
rmInstanceList_t mInstances;
|
|
|
|
CRMInstanceFile mInstanceFile;
|
|
CRMObjective* mCurrentObjective;
|
|
|
|
bool mValidNodes;
|
|
bool mValidPaths;
|
|
bool mValidRivers;
|
|
bool mValidWeapons;
|
|
bool mValidAmmo;
|
|
bool mValidObjectives;
|
|
bool mValidInstances;
|
|
|
|
int mTimeLimit;
|
|
int mMaxInstancePosition;
|
|
|
|
// npc multipliers
|
|
float mAccuracyMultiplier;
|
|
float mHealthMultiplier;
|
|
|
|
// % chance that RMG pickup is actually spawned
|
|
float mPickupHealth;
|
|
float mPickupArmor;
|
|
float mPickupAmmo;
|
|
float mPickupWeapon;
|
|
float mPickupEquipment;
|
|
|
|
string mDescription;
|
|
string mExitScreen;
|
|
string mTimeExpiredScreen;
|
|
|
|
// symmetric landscape style
|
|
symmetry_t mSymmetric;
|
|
|
|
// if set to 1 in the mission file, adds an extra connecting path in symmetric maps
|
|
// to ensure both sides actually do connect
|
|
int mBackUpPath;
|
|
|
|
int mDefaultPadding;
|
|
|
|
CRMAreaManager* mAreaManager;
|
|
|
|
CRMPathManager* mPathManager;
|
|
|
|
CRandomTerrain* mLandScape;
|
|
|
|
public:
|
|
|
|
CRMMission ( CRandomTerrain* );
|
|
~CRMMission ( );
|
|
|
|
bool Load ( const char* name, const char* instances, const char* difficulty );
|
|
bool Spawn ( CRandomTerrain* terrain, qboolean IsServer );
|
|
|
|
void Preview ( const vec3_t from );
|
|
|
|
CRMObjective* FindObjective ( const char* name );
|
|
CRMObjective* GetCurrentObjective ( ) { return mCurrentObjective; }
|
|
|
|
void CompleteMission (void);
|
|
void FailedMission (bool TimeExpired);
|
|
void CompleteObjective ( CRMObjective* ojective );
|
|
|
|
int GetTimeLimit (void) { return mTimeLimit; }
|
|
int GetMaxInstancePosition (void) { return mMaxInstancePosition; }
|
|
const char* GetDescription (void) { return mDescription.c_str(); }
|
|
const char* GetExitScreen (void) { return mExitScreen.c_str(); }
|
|
int GetSymmetric (void) { return mSymmetric; }
|
|
int GetBackUpPath (void) { return mBackUpPath; }
|
|
int GetDefaultPadding (void) { return mDefaultPadding; }
|
|
|
|
// void CreateMap ( void );
|
|
|
|
bool DenyPickupHealth () {return mLandScape->flrand(0.0f,1.0f) > mPickupHealth;}
|
|
bool DenyPickupArmor () {return mLandScape->flrand(0.0f,1.0f) > mPickupArmor;}
|
|
bool DenyPickupAmmo () {return mLandScape->flrand(0.0f,1.0f) > mPickupAmmo;}
|
|
bool DenyPickupWeapon () {return mLandScape->flrand(0.0f,1.0f) > mPickupWeapon;}
|
|
bool DenyPickupEquipment () {return mLandScape->flrand(0.0f,1.0f) > mPickupEquipment;}
|
|
|
|
private:
|
|
|
|
// void PurgeUnlinkedTriggers ( );
|
|
// void PurgeTrigger ( CEntity* trigger );
|
|
|
|
void MirrorPos (vec3_t pos);
|
|
CGPGroup* ParseRandom ( CGPGroup* random );
|
|
bool ParseOrigin ( CGPGroup* originGroup, vec3_t origin, vec3_t lookat, int* flattenHeight );
|
|
bool ParseNodes ( CGPGroup* group );
|
|
bool ParsePaths ( CGPGroup *paths);
|
|
bool ParseRivers ( CGPGroup *rivers);
|
|
void PlaceBridges ();
|
|
void PlaceWallInstance(CRMInstance* instance, float xpos, float ypos, float zpos, int x, int y, float angle);
|
|
|
|
|
|
bool ParseDifficulty ( CGPGroup* difficulty );
|
|
bool ParseWeapons ( CGPGroup* weapons );
|
|
bool ParseAmmo ( CGPGroup* ammo );
|
|
bool ParseOutfit ( CGPGroup* outfit );
|
|
bool ParseObjectives ( CGPGroup* objectives );
|
|
bool ParseInstance ( CGPGroup* instance );
|
|
bool ParseInstances ( CGPGroup* instances );
|
|
bool ParseInstancesOnPath ( CGPGroup* group );
|
|
bool ParseWallRect ( CGPGroup* group, int side);
|
|
|
|
// void SpawnNPCTriggers ( CCMLandScape* landscape );
|
|
// void AttachNPCTriggers ( CCMLandScape* landscape );
|
|
};
|
|
|
|
|
|
#endif
|