1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-23 22:37:55 +02:00

Win/loss conditions based on logical expressions, yet another large

changeset:
- victory/defeat will be detected using triggered events
- vcmi will convert h3 conditions into set of triggered events
- it is possible to either change number of days without towns or even
remove this loss condition completely
- possibility of custom win/loss text and icons in pregame (no longer
connected to win/loss conditions)

Still missing:
- No interface to pass custom events/victory conditions into the game 
- AI would benefit from improvemets (handle all victory conditions,
select best one to fulfill)
- You have X days till defeat message still hardcoded to 7 days
This commit is contained in:
Ivan Savenko
2013-12-29 11:27:38 +00:00
parent d2d1a2f544
commit 0c5be52a42
15 changed files with 827 additions and 542 deletions

View File

@@ -46,18 +46,18 @@ std::unordered_set<ResourceID> CMappedFileLoader::getFilteredFiles(std::function
CFilesystemList::CFilesystemList()
{
loaders = new std::vector<std::unique_ptr<ISimpleResourceLoader> >;
//loaders = new std::vector<std::unique_ptr<ISimpleResourceLoader> >;
}
CFilesystemList::~CFilesystemList()
{
delete loaders;
//delete loaders;
}
std::unique_ptr<CInputStream> CFilesystemList::load(const ResourceID & resourceName) const
{
// load resource from last loader that have it (last overriden version)
for (auto & loader : boost::adaptors::reverse(*loaders))
for (auto & loader : boost::adaptors::reverse(loaders))
{
if (loader->existsResource(resourceName))
return loader->load(resourceName);
@@ -69,7 +69,7 @@ std::unique_ptr<CInputStream> CFilesystemList::load(const ResourceID & resourceN
bool CFilesystemList::existsResource(const ResourceID & resourceName) const
{
for (auto & loader : *loaders)
for (auto & loader : loaders)
if (loader->existsResource(resourceName))
return true;
return false;
@@ -91,7 +91,7 @@ std::unordered_set<ResourceID> CFilesystemList::getFilteredFiles(std::function<b
{
std::unordered_set<ResourceID> ret;
for (auto & loader : *loaders)
for (auto & loader : loaders)
for (auto & entry : loader->getFilteredFiles(filter))
ret.insert(entry);
@@ -101,7 +101,7 @@ std::unordered_set<ResourceID> CFilesystemList::getFilteredFiles(std::function<b
bool CFilesystemList::createResource(std::string filename, bool update)
{
logGlobal->traceStream()<< "Creating " << filename;
for (auto & loader : boost::adaptors::reverse(*loaders))
for (auto & loader : boost::adaptors::reverse(loaders))
{
if (writeableLoaders.count(loader.get()) != 0 // writeable,
&& loader->createResource(filename, update)) // successfully created
@@ -123,7 +123,7 @@ std::vector<const ISimpleResourceLoader *> CFilesystemList::getResourcesWithName
{
std::vector<const ISimpleResourceLoader *> ret;
for (auto & loader : *loaders)
for (auto & loader : loaders)
boost::range::copy(loader->getResourcesWithName(resourceName), std::back_inserter(ret));
return ret;
@@ -131,7 +131,7 @@ std::vector<const ISimpleResourceLoader *> CFilesystemList::getResourcesWithName
void CFilesystemList::addLoader(ISimpleResourceLoader * loader, bool writeable)
{
loaders->push_back(std::unique_ptr<ISimpleResourceLoader>(loader));
loaders.push_back(std::unique_ptr<ISimpleResourceLoader>(loader));
if (writeable)
writeableLoaders.insert(loader);
}