annotate src/newgrf_generic.cpp @ 8544:50768dea0a8b draft

(svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
author peter1138 <peter1138@openttd.org>
date Tue, 12 Feb 2008 13:23:57 +0000
parents
children ae0ec91bb55e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8544
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
1 /* $Id$ */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
2
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
3 #include "stdafx.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
4 #include "openttd.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
5 #include "variables.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
6 #include "landscape.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
7 #include "debug.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
8 #include "newgrf.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
9 #include "newgrf_callbacks.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
10 #include "newgrf_commons.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
11 #include "newgrf_spritegroup.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
12 #include "newgrf_generic.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
13 #include "tile_map.h"
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
14 #include <list>
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
15
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
16
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
17 struct GenericCallback {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
18 const GRFFile *file;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
19 const SpriteGroup *group;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
20
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
21 GenericCallback(const GRFFile *file, const SpriteGroup *group) :
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
22 file(file),
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
23 group(group)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
24 { }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
25 };
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
26
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
27 typedef std::list<GenericCallback> GenericCallbackList;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
28
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
29 static GenericCallbackList _gcl[GSF_END];
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
30
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
31
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
32 /**
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
33 * Reset all generic feature callback sprite groups.
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
34 */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
35 void ResetGenericCallbacks()
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
36 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
37 for (uint8 feature = 0; feature < lengthof(_gcl); feature++) {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
38 _gcl[feature].clear();
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
39 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
40 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
41
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
42
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
43 /**
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
44 * Add a generic feature callback sprite group to the appropriate feature list.
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
45 * @param feature
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
46 * @param file
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
47 * @param group
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
48 */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
49 void AddGenericCallback(uint8 feature, const GRFFile *file, const SpriteGroup *group)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
50 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
51 if (feature >= lengthof(_gcl)) {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
52 grfmsg(5, "AddGenericCallback: Unsupported feature 0x%02X", feature);
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
53 return;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
54 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
55
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
56 /* Generic feature callbacks are evaluated in reverse (i.e. the last group
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
57 * to be added is evaluated first, etc) thus we push the group to the
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
58 * beginning of the list so a standard iterator will do the right thing. */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
59 _gcl[feature].push_front(GenericCallback(file, group));
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
60 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
61
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
62
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
63 static uint32 GenericCallbackGetRandomBits(const ResolverObject *object)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
64 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
65 return 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
66 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
67
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
68
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
69 static uint32 GenericCallbackGetTriggers(const ResolverObject *object)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
70 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
71 return 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
72 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
73
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
74
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
75 static void GenericCallbackSetTriggers(const ResolverObject *object, int triggers)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
76 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
77 return;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
78 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
79
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
80
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
81 static uint32 GenericCallbackGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
82 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
83 switch (variable) {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
84 case 0x40: return object->u.generic.cargo_type;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
85
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
86 case 0x80: return object->u.generic.cargo_type;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
87 case 0x81: return object->u.generic.cargo_type;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
88 case 0x82: return object->u.generic.default_selection;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
89 case 0x83: return object->u.generic.src_industry;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
90 case 0x84: return object->u.generic.dst_industry;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
91 case 0x85: return object->u.generic.distance;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
92 case 0x86: return object->u.generic.event;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
93 case 0x87: return object->u.generic.count;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
94 case 0x88: return object->u.generic.station_size;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
95
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
96 default: break;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
97 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
98
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
99 DEBUG(grf, 1, "Unhandled generic feature property 0x%02X", variable);
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
100
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
101 *available = false;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
102 return 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
103 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
104
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
105
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
106 static const SpriteGroup *GenericCallbackResolveReal(const ResolverObject *object, const SpriteGroup *group)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
107 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
108 if (group->g.real.num_loaded == 0) return NULL;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
109
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
110 return group->g.real.loaded[0];
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
111 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
112
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
113
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
114 static inline void NewGenericResolver(ResolverObject *res)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
115 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
116 res->GetRandomBits = &GenericCallbackGetRandomBits;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
117 res->GetTriggers = &GenericCallbackGetTriggers;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
118 res->SetTriggers = &GenericCallbackSetTriggers;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
119 res->GetVariable = &GenericCallbackGetVariable;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
120 res->ResolveReal = &GenericCallbackResolveReal;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
121
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
122 res->callback = CBID_NO_CALLBACK;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
123 res->callback_param1 = 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
124 res->callback_param2 = 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
125 res->last_value = 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
126 res->trigger = 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
127 res->reseed = 0;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
128 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
129
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
130
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
131 /** Follow a generic feature callback list and return the first successful
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
132 * answer
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
133 * @param feature GRF Feature of callback
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
134 * @param object pre-populated resolver object
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
135 * @param file address of GRFFile object if file reference is needed, NULL is valid
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
136 * @return callback value if successful or CALLBACK_FAILED
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
137 */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
138 static uint16 GetGenericCallbackResult(uint8 feature, ResolverObject *object, const GRFFile **file)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
139 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
140 assert(feature < lengthof(_gcl));
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
141
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
142 /* Test each feature callback sprite group. */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
143 for (GenericCallbackList::const_iterator it = _gcl[feature].begin(); it != _gcl[feature].end(); ++it) {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
144 const SpriteGroup *group = it->group;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
145 group = Resolve(group, object);
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
146 if (group == NULL || group->type != SGT_CALLBACK) continue;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
147
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
148 /* Return NewGRF file if necessary */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
149 if (file != NULL) *file = it->file;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
150
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
151 return group->g.callback.result;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
152 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
153
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
154 /* No callback returned a valid result, so we've failed. */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
155 return CALLBACK_FAILED;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
156 }
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
157
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
158
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
159 /**
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
160 * 'Execute' an AI purchase selection callback
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
161 */
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
162 uint16 GetAiPurchaseCallbackResult(uint8 feature, CargoID cargo_type, uint8 default_selection, IndustryType src_industry, IndustryType dst_industry, uint8 distance, AIConstructionEvent event, uint8 count, uint8 station_size, const GRFFile **file)
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
163 {
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
164 ResolverObject object;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
165
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
166 NewGenericResolver(&object);
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
167
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
168 object.callback = CBID_GENERIC_AI_PURCHASE_SELECTION;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
169 object.u.generic.cargo_type = cargo_type;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
170 object.u.generic.default_selection = default_selection;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
171 object.u.generic.src_industry = src_industry;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
172 object.u.generic.dst_industry = dst_industry;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
173 object.u.generic.distance = distance;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
174 object.u.generic.event = event;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
175 object.u.generic.count = count;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
176 object.u.generic.station_size = station_size;
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
177
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
178 return GetGenericCallbackResult(feature, &object, file);
50768dea0a8b (svn r12122) -Codechange: Add framework for generic feature callbacks, along with some parts for AI use.
peter1138 <peter1138@openttd.org>
parents:
diff changeset
179 }