Mercurial > hg > openttd
annotate src/newgrf_generic.cpp @ 10480:649ba332458f draft
(svn r14735) -Codechange: remove a bit of bit-waste in the map array (without changing the map array) and make the CompanyIDs contiguous.
-Note: 15 should be enough for now... making it any more means adding more bytes to the map array and thus wasting more bits instead of reducing the bit waste.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Wed, 24 Dec 2008 09:53:15 +0000 |
parents | 0654bf387d06 |
children | a4e5b5d2837c |
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 |
9111
d48433370037
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium <rubidium@openttd.org>
parents:
9020
diff
changeset
|
3 /** @file newgrf_generic.cpp Handling of generic feature callbacks. */ |
d48433370037
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium <rubidium@openttd.org>
parents:
9020
diff
changeset
|
4 |
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
|
5 #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
|
6 #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
|
7 #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
|
8 #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
|
9 #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
|
10 #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
|
11 #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
|
12 #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
|
13 #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
|
14 #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
|
15 #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
|
16 #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
|
17 |
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 |
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 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
|
20 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
|
21 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 |
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 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
|
24 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
|
25 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
|
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 }; |
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 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
|
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 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
|
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 |
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 * 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
|
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 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
|
38 { |
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 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
|
40 _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
|
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 |
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 /** |
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 * 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
|
47 * @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
|
48 * @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
|
49 * @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
|
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 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
|
52 { |
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 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
|
54 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
|
55 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
|
56 } |
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 |
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 /* 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
|
59 * 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
|
60 * 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
|
61 _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
|
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 |
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 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
|
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 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
|
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 |
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 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
|
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 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
|
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 |
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 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
|
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 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
|
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 |
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 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
|
84 { |
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 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
|
86 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
|
87 |
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 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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 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
|
96 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
|
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 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
|
99 } |
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 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
|
102 |
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 *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
|
104 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
|
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 |
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 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
|
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 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
|
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 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
|
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 |
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 |
9750
0654bf387d06
(svn r13885) -Fix [FS#2168]: Var 0x7F is not feature-specific.
frosch <frosch@openttd.org>
parents:
9111
diff
changeset
|
116 static inline void NewGenericResolver(ResolverObject *res, const GRFFile *grffile) |
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
|
117 { |
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->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
|
119 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
|
120 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
|
121 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
|
122 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
|
123 |
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 = 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 res->reseed = 0; |
8756
ae0ec91bb55e
(svn r12452) -Feature: [NewGRF] Add random action 2 type 84. For vehicles only.
glx <glx@openttd.org>
parents:
8544
diff
changeset
|
130 res->count = 0; |
9750
0654bf387d06
(svn r13885) -Fix [FS#2168]: Var 0x7F is not feature-specific.
frosch <frosch@openttd.org>
parents:
9111
diff
changeset
|
131 res->grffile = grffile; |
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
|
132 } |
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 |
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 |
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 /** 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
|
136 * 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
|
137 * @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
|
138 * @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
|
139 * @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
|
140 * @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
|
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 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
|
143 { |
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 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
|
145 |
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 /* 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 |
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 /* 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
|
153 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
|
154 |
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 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
|
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 /* 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
|
159 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
|
160 } |
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 |
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 * '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
|
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 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
|
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 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
|
169 |
9750
0654bf387d06
(svn r13885) -Fix [FS#2168]: Var 0x7F is not feature-specific.
frosch <frosch@openttd.org>
parents:
9111
diff
changeset
|
170 NewGenericResolver(&object, *file); |
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
|
171 |
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.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
|
173 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
|
174 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
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 |
9020
94bb527c979f
(svn r12819) -Codechange: handle more NewGRFs in the same way as TTDP does it, i.e. testing the low bits for 0xFF or 0 instead of all bits.
rubidium <rubidium@openttd.org>
parents:
8756
diff
changeset
|
182 uint16 callback = GetGenericCallbackResult(feature, &object, file); |
94bb527c979f
(svn r12819) -Codechange: handle more NewGRFs in the same way as TTDP does it, i.e. testing the low bits for 0xFF or 0 instead of all bits.
rubidium <rubidium@openttd.org>
parents:
8756
diff
changeset
|
183 if (callback != CALLBACK_FAILED) callback = GB(callback, 0, 8); |
94bb527c979f
(svn r12819) -Codechange: handle more NewGRFs in the same way as TTDP does it, i.e. testing the low bits for 0xFF or 0 instead of all bits.
rubidium <rubidium@openttd.org>
parents:
8756
diff
changeset
|
184 return callback; |
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
|
185 } |