Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
5.1 KiB

#ifndef _INCLUDED_ASW_LOCATION_GRID_H
#define _INCLUDED_ASW_LOCATION_GRID_H
#define ASW_RANDOM_MISSION_GRID_WIDE 16
#define ASW_RANDOM_MISSION_GRID_TALL 10
class KeyValues;
#include "missionchooser/iasw_mission_chooser.h"
#include "utlvector.h"
#include "color.h"
#include "vstdlib/random.h"
class CASW_KeyValuesDatabase;
class CASW_Location;
class CASW_Location_Grid;
class CTilegenMissionPreprocessor;
class CASW_Location_Group : public IASW_Location_Group
{
public:
CASW_Location_Group( CASW_Location_Grid *pLocationGrid );
~CASW_Location_Group();
virtual const char* GetGroupName() { return m_szGroupName; }
virtual const char* GetTitleText() { return m_szTitleText; }
virtual const char* GetDescriptionText() { return m_szDescriptionText; }
virtual const char* GetImageName() { return m_szImageName; }
virtual Color& GetColor() { return m_Color; };
virtual bool IsGroupLocked( CUtlVector<int> &completedMissions );
KeyValues* GetKeyValuesForEditor();
void LoadFromKeyValues( KeyValues *pKeys ); // random stream is used to pick difficulty between bounds and specific mission spec
virtual int GetHighestUnlockMissionID();
int GetNumLocations() { return m_Locations.Count(); }
IASW_Location* GetLocation( int iIndex );
CASW_Location* GetCLocation( int iIndex );
const char *m_szGroupName;
const char *m_szTitleText;
const char *m_szDescriptionText;
const char *m_szImageName;
CUtlVector<int> m_UnlockedBy; // IDs of missions that unlock this group
int m_iRequiredUnlocks;
Color m_Color; // background color for locations in this group
CUniformRandomStream m_Random;
CUtlVector< CASW_Location* > m_Locations;
CASW_Location_Grid *m_pLocationGrid;
};
class CASW_Reward : public IASW_Reward
{
public:
CASW_Reward();
~CASW_Reward();
virtual ASW_Reward_Type GetRewardType() { return m_RewardType; }
virtual int GetRewardAmount() { return m_iRewardAmount; }
// for item rewards
virtual const char* GetRewardName() { return m_szRewardName; }
virtual int GetRewardLevel() { return m_iRewardLevel; }
virtual int GetRewardQuality() { return m_iRewardQuality; }
virtual bool LoadFromKeyValues( KeyValues *pKeys, int iMissionDifficulty );
virtual KeyValues* GetKeyValuesForEditor();
ASW_Reward_Type m_RewardType;
int m_iRewardAmount;
const char *m_szRewardName;
int m_iRewardLevel;
int m_iRewardQuality;
};
class CASW_Location : public IASW_Location
{
public:
CASW_Location( CASW_Location_Grid *pLocationGrid );
~CASW_Location();
virtual int GetID() { return m_iLocationID; }
virtual IASW_Location_Group* GetGroup() { return m_pGroup; }
virtual CASW_Location_Group* GetCGroup() { return m_pGroup; }
virtual int GetDifficulty() { return m_iDifficulty; }
virtual bool GetCompleted() { return m_bCompleted; }
virtual int GetXPos() { return m_iXPos; }
virtual int GetYPos() { return m_iYPos; }
virtual KeyValues* GetMissionSettings();
virtual KeyValues* GetMissionDefinition();
virtual const char* GetMapName() { return m_szMapName; }
virtual const char* GetStoryScene( void ) { return m_szStoryScene; }
virtual const char* GetImageName() { return m_szImageName; }
virtual const char* GetCompanyName( void );
virtual const char* GetCompanyImage( void );
virtual int GetNumRewards();
virtual IASW_Reward* GetReward( int iRewardIndex );
virtual int GetMoneyReward();
virtual int GetXPReward();
virtual int IsMissionOptional() { return m_bIsMissionOptional; }
virtual bool IsLocationLocked( CUtlVector<int> &completedMissions );
virtual void SetPos( int x, int y ) { m_iXPos = x; m_iYPos = y; }
KeyValues* GetKeyValuesForEditor();
void LoadFromKeyValues( KeyValues *pKeys, CUniformRandomStream* pStream ); // random stream is used to pick difficulty between bounds and specific mission spec
char m_szMapName[64];
int m_iLocationID;
int m_iDifficulty;
int m_iMinDifficulty; // bounds for randomly picking a mission txt
int m_iMaxDifficulty;
const char *m_szStoryScene;
const char *m_szImageName;
CASW_Location_Group *m_pGroup;
bool m_bCompleted;
int m_iXPos;
int m_iYPos;
int m_iCompanyIndex;
bool m_bIsMissionOptional;
KeyValues *m_pMissionKV;
char *m_pszCustomMission;
CASW_Location_Grid *m_pLocationGrid;
CUtlVector<CASW_Reward*> m_Rewards;
};
// stores a grid of possible missions the players can play
class CASW_Location_Grid : public IASW_Location_Grid
{
public:
CASW_Location_Grid();
virtual ~CASW_Location_Grid();
bool LoadLocationGrid();
bool SaveLocationGrid();
virtual int GetNumGroups() { return m_Groups.Count(); }
virtual IASW_Location_Group* GetGroup( int iIndex );
virtual CASW_Location_Group* GetCGroup( int iIndex );
virtual CASW_Location_Group* GetGroupByName( const char *szName );
void DeleteGroup( int iIndex );
void CreateNewGroup();
virtual IASW_Location* GetLocationByID( int iLocationID );
virtual void SetLocationComplete( int iLocationID );
int GetFreeLocationID();
KeyValues *GetMissionData( const char *pMissionName );
private:
CUtlVector<CASW_Location_Group*> m_Groups;
CASW_KeyValuesDatabase *m_pMissionDatabase;
CTilegenMissionPreprocessor *m_pPreprocessor;
};
CASW_Location_Grid *ASWMissionGrid();
#endif // _INCLUDED_ASW_LOCATION_GRID_H