Files
@ r9859:8c15dba58099
Branch filter:
Location: cpp/openttd-patchpack/source/src/newgrf_canal.cpp
r9859:8c15dba58099
2.4 KiB
text/x-c
(svn r14004) -Codechange: Clean of drop down lists.
Move empty item drawing to base ListItem Draw() function.
Remove String() from base class.
Pass correct width to Draw().
Move empty item drawing to base ListItem Draw() function.
Remove String() from base class.
Pass correct width to Draw().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | /* $Id$ */
/** @file newgrf_canal.cpp Implementation of NewGRF canals. */
#include "stdafx.h"
#include "openttd.h"
#include "variables.h"
#include "landscape.h"
#include "debug.h"
#include "newgrf.h"
#include "newgrf_callbacks.h"
#include "newgrf_commons.h"
#include "newgrf_spritegroup.h"
#include "newgrf_canal.h"
#include "tile_map.h"
#include "water_map.h"
/** Table of canal 'feature' sprite groups */
WaterFeature _water_feature[CF_END];
/* Random bits and triggers are not supported for canals, so the following
* three functions are stubs. */
static uint32 CanalGetRandomBits(const ResolverObject *object)
{
/* Return random bits only for water tiles, not station tiles */
return IsTileType(object->u.canal.tile, MP_WATER) ? GetWaterTileRandomBits(object->u.canal.tile) : 0;
}
static uint32 CanalGetTriggers(const ResolverObject *object)
{
return 0;
}
static void CanalSetTriggers(const ResolverObject *object, int triggers)
{
return;
}
static uint32 CanalGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available)
{
TileIndex tile = object->u.canal.tile;
switch (variable) {
case 0x80:
return GetTileZ(tile) / TILE_HEIGHT;
case 0x81:
return GetTerrainType(tile);
case 0x83:
return GetWaterTileRandomBits(tile);
}
DEBUG(grf, 1, "Unhandled canal property 0x%02X", variable);
*available = false;
return 0;
}
static const SpriteGroup *CanalResolveReal(const ResolverObject *object, const SpriteGroup *group)
{
if (group->g.real.num_loaded == 0) return NULL;
return group->g.real.loaded[0];
}
static void NewCanalResolver(ResolverObject *res, TileIndex tile, const GRFFile *grffile)
{
res->GetRandomBits = &CanalGetRandomBits;
res->GetTriggers = &CanalGetTriggers;
res->SetTriggers = &CanalSetTriggers;
res->GetVariable = &CanalGetVariable;
res->ResolveReal = &CanalResolveReal;
res->u.canal.tile = tile;
res->callback = CBID_NO_CALLBACK;
res->callback_param1 = 0;
res->callback_param2 = 0;
res->last_value = 0;
res->trigger = 0;
res->reseed = 0;
res->count = 0;
res->grffile = grffile;
}
SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile)
{
ResolverObject object;
const SpriteGroup *group;
NewCanalResolver(&object, tile, _water_feature[feature].grffile);
group = Resolve(_water_feature[feature].group, &object);
if (group == NULL || group->type != SGT_RESULT) return 0;
return group->g.result.sprite;
}
|