newgrf_engine.c
changeset 4056 30ceffc75059
parent 4055 2507869fbafe
child 4057 36ceb8e7cbd2
equal deleted inserted replaced
4055:2507869fbafe 4056:30ceffc75059
   658 		case 0x1A: return v->x_pos;
   658 		case 0x1A: return v->x_pos;
   659 		case 0x1B: return v->x_pos & 0xFF;
   659 		case 0x1B: return v->x_pos & 0xFF;
   660 		case 0x1C: return v->y_pos;
   660 		case 0x1C: return v->y_pos;
   661 		case 0x1D: return v->y_pos & 0xFF;
   661 		case 0x1D: return v->y_pos & 0xFF;
   662 		case 0x1E: return v->z_pos;
   662 		case 0x1E: return v->z_pos;
   663 		case 0x1F: return v->direction;
   663 		case 0x1F: return object->info_view ? DIR_W : v->direction;
   664 		case 0x28: return v->cur_image;
   664 		case 0x28: return v->cur_image;
   665 		case 0x29: return v->cur_image & 0xFF;
   665 		case 0x29: return v->cur_image & 0xFF;
   666 		case 0x32: return v->vehstatus;
   666 		case 0x32: return v->vehstatus;
   667 		case 0x33: return v->vehstatus;
   667 		case 0x33: return v->vehstatus;
   668 		case 0x34: return v->cur_speed;
   668 		case 0x34: return v->cur_speed;
   797 	res->ResolveReal   = &VehicleResolveReal;
   797 	res->ResolveReal   = &VehicleResolveReal;
   798 
   798 
   799 	res->u.vehicle.self   = v;
   799 	res->u.vehicle.self   = v;
   800 	res->u.vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v;
   800 	res->u.vehicle.parent = (v != NULL && v->type == VEH_Train) ? GetFirstVehicleInChain(v) : v;
   801 
   801 
       
   802 	res->info_view = false;
       
   803 
   802 	res->callback        = 0;
   804 	res->callback        = 0;
   803 	res->callback_param1 = 0;
   805 	res->callback_param1 = 0;
   804 	res->callback_param2 = 0;
   806 	res->callback_param2 = 0;
   805 	res->last_value      = 0;
   807 	res->last_value      = 0;
   806 	res->trigger         = 0;
   808 	res->trigger         = 0;
   840 
   842 
   841 	return group->g.result.sprite + (direction % group->g.result.num_sprites);
   843 	return group->g.result.sprite + (direction % group->g.result.num_sprites);
   842 }
   844 }
   843 
   845 
   844 
   846 
   845 SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v)
   847 SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v, bool info_view)
   846 {
   848 {
   847 	const SpriteGroup *group;
   849 	const SpriteGroup *group;
   848 	ResolverObject object;
   850 	ResolverObject object;
   849 
   851 
   850 	assert(engine >= AIRCRAFT_ENGINES_INDEX);
   852 	assert(engine >= AIRCRAFT_ENGINES_INDEX);
   853 	/* Only valid for helicopters */
   855 	/* Only valid for helicopters */
   854 	assert(!(AircraftVehInfo(engine)->subtype & AIR_CTOL));
   856 	assert(!(AircraftVehInfo(engine)->subtype & AIR_CTOL));
   855 
   857 
   856 	NewVehicleResolver(&object, v);
   858 	NewVehicleResolver(&object, v);
   857 
   859 
       
   860 	object.info_view = info_view;
       
   861 
   858 	group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX];
   862 	group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX];
   859 	group = Resolve(group, &object);
   863 	group = Resolve(group, &object);
   860 
   864 
   861 	if (group == NULL || group->type != SGT_RESULT) return 0;
   865 	if (group == NULL || group->type != SGT_RESULT) return 0;
   862 
   866 
   863 	if (v == NULL) return group->g.result.sprite;
   867 	if (v == NULL) return group->g.result.sprite;
   864 
   868 
   865 	return group->g.result.sprite + (v->next->next->u.air.state % group->g.result.num_sprites);
   869 	return group->g.result.sprite + (info_view ? 0 : (v->next->next->u.air.state % group->g.result.num_sprites));
   866 }
   870 }
   867 
   871 
   868 
   872 
   869 /**
   873 /**
   870  * Check if a wagon is currently using a wagon override
   874  * Check if a wagon is currently using a wagon override