newgrf_engine.c
changeset 3695 e1d5608f4d32
parent 3693 c154dbd20439
child 3696 8bc4db454d1c
equal deleted inserted replaced
3694:c53e605f23ce 3695:e1d5608f4d32
   120 	for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
   120 	for (engine = 0; engine < TOTAL_NUM_ENGINES; engine++) {
   121 		for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) {
   121 		for (cargo = 0; cargo < NUM_GLOBAL_CID; cargo++) {
   122 			engine_custom_sprites[engine][cargo] = NULL;
   122 			engine_custom_sprites[engine][cargo] = NULL;
   123 		}
   123 		}
   124 		_engine_grf[engine] = 0;
   124 		_engine_grf[engine] = 0;
       
   125 	}
       
   126 }
       
   127 
       
   128 static const SpriteGroup *heli_rotor_custom_sprites[NUM_AIRCRAFT_ENGINES];
       
   129 
       
   130 /** Load a rotor override sprite group for an aircraft */
       
   131 void SetRotorOverrideSprites(EngineID engine, const SpriteGroup *group)
       
   132 {
       
   133 	assert(engine >= AIRCRAFT_ENGINES_INDEX);
       
   134 	assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES);
       
   135 
       
   136 	if (heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] != NULL) {
       
   137 		DEBUG(grf, 6)("SetRotorOverrideSprites: engine `%d' already has group -- replacing.", engine);
       
   138 	}
       
   139 	heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = group;
       
   140 }
       
   141 
       
   142 /** Unload all rotor override sprite groups */
       
   143 void UnloadRotorOverrideSprites(void)
       
   144 {
       
   145 	EngineID engine;
       
   146 
       
   147 	/* Starting at AIRCRAFT_ENGINES_INDEX may seem pointless, but it means
       
   148 	 * the context of EngineID is correct */
       
   149 	for (engine = AIRCRAFT_ENGINES_INDEX; engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; engine++) {
       
   150 		heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX] = NULL;
   125 	}
   151 	}
   126 }
   152 }
   127 
   153 
   128 void SetEngineGRF(EngineID engine, uint32 grfid)
   154 void SetEngineGRF(EngineID engine, uint32 grfid)
   129 {
   155 {
   433 
   459 
   434 	return group->g.result.sprite + (direction % group->g.result.num_sprites);
   460 	return group->g.result.sprite + (direction % group->g.result.num_sprites);
   435 }
   461 }
   436 
   462 
   437 
   463 
       
   464 SpriteID GetRotorOverrideSprite(EngineID engine, const Vehicle *v)
       
   465 {
       
   466 	const SpriteGroup *group;
       
   467 	ResolverObject object;
       
   468 
       
   469 	assert(engine >= AIRCRAFT_ENGINES_INDEX);
       
   470 	assert(engine < AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES);
       
   471 
       
   472 	/* Only valid for helicopters */
       
   473 	assert((AircraftVehInfo(engine)->subtype & 1) == 0);
       
   474 
       
   475 	NewVehicleResolver(&object, v);
       
   476 
       
   477 	group = heli_rotor_custom_sprites[engine - AIRCRAFT_ENGINES_INDEX];
       
   478 	group = Resolve(group, &object);
       
   479 
       
   480 	if (group == NULL || group->type != SGT_RESULT) return 0;
       
   481 
       
   482 	if (v == NULL) return group->g.result.sprite;
       
   483 
       
   484 	return group->g.result.sprite + v->next->next->u.air.state;
       
   485 }
       
   486 
       
   487 
   438 /**
   488 /**
   439  * Check if a wagon is currently using a wagon override
   489  * Check if a wagon is currently using a wagon override
   440  * @param v The wagon to check
   490  * @param v The wagon to check
   441  * @return true if it is using an override, false otherwise
   491  * @return true if it is using an override, false otherwise
   442  */
   492  */