Merge branch 'master' into jgrpp-beta
# Conflicts: # src/command.cpp # src/console_cmds.cpp # src/group_gui.cpp # src/lang/catalan.txt # src/lang/czech.txt # src/lang/danish.txt # src/lang/greek.txt # src/lang/hungarian.txt # src/lang/irish.txt # src/lang/japanese.txt # src/lang/luxembourgish.txt # src/lang/norwegian_bokmal.txt # src/lang/romanian.txt # src/lang/russian.txt # src/lang/serbian.txt # src/lang/simplified_chinese.txt # src/lang/slovak.txt # src/lang/spanish_MX.txt # src/lang/swedish.txt # src/lang/tamil.txt # src/lang/traditional_chinese.txt # src/lang/turkish.txt # src/lang/ukrainian.txt # src/lang/vietnamese.txt # src/network/network.cpp # src/network/network_client.cpp # src/network/network_func.h # src/network/network_internal.h # src/network/network_server.cpp # src/network/network_server.h # src/saveload/afterload.cpp # src/saveload/newgrf_sl.cpp # src/saveload/saveload.h # src/script/script_instance.cpp # src/toolbar_gui.cpp # src/toolbar_gui.h # src/vehicle_gui.cpp # src/widgets/rail_widget.h # src/widgets/vehicle_widget.h # src/window.cpp
This commit is contained in:
@@ -942,7 +942,7 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
|
||||
case 0x1C: return v->y_pos;
|
||||
case 0x1D: return GB(v->y_pos, 8, 8);
|
||||
case 0x1E: return v->z_pos;
|
||||
case 0x1F: return object->info_view ? DIR_W : v->direction;
|
||||
case 0x1F: return object->rotor_in_gui ? DIR_W : v->direction; // for rotors the spriteset contains animation frames, so NewGRF need a different way to tell the helicopter orientation.
|
||||
case 0x20: break; // not implemented
|
||||
case 0x21: break; // not implemented
|
||||
case 0x22: break; // not implemented
|
||||
@@ -1193,17 +1193,17 @@ static const GRFFile *GetEngineGrfFile(EngineID engine_type)
|
||||
* @param engine_type Engine type
|
||||
* @param v %Vehicle being resolved.
|
||||
* @param wagon_override Application of wagon overrides.
|
||||
* @param info_view Indicates if the item is being drawn in an info window.
|
||||
* @param rotor_in_gui Helicopter rotor is drawn in GUI.
|
||||
* @param callback Callback ID.
|
||||
* @param callback_param1 First parameter (var 10) of the callback.
|
||||
* @param callback_param2 Second parameter (var 18) of the callback.
|
||||
*/
|
||||
VehicleResolverObject::VehicleResolverObject(EngineID engine_type, const Vehicle *v, WagonOverride wagon_override, bool info_view,
|
||||
VehicleResolverObject::VehicleResolverObject(EngineID engine_type, const Vehicle *v, WagonOverride wagon_override, bool rotor_in_gui,
|
||||
CallbackID callback, uint32 callback_param1, uint32 callback_param2)
|
||||
: ResolverObject(GetEngineGrfFile(engine_type), callback, callback_param1, callback_param2),
|
||||
self_scope(*this, engine_type, v, info_view),
|
||||
parent_scope(*this, engine_type, ((v != nullptr) ? v->First() : v), info_view),
|
||||
relative_scope(*this, engine_type, v, info_view),
|
||||
self_scope(*this, engine_type, v, rotor_in_gui),
|
||||
parent_scope(*this, engine_type, ((v != nullptr) ? v->First() : v), rotor_in_gui),
|
||||
relative_scope(*this, engine_type, v, rotor_in_gui),
|
||||
cached_relative_count(0)
|
||||
{
|
||||
if (wagon_override == WO_SELF) {
|
||||
@@ -1255,7 +1255,7 @@ void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction directio
|
||||
}
|
||||
|
||||
|
||||
void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, bool info_view, EngineImageType image_type, VehicleSpriteSeq *result)
|
||||
void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result)
|
||||
{
|
||||
const Engine *e = Engine::Get(engine);
|
||||
|
||||
@@ -1263,9 +1263,14 @@ void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, bool info
|
||||
assert(e->type == VEH_AIRCRAFT);
|
||||
assert(!(e->u.air.subtype & AIR_CTOL));
|
||||
|
||||
VehicleResolverObject object(engine, v, VehicleResolverObject::WO_SELF, info_view, CBID_NO_CALLBACK);
|
||||
/* We differ from TTDPatch by resolving the sprite using the primary vehicle 'v', and not using the rotor vehicle 'v->Next()->Next()'.
|
||||
* TTDPatch copies some variables between the vehicles each time, to somehow synchronize the rotor vehicle with the primary vehicle.
|
||||
* We use 'rotor_in_gui' to replicate when the variables differ.
|
||||
* But some other variables like 'rotor state' and 'rotor speed' are not available in OpenTTD, while they are in TTDPatch. */
|
||||
bool rotor_in_gui = image_type != EIT_ON_MAP;
|
||||
VehicleResolverObject object(engine, v, VehicleResolverObject::WO_SELF, rotor_in_gui, CBID_NO_CALLBACK);
|
||||
result->Clear();
|
||||
uint rotor_pos = v == nullptr || info_view ? 0 : v->Next()->Next()->state;
|
||||
uint rotor_pos = v == nullptr || rotor_in_gui ? 0 : v->Next()->Next()->state;
|
||||
|
||||
bool sprite_stack = HasBit(e->info.misc_flags, EF_SPRITE_STACK);
|
||||
uint max_stack = sprite_stack ? lengthof(result->seq) : 1;
|
||||
|
Reference in New Issue
Block a user