mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
This implements necessary tooling to create a simple SP campaign. The architecture is intended to be easily extensible in the future. 'Campaign Run' contains the metadata of a campaign, e.g. maps played/won. It's saved in the user folder under saves/campaigns/*.0adcampaign Campaign templates are JSON files in campaigns/ Campaigns can specify which Menu interface they will use. This is intended to allow more complex layouts/presentation. For now, a simple list interface is provided. This allows making campaigns without any fancy art required (and effectively mimics AoE1's campaign interface). The behaviour on game end is also intended to be extensible, supporting things such as carrying over units between scenarios - for now, it simply records won games. GameSetup is not available for now - scenarios are triggered with the settings defined in the map/default settings. Improving on this requires refactoring the gamesetup further. The load/save game page has been extended slightly to support showing/hiding campaign games (campaign gamed are saved under saves/ directly, there is no strong motivation to do otherwise at this point) Closes #4387 Differential Revision: https://code.wildfiregames.com/D11 This was SVN commit r24979.
62 lines
2.8 KiB
C++
62 lines
2.8 KiB
C++
/* Copyright (C) 2021 Wildfire Games.
|
|
* This file is part of 0 A.D.
|
|
*
|
|
* 0 A.D. is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 0 A.D. is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef INCLUDED_JSI_VFS
|
|
#define INCLUDED_JSI_VFS
|
|
|
|
#include "scriptinterface/ScriptInterface.h"
|
|
|
|
namespace JSI_VFS
|
|
{
|
|
// Return an array of pathname strings, one for each matching entry in the
|
|
// specified directory.
|
|
JS::Value BuildDirEntList(ScriptInterface::CmptPrivate* pCmptPrivate, const std::vector<CStrW>& validPaths, const std::wstring& path, const std::wstring& filterStr, bool recurse);
|
|
|
|
// Return true iff the file exists
|
|
bool FileExists(ScriptInterface::CmptPrivate* pCmptPrivate, const std::vector<CStrW>& validPaths, const CStrW& filename);
|
|
|
|
// Return time [seconds since 1970] of the last modification to the specified file.
|
|
double GetFileMTime(ScriptInterface::CmptPrivate* pCmptPrivate, const std::wstring& filename);
|
|
|
|
// Return current size of file.
|
|
unsigned int GetFileSize(ScriptInterface::CmptPrivate* pCmptPrivate, const std::wstring& filename);
|
|
|
|
// Return file contents in a string.
|
|
JS::Value ReadFile(ScriptInterface::CmptPrivate* pCmptPrivate, const std::wstring& filename);
|
|
|
|
// Return file contents as an array of lines.
|
|
JS::Value ReadFileLines(ScriptInterface::CmptPrivate* pCmptPrivate, const std::wstring& filename);
|
|
|
|
// Return file contents parsed as a JS Object
|
|
JS::Value ReadJSONFile(ScriptInterface::CmptPrivate* pCmptPrivate, const std::vector<CStrW>& validPaths, const CStrW& filePath);
|
|
|
|
// Save given JS Object to a JSON file
|
|
void WriteJSONFile(ScriptInterface::CmptPrivate* pCmptPrivate, const std::wstring& filePath, JS::HandleValue val1);
|
|
|
|
// Delete the given campaign save.
|
|
// This is limited to campaign save to avoid mods deleting the wrong file.
|
|
bool DeleteCampaignSave(ScriptInterface::CmptPrivate* pCmptPrivate, const CStrW& filePath);
|
|
|
|
// Tests whether the current script context is allowed to read from the given directory
|
|
bool PathRestrictionMet(ScriptInterface::CmptPrivate* pCmptPrivate, const std::vector<CStrW>& validPaths, const CStrW& filePath);
|
|
|
|
void RegisterScriptFunctions_GUI(const ScriptInterface& scriptInterface);
|
|
void RegisterScriptFunctions_Simulation(const ScriptInterface& scriptInterface);
|
|
void RegisterScriptFunctions_Maps(const ScriptInterface& scriptInterface);
|
|
}
|
|
|
|
#endif // INCLUDED_JSI_VFS
|