Mercurial > hg > openttd
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 |
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 } |