diff options
author | rubidium <rubidium@openttd.org> | 2007-11-11 17:56:37 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-11-11 17:56:37 +0000 |
commit | af5c2a785f11cc6c56813285fe0d1b09369b0acb (patch) | |
tree | f9e7187a01ac304ba4976cb42e34a137f6511115 /src/newgrf_industries.cpp | |
parent | f6dda295496e642a04f212e8aa41cdfdf74a347d (diff) | |
download | openttd-af5c2a785f11cc6c56813285fe0d1b09369b0acb.tar.xz |
(svn r11410) -Codechange: implement random triggers for industries.
Diffstat (limited to 'src/newgrf_industries.cpp')
-rw-r--r-- | src/newgrf_industries.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
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; +} |