Files
@ r17467:2106b5d6fd53
Branch filter:
Location: cpp/openttd-patchpack/source/src/newgrf_canal.cpp - annotation
r17467:2106b5d6fd53
4.7 KiB
text/x-c
(svn r22232) -Update from WebTranslator v3.0:
german - 20 changes by lugo
portuguese - 1 changes by JayCity
slovak - 1 changes by micropro_cz
german - 20 changes by lugo
portuguese - 1 changes by JayCity
slovak - 1 changes by micropro_cz
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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | r6583:63b4cb964287 r6583:63b4cb964287 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r9111:983de9c5a848 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r8368:229f823c854a r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r8372:59d73d58fc53 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r8471:0c8cd6eb92d6 r8471:0c8cd6eb92d6 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r11297:fb7ba0ef18bc r16999:6b6eac34f8c2 r16999:6b6eac34f8c2 r16999:6b6eac34f8c2 r16999:6b6eac34f8c2 r16999:6b6eac34f8c2 r16999:6b6eac34f8c2 r6583:63b4cb964287 r11297:fb7ba0ef18bc r11297:fb7ba0ef18bc r8368:229f823c854a r11297:fb7ba0ef18bc r17000:3501c710c68c r6583:63b4cb964287 r6583:63b4cb964287 r16464:ae3f342df07b r6583:63b4cb964287 r6583:63b4cb964287 r11163:407814b6138f r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r11985:d8202dea2203 r6583:63b4cb964287 r11985:d8202dea2203 r6583:63b4cb964287 r11985:d8202dea2203 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r9750:1e2535e15958 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r7327:28855024ff6c r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r8756:3b4554f1d3d4 r9750:1e2535e15958 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r17138:5078c9240593 r17138:5078c9240593 r17138:5078c9240593 r17138:5078c9240593 r17138:5078c9240593 r17138:5078c9240593 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r6583:63b4cb964287 r9750:1e2535e15958 r6583:63b4cb964287 r11991:9a2b087e564c r11985:d8202dea2203 r6583:63b4cb964287 r11985:d8202dea2203 r6583:63b4cb964287 r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15991:9b390068ea00 r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc r15677:fa81b10db8cc | /* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file newgrf_canal.cpp Implementation of NewGRF canals. */
#include "stdafx.h"
#include "debug.h"
#include "newgrf_spritegroup.h"
#include "newgrf_canal.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) {
/* Height of tile */
case 0x80: {
uint z = GetTileZ(tile) / TILE_HEIGHT;
/* Return consistent height within locks */
if (IsTileType(tile, MP_WATER) && IsLock(tile) && GetSection(tile) == LOCK_UPPER) z--;
return z;
}
/* Terrain type */
case 0x81: return GetTerrainType(tile);
/* Random data for river or canal tiles, otherwise zero */
case 0x83: return IsTileType(tile, MP_WATER) ? GetWaterTileRandomBits(tile) : 0;
}
DEBUG(grf, 1, "Unhandled canal variable 0x%02X", variable);
*available = false;
return UINT_MAX;
}
static const SpriteGroup *CanalResolveReal(const ResolverObject *object, const RealSpriteGroup *group)
{
if (group->num_loaded == 0) return NULL;
return group->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;
}
/**
* Lookup the base sprite to use for a canal.
* @param feature Which canal feature we want.
* @param tile Tile index of canal, if appropriate.
* @return Base sprite returned by GRF, or 0 if none.
*/
SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile)
{
ResolverObject object;
const SpriteGroup *group;
NewCanalResolver(&object, tile, _water_feature[feature].grffile);
group = SpriteGroup::Resolve(_water_feature[feature].group, &object);
if (group == NULL) return 0;
return group->GetResult();
}
/**
* Run a specific callback for canals.
* @param callback Callback ID.
* @param param1 Callback parameter 1.
* @param param2 Callback parameter 2.
* @param feature For which feature to run the callback.
* @param tile Tile index of canal.
* @return Callback result or CALLBACK_FAILED if the callback failed.
*/
static uint16 GetCanalCallback(CallbackID callback, uint32 param1, uint32 param2, CanalFeature feature, TileIndex tile)
{
ResolverObject object;
const SpriteGroup *group;
NewCanalResolver(&object, tile, _water_feature[feature].grffile);
object.callback = callback;
object.callback_param1 = param1;
object.callback_param2 = param2;
group = SpriteGroup::Resolve(_water_feature[feature].group, &object);
if (group == NULL) return CALLBACK_FAILED;
return group->GetCallbackResult();
}
/**
* Get the new sprite offset for a water tile.
* @param tile Tile index of the canal/water tile.
* @param feature For which feature to get the new sprite offset.
* @param cur_offset Current sprite offset.
* @return New sprite offset.
*/
uint GetCanalSpriteOffset(CanalFeature feature, TileIndex tile, uint cur_offset)
{
if (HasBit(_water_feature[feature].callback_mask, CBM_CANAL_SPRITE_OFFSET)) {
uint16 cb = GetCanalCallback(CBID_CANALS_SPRITE_OFFSET, cur_offset, 0, feature, tile);
if (cb != CALLBACK_FAILED) return cur_offset + cb;
}
return cur_offset;
}
|