OpenTTD Source 20241224-master-gf74b0cf984
effectvehicle.cpp File Reference

Implementation of everything generic to vehicles. More...

#include "stdafx.h"
#include "landscape.h"
#include "core/random_func.hpp"
#include "industry_map.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "animated_tile_func.h"
#include "effectvehicle_func.h"
#include "effectvehicle_base.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  BulldozerMovement
 
struct  BubbleMovement
 
struct  EffectProcs
 

Macros

#define MK(x, y, z, i)   { x, y, z, i }
 
#define ME(i)   { i, 4, 0, 0 }
 

Functions

static bool IncrementSprite (EffectVehicle *v, SpriteID last)
 Increment the sprite unless it has reached the end of the animation.
 
static void ChimneySmokeInit (EffectVehicle *v)
 
static bool ChimneySmokeTick (EffectVehicle *v)
 
static void SteamSmokeInit (EffectVehicle *v)
 
static bool SteamSmokeTick (EffectVehicle *v)
 
static void DieselSmokeInit (EffectVehicle *v)
 
static bool DieselSmokeTick (EffectVehicle *v)
 
static void ElectricSparkInit (EffectVehicle *v)
 
static bool ElectricSparkTick (EffectVehicle *v)
 
static void SmokeInit (EffectVehicle *v)
 
static bool SmokeTick (EffectVehicle *v)
 
static void ExplosionLargeInit (EffectVehicle *v)
 
static bool ExplosionLargeTick (EffectVehicle *v)
 
static void BreakdownSmokeInit (EffectVehicle *v)
 
static bool BreakdownSmokeTick (EffectVehicle *v)
 
static void ExplosionSmallInit (EffectVehicle *v)
 
static bool ExplosionSmallTick (EffectVehicle *v)
 
static void BulldozerInit (EffectVehicle *v)
 
static bool BulldozerTick (EffectVehicle *v)
 
static void BubbleInit (EffectVehicle *v)
 
static bool BubbleTick (EffectVehicle *v)
 
EffectVehicleCreateEffectVehicle (int x, int y, int z, EffectVehicleType type)
 Create an effect vehicle at a particular location.
 
EffectVehicleCreateEffectVehicleAbove (int x, int y, int z, EffectVehicleType type)
 Create an effect vehicle above a particular location.
 
EffectVehicleCreateEffectVehicleRel (const Vehicle *v, int x, int y, int z, EffectVehicleType type)
 Create an effect vehicle above a particular vehicle.
 

Variables

static const BulldozerMovement _bulldozer_movement []
 
struct { 
 
   int8_t   x 
 
   int8_t   y 
 
_inc_by_dir [] 
 
static const BubbleMovement _bubble_float_sw []
 
static const BubbleMovement _bubble_float_ne []
 
static const BubbleMovement _bubble_float_se []
 
static const BubbleMovement _bubble_float_nw []
 
static const BubbleMovement _bubble_burst []
 
static const BubbleMovement _bubble_absorb []
 
static const BubbleMovement *const _bubble_movement []
 
static std::array< EffectProcs, EV_END > _effect_procs
 Per-EffectVehicleType handling.
 

Detailed Description

Implementation of everything generic to vehicles.

Definition in file effectvehicle.cpp.

Macro Definition Documentation

◆ ME

#define ME (   i)    { i, 4, 0, 0 }

Definition at line 327 of file effectvehicle.cpp.

◆ MK

#define MK (   x,
  y,
  z,
 
)    { x, y, z, i }

Definition at line 326 of file effectvehicle.cpp.

Function Documentation

◆ BreakdownSmokeInit()

static void BreakdownSmokeInit ( EffectVehicle v)
static

Definition at line 194 of file effectvehicle.cpp.

◆ BreakdownSmokeTick()

static bool BreakdownSmokeTick ( EffectVehicle v)
static

Definition at line 200 of file effectvehicle.cpp.

◆ BubbleInit()

static void BubbleInit ( EffectVehicle v)
static

Definition at line 312 of file effectvehicle.cpp.

◆ BubbleTick()

static bool BubbleTick ( EffectVehicle v)
static

Definition at line 469 of file effectvehicle.cpp.

◆ BulldozerInit()

static void BulldozerInit ( EffectVehicle v)
static

Definition at line 239 of file effectvehicle.cpp.

◆ BulldozerTick()

static bool BulldozerTick ( EffectVehicle v)
static

Definition at line 286 of file effectvehicle.cpp.

◆ ChimneySmokeInit()

static void ChimneySmokeInit ( EffectVehicle v)
static

Definition at line 39 of file effectvehicle.cpp.

◆ ChimneySmokeTick()

static bool ChimneySmokeTick ( EffectVehicle v)
static

