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
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
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 }