From 5174d3adfe9e3b120fd2c50847c7f9cf772a702b Mon Sep 17 00:00:00 2001 From: Darkvater Date: Sat, 14 May 2005 12:36:16 +0000 Subject: (svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks" --- vehicle.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'vehicle.c') diff --git a/vehicle.c b/vehicle.c index 025bb0679..a705ed93b 100644 --- a/vehicle.c +++ b/vehicle.c @@ -501,6 +501,28 @@ bool CanFillVehicle(Vehicle *v) return false; } +/** Check if a given vehicle (type) can be refitted to a given cargo + * @param *v vehicle to check + * @param cid_to check refit to this cargo-type + * @return true if it is possible, false otherwise + */ +bool CanRefitTo(const Vehicle *v, CargoID cid_to) +{ + CargoID cid = _global_cargo_id[_opt_ptr->landscape][cid_to]; + + if (cid == GC_INVALID) return false; + + if (_engine_refit_masks[v->engine_type]) { + if (!HASBIT(_engine_refit_masks[v->engine_type], cid)) return false; + } else { + /* If we are talking about normal vehicles (no newgrf), you can only refit engines */ + if (v->type == VEH_Train && (RailVehInfo(v->engine_type)->flags & RVI_WAGON)) return false; + if (!HASBIT(_default_refitmasks[v->type - VEH_Train], cid)) return false; + } + + return true; +} + static void DoDrawVehicle(Vehicle *v) { uint32 image = v->cur_image; -- cgit v1.2.3-70-g09d2