Zoning: Remove unimplemented modes, fix some whitespace and style issues,
add missing licence headers, move/rename some declarations, fix sprite ID allocation, update to build on trunk.
This commit is contained in:
@@ -193,7 +193,7 @@ static void LoadSpriteTables()
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadGrfFile("innerhighlight.grf", SPR_INNER_HIGHLIGHT_BASE, i++);
|
LoadGrfFile("innerhighlight.grf", SPR_ZONING_INNER_HIGHLIGHT_BASE, i++);
|
||||||
|
|
||||||
/* Initialize the unicode to sprite mapping table */
|
/* Initialize the unicode to sprite mapping table */
|
||||||
InitializeUnicodeGlyphMap();
|
InitializeUnicodeGlyphMap();
|
||||||
|
@@ -4982,7 +4982,5 @@ STR_ZONING_NO_ZONING :Nothing
|
|||||||
STR_ZONING_AUTHORITY :Authority
|
STR_ZONING_AUTHORITY :Authority
|
||||||
STR_ZONING_CAN_BUILD :Where I can't build
|
STR_ZONING_CAN_BUILD :Where I can't build
|
||||||
STR_ZONING_STA_CATCH :Station catchment
|
STR_ZONING_STA_CATCH :Station catchment
|
||||||
STR_ZONING_IND_CATCH :Industry catchment
|
|
||||||
STR_ZONING_BUL_CATCH :City catchment
|
|
||||||
STR_ZONING_BUL_UNSER :Unserved buildings
|
STR_ZONING_BUL_UNSER :Unserved buildings
|
||||||
STR_ZONING_IND_UNSER :Unserved industries
|
STR_ZONING_IND_UNSER :Unserved industries
|
||||||
|
@@ -296,8 +296,18 @@ static const uint16 EMPTY_BOUNDING_BOX_SPRITE_COUNT = 1;
|
|||||||
static const SpriteID SPR_PALETTE_BASE = SPR_EMPTY_BOUNDING_BOX + EMPTY_BOUNDING_BOX_SPRITE_COUNT;
|
static const SpriteID SPR_PALETTE_BASE = SPR_EMPTY_BOUNDING_BOX + EMPTY_BOUNDING_BOX_SPRITE_COUNT;
|
||||||
static const uint16 PALETTE_SPRITE_COUNT = 1;
|
static const uint16 PALETTE_SPRITE_COUNT = 1;
|
||||||
|
|
||||||
|
/* Zoning sprites */
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_BASE = SPR_PALETTE_BASE + PALETTE_SPRITE_COUNT;
|
||||||
|
static const uint16 ZONING_INNER_HIGHLIGHT_SPRITE_COUNT = 32;
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_RED = SPR_ZONING_INNER_HIGHLIGHT_BASE + 19;
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_GREEN = SPR_ZONING_INNER_HIGHLIGHT_BASE + 20;
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_BLACK = SPR_ZONING_INNER_HIGHLIGHT_BASE + 21;
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_LIGHT_BLUE = SPR_ZONING_INNER_HIGHLIGHT_BASE + 22;
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_ORANGE = SPR_ZONING_INNER_HIGHLIGHT_BASE + 23;
|
||||||
|
static const SpriteID SPR_ZONING_INNER_HIGHLIGHT_WHITE = SPR_ZONING_INNER_HIGHLIGHT_BASE + 24;
|
||||||
|
|
||||||
/* From where can we start putting NewGRFs? */
|
/* From where can we start putting NewGRFs? */
|
||||||
static const SpriteID SPR_NEWGRFS_BASE = SPR_PALETTE_BASE + PALETTE_SPRITE_COUNT;
|
static const SpriteID SPR_NEWGRFS_BASE = SPR_ZONING_INNER_HIGHLIGHT_BASE + ZONING_INNER_HIGHLIGHT_SPRITE_COUNT;
|
||||||
|
|
||||||
/* Manager face sprites */
|
/* Manager face sprites */
|
||||||
static const SpriteID SPR_GRADIENT = 874; // background gradient behind manager face
|
static const SpriteID SPR_GRADIENT = 874; // background gradient behind manager face
|
||||||
@@ -1342,16 +1352,6 @@ static const SpriteID SPR_SELECT_SUB_TROPICAL_PUSHED = 4887;
|
|||||||
static const SpriteID SPR_SELECT_TOYLAND = 4888;
|
static const SpriteID SPR_SELECT_TOYLAND = 4888;
|
||||||
static const SpriteID SPR_SELECT_TOYLAND_PUSHED = 4889;
|
static const SpriteID SPR_SELECT_TOYLAND_PUSHED = 4889;
|
||||||
|
|
||||||
/* zoning stuff; dunno where else to put it */
|
|
||||||
|
|
||||||
static const SpriteID SPR_INNER_HIGHLIGHT_BASE = 11000;
|
|
||||||
static const SpriteID SPR_PALETTE_ZONING_RED = SPR_INNER_HIGHLIGHT_BASE + 19;
|
|
||||||
static const SpriteID SPR_PALETTE_ZONING_GREEN = SPR_INNER_HIGHLIGHT_BASE + 20;
|
|
||||||
static const SpriteID SPR_PALETTE_ZONING_BLACK = SPR_INNER_HIGHLIGHT_BASE + 21;
|
|
||||||
static const SpriteID SPR_PALETTE_ZONING_LIGHT_BLUE = SPR_INNER_HIGHLIGHT_BASE + 22;
|
|
||||||
static const SpriteID SPR_PALETTE_ZONING_ORANGE = SPR_INNER_HIGHLIGHT_BASE + 23;
|
|
||||||
static const SpriteID SPR_PALETTE_ZONING_WHITE = SPR_INNER_HIGHLIGHT_BASE + 24;
|
|
||||||
|
|
||||||
/** Cursor sprite numbers */
|
/** Cursor sprite numbers */
|
||||||
|
|
||||||
/* Terraform
|
/* Terraform
|
||||||
@@ -1584,6 +1584,4 @@ static const PaletteID PALETTE_CHURCH_CREAM = 1439; ///< Recolour sprite
|
|||||||
|
|
||||||
static const PaletteID PALETTE_ALL_BLACK = SPR_PALETTE_BASE; ///< Exchange any color by black, needed for painting fictive tiles outside map
|
static const PaletteID PALETTE_ALL_BLACK = SPR_PALETTE_BASE; ///< Exchange any color by black, needed for painting fictive tiles outside map
|
||||||
|
|
||||||
static const SpriteID INVALID_SPRITE_ID = UINT_MAX;
|
|
||||||
|
|
||||||
#endif /* SPRITES_H */
|
#endif /* SPRITES_H */
|
||||||
|
53
src/zoning.h
53
src/zoning.h
@@ -1,39 +1,48 @@
|
|||||||
|
/* $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 zoning.h */
|
/** @file zoning.h */
|
||||||
|
|
||||||
#ifndef ZONING_H_
|
#ifndef ZONING_H
|
||||||
#define ZONING_H_
|
#define ZONING_H
|
||||||
|
|
||||||
#include "openttd.h"
|
|
||||||
#include "tile_cmd.h"
|
#include "tile_cmd.h"
|
||||||
|
#include "company_type.h"
|
||||||
|
|
||||||
enum EvaluationMode {
|
/**
|
||||||
CHECKNOTHING = 0,
|
* Zoning evaluation modes
|
||||||
CHECKOPINION = 1, ///< Check the local authority's opinion.
|
*/
|
||||||
CHECKBUILD = 2, ///< Check wither or not the player can build.
|
enum ZoningEvaluationMode {
|
||||||
CHECKSTACATCH = 3, ///< Check catchment area for stations
|
ZEM_NOTHING = 0, ///< No zoning action selected
|
||||||
CHECKINDCATCH = 4, ///< Check catchment area for industries
|
ZEM_AUTHORITY, ///< Check the local authority's opinion.
|
||||||
CHECKBULCATCH = 5, ///< Check catchment area for buildings
|
ZEM_CAN_BUILD, ///< Check wither or not the player can build.
|
||||||
CHECKBULUNSER = 6, ///< Check for unserved buildings
|
ZEM_STA_CATCH, ///< Check catchment area for stations
|
||||||
CHECKINDUNSER = 7, ///< Check for unserved industries
|
ZEM_BUL_UNSER, ///< Check for unserved buildings
|
||||||
|
ZEM_IND_UNSER, ///< Check for unserved industries
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global Zoning state structure
|
||||||
|
*/
|
||||||
struct Zoning {
|
struct Zoning {
|
||||||
EvaluationMode inner;
|
ZoningEvaluationMode inner;
|
||||||
EvaluationMode outer;
|
ZoningEvaluationMode outer;
|
||||||
int inner_val;
|
|
||||||
int outer_val;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
VARDEF Zoning _zoning;
|
extern Zoning _zoning;
|
||||||
|
|
||||||
SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, EvaluationMode ev_mode);
|
SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, ZoningEvaluationMode ev_mode);
|
||||||
|
|
||||||
int TileZoningEvaluation(TileIndex tile, Owner owner, EvaluationMode ev_mode);
|
int TileZoningEvaluation(TileIndex tile, Owner owner, ZoningEvaluationMode ev_mode);
|
||||||
|
|
||||||
void DrawTileZoning(const TileInfo *ti);
|
void DrawTileZoning(const TileInfo *ti);
|
||||||
|
|
||||||
void ShowZoningToolbar();
|
void ShowZoningToolbar();
|
||||||
|
|
||||||
EvaluationMode GetEvaluationModeFromInt(int ev_mode);
|
#endif /* ZONING_H */
|
||||||
|
|
||||||
#endif /*ZONING_H_*/
|
|
||||||
|
@@ -1,3 +1,11 @@
|
|||||||
|
/* $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 zoning_cmd.cpp */
|
/** @file zoning_cmd.cpp */
|
||||||
|
|
||||||
@@ -8,7 +16,6 @@
|
|||||||
#include "industry.h"
|
#include "industry.h"
|
||||||
#include "gfx_func.h"
|
#include "gfx_func.h"
|
||||||
#include "viewport_func.h"
|
#include "viewport_func.h"
|
||||||
#include "variables.h"
|
|
||||||
#include "map_func.h"
|
#include "map_func.h"
|
||||||
#include "company_func.h"
|
#include "company_func.h"
|
||||||
#include "town_map.h"
|
#include "town_map.h"
|
||||||
@@ -19,6 +26,7 @@
|
|||||||
#include "zoning.h"
|
#include "zoning.h"
|
||||||
|
|
||||||
Zoning _zoning;
|
Zoning _zoning;
|
||||||
|
static const SpriteID ZONING_INVALID_SPRITE_ID = UINT_MAX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw the zoning sprites.
|
* Draw the zoning sprites.
|
||||||
@@ -30,9 +38,11 @@ Zoning _zoning;
|
|||||||
* @param TileInfo ti
|
* @param TileInfo ti
|
||||||
* the tile
|
* the tile
|
||||||
*/
|
*/
|
||||||
void DrawZoningSprites(SpriteID image, SpriteID colour, const TileInfo *ti) {
|
void DrawZoningSprites(SpriteID image, SpriteID colour, const TileInfo *ti)
|
||||||
if ( colour!=INVALID_SPRITE_ID )
|
{
|
||||||
AddSortableSpriteToDraw(image + _tileh_to_sprite[ti->tileh], colour, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7);
|
if (colour != ZONING_INVALID_SPRITE_ID) {
|
||||||
|
AddSortableSpriteToDraw(image + ti->tileh, colour, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,16 +54,16 @@ void DrawZoningSprites(SpriteID image, SpriteID colour, const TileInfo *ti) {
|
|||||||
* the owner of the stations which we need to match again
|
* the owner of the stations which we need to match again
|
||||||
* @return true if a station is found
|
* @return true if a station is found
|
||||||
*/
|
*/
|
||||||
bool IsAreaWithinAcceptanceZoneOfStation(TileArea area, Owner owner) {
|
bool IsAreaWithinAcceptanceZoneOfStation(TileArea area, Owner owner)
|
||||||
|
{
|
||||||
// TODO: Actually do owner check.
|
// TODO: Actually do owner check.
|
||||||
|
|
||||||
int catchment = _settings_game.station.station_spread + (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED);
|
int catchment = _settings_game.station.station_spread + (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED);
|
||||||
|
|
||||||
StationFinder morestations(TileArea(TileXY(TileX(area.tile)-catchment/2, TileY(area.tile)-catchment/2),
|
StationFinder morestations(TileArea(TileXY(TileX(area.tile) - (catchment / 2), TileY(area.tile) - (catchment / 2)),
|
||||||
TileX(area.tile) + area.w + catchment, TileY(area.tile) + area.h + catchment));
|
TileX(area.tile) + area.w + catchment, TileY(area.tile) + area.h + catchment));
|
||||||
|
|
||||||
for ( Station * const *st_iter = morestations.GetStations()->Begin(); st_iter != morestations.GetStations()->End(); ++st_iter ) {
|
for (Station * const *st_iter = morestations.GetStations()->Begin(); st_iter != morestations.GetStations()->End(); ++st_iter) {
|
||||||
Station *st = *st_iter;
|
Station *st = *st_iter;
|
||||||
Rect rect = st->GetCatchmentRect();
|
Rect rect = st->GetCatchmentRect();
|
||||||
return TileArea(TileXY(rect.left, rect.top), TileXY(rect.right, rect.bottom)).Intersects(area);
|
return TileArea(TileXY(rect.left, rect.top), TileXY(rect.right, rect.bottom)).Intersects(area);
|
||||||
@@ -71,21 +81,22 @@ bool IsAreaWithinAcceptanceZoneOfStation(TileArea area, Owner owner) {
|
|||||||
* the owner of the stations
|
* the owner of the stations
|
||||||
* @return true if a station is found
|
* @return true if a station is found
|
||||||
*/
|
*/
|
||||||
bool IsTileWithinAcceptanceZoneOfStation(TileIndex tile, Owner owner) {
|
bool IsTileWithinAcceptanceZoneOfStation(TileIndex tile, Owner owner)
|
||||||
|
{
|
||||||
// TODO: Actually do owner check.
|
// TODO: Actually do owner check.
|
||||||
|
|
||||||
int catchment = _settings_game.station.station_spread + (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED);
|
int catchment = _settings_game.station.station_spread + (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED);
|
||||||
|
|
||||||
StationFinder morestations(TileArea(TileXY(TileX(tile)-catchment/2, TileY(tile)-catchment/2),
|
StationFinder morestations(TileArea(TileXY(TileX(tile) - (catchment / 2), TileY(tile) - (catchment / 2)),
|
||||||
catchment, catchment));
|
catchment, catchment));
|
||||||
|
|
||||||
for ( Station * const *st_iter = morestations.GetStations()->Begin(); st_iter != morestations.GetStations()->End(); ++st_iter ) {
|
for (Station * const *st_iter = morestations.GetStations()->Begin(); st_iter != morestations.GetStations()->End(); ++st_iter) {
|
||||||
Station *st = *st_iter;
|
Station *st = *st_iter;
|
||||||
Rect rect = st->GetCatchmentRect();
|
Rect rect = st->GetCatchmentRect();
|
||||||
if ( (uint)rect.left <= TileX(tile) && TileX(tile) <= (uint)rect.right
|
if ((uint)rect.left <= TileX(tile) && TileX(tile) <= (uint)rect.right
|
||||||
&& (uint)rect.top <= TileY(tile) && TileY(tile) <= (uint)rect.bottom )
|
&& (uint)rect.top <= TileY(tile) && TileY(tile) <= (uint)rect.bottom) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -98,14 +109,17 @@ bool IsTileWithinAcceptanceZoneOfStation(TileIndex tile, Owner owner) {
|
|||||||
* @param Owner owner
|
* @param Owner owner
|
||||||
* @return red if they cannot
|
* @return red if they cannot
|
||||||
*/
|
*/
|
||||||
SpriteID TileZoneCheckBuildEvaluation(TileIndex tile, Owner owner) {
|
SpriteID TileZoneCheckBuildEvaluation(TileIndex tile, Owner owner)
|
||||||
|
{
|
||||||
/* Let's first check for the obvious things you cannot build on */
|
/* Let's first check for the obvious things you cannot build on */
|
||||||
switch ( GetTileType(tile) ) {
|
switch (GetTileType(tile)) {
|
||||||
case MP_INDUSTRY:
|
case MP_INDUSTRY:
|
||||||
case MP_UNMOVABLE:
|
case MP_OBJECT:
|
||||||
case MP_STATION:
|
case MP_STATION:
|
||||||
case MP_HOUSE:
|
case MP_HOUSE:
|
||||||
case MP_TUNNELBRIDGE: return SPR_PALETTE_ZONING_RED;
|
case MP_TUNNELBRIDGE:
|
||||||
|
return SPR_ZONING_INNER_HIGHLIGHT_RED;
|
||||||
|
|
||||||
/* There are only two things you can own (or some else
|
/* There are only two things you can own (or some else
|
||||||
* can own) that you can still build on. i.e. roads and
|
* can own) that you can still build on. i.e. roads and
|
||||||
* railways.
|
* railways.
|
||||||
@@ -117,15 +131,18 @@ SpriteID TileZoneCheckBuildEvaluation(TileIndex tile, Owner owner) {
|
|||||||
* While that being said, it should also check if it
|
* While that being said, it should also check if it
|
||||||
* is not possible to build railway/road on someone
|
* is not possible to build railway/road on someone
|
||||||
* else's/your own road/railway (e.g. the railway track
|
* else's/your own road/railway (e.g. the railway track
|
||||||
* is curved or a cross).*/
|
* is curved or a cross).
|
||||||
|
*/
|
||||||
case MP_ROAD:
|
case MP_ROAD:
|
||||||
case MP_RAILWAY: {
|
case MP_RAILWAY:
|
||||||
if ( GetTileOwner(tile) != owner )
|
if (GetTileOwner(tile) != owner) {
|
||||||
return SPR_PALETTE_ZONING_RED;
|
return SPR_ZONING_INNER_HIGHLIGHT_RED;
|
||||||
else
|
} else {
|
||||||
return INVALID_SPRITE_ID;
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
}
|
}
|
||||||
default: return INVALID_SPRITE_ID;
|
|
||||||
|
default:
|
||||||
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,45 +154,27 @@ SpriteID TileZoneCheckBuildEvaluation(TileIndex tile, Owner owner) {
|
|||||||
* @return black if no opinion, orange if bad,
|
* @return black if no opinion, orange if bad,
|
||||||
* light blue if good or invalid if no town
|
* light blue if good or invalid if no town
|
||||||
*/
|
*/
|
||||||
SpriteID TileZoneCheckOpinionEvaluation(TileIndex tile, Owner owner) {
|
SpriteID TileZoneCheckOpinionEvaluation(TileIndex tile, Owner owner)
|
||||||
|
{
|
||||||
int opinion = 0; // 0: no town, 1: no opinion, 2: bad, 3: good
|
int opinion = 0; // 0: no town, 1: no opinion, 2: bad, 3: good
|
||||||
Town *town = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority);
|
Town *town = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority);
|
||||||
|
|
||||||
if ( town !=NULL ) {
|
if (town != NULL) {
|
||||||
if ( HasBit(town->have_ratings, owner) ) {
|
if (HasBit(town->have_ratings, owner)) {
|
||||||
opinion = ( town->ratings[owner] > 0 ) ? 3 : 2;
|
opinion = (town->ratings[owner] > 0) ? 3 : 2;
|
||||||
} else {
|
} else {
|
||||||
opinion = 1;
|
opinion = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ( opinion ) {
|
switch (opinion) {
|
||||||
case 1: return SPR_PALETTE_ZONING_BLACK; // no opinion
|
case 1: return SPR_ZONING_INNER_HIGHLIGHT_BLACK; // no opinion
|
||||||
case 2: return SPR_PALETTE_ZONING_ORANGE; // bad
|
case 2: return SPR_ZONING_INNER_HIGHLIGHT_ORANGE; // bad
|
||||||
case 3: return SPR_PALETTE_ZONING_LIGHT_BLUE; // good
|
case 3: return SPR_ZONING_INNER_HIGHLIGHT_LIGHT_BLUE; // good
|
||||||
default: return INVALID_SPRITE_ID; // no town
|
default: return ZONING_INVALID_SPRITE_ID; // no town
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Detect whether the tile is within the 'catchment' zone of an industry.
|
|
||||||
*
|
|
||||||
* @param TileIndex tile
|
|
||||||
* @param Owner owner
|
|
||||||
* @return The colour depends on the distance to the industry:
|
|
||||||
* 1-3 White (lorry/bus)
|
|
||||||
* 4 Blue (train station/some airports)
|
|
||||||
* 5 Green (docks/some airports)
|
|
||||||
* 6 Yellow (some airports)
|
|
||||||
* 7-9 Light blue (international airport)
|
|
||||||
*/
|
|
||||||
SpriteID TileZoneCheckIndustryCatchmentEvaluation(TileIndex tile, Owner owner) {
|
|
||||||
|
|
||||||
// TODO: Implement this!
|
|
||||||
|
|
||||||
return INVALID_SPRITE_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Detect whether the tile is within the catchment zone of a station.
|
* Detect whether the tile is within the catchment zone of a station.
|
||||||
*
|
*
|
||||||
@@ -184,46 +183,28 @@ SpriteID TileZoneCheckIndustryCatchmentEvaluation(TileIndex tile, Owner owner) {
|
|||||||
* @return black if within, light blue if only in acceptance zone
|
* @return black if within, light blue if only in acceptance zone
|
||||||
* and nothing if no nearby station.
|
* and nothing if no nearby station.
|
||||||
*/
|
*/
|
||||||
SpriteID TileZoneCheckStationCatchmentEvaluation(TileIndex tile, Owner owner) {
|
SpriteID TileZoneCheckStationCatchmentEvaluation(TileIndex tile, Owner owner)
|
||||||
|
{
|
||||||
//TODO: Actually check owner.
|
// TODO: Actually check owner.
|
||||||
|
|
||||||
// Never on a station.
|
// Never on a station.
|
||||||
if ( IsTileType(tile, MP_STATION) )
|
if (IsTileType(tile, MP_STATION)) {
|
||||||
return INVALID_SPRITE_ID;
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
|
}
|
||||||
|
|
||||||
// For provided goods
|
// For provided goods
|
||||||
|
|
||||||
StationFinder stations(TileArea(tile, 1, 1));
|
StationFinder stations(TileArea(tile, 1, 1));
|
||||||
|
|
||||||
if ( stations.GetStations()->Length() > 0 ) {
|
if (stations.GetStations()->Length() > 0) {
|
||||||
return SPR_PALETTE_ZONING_BLACK;
|
return SPR_ZONING_INNER_HIGHLIGHT_BLACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For accepted goods
|
// For accepted goods
|
||||||
|
if (IsTileWithinAcceptanceZoneOfStation(tile, owner)) {
|
||||||
|
return SPR_ZONING_INNER_HIGHLIGHT_LIGHT_BLUE;
|
||||||
|
}
|
||||||
|
|
||||||
if ( IsTileWithinAcceptanceZoneOfStation(tile, owner) )
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
return SPR_PALETTE_ZONING_LIGHT_BLUE;
|
|
||||||
|
|
||||||
return INVALID_SPRITE_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Detect whether a tile is within the 'catchment' zone of a building.
|
|
||||||
*
|
|
||||||
* @param TileIndex tile
|
|
||||||
* @param Owner owner
|
|
||||||
* @return The colour depends on the distance to the building:
|
|
||||||
* 1-3 White (lorry/bus)
|
|
||||||
* 4 Blue (train station/some airports)
|
|
||||||
* 5 Green (docks/some airports)
|
|
||||||
* 6 Yellow (some airports)
|
|
||||||
* 7-9 Light blue (international airport)
|
|
||||||
*/
|
|
||||||
SpriteID TileZoneCheckBuildingCatchmentEvaluation(TileIndex tile, Owner owner) {
|
|
||||||
// TODO: Implement this!
|
|
||||||
|
|
||||||
return INVALID_SPRITE_ID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -234,33 +215,42 @@ SpriteID TileZoneCheckBuildingCatchmentEvaluation(TileIndex tile, Owner owner) {
|
|||||||
* @return red if unserved, orange if only accepting, nothing if served or not
|
* @return red if unserved, orange if only accepting, nothing if served or not
|
||||||
* a building
|
* a building
|
||||||
*/
|
*/
|
||||||
SpriteID TileZoneCheckUnservedBuildingsEvaluation(TileIndex tile, Owner owner) {
|
SpriteID TileZoneCheckUnservedBuildingsEvaluation(TileIndex tile, Owner owner)
|
||||||
|
{
|
||||||
|
// TODO: Actually use owner.
|
||||||
|
|
||||||
//TODO: Actually use owner.
|
if (!IsTileType(tile, MP_HOUSE)) {
|
||||||
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
|
}
|
||||||
|
|
||||||
CargoArray dat;
|
CargoArray dat;
|
||||||
|
|
||||||
if ( IsTileType (tile, MP_HOUSE)
|
memset(&dat, 0, sizeof(dat));
|
||||||
&& ( ( memset(&dat, 0, sizeof(dat)), AddAcceptedCargo(tile, dat, NULL), (dat[CT_MAIL] + dat[CT_PASSENGERS] > 0) )
|
AddAcceptedCargo(tile, dat, NULL);
|
||||||
|| ( memset(&dat, 0, sizeof(dat)), AddProducedCargo(tile, dat), (dat[CT_MAIL] + dat[CT_PASSENGERS] > 0) ) ) ) {
|
if (dat[CT_MAIL] + dat[CT_PASSENGERS] == 0) {
|
||||||
StationFinder stations(TileArea(tile, 1, 1));
|
// nothing is accepted, so now test if cargo is produced
|
||||||
|
AddProducedCargo(tile, dat);
|
||||||
if ( stations.GetStations()->Length() > 0 ) {
|
if (dat[CT_MAIL] + dat[CT_PASSENGERS] == 0) {
|
||||||
return INVALID_SPRITE_ID;
|
// total is still 0, so give up
|
||||||
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For accepted goods
|
|
||||||
|
|
||||||
if ( IsTileWithinAcceptanceZoneOfStation(tile, owner) )
|
|
||||||
return SPR_PALETTE_ZONING_ORANGE;
|
|
||||||
|
|
||||||
//TODO: Check for stations that does not accept mail/passengers,
|
|
||||||
//which is currently only truck stops.
|
|
||||||
|
|
||||||
return SPR_PALETTE_ZONING_RED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return INVALID_SPRITE_ID;
|
StationFinder stations(TileArea(tile, 1, 1));
|
||||||
|
|
||||||
|
if (stations.GetStations()->Length() > 0) {
|
||||||
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For accepted goods
|
||||||
|
if (IsTileWithinAcceptanceZoneOfStation(tile, owner)) {
|
||||||
|
return SPR_ZONING_INNER_HIGHLIGHT_ORANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Check for stations that does not accept mail/passengers,
|
||||||
|
// which is currently only truck stops.
|
||||||
|
|
||||||
|
return SPR_ZONING_INNER_HIGHLIGHT_RED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -271,30 +261,30 @@ SpriteID TileZoneCheckUnservedBuildingsEvaluation(TileIndex tile, Owner owner) {
|
|||||||
* @return red if unserved, orange if only accepting, nothing if served or not
|
* @return red if unserved, orange if only accepting, nothing if served or not
|
||||||
* a building
|
* a building
|
||||||
*/
|
*/
|
||||||
SpriteID TileZoneCheckUnservedIndustriesEvaluation(TileIndex tile, Owner owner) {
|
SpriteID TileZoneCheckUnservedIndustriesEvaluation(TileIndex tile, Owner owner)
|
||||||
|
{
|
||||||
|
// TODO: Actually use owner.
|
||||||
|
|
||||||
//TODO: Actually use owner.
|
if (IsTileType(tile, MP_INDUSTRY)) {
|
||||||
|
|
||||||
if ( IsTileType(tile, MP_INDUSTRY) ) {
|
|
||||||
Industry *ind = Industry::GetByTile(tile);
|
Industry *ind = Industry::GetByTile(tile);
|
||||||
StationFinder stations(ind->location);
|
StationFinder stations(ind->location);
|
||||||
|
|
||||||
if ( stations.GetStations()->Length() > 0 ) {
|
if (stations.GetStations()->Length() > 0) {
|
||||||
return INVALID_SPRITE_ID;
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// For accepted goods
|
// For accepted goods
|
||||||
|
if (IsAreaWithinAcceptanceZoneOfStation(ind->location, owner)) {
|
||||||
|
return SPR_ZONING_INNER_HIGHLIGHT_ORANGE;
|
||||||
|
}
|
||||||
|
|
||||||
if ( IsAreaWithinAcceptanceZoneOfStation(ind->location, owner) )
|
// TODO: Check for stations that only accepts mail/passengers,
|
||||||
return SPR_PALETTE_ZONING_ORANGE;
|
// which is currently only bus stops.
|
||||||
|
|
||||||
//TODO: Check for stations that only accepts mail/passengers,
|
return SPR_ZONING_INNER_HIGHLIGHT_RED;
|
||||||
//which is currently only bus stops.
|
|
||||||
|
|
||||||
return SPR_PALETTE_ZONING_RED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return INVALID_SPRITE_ID;
|
return ZONING_INVALID_SPRITE_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -305,74 +295,39 @@ SpriteID TileZoneCheckUnservedIndustriesEvaluation(TileIndex tile, Owner owner)
|
|||||||
* Tile to be evaluated.
|
* Tile to be evaluated.
|
||||||
* @param Owner owner
|
* @param Owner owner
|
||||||
* The current player
|
* The current player
|
||||||
* @param EvaluationMode ev_mode
|
* @param ZoningEvaluationMode ev_mode
|
||||||
* The current evaluation mode.
|
* The current evaluation mode.
|
||||||
* @return The colour returned by the evaluation functions (none if no ev_mode).
|
* @return The colour returned by the evaluation functions (none if no ev_mode).
|
||||||
*/
|
*/
|
||||||
SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, EvaluationMode ev_mode) {
|
SpriteID TileZoningSpriteEvaluation(TileIndex tile, Owner owner, ZoningEvaluationMode ev_mode)
|
||||||
switch ( ev_mode ) {
|
{
|
||||||
case CHECKBUILD: return TileZoneCheckBuildEvaluation(tile, owner);
|
switch (ev_mode) {
|
||||||
case CHECKOPINION: return TileZoneCheckOpinionEvaluation(tile, owner);
|
case ZEM_CAN_BUILD: return TileZoneCheckBuildEvaluation(tile, owner);
|
||||||
case CHECKINDCATCH: return TileZoneCheckIndustryCatchmentEvaluation(tile, owner);
|
case ZEM_AUTHORITY: return TileZoneCheckOpinionEvaluation(tile, owner);
|
||||||
case CHECKSTACATCH: return TileZoneCheckStationCatchmentEvaluation(tile, owner);
|
case ZEM_STA_CATCH: return TileZoneCheckStationCatchmentEvaluation(tile, owner);
|
||||||
case CHECKBULCATCH: return TileZoneCheckBuildingCatchmentEvaluation(tile, owner);
|
case ZEM_BUL_UNSER: return TileZoneCheckUnservedBuildingsEvaluation(tile, owner);
|
||||||
case CHECKBULUNSER: return TileZoneCheckUnservedBuildingsEvaluation(tile, owner);
|
case ZEM_IND_UNSER: return TileZoneCheckUnservedIndustriesEvaluation(tile, owner);
|
||||||
case CHECKINDUNSER: return TileZoneCheckUnservedIndustriesEvaluation(tile, owner);
|
default: return ZONING_INVALID_SPRITE_ID;
|
||||||
default: return INVALID_SPRITE_ID;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Same as above, but not return an integer instead of sprite. However, it
|
|
||||||
* has so far not yet seem a real purpose, so therefore has not been implemented.
|
|
||||||
*
|
|
||||||
* @param TileIndex tile
|
|
||||||
* Tile to be evaluated.
|
|
||||||
* @param Owner owner
|
|
||||||
* The current player
|
|
||||||
* @param EvaluationMode ev_mode
|
|
||||||
* The current evaluation mode.
|
|
||||||
* @return Probably an integer based on the evaluation mode.
|
|
||||||
*/
|
|
||||||
int TileZoningEvaluation(TileIndex tile, Owner owner, EvaluationMode ev_mode) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw the the zoning on the tile.
|
* Draw the the zoning on the tile.
|
||||||
*
|
*
|
||||||
* @param TileInfo ti
|
* @param TileInfo ti
|
||||||
* the tile to draw on.
|
* the tile to draw on.
|
||||||
*/
|
*/
|
||||||
void DrawTileZoning(const TileInfo *ti) {
|
void DrawTileZoning(const TileInfo *ti)
|
||||||
if ( IsTileType(ti->tile, MP_VOID)
|
{
|
||||||
|| _game_mode != GM_NORMAL )
|
if (IsTileType(ti->tile, MP_VOID) || _game_mode != GM_NORMAL) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( _zoning.outer != CHECKNOTHING )
|
if (_zoning.outer != ZEM_NOTHING) {
|
||||||
DrawZoningSprites(SPR_SELECT_TILE, TileZoningSpriteEvaluation(ti->tile, _local_company, _zoning.outer), ti);
|
DrawZoningSprites(SPR_SELECT_TILE, TileZoningSpriteEvaluation(ti->tile, _local_company, _zoning.outer), ti);
|
||||||
|
}
|
||||||
|
|
||||||
if ( _zoning.inner != CHECKNOTHING )
|
if (_zoning.inner != ZEM_NOTHING) {
|
||||||
DrawZoningSprites(SPR_INNER_HIGHLIGHT_BASE, TileZoningSpriteEvaluation(ti->tile, _local_company, _zoning.inner), ti);
|
DrawZoningSprites(SPR_ZONING_INNER_HIGHLIGHT_BASE, TileZoningSpriteEvaluation(ti->tile, _local_company, _zoning.inner), ti);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the evaluation mode depending on an integer. Though, this may be better
|
|
||||||
* implemented so the code does not need to be updated several places everything
|
|
||||||
* a new type of evaluation is added.
|
|
||||||
*
|
|
||||||
* @param int ev_mode
|
|
||||||
* @return EvaluationMode
|
|
||||||
*/
|
|
||||||
EvaluationMode GetEvaluationModeFromInt(int ev_mode) {
|
|
||||||
switch ( ev_mode ) {
|
|
||||||
case 1: return CHECKOPINION;
|
|
||||||
case 2: return CHECKBUILD;
|
|
||||||
case 3: return CHECKSTACATCH;
|
|
||||||
case 4: return CHECKINDCATCH;
|
|
||||||
case 5: return CHECKBULCATCH;
|
|
||||||
case 6: return CHECKBULUNSER;
|
|
||||||
case 7: return CHECKINDUNSER;
|
|
||||||
default: return CHECKNOTHING;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,11 @@
|
|||||||
|
/* $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 zoning_gui.cpp */
|
/** @file zoning_gui.cpp */
|
||||||
|
|
||||||
@@ -5,12 +13,10 @@
|
|||||||
#include "openttd.h"
|
#include "openttd.h"
|
||||||
#include "widgets/dropdown_func.h"
|
#include "widgets/dropdown_func.h"
|
||||||
#include "widget_type.h"
|
#include "widget_type.h"
|
||||||
#include "functions.h"
|
|
||||||
#include "window_func.h"
|
#include "window_func.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "viewport_func.h"
|
#include "viewport_func.h"
|
||||||
#include "sound_func.h"
|
#include "sound_func.h"
|
||||||
#include "variables.h"
|
|
||||||
#include "table/sprites.h"
|
#include "table/sprites.h"
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
#include "strings_func.h"
|
#include "strings_func.h"
|
||||||
@@ -27,60 +33,107 @@ enum ZoningToolbarWidgets {
|
|||||||
ZTW_CAPTION
|
ZTW_CAPTION
|
||||||
};
|
};
|
||||||
|
|
||||||
const StringID _zone_types[] = { STR_ZONING_NO_ZONING, STR_ZONING_AUTHORITY, STR_ZONING_CAN_BUILD, STR_ZONING_STA_CATCH, STR_ZONING_IND_CATCH, STR_ZONING_BUL_CATCH, STR_ZONING_BUL_UNSER, STR_ZONING_IND_UNSER, INVALID_STRING_ID };
|
static const StringID _zone_type_strings[] = {
|
||||||
|
STR_ZONING_NO_ZONING,
|
||||||
|
STR_ZONING_AUTHORITY,
|
||||||
|
STR_ZONING_CAN_BUILD,
|
||||||
|
STR_ZONING_STA_CATCH,
|
||||||
|
STR_ZONING_BUL_UNSER,
|
||||||
|
STR_ZONING_IND_UNSER,
|
||||||
|
INVALID_STRING_ID
|
||||||
|
};
|
||||||
|
|
||||||
|
static const ZoningEvaluationMode _zone_type_modes[] = {
|
||||||
|
ZEM_NOTHING,
|
||||||
|
ZEM_AUTHORITY,
|
||||||
|
ZEM_CAN_BUILD,
|
||||||
|
ZEM_STA_CATCH,
|
||||||
|
ZEM_BUL_UNSER,
|
||||||
|
ZEM_IND_UNSER,
|
||||||
|
};
|
||||||
|
|
||||||
|
static ZoningEvaluationMode DropDownIndexToZoningEvaluationMode(int index)
|
||||||
|
{
|
||||||
|
if (index < 0 || index >= (int) lengthof(_zone_type_modes)) {
|
||||||
|
return ZEM_NOTHING;
|
||||||
|
}
|
||||||
|
return _zone_type_modes[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ZoningEvaluationModeToDropDownIndex(ZoningEvaluationMode ev_mode)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < (int) lengthof(_zone_type_modes); i++) {
|
||||||
|
if (_zone_type_modes[i] == ev_mode) return i;
|
||||||
|
}
|
||||||
|
NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
struct ZoningWindow : public Window {
|
struct ZoningWindow : public Window {
|
||||||
|
|
||||||
ZoningWindow(const WindowDesc *desc, int window_number) : Window() {
|
ZoningWindow(WindowDesc *desc, int window_number)
|
||||||
this->InitNested(desc, window_number);
|
: Window(desc)
|
||||||
|
{
|
||||||
|
this->InitNested(window_number);
|
||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnPaint() {
|
virtual void OnPaint()
|
||||||
|
{
|
||||||
this->DrawWidgets();
|
this->DrawWidgets();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnClick(Point pt, int widget, int click_count) {
|
virtual void OnClick(Point pt, int widget, int click_count)
|
||||||
switch ( widget ) {
|
{
|
||||||
|
switch (widget) {
|
||||||
case ZTW_OUTER_DROPDOWN:
|
case ZTW_OUTER_DROPDOWN:
|
||||||
ShowDropDownMenu(this, _zone_types, _zoning.outer_val, ZTW_OUTER_DROPDOWN, 0, 0);
|
ShowDropDownMenu(this, _zone_type_strings, ZoningEvaluationModeToDropDownIndex(_zoning.outer), ZTW_OUTER_DROPDOWN, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZTW_INNER_DROPDOWN:
|
case ZTW_INNER_DROPDOWN:
|
||||||
ShowDropDownMenu(this, _zone_types, _zoning.inner_val, ZTW_INNER_DROPDOWN, 0, 0);
|
ShowDropDownMenu(this, _zone_type_strings, ZoningEvaluationModeToDropDownIndex(_zoning.inner), ZTW_INNER_DROPDOWN, 0, 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnDropdownSelect(int widget, int index) {
|
virtual void OnDropdownSelect(int widget, int index)
|
||||||
|
{
|
||||||
switch(widget) {
|
switch(widget) {
|
||||||
case ZTW_OUTER_DROPDOWN:
|
case ZTW_OUTER_DROPDOWN:
|
||||||
_zoning.outer_val = index;
|
_zoning.outer = DropDownIndexToZoningEvaluationMode(index);
|
||||||
_zoning.outer = GetEvaluationModeFromInt(_zoning.outer_val);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ZTW_INNER_DROPDOWN:
|
case ZTW_INNER_DROPDOWN:
|
||||||
_zoning.inner_val = index;
|
_zoning.inner = DropDownIndexToZoningEvaluationMode(index);
|
||||||
_zoning.inner = GetEvaluationModeFromInt(_zoning.inner_val);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetStringParameters(int widget) const {
|
virtual void SetStringParameters(int widget) const
|
||||||
switch ( widget ) {
|
{
|
||||||
case ZTW_OUTER_DROPDOWN: SetDParam(0, _zone_types[_zoning.outer]); break;
|
switch (widget) {
|
||||||
case ZTW_INNER_DROPDOWN: SetDParam(0, _zone_types[_zoning.inner]); break;
|
case ZTW_OUTER_DROPDOWN:
|
||||||
|
SetDParam(0, _zone_type_strings[ZoningEvaluationModeToDropDownIndex(_zoning.outer)]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ZTW_INNER_DROPDOWN:
|
||||||
|
SetDParam(0, _zone_type_strings[ZoningEvaluationModeToDropDownIndex(_zoning.inner)]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) {
|
virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize)
|
||||||
|
{
|
||||||
const StringID *strs = NULL;
|
const StringID *strs = NULL;
|
||||||
switch ( widget ) {
|
switch (widget) {
|
||||||
case ZTW_OUTER_DROPDOWN: strs = _zone_types; break;
|
case ZTW_OUTER_DROPDOWN:
|
||||||
case ZTW_INNER_DROPDOWN: strs = _zone_types; break;
|
case ZTW_INNER_DROPDOWN:
|
||||||
|
strs = _zone_type_strings;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if ( strs != NULL ) {
|
if (strs != NULL) {
|
||||||
while ( *strs != INVALID_STRING_ID ) {
|
while (*strs != INVALID_STRING_ID) {
|
||||||
*size = maxdim(*size, GetStringBoundingBox(*strs++));
|
*size = maxdim(*size, GetStringBoundingBox(*strs++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,13 +168,14 @@ static const NWidgetPart _nested_zoning_widgets[] = {
|
|||||||
EndContainer()
|
EndContainer()
|
||||||
};
|
};
|
||||||
|
|
||||||
static const WindowDesc _zoning_desc (
|
static WindowDesc _zoning_desc (
|
||||||
WDP_CENTER, 0, 0,
|
WDP_CENTER, "zoning_gui", 0, 0,
|
||||||
WC_ZONING_TOOLBAR, WC_NONE,
|
WC_ZONING_TOOLBAR, WC_NONE,
|
||||||
0,
|
0,
|
||||||
_nested_zoning_widgets, lengthof(_nested_zoning_widgets)
|
_nested_zoning_widgets, lengthof(_nested_zoning_widgets)
|
||||||
);
|
);
|
||||||
|
|
||||||
void ShowZoningToolbar() {
|
void ShowZoningToolbar()
|
||||||
|
{
|
||||||
AllocateWindowDescFront<ZoningWindow>(&_zoning_desc, 0);
|
AllocateWindowDescFront<ZoningWindow>(&_zoning_desc, 0);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user