forked from Mirrors/openclonk
158 lines
4.1 KiB
C++
158 lines
4.1 KiB
C++
/*
|
|
* OpenClonk, http://www.openclonk.org
|
|
*
|
|
* Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de/
|
|
* Copyright (c) 2013-2016, The OpenClonk Team and contributors
|
|
*
|
|
* Distributed under the terms of the ISC license; see accompanying file
|
|
* "COPYING" for details.
|
|
*
|
|
* "Clonk" is a registered trademark of Matthes Bender, used with permission.
|
|
* See accompanying file "TRADEMARK" for details.
|
|
*
|
|
* To redistribute this file separately, substitute the full license texts
|
|
* for the above references.
|
|
*/
|
|
/* Game parameters - game data that is valid before the game is started */
|
|
|
|
#ifndef C4GAMEPARAMETERS_H
|
|
#define C4GAMEPARAMETERS_H
|
|
|
|
#include "object/C4IDList.h"
|
|
#include "control/C4PlayerInfo.h"
|
|
#include "control/C4Teams.h"
|
|
#include "object/C4InfoCore.h"
|
|
|
|
class C4GameRes
|
|
{
|
|
friend class C4GameResList;
|
|
public:
|
|
C4GameRes();
|
|
C4GameRes(const C4GameRes &Res);
|
|
~C4GameRes();
|
|
|
|
C4GameRes &operator = (const C4GameRes &Res);
|
|
|
|
private:
|
|
C4Network2ResType eType;
|
|
StdCopyStrBuf File;
|
|
const C4Network2ResCore *pResCore;
|
|
C4Network2Res::Ref pNetRes;
|
|
|
|
public:
|
|
C4Network2ResType getType() const { return eType; }
|
|
const char *getFile() const { return File.getData(); }
|
|
bool isPresent() const { return !! File; }
|
|
const C4Network2ResCore *getResCore() const { return pResCore; }
|
|
C4Network2Res::Ref getNetRes() const { return pNetRes; }
|
|
|
|
void SetFile(C4Network2ResType eType, const char *szFile);
|
|
void SetResCore(C4Network2ResCore *pResCore);
|
|
void SetNetRes(C4Network2Res::Ref pRes);
|
|
|
|
bool Publish(C4Network2ResList *pResList);
|
|
bool Load(C4Network2ResList *pResList);
|
|
bool InitNetwork(C4Network2ResList *pResList);
|
|
|
|
void CalcHash();
|
|
|
|
void Clear();
|
|
|
|
void CompileFunc(StdCompiler *pComp);
|
|
};
|
|
|
|
class C4GameResList
|
|
{
|
|
private:
|
|
C4GameRes **pResList;
|
|
int32_t iResCount, iResCapacity;
|
|
|
|
public:
|
|
C4GameResList() : pResList(NULL), iResCount(0), iResCapacity(0) {}
|
|
~C4GameResList() { Clear(); }
|
|
|
|
C4GameResList &operator = (const C4GameResList &List);
|
|
|
|
int32_t getResCount() const { return iResCount; }
|
|
|
|
C4GameRes *iterRes(C4GameRes *pLast, C4Network2ResType eType = NRT_Null);
|
|
|
|
void Clear();
|
|
bool Load(C4Group &hGroup, C4Scenario *pScenario, const char * szDefinitionFilenames); // host: create res cores by definition filenames
|
|
|
|
C4GameRes *CreateByFile(C4Network2ResType eType, const char *szFile);
|
|
C4GameRes *CreateByNetRes(C4Network2Res::Ref pNetRes);
|
|
bool InitNetwork(C4Network2ResList *pNetResList);
|
|
|
|
void CalcHashes();
|
|
|
|
bool RetrieveFiles(); // client: make sure all definition files are loaded
|
|
|
|
void CompileFunc(StdCompiler *pComp);
|
|
|
|
protected:
|
|
void Add(C4GameRes *pRes);
|
|
void LoadFoldersWithLocalDefs(const char *szPath);
|
|
};
|
|
|
|
class C4GameParameters
|
|
{
|
|
public:
|
|
C4GameParameters();
|
|
~C4GameParameters();
|
|
|
|
// League (empty if it's not a league game)
|
|
StdCopyStrBuf League;
|
|
StdCopyStrBuf LeagueAddress;
|
|
StdCopyStrBuf StreamAddress;
|
|
|
|
// Maximum player count allowed
|
|
int32_t MaxPlayers;
|
|
|
|
// Original network game? Also set in replays of network games for sync safety
|
|
bool IsNetworkGame;
|
|
|
|
// Control rate
|
|
int32_t ControlRate;
|
|
|
|
// Automatic frame skip enabled for this game?
|
|
bool AutoFrameSkip;
|
|
|
|
// Allow debug mode?
|
|
bool AllowDebug;
|
|
|
|
// Active rules and goals
|
|
C4IDList Rules;
|
|
C4IDList Goals;
|
|
|
|
// Game resources
|
|
C4GameRes Scenario;
|
|
C4GameResList GameRes;
|
|
|
|
// Clients
|
|
C4ClientList Clients;
|
|
|
|
// Players & Teams
|
|
C4PlayerInfoList PlayerInfos;
|
|
C4PlayerInfoList RestorePlayerInfos;
|
|
C4TeamList Teams;
|
|
|
|
// Custom scenario parameters
|
|
C4ScenarioParameters ScenarioParameters;
|
|
|
|
bool isLeague() const { return !!LeagueAddress.getLength(); }
|
|
bool doStreaming() const { return !!StreamAddress.getLength(); }
|
|
const char* getLeague() { return League.getData(); }
|
|
StdStrBuf GetGameGoalString() const;
|
|
void EnforceLeagueRules(class C4Scenario *pScenario);
|
|
|
|
void Clear();
|
|
bool Load(C4Group &hGroup, C4Scenario *pDefault, const char *szGameText, C4LangStringTable *pLang, const char *DefinitionFilenames, C4ScenarioParameters *pStartupScenarioParameters);
|
|
bool InitNetwork(C4Network2ResList *pResList);
|
|
bool Save(C4Group &hGroup, C4Scenario *pDefault);
|
|
|
|
void CompileFunc(StdCompiler *pComp, C4Scenario *pScenario = NULL);
|
|
};
|
|
|
|
#endif // C4GAMEPARAMETERS_H
|