Merge branch 'master' into jgrpp

# Conflicts:
#	src/town_cmd.cpp
pull/161/head
Jonathan G Rennison 4 years ago
commit 43c538fa7d

@ -582,8 +582,8 @@ public:
}
/**
* Are two the two CargoPackets mergeable in the context of
* a list of CargoPackets for a Vehicle?
* Are the two CargoPackets mergeable in the context of
* a list of CargoPackets for a Station?
* @param cp1 First CargoPacket.
* @param cp2 Second CargoPacket.
* @return True if they are mergeable.

@ -270,8 +270,6 @@ static WindowDesc _build_industry_desc(
class BuildIndustryWindow : public Window {
int selected_index; ///< index of the element in the matrix
IndustryType selected_type; ///< industry corresponding to the above index
uint16 callback_timer; ///< timer counter for callback eventual verification
bool timer_enabled; ///< timer can be used
uint16 count; ///< How many industries are loaded
IndustryType index[NUM_INDUSTRYTYPES + 1]; ///< Type of industry, in the order it was loaded
bool enabled[NUM_INDUSTRYTYPES + 1]; ///< availability state, coming from CBID_INDUSTRY_PROBABILITY (if ever)
@ -295,7 +293,6 @@ class BuildIndustryWindow : public Window {
this->index[this->count] = INVALID_INDUSTRYTYPE;
this->enabled[this->count] = true;
this->count++;
this->timer_enabled = false;
}
/* Fill the arrays with industries.
* The tests performed after the enabled allow to load the industries
@ -387,13 +384,9 @@ class BuildIndustryWindow : public Window {
public:
BuildIndustryWindow() : Window(&_build_industry_desc)
{
this->timer_enabled = _loaded_newgrf_features.has_newindustries;
this->selected_index = -1;
this->selected_type = INVALID_INDUSTRYTYPE;
this->callback_timer = DAY_TICKS;
this->CreateNestedTree();
this->vscroll = this->GetScrollbar(WID_DPI_SCROLLBAR);
this->FinishInitNested(0);
@ -423,10 +416,11 @@ public:
}
case WID_DPI_INFOPANEL: {
/* Extra line for cost outside of editor + extra lines for 'extra' information for NewGRFs. */
int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1) + (_loaded_newgrf_features.has_newindustries ? 4 : 0);
/* Extra line for cost outside of editor. */
int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1);
uint extra_lines_req = 0;
uint extra_lines_prd = 0;
uint extra_lines_newgrf = 0;
uint max_minwidth = FONT_HEIGHT_NORMAL * MAX_MINWIDTH_LINEHEIGHTS;
Dimension d = {0, 0};
for (byte i = 0; i < this->count; i++) {
@ -454,10 +448,15 @@ public:
strdim.width = max_minwidth;
}
d = maxdim(d, strdim);
if (indsp->grf_prop.grffile != nullptr) {
/* Reserve a few extra lines for text from an industry NewGRF. */
extra_lines_newgrf = 4;
}
}
/* Set it to something more sane :) */
height += extra_lines_prd + extra_lines_req;
height += extra_lines_prd + extra_lines_req + extra_lines_newgrf;
size->height = height * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
size->width = d.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT;
break;
@ -673,25 +672,19 @@ public:
if (success && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace();
}
void OnGameTick() override
void OnHundredthTick() override
{
if (!this->timer_enabled) return;
if (--this->callback_timer == 0) {
/* We have just passed another day.
* See if we need to update availability of currently selected industry */
this->callback_timer = DAY_TICKS; // restart counter
const IndustrySpec *indsp = GetIndustrySpec(this->selected_type);
if (_game_mode == GM_EDITOR) return;
const IndustrySpec *indsp = GetIndustrySpec(this->selected_type);
if (indsp->enabled) {
bool call_back_result = GetIndustryProbabilityCallback(this->selected_type, IACT_USERCREATION, 1) > 0;
if (indsp->enabled) {
bool call_back_result = GetIndustryProbabilityCallback(this->selected_type, IACT_USERCREATION, 1) > 0;
/* Only if result does match the previous state would it require a redraw. */
if (call_back_result != this->enabled[this->selected_index]) {
this->enabled[this->selected_index] = call_back_result;
this->SetButtons();
this->SetDirty();
}
/* Only if result does match the previous state would it require a redraw. */
if (call_back_result != this->enabled[this->selected_index]) {
this->enabled[this->selected_index] = call_back_result;
this->SetButtons();
this->SetDirty();
}
}
}

@ -2455,8 +2455,6 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, con
if (!CargoSpec::Get(housespec->accepts_cargo[2])->IsValid()) {
housespec->cargo_acceptance[2] = 0;
}
_loaded_newgrf_features.has_newhouses = true;
break;
}
@ -9194,8 +9192,6 @@ void ResetNewGRFData()
_loaded_newgrf_features.has_2CC = false;
_loaded_newgrf_features.used_liveries = 1 << LS_DEFAULT;
_loaded_newgrf_features.has_newhouses = false;
_loaded_newgrf_features.has_newindustries = false;
_loaded_newgrf_features.shore = SHORE_REPLACE_NONE;
_loaded_newgrf_features.tram = TRAMWAY_REPLACE_DEPOT_NONE;
@ -9715,7 +9711,6 @@ static void FinaliseIndustriesArray()
}
_industry_mngr.SetEntitySpec(indsp);
_loaded_newgrf_features.has_newindustries = true;
}
}
}

