* Determines the livery for a vehicle. * @param engine_type EngineID of the vehicle * @param company Owner of the vehicle * @param parent_engine_type EngineID of the front vehicle. VehicleID::Invalid() if vehicle is at front itself. * @param v the vehicle. nullptr if in purchase list etc. * @param livery_setting The livery settings to use for acquiring the livery information. * @return liver
| 2043 | * @return livery to use |
| 2044 | */ |
| 2045 | const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v, uint8_t livery_setting) |
| 2046 | { |
| 2047 | const Company *c = Company::Get(company); |
| 2048 | LiveryScheme scheme = LS_DEFAULT; |
| 2049 | |
| 2050 | if (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company)) { |
| 2051 | if (v != nullptr) { |
| 2052 | const Group *g = Group::GetIfValid(v->First()->group_id); |
| 2053 | if (g != nullptr) { |
| 2054 | /* Traverse parents until we find a livery or reach the top */ |
| 2055 | while (!g->livery.in_use.Any({Livery::Flag::Primary, Livery::Flag::Secondary}) && g->parent != GroupID::Invalid()) { |
| 2056 | g = Group::Get(g->parent); |
| 2057 | } |
| 2058 | if (g->livery.in_use.Any({Livery::Flag::Primary, Livery::Flag::Secondary})) return &g->livery; |
| 2059 | } |
| 2060 | } |
| 2061 | |
| 2062 | /* The default livery is always available for use, but its in_use flag determines |
| 2063 | * whether any _other_ liveries are in use. */ |
| 2064 | if (c->livery[LS_DEFAULT].in_use.Any({Livery::Flag::Primary, Livery::Flag::Secondary})) { |
| 2065 | /* Determine the livery scheme to use */ |
| 2066 | scheme = GetEngineLiveryScheme(engine_type, parent_engine_type, v); |
| 2067 | } |
| 2068 | } |
| 2069 | |
| 2070 | return &c->livery[scheme]; |
| 2071 | } |
| 2072 | |
| 2073 | |
| 2074 | static PaletteID GetEngineColourMap(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v) |
no test coverage detected