rubidium@8144: /* $Id$ */ rubidium@8144: rubidium@9009: /** @file effectvehicle_base.h Base class for all effect vehicles. */ rubidium@8144: rubidium@9009: #ifndef EFFECTVEHICLE_BASE_H rubidium@9009: #define EFFECTVEHICLE_BASE_H rubidium@8144: rubidium@9009: #include "vehicle_base.h" rubidium@8144: rubidium@8144: /** rubidium@8144: * This class 'wraps' Vehicle; you do not actually instantiate this class. rubidium@8144: * You create a Vehicle using AllocateVehicle, so it is added to the pool rubidium@8144: * and you reinitialize that to a Train using: rubidium@8144: * v = new (v) Train(); rubidium@8144: * rubidium@8144: * As side-effect the vehicle type is set correctly. rubidium@8144: * rubidium@8144: * A special vehicle is one of the following: rubidium@8144: * - smoke rubidium@8144: * - electric sparks for trains rubidium@8144: * - explosions rubidium@8144: * - bulldozer (road works) rubidium@8144: * - bubbles (industry) rubidium@8144: */ rubidium@9008: struct EffectVehicle : public Vehicle { rubidium@8144: /** Initializes the Vehicle to a special vehicle */ rubidium@9008: EffectVehicle() { this->type = VEH_EFFECT; } rubidium@8144: rubidium@8144: /** We want to 'destruct' the right class. */ rubidium@9008: virtual ~EffectVehicle() {} rubidium@8144: rubidium@8144: const char *GetTypeString() const { return "special vehicle"; } rubidium@8144: void UpdateDeltaXY(Direction direction); rubidium@8144: void Tick(); rubidium@8144: }; rubidium@8144: rubidium@9009: #endif /* EFFECTVEHICLE_BASE_H */