Definition at line 46 of file effectvehicle.cpp.

◆ CreateEffectVehicle()

EffectVehicle * CreateEffectVehicle ( int  x,
int  y,
int  z,
EffectVehicleType  type 
)

Create an effect vehicle at a particular location.

Parameters
xThe x location on the map.
yThe y location on the map.
zThe z location on the map.
typeThe type of effect vehicle.
Returns
The effect vehicle.

Definition at line 566 of file effectvehicle.cpp.

References _effect_procs, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::CanAllocateItem(), Vehicle::subtype, Vehicle::tile, EffectVehicle::UpdateDeltaXY(), Vehicle::UpdatePositionAndViewport(), Vehicle::vehstatus, VS_UNCLICKABLE, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

Referenced by CreateEffectVehicleAbove(), and CreateEffectVehicleRel().

◆ CreateEffectVehicleAbove()

EffectVehicle * CreateEffectVehicleAbove ( int  x,
int  y,
int  z,
EffectVehicleType  type 
)

Create an effect vehicle above a particular location.

Parameters
xThe x location on the map.
yThe y location on the map.
zThe offset from the ground.
typeThe type of effect vehicle.
Returns
The effect vehicle.

Definition at line 594 of file effectvehicle.cpp.

References Clamp(), CreateEffectVehicle(), GetSlopePixelZ(), Map::MaxX(), Map::MaxY(), and TILE_SIZE.

Referenced by CmdClearArea(), DisasterTick_Aircraft(), and DisasterTick_Big_Ufo_Destroyer().

◆ CreateEffectVehicleRel()

EffectVehicle * CreateEffectVehicleRel ( const Vehicle v,
int  x,
int  y,
int  z,
EffectVehicleType  type 
)

Create an effect vehicle above a particular vehicle.

Parameters
vThe vehicle to base the position on.
xThe x offset to the vehicle.
yThe y offset to the vehicle.
zThe z offset to the vehicle.
typeThe type of effect vehicle.
Returns
The effect vehicle.

Definition at line 610 of file effectvehicle.cpp.

References CreateEffectVehicle(), Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

Referenced by CrashAirplane(), DisasterTick_Big_Ufo_Destroyer(), DisasterTick_Ufo(), DisasterTick_Zeppeliner(), FloodVehicle(), HandleAircraftSmoke(), Vehicle::HandleBreakdown(), HandleCrashedAircraft(), HandleCrashedTrain(), RoadVehIsCrashed(), Vehicle::ShowVisualEffect(), and SpawnAdvancedVisualEffect().

◆ DieselSmokeInit()

static void DieselSmokeInit ( EffectVehicle v)
static

Definition at line 97 of file effectvehicle.cpp.

◆ DieselSmokeTick()

static bool DieselSmokeTick ( EffectVehicle v)
static

Definition at line 103 of file effectvehicle.cpp.

◆ ElectricSparkInit()

static void ElectricSparkInit ( EffectVehicle v)
static

Definition at line 121 of file effectvehicle.cpp.

◆ ElectricSparkTick()

static bool ElectricSparkTick ( EffectVehicle v)
static

Definition at line 127 of file effectvehicle.cpp.

◆ ExplosionLargeInit()

static void ExplosionLargeInit ( EffectVehicle v)
static

Definition at line 174 of file effectvehicle.cpp.

◆ ExplosionLargeTick()

static bool ExplosionLargeTick ( EffectVehicle v)
static

Definition at line 180 of file effectvehicle.cpp.

◆ ExplosionSmallInit()

static void ExplosionSmallInit ( EffectVehicle v)
static

Definition at line 219 of file effectvehicle.cpp.

◆ ExplosionSmallTick()

static bool ExplosionSmallTick ( EffectVehicle v)
static

Definition at line 225 of file effectvehicle.cpp.

◆ IncrementSprite()

static bool IncrementSprite ( EffectVehicle v,
SpriteID  last 
)
static

Increment the sprite unless it has reached the end of the animation.

Parameters
vVehicle to increment sprite of.
lastLast sprite of animation.
Returns
true if the sprite was incremented, false if the end was reached.

Definition at line 29 of file effectvehicle.cpp.

References PalSpriteID::sprite, Vehicle::sprite_cache, and MutableSpriteCache::sprite_seq.

◆ SmokeInit()

static void SmokeInit ( EffectVehicle v)
static

Definition at line 144 of file effectvehicle.cpp.

◆ SmokeTick()

static bool SmokeTick ( EffectVehicle v)
static

Definition at line 150 of file effectvehicle.cpp.

◆ SteamSmokeInit()

static void SteamSmokeInit ( EffectVehicle v)
static

Definition at line 67 of file effectvehicle.cpp.

◆ SteamSmokeTick()

