From c1cf9f33964e5e552e7892abd612027acd07ad12 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 11 Nov 2007 17:56:37 +0000 Subject: (svn r11410) -Codechange: implement random triggers for industries. --- src/newgrf_industries.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/newgrf_industries.cpp') diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 9181cc643..294a2d128 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -16,6 +16,7 @@ #include "newgrf_callbacks.h" #include "newgrf_spritegroup.h" #include "newgrf_industries.h" +#include "newgrf_industrytiles.h" #include "newgrf_commons.h" #include "newgrf_text.h" #include "newgrf_town.h" @@ -338,18 +339,18 @@ static const SpriteGroup *IndustryResolveReal(const ResolverObject *object, cons static uint32 IndustryGetRandomBits(const ResolverObject *object) { - return object->u.industry.ind == NULL ? 0 : 0; //object->u.industry.ind->random_bits; + return object->u.industry.ind == NULL ? 0 : object->u.industry.ind->random; } static uint32 IndustryGetTriggers(const ResolverObject *object) { - return object->u.industry.ind == NULL ? 0 : 0; //object->u.industry.ind->triggers; + return object->u.industry.ind == NULL ? 0 : object->u.industry.ind->random_triggers; } static void IndustrySetTriggers(const ResolverObject *object, int triggers) { if (object->u.industry.ind == NULL) return; - //object->u.industry.ind->triggers = triggers; + object->u.industry.ind->random_triggers = triggers; } static void NewIndustryResolver(ResolverObject *res, TileIndex tile, Industry *indus) @@ -528,3 +529,19 @@ void IndustryProductionCallback(Industry *ind, int reason) InvalidateWindow(WC_INDUSTRY_VIEW, ind->index); } + +void DoTriggerIndustry(Industry *ind, IndustryTileTrigger trigger) +{ + ResolverObject object; + + NewIndustryResolver(&object, ind->xy, ind); + object.callback = CBID_RANDOM_TRIGGER; + object.trigger = trigger; + + const SpriteGroup *group = Resolve(GetIndustrySpec(ind->type)->grf_prop.spritegroup, &object); + if (group == NULL) return; + + byte new_random_bits = Random(); + ind->random &= ~object.reseed; + ind->random |= new_random_bits & object.reseed; +} -- cgit v1.2.3-54-g00ecf