Changeset - r19266:a55aa4bf5bd3
[Not reviewed]
master
0 5 0
frosch - 12 years ago 2012-04-22 16:28:27
frosch@openttd.org
(svn r24169) -Add: Make NewGRFClass distinguish between defined specs and specs visible for the user.
5 files changed with 42 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/newgrf_airport.cpp
Show inline comments
 
@@ -31,6 +31,12 @@ template <typename Tspec, typename Tid, 
 
	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)
 

	
 

	
src/newgrf_class.h
Show inline comments
 
@@ -21,6 +21,7 @@ template <typename Tspec, typename Tid, 
 
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);
src/newgrf_class_func.h
Show inline comments
 
@@ -31,6 +31,7 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::ResetC
 
	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
 
	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)::GetCla
 
}
 

	
 
/**
 
 * 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 *
 
	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);
src/newgrf_object.cpp
Show inline comments
 
@@ -113,6 +113,12 @@ template <typename Tspec, typename Tid, 
 
	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)
 

	
 

	
src/newgrf_station.cpp
Show inline comments
 
@@ -40,6 +40,12 @@ template <typename Tspec, typename Tid, 
 
	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;
0 comments (0 inline, 0 general)