Files
@ r28571:f38bdbf45090
Branch filter:
Location: cpp/openttd-patchpack/source/src/newgrf_class.h - annotation
r28571:f38bdbf45090
2.4 KiB
text/x-c
Update: fmt to 10.2.0
r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r27034:b6f1b823160c r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r19260:216381f94394 r27034:b6f1b823160c r27034:b6f1b823160c r15728:7a5cbbfb3f6a r19260:216381f94394 r19260:216381f94394 r24534:7bcc54d7060f r24534:7bcc54d7060f r19260:216381f94394 r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r19261:64cd03705a3e r19261:64cd03705a3e r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r19260:216381f94394 r27737:728d55b97775 r19260:216381f94394 r19260:216381f94394 r19262:b0c685c8a315 r19262:b0c685c8a315 r19263:8bc163eb7eb2 r27034:b6f1b823160c r19266:a55aa4bf5bd3 r19266:a55aa4bf5bd3 r19267:1d5d8ee85137 r19267:1d5d8ee85137 r19263:8bc163eb7eb2 r19263:8bc163eb7eb2 r19263:8bc163eb7eb2 r19266:a55aa4bf5bd3 r19266:a55aa4bf5bd3 r19266:a55aa4bf5bd3 r19260:216381f94394 r27737:728d55b97775 r15728:7a5cbbfb3f6a r19264:619ce1a2ca96 r19266:a55aa4bf5bd3 r19267:1d5d8ee85137 r19258:f88011d357af r15728:7a5cbbfb3f6a r27737:728d55b97775 r15728:7a5cbbfb3f6a r15728:7a5cbbfb3f6a r16849:d593358b4346 | /*
* 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 newgrf_class.h Header file for classes to be used by e.g. NewGRF stations and airports */
#ifndef NEWGRF_CLASS_H
#define NEWGRF_CLASS_H
#include "strings_type.h"
/**
* Struct containing information relating to NewGRF classes for stations and airports.
*/
template <typename Tspec, typename Tid, Tid Tmax>
struct NewGRFClass {
private:
uint ui_count; ///< Number of specs in this class potentially available to the user.
std::vector<Tspec *> spec; ///< List of specifications.
/**
* The actual classes.
* @note We store pointers to members of this array in various places outside this class (e.g. to 'name' for GRF string resolving).
* Thus this must be a static array, and cannot be a self-resizing vector or similar.
*/
static NewGRFClass<Tspec, Tid, Tmax> classes[Tmax];
void ResetClass();
/** Initialise the defaults. */
static void InsertDefaults();
public:
uint32_t global_id; ///< Global ID for class, e.g. 'DFLT', 'WAYP', etc.
StringID name; ///< Name of this class.
void Insert(Tspec *spec);
/** Get the number of allocated specs within the class. */
uint GetSpecCount() const { return static_cast<uint>(this->spec.size()); }
/** Get the number of potentially user-available specs within the class. */
uint GetUISpecCount() const { return this->ui_count; }
int GetUIFromIndex(int index) const;
int GetIndexFromUI(int ui_index) const;
const Tspec *GetSpec(uint index) const;
/** Check whether the spec will be available to the user at some point in time. */
bool IsUIAvailable(uint index) const;
static void Reset();
static Tid Allocate(uint32_t global_id);
static void Assign(Tspec *spec);
static uint GetClassCount();
static uint GetUIClassCount();
static Tid GetUIClass(uint index);
static NewGRFClass *Get(Tid cls_id);
static const Tspec *GetByGrf(uint32_t grfid, uint16_t local_id, int *index);
};
#endif /* NEWGRF_CLASS_H */
|