Files @ r25756:de2f5a4c7565
Branch filter:

Location: cpp/openttd-patchpack/source/src/saveload/goal_sl.cpp

Patric Stout
Codechange: using "until" in function names can be confusing

IsSavegameVersionUntil() did a [0, N] check, not [0, N) as the
name suggests.

Until can be a confusing word, where people consider it to be
including the upperbound. Dictionary states it means "before",
excluding the upperbound. There are long debates about who is right.

So, simply remove away from this ambiguity, and call it "before"
and "before or at". This makes the world easier for everyone.
/*
 * This file is part of OpenTTD.
 * OpenTTD 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, version 2.
 * OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file goal_sl.cpp Code handling saving and loading of goals */

#include "../stdafx.h"

#include "saveload.h"
#include "compat/goal_sl_compat.h"

#include "../goal_base.h"

#include "../safeguards.h"

static const SaveLoad _goals_desc[] = {
	    SLE_VAR(Goal, company,   SLE_FILE_U16 | SLE_VAR_U8),
	    SLE_VAR(Goal, type,      SLE_FILE_U16 | SLE_VAR_U8),
	    SLE_VAR(Goal, dst,       SLE_UINT32),
	    SLE_STR(Goal, text,      SLE_STR | SLF_ALLOW_CONTROL, 0),
	SLE_CONDSTR(Goal, progress,  SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_182, SL_MAX_VERSION),
	SLE_CONDVAR(Goal, completed, SLE_BOOL, SLV_182, SL_MAX_VERSION),
};

static void Save_GOAL()
{
	SlTableHeader(_goals_desc);

	for (Goal *s : Goal::Iterate()) {
		SlSetArrayIndex(s->index);
		SlObject(s, _goals_desc);
	}
}

static void Load_GOAL()
{
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_goals_desc, _goals_sl_compat);

	int index;
	while ((index = SlIterateArray()) != -1) {
		Goal *s = new (index) Goal();
		SlObject(s, _goals_desc);
	}
}

static const ChunkHandler goal_chunk_handlers[] = {
	{ 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_TABLE },
};

extern const ChunkHandlerTable _goal_chunk_handlers(goal_chunk_handlers);