summaryrefslogtreecommitdiff
path: root/src/newgrf_industries.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-11-11 17:56:37 +0000
committerrubidium <rubidium@openttd.org>2007-11-11 17:56:37 +0000
commitaf5c2a785f11cc6c56813285fe0d1b09369b0acb (patch)
treef9e7187a01ac304ba4976cb42e34a137f6511115 /src/newgrf_industries.cpp
parentf6dda295496e642a04f212e8aa41cdfdf74a347d (diff)
downloadopenttd-af5c2a785f11cc6c56813285fe0d1b09369b0acb.tar.xz
(svn r11410) -Codechange: implement random triggers for industries.
Diffstat (limited to 'src/newgrf_industries.cpp')
-rw-r--r--src/newgrf_industries.cpp23
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;
+}