static bool SteamSmokeTick ( EffectVehicle v)
static

Definition at line 73 of file effectvehicle.cpp.

Variable Documentation

◆ _bubble_absorb

const BubbleMovement _bubble_absorb[]
static

Definition at line 370 of file effectvehicle.cpp.

◆ _bubble_burst

const BubbleMovement _bubble_burst[]
static
Initial value:
= {
MK(0, 0, 1, 2),
MK(0, 0, 1, 7),
MK(0, 0, 1, 8),
MK(0, 0, 1, 9),
}

Definition at line 362 of file effectvehicle.cpp.

◆ _bubble_float_ne

const BubbleMovement _bubble_float_ne[]
static
Initial value:
= {
MK( 0, 0, 1, 0),
MK(-1, 0, 1, 1),
MK( 0, 0, 1, 0),
MK(-1, 0, 1, 2),
}

Definition at line 338 of file effectvehicle.cpp.

◆ _bubble_float_nw

const BubbleMovement _bubble_float_nw[]
static
Initial value:
= {
MK(0, 0, 1, 0),
MK(0, -1, 1, 1),
MK(0, 0, 1, 0),
MK(0, -1, 1, 2),
}

Definition at line 354 of file effectvehicle.cpp.

◆ _bubble_float_se

const BubbleMovement _bubble_float_se[]
static
Initial value:
= {
MK(0, 0, 1, 0),
MK(0, 1, 1, 1),
MK(0, 0, 1, 0),
MK(0, 1, 1, 2),
}

Definition at line 346 of file effectvehicle.cpp.

◆ _bubble_float_sw

const BubbleMovement _bubble_float_sw[]
static
Initial value:
= {
MK(0, 0, 1, 0),
MK(1, 0, 1, 1),
MK(0, 0, 1, 0),
MK(1, 0, 1, 2),
}

Definition at line 329 of file effectvehicle.cpp.

◆ _bubble_movement

const BubbleMovement* const _bubble_movement[]
static
Initial value:
= {
_bubble_float_sw,
_bubble_float_ne,
_bubble_float_se,
_bubble_float_nw,
_bubble_burst,
_bubble_absorb,
}

Definition at line 460 of file effectvehicle.cpp.

◆ _bulldozer_movement

const BulldozerMovement _bulldozer_movement[]
static
Initial value:
= {
{ 0, 0, 4 },
{ 3, 3, 4 },
{ 2, 2, 7 },
{ 0, 2, 7 },
{ 1, 1, 3 },
{ 2, 2, 7 },
{ 0, 2, 7 },
{ 1, 1, 3 },
{ 2, 2, 7 },
{ 0, 2, 7 },
{ 3, 3, 6 },
{ 2, 2, 6 },
{ 1, 1, 7 },
{ 3, 1, 7 },
{ 0, 0, 3 },
{ 1, 1, 7 },
{ 3, 1, 7 },
{ 0, 0, 3 },
{ 1, 1, 7 },
{ 3, 1, 7 }
}

Definition at line 253 of file effectvehicle.cpp.

◆ _effect_procs

std::array<EffectProcs, EV_END> _effect_procs
static
Initial value:
= {{
{ ChimneySmokeInit, ChimneySmokeTick, TO_INDUSTRIES },
{ SteamSmokeInit, SteamSmokeTick, TO_INVALID },
{ DieselSmokeInit, DieselSmokeTick, TO_INVALID },
{ ElectricSparkInit, ElectricSparkTick, TO_INVALID },
{ SmokeInit, SmokeTick, TO_INVALID },
{ ExplosionLargeInit, ExplosionLargeTick, TO_INVALID },
{ BreakdownSmokeInit, BreakdownSmokeTick, TO_INVALID },
{ ExplosionSmallInit, ExplosionSmallTick, TO_INVALID },
{ BulldozerInit, BulldozerTick, TO_INVALID },
{ BubbleInit, BubbleTick, TO_INDUSTRIES },
{ SmokeInit, SmokeTick, TO_INVALID },
{ SmokeInit, SmokeTick, TO_INDUSTRIES },
}}
@ TO_INVALID
Invalid transparency option.
@ TO_INDUSTRIES
industries

Per-EffectVehicleType handling.

Definition at line 543 of file effectvehicle.cpp.

Referenced by CreateEffectVehicle(), EffectVehicle::GetTransparencyOption(), and EffectVehicle::Tick().

◆ [struct]

const struct { ... } _inc_by_dir[]
Initial value:
= {
{ -1, 0 },
{ 0, 1 },
{ 1, 0 },
{ 0, -1 }
}

◆ x

int8_t x

Definition at line 277 of file effectvehicle.cpp.

◆ y

int8_t y

Definition at line 278 of file effectvehicle.cpp.