@ -289,8 +289,6 @@ enum TramReplacement {
struct GRFLoadedFeatures {
bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours).
uint64 used_liveries; ///< Bitmask of #LiveryScheme used by the defined engines.
bool has_newhouses; ///< Set if there are any newhouses loaded.
bool has_newindustries; ///< Set if there are any newindustries loaded.
ShoreReplacement shore; ///< In which way shore sprites were replaced.
TramReplacement tram; ///< In which way tram depots were replaced.
};

@ -140,8 +140,6 @@ void IncreaseBuildingCount(Town *t, HouseID house_id)
{
HouseClassID class_id = HouseSpec::Get(house_id)->class_id;
if (!_loaded_newgrf_features.has_newhouses) return;
t->cache.building_counts.id_count[house_id]++;
_building_counts.id_count[house_id]++;
@ -161,8 +159,6 @@ void DecreaseBuildingCount(Town *t, HouseID house_id)
{
HouseClassID class_id = HouseSpec::Get(house_id)->class_id;
if (!_loaded_newgrf_features.has_newhouses) return;
if (t->cache.building_counts.id_count[house_id] > 0) t->cache.building_counts.id_count[house_id]--;
if (_building_counts.id_count[house_id] > 0) _building_counts.id_count[house_id]--;

@ -32,10 +32,6 @@
#include "os/windows/string_uniscribe.h"
#endif
#if defined(WITH_COCOA)
#include "os/macosx/string_osx.h"
#endif
#ifdef WITH_ICU_I18N
/* Required by strnatcmp. */
#include <unicode/ustring.h>
@ -43,6 +39,10 @@
#include "gfx_func.h"
#endif /* WITH_ICU_I18N */
#if defined(WITH_COCOA)
#include "os/macosx/string_osx.h"
#endif
/* The function vsnprintf is used internally to perform the required formatting
* tasks. As such this one must be allowed, and makes sure it's terminated. */
#include "safeguards.h"

@ -13,7 +13,9 @@ static size_t ConvertLandscape(const char *value);
/****************************
* OTTD specific INI stuff
****************************/
****************************
* DO NOT edit this file. This file is automatically generated from the contents of /src/table/
*/
/**
* Settings-macro usage:
@ -28,7 +30,7 @@ static size_t ConvertLandscape(const char *value);
* These are for client-only variables. Here the 'var' refers to an
* entry inside _settings_client.
* 3. SDT_something
* Thse are for members in the struct described by the current
* These are for members in the struct described by the current
* #SettingDesc list / .ini file. Here, 'base' specifies type of the
* struct while 'var' points out the member of the struct (the actual
* struct to store it in is implicitly defined by the #SettingDesc

@ -2697,8 +2697,7 @@ static CommandCost CheckCanBuildHouse(HouseID house, const Town *t)
{
const HouseSpec *hs = HouseSpec::Get(house);
if (_loaded_newgrf_features.has_newhouses && !_generating_world &&
_game_mode != GM_EDITOR && (hs->extra_flags & BUILDING_IS_HISTORICAL) != 0) {
if (!_generating_world && _game_mode != GM_EDITOR && (hs->extra_flags & BUILDING_IS_HISTORICAL) != 0) {
return CMD_ERROR;
}
@ -2836,8 +2835,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile)
if (IsHouseTypeAllowed((HouseID)i, above_snowline, zone).Failed()) continue;
if (IsAnotherHouseTypeAllowedInTown(t, (HouseID)i).Failed()) continue;
/* Without NewHouses, all houses have probability '1' */
uint cur_prob = (_loaded_newgrf_features.has_newhouses ? HouseSpec::Get(i)->probability : 1);
uint cur_prob = HouseSpec::Get(i)->probability;
probability_max += cur_prob;
probs[num] = cur_prob;
houses[num++] = (HouseID)i;

@ -382,9 +382,7 @@ static void DrawSurfaceToScreen()
} else {
if (_sdl_surface != _sdl_realscreen) {
for (int i = 0; i < n; i++) {
SDL_BlitSurface(
_sdl_surface, &_dirty_rects[i],
_sdl_realscreen, &_dirty_rects[i]);
SDL_BlitSurface(_sdl_surface, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]);
}
}

@ -35,7 +35,7 @@
static FVideoDriver_SDL iFVideoDriver_SDL;
static SDL_Surface *_sdl_screen;
static SDL_Surface *_sdl_surface;
static SDL_Surface *_sdl_realscreen;
static bool _all_modes;
@ -77,11 +77,11 @@ static void UpdatePalette(bool init = false)
pal[i].unused = 0;
}
SDL_SetColors(_sdl_screen, pal, _local_palette.first_dirty, _local_palette.count_dirty);
SDL_SetColors(_sdl_surface, pal, _local_palette.first_dirty, _local_palette.count_dirty);
if (_sdl_screen != _sdl_realscreen && init) {
if (_sdl_surface != _sdl_realscreen && init) {
/* When using a shadow surface, also set our palette on the real screen. This lets SDL
* allocate as much colors (or approximations) as
* allocate as many colors (or approximations) as
* possible, instead of using only the default SDL
* palette. This allows us to get more colors exactly
* right and might allow using better approximations for
@ -103,7 +103,7 @@ static void UpdatePalette(bool init = false)
SDL_SetColors(_sdl_realscreen, pal, _local_palette.first_dirty, _local_palette.count_dirty);
}
if (_sdl_screen != _sdl_realscreen && !init) {
if (_sdl_surface != _sdl_realscreen && !init) {
/* We're not using real hardware palette, but are letting SDL
* approximate the palette during shadow -> screen copy. To
* change the palette, we need to recopy the entire screen.
@ -114,7 +114,7 @@ static void UpdatePalette(bool init = false)
* best mapping of shadow palette colors to real palette
* colors from scratch.
*/
SDL_BlitSurface(_sdl_screen, nullptr, _sdl_realscreen, nullptr);
SDL_BlitSurface(_sdl_surface, nullptr, _sdl_realscreen, nullptr);
SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0);
}
}
@ -159,17 +159,20 @@ static void DrawSurfaceToScreen()
if (n == 0) return;
_num_dirty_rects = 0;
if (n > MAX_DIRTY_RECTS) {
if (_sdl_screen != _sdl_realscreen) {
SDL_BlitSurface(_sdl_screen, nullptr, _sdl_realscreen, nullptr);
if (_sdl_surface != _sdl_realscreen) {
SDL_BlitSurface(_sdl_surface, nullptr, _sdl_realscreen, nullptr);
}
SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0);
} else {
if (_sdl_screen != _sdl_realscreen) {
if (_sdl_surface != _sdl_realscreen) {
for (int i = 0; i < n; i++) {
SDL_BlitSurface(_sdl_screen, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]);
SDL_BlitSurface(_sdl_surface, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]);
}
}
SDL_UpdateRects(_sdl_realscreen, n, _dirty_rects);
}
}
@ -312,7 +315,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h)
if (want_hwpalette) DEBUG(driver, 1, "SDL: requesting hardware palette");
/* Free any previously allocated shadow surface */
if (_sdl_screen != nullptr && _sdl_screen != _sdl_realscreen) SDL_FreeSurface(_sdl_screen);
if (_sdl_surface != nullptr && _sdl_surface != _sdl_realscreen) SDL_FreeSurface(_sdl_surface);
if (_sdl_realscreen != nullptr) {
if (_requested_hwpalette != want_hwpalette) {
@ -379,7 +382,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h)
_screen.height = newscreen->h;
_screen.pitch = newscreen->pitch / (bpp / 8);
_screen.dst_ptr = newscreen->pixels;
_sdl_screen = newscreen;
_sdl_surface = newscreen;
/* When in full screen, we will always have the mouse cursor
* within the window, even though SDL does not give us the
@ -614,7 +617,7 @@ const char *VideoDriver_SDL::Start(const StringList &parm)
} else if (SDL_WasInit(SDL_INIT_VIDEO) == 0) {
ret_code = SDL_InitSubSystem(SDL_INIT_VIDEO);
}
if (ret_code == -1) return SDL_GetError();
if (ret_code < 0) return SDL_GetError();
GetVideoModes();
if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) {

Loading…
Cancel
Save