diff options
author | frosch <frosch@openttd.org> | 2012-04-22 16:28:27 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2012-04-22 16:28:27 +0000 |
commit | 34969178db5433cbe8e198d420976c899e72ae2a (patch) | |
tree | bbc47721773f360007e03639a9ebc8e8042d2e19 /src | |
parent | 6d9a0ff72396fc99151878e551fd0756ef71ce64 (diff) | |
download | openttd-34969178db5433cbe8e198d420976c899e72ae2a.tar.xz |
(svn r24169) -Add: Make NewGRFClass distinguish between defined specs and specs visible for the user.
Diffstat (limited to 'src')
-rw-r--r-- | src/newgrf_airport.cpp | 6 | ||||
-rw-r--r-- | src/newgrf_class.h | 7 | ||||
-rw-r--r-- | src/newgrf_class_func.h | 17 | ||||
-rw-r--r-- | src/newgrf_object.cpp | 6 | ||||
-rw-r--r-- | src/newgrf_station.cpp | 6 |
5 files changed, 42 insertions, 0 deletions
diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index d526f6d54..2ece7cf0f 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -31,6 +31,12 @@ template <typename Tspec, typename Tid, Tid Tmax> AirportClass::Get(AirportClass::Allocate('HELI'))->name = STR_AIRPORT_CLASS_HELIPORTS; } +template <typename Tspec, typename Tid, Tid Tmax> +bool NewGRFClass<Tspec, Tid, Tmax>::IsUIAvailable(uint index) const +{ + return true; +} + INSTANTIATE_NEWGRF_CLASS_METHODS(AirportClass, AirportSpec, AirportClassID, APC_MAX) diff --git a/src/newgrf_class.h b/src/newgrf_class.h index 0690c6a51..2dfeceba3 100644 --- a/src/newgrf_class.h +++ b/src/newgrf_class.h @@ -21,6 +21,7 @@ template <typename Tspec, typename Tid, Tid Tmax> struct NewGRFClass { private: uint count; ///< Number of specs in this class. + uint ui_count; ///< Number of specs in this class potentially available to the user. Tspec **spec; ///< Array of specifications. /** @@ -43,13 +44,19 @@ public: /** Get the number of allocated specs within the class. */ uint GetSpecCount() const { return this->count; } + /** Get the number of potentially user-available specs within the class. */ + uint GetUISpecCount() const { return this->ui_count; } 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 global_id); static void Assign(Tspec *spec); static uint GetClassCount(); + static uint GetUIClassCount(); static NewGRFClass *Get(Tid cls_id); static const Tspec *GetByGrf(uint32 grfid, byte local_id, int *index); diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h index 9bcb6b3c9..b5af35fdb 100644 --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -31,6 +31,7 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::ResetClass() this->global_id = 0; this->name = STR_EMPTY; this->count = 0; + this->ui_count = 0; free(this->spec); this->spec = NULL; @@ -80,6 +81,8 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::Insert(Tspec *spec) this->spec = ReallocT(this->spec, this->count); this->spec[i] = spec; + + if (this->IsUIAvailable(i)) this->ui_count++; } /** @@ -117,6 +120,19 @@ DEFINE_NEWGRF_CLASS_METHOD(uint)::GetClassCount() } /** + * Get the number of classes available to the user. + * @return The number of classes. + */ +DEFINE_NEWGRF_CLASS_METHOD(uint)::GetUIClassCount() +{ + uint cnt = 0; + for (uint i = 0; i < Tmax && classes[i].global_id != 0; i++) { + if (classes[i].GetUISpecCount() > 0) cnt++; + } + return cnt; +} + +/** * Get a spec from the class at a given index. * @param index The index where to find the spec. * @return The spec at given location. @@ -163,5 +179,6 @@ DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetByGrf(uint32 grfid, byte local_id, template void name::Assign(Tspec *spec); \ template NewGRFClass<Tspec, Tid, Tmax> *name::Get(Tid cls_id); \ template uint name::GetClassCount(); \ + template uint name::GetUIClassCount(); \ template const Tspec *name::GetSpec(uint index) const; \ template const Tspec *name::GetByGrf(uint32 grfid, byte localidx, int *index); diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 1c92c4293..e38fa9c9e 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -113,6 +113,12 @@ template <typename Tspec, typename Tid, Tid Tmax> ObjectClass::Assign(&_object_specs[OBJECT_TRANSMITTER]); } +template <typename Tspec, typename Tid, Tid Tmax> +bool NewGRFClass<Tspec, Tid, Tmax>::IsUIAvailable(uint index) const +{ + return this->GetSpec(index)->IsEverAvailable(); +} + INSTANTIATE_NEWGRF_CLASS_METHODS(ObjectClass, ObjectSpec, ObjectClassID, OBJECT_CLASS_MAX) diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 38e2507ee..9aee46307 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -40,6 +40,12 @@ template <typename Tspec, typename Tid, Tid Tmax> classes[1].Insert(NULL); } +template <typename Tspec, typename Tid, Tid Tmax> +bool NewGRFClass<Tspec, Tid, Tmax>::IsUIAvailable(uint index) const +{ + return true; +} + INSTANTIATE_NEWGRF_CLASS_METHODS(StationClass, StationSpec, StationClassID, STAT_CLASS_MAX) static const uint MAX_SPECLIST = 255; |