File diff r21007:a373e4a7c6f0 → r21008:be2e3d3c935b
src/newgrf_generic.cpp
Show inline comments
 
@@ -26,13 +26,13 @@ struct GenericScopeResolver : public Sco
 
	uint8 dst_industry;        ///< Destination industry substitute type. 0xFF for "town", 0xFE for "unknown".
 
	uint8 distance;
 
	AIConstructionEvent event;
 
	uint8 count;
 
	uint8 station_size;
 

	
 
	GenericScopeResolver(ResolverObject *ro, bool ai_callback);
 
	GenericScopeResolver(ResolverObject &ro, bool ai_callback);
 

	
 
	/* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const;
 

	
 
private:
 
	bool ai_callback; ///< Callback comes from the AI.
 
};
 
@@ -101,13 +101,13 @@ void AddGenericCallback(uint8 feature, c
 
}
 

	
 
/* virtual */ uint32 GenericScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const
 
{
 
	if (this->ai_callback) {
 
		switch (variable) {
 
			case 0x40: return this->ro->grffile->cargo_map[this->cargo_type];
 
			case 0x40: return this->ro.grffile->cargo_map[this->cargo_type];
 

	
 
			case 0x80: return this->cargo_type;
 
			case 0x81: return CargoSpec::Get(this->cargo_type)->bitnum;
 
			case 0x82: return this->default_selection;
 
			case 0x83: return this->src_industry;
 
			case 0x84: return this->dst_industry;
 
@@ -136,22 +136,22 @@ void AddGenericCallback(uint8 feature, c
 

	
 
/**
 
 * Generic resolver.
 
 * @param ai_callback Callback comes from the AI.
 
 * @param callback Callback ID.
 
 */
 
GenericResolverObject::GenericResolverObject(bool ai_callback, CallbackID callback) : ResolverObject(NULL, callback), generic_scope(this, ai_callback)
 
GenericResolverObject::GenericResolverObject(bool ai_callback, CallbackID callback) : ResolverObject(NULL, callback), generic_scope(*this, ai_callback)
 
{
 
}
 

	
 
/**
 
 * Generic scope resolver.
 
 * @param ro Surrounding resolver.
 
 * @param ai_callback Callback comes from the AI.
 
 */
 
GenericScopeResolver::GenericScopeResolver(ResolverObject *ro, bool ai_callback) : ScopeResolver(ro)
 
GenericScopeResolver::GenericScopeResolver(ResolverObject &ro, bool ai_callback) : ScopeResolver(ro)
 
{
 
	this->cargo_type = 0;
 
	this->default_selection = 0;
 
	this->src_industry = 0;
 
	this->dst_industry = 0;
 
	this->distance = 0;
 
@@ -170,22 +170,22 @@ GenericScopeResolver::GenericScopeResolv
 
 * @param param1_grfv7 callback_param1 for GRFs up to version 7.
 
 * @param param1_grfv8 callback_param1 for GRFs from version 8 on.
 
 * @param [out] file Optionally returns the GRFFile which made the final decision for the callback result.
 
 *                   May be NULL if not required.
 
 * @return callback value if successful or CALLBACK_FAILED
 
 */
 
static uint16 GetGenericCallbackResult(uint8 feature, ResolverObject *object, uint32 param1_grfv7, uint32 param1_grfv8, const GRFFile **file)
 
static uint16 GetGenericCallbackResult(uint8 feature, ResolverObject &object, uint32 param1_grfv7, uint32 param1_grfv8, const GRFFile **file)
 
{
 
	assert(feature < lengthof(_gcl));
 

	
 
	/* Test each feature callback sprite group. */
 
	for (GenericCallbackList::const_iterator it = _gcl[feature].begin(); it != _gcl[feature].end(); ++it) {
 
		const SpriteGroup *group = it->group;
 
		object->grffile = it->file;
 
		object.grffile = it->file;
 
		/* Set callback param based on GRF version. */
 
		object->callback_param1 = it->file->grf_version >= 8 ? param1_grfv8 : param1_grfv7;
 
		object.callback_param1 = it->file->grf_version >= 8 ? param1_grfv8 : param1_grfv7;
 
		group = SpriteGroup::Resolve(group, object);
 
		if (group == NULL || group->GetCallbackResult() == CALLBACK_FAILED) continue;
 

	
 
		/* Return NewGRF file if necessary */
 
		if (file != NULL) *file = it->file;
 

	
 
@@ -235,13 +235,13 @@ uint16 GetAiPurchaseCallbackResult(uint8
 
	object.generic_scope.dst_industry      = dst_industry;
 
	object.generic_scope.distance          = distance;
 
	object.generic_scope.event             = event;
 
	object.generic_scope.count             = count;
 
	object.generic_scope.station_size      = station_size;
 

	
 
	uint16 callback = GetGenericCallbackResult(feature, &object, 0, 0, file);
 
	uint16 callback = GetGenericCallbackResult(feature, object, 0, 0, file);
 
	if (callback != CALLBACK_FAILED) callback = GB(callback, 0, 8);
 
	return callback;
 
}
 

	
 

	
 
/**
 
@@ -261,10 +261,10 @@ void AmbientSoundEffectCallback(TileInde
 

	
 
	uint32 param1_v7 = GetTileType(tile) << 28 | Clamp(TileHeight(tile), 0, 15) << 24 | GB(r, 16, 8) << 16 | GetTerrainType(tile);
 
	uint32 param1_v8 = GetTileType(tile) << 24 | GetTileZ(tile) << 16 | GB(r, 16, 8) << 8 | (HasTileWaterClass(tile) ? GetWaterClass(tile) : 0) << 3 | GetTerrainType(tile);
 

	
 
	/* Run callback. */
 
	const GRFFile *grf_file;
 
	uint16 callback = GetGenericCallbackResult(GSF_SOUNDFX, &object, param1_v7, param1_v8, &grf_file);
 
	uint16 callback = GetGenericCallbackResult(GSF_SOUNDFX, object, param1_v7, param1_v8, &grf_file);
 

	
 
	if (callback != CALLBACK_FAILED) PlayTileSound(grf_file, callback, tile);
 
}