File diff r7859:98c8367217c1 → r7860:c73688ce46ca
src/newgrf_industrytiles.cpp
Show inline comments
 
@@ -119,14 +119,14 @@ static uint32 IndustryTileGetRandomBits(
 
{
 
	const TileIndex tile = object->u.industry.tile;
 
	if (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) return 0;
 
	return (object->scope == VSG_SCOPE_SELF) ? GetIndustryRandomBits(tile) : 0; //GetIndustryByTile(tile)->random_bits;
 
	return (object->scope == VSG_SCOPE_SELF) ? GetIndustryRandomBits(tile) : GetIndustryByTile(tile)->random;
 
}
 

	
 
static uint32 IndustryTileGetTriggers(const ResolverObject *object)
 
{
 
	const TileIndex tile = object->u.industry.tile;
 
	if (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) return 0;
 
	return (object->scope == VSG_SCOPE_SELF) ? GetIndustryTriggers(tile) : 0; //GetIndustryByTile(tile)->triggers;
 
	return (object->scope == VSG_SCOPE_SELF) ? GetIndustryTriggers(tile) : GetIndustryByTile(tile)->random_triggers;
 
}
 

	
 
static void IndustryTileSetTriggers(const ResolverObject *object, int triggers)
 
@@ -134,10 +134,10 @@ static void IndustryTileSetTriggers(cons
 
	const TileIndex tile = object->u.industry.tile;
 
	if (tile == INVALID_TILE || !IsTileType(tile, MP_INDUSTRY)) return;
 

	
 
	if (object->scope != VSG_SCOPE_SELF) {
 
	if (object->scope == VSG_SCOPE_SELF) {
 
		SetIndustryTriggers(tile, triggers);
 
	} else {
 
		//GetIndustryByTile(tile)->triggers = triggers;
 
		GetIndustryByTile(tile)->random_triggers = triggers;
 
	}
 
}
 

	
 
@@ -385,3 +385,43 @@ bool StartStopIndustryTileAnimation(cons
 

	
 
	return ret;
 
}
 

	
 
static void DoTriggerIndustryTile(TileIndex tile, IndustryTileTrigger trigger, Industry *ind)
 
{
 
	ResolverObject object;
 

	
 
	IndustryGfx gfx = GetIndustryGfx(tile);
 
	const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx);
 

	
 
	NewIndustryTileResolver(&object, gfx, tile, ind);
 

	
 
	object.callback = CBID_RANDOM_TRIGGER;
 
	object.trigger = trigger;
 

	
 
	const SpriteGroup *group = Resolve(itspec->grf_prop.spritegroup, &object);
 
	if (group == NULL) return;
 

	
 
	byte new_random_bits = Random();
 
	byte random_bits = GetIndustryRandomBits(tile);
 
	random_bits &= ~object.reseed;
 
	random_bits |= new_random_bits & object.reseed;
 
	SetIndustryRandomBits(tile, random_bits);
 
}
 

	
 
void TriggerIndustryTile(TileIndex tile, IndustryTileTrigger trigger)
 
{
 
	DoTriggerIndustryTile(tile, trigger, GetIndustryByTile(tile));
 
}
 

	
 
extern void DoTriggerIndustry(Industry *ind, IndustryTileTrigger trigger);
 

	
 
void TriggerIndustry(Industry *ind, IndustryTileTrigger trigger)
 
{
 
	BEGIN_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
 
		if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == ind->index) {
 
			DoTriggerIndustryTile(tile, trigger, ind);
 
		}
 
	END_TILE_LOOP(tile, ind->width, ind->height, ind->xy)
 

	
 
	DoTriggerIndustry(ind, trigger);
 
}