mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 14:27:16 +00:00
(svn r9917) -Codechange: prepare some more areas for more road types.
This commit is contained in:
parent
d5d94e230f
commit
0819f3a9a0
@ -28,6 +28,7 @@
|
|||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
#include "cargotype.h"
|
#include "cargotype.h"
|
||||||
#include "group.h"
|
#include "group.h"
|
||||||
|
#include "road_map.h"
|
||||||
|
|
||||||
|
|
||||||
enum BuildVehicleWidgets {
|
enum BuildVehicleWidgets {
|
||||||
@ -666,6 +667,7 @@ static void GenerateBuildRoadVehList(Window *w)
|
|||||||
|
|
||||||
for (eid = ROAD_ENGINES_INDEX; eid < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; eid++) {
|
for (eid = ROAD_ENGINES_INDEX; eid < ROAD_ENGINES_INDEX + NUM_ROAD_ENGINES; eid++) {
|
||||||
if (!IsEngineBuildable(eid, VEH_ROAD, _local_player)) continue;
|
if (!IsEngineBuildable(eid, VEH_ROAD, _local_player)) continue;
|
||||||
|
if (!HASBIT(bv->filter.roadtypes, HASBIT(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD)) continue;
|
||||||
EngList_Add(&bv->eng_list, eid);
|
EngList_Add(&bv->eng_list, eid);
|
||||||
|
|
||||||
if (eid == bv->sel_engine) sel_id = eid;
|
if (eid == bv->sel_engine) sel_id = eid;
|
||||||
@ -1019,6 +1021,7 @@ void ShowBuildVehicleWindow(TileIndex tile, VehicleType type)
|
|||||||
ResizeWindow(w, 0, 16);
|
ResizeWindow(w, 0, 16);
|
||||||
break;
|
break;
|
||||||
case VEH_ROAD:
|
case VEH_ROAD:
|
||||||
|
WP(w, buildvehicle_d).filter.roadtypes = (tile == 0) ? ROADTYPES_ALL : GetRoadTypes(tile);
|
||||||
ResizeWindow(w, 0, 16);
|
ResizeWindow(w, 0, 16);
|
||||||
case VEH_SHIP:
|
case VEH_SHIP:
|
||||||
break;
|
break;
|
||||||
|
@ -178,14 +178,16 @@ void StartupEngines()
|
|||||||
static void AcceptEnginePreview(EngineID eid, PlayerID player)
|
static void AcceptEnginePreview(EngineID eid, PlayerID player)
|
||||||
{
|
{
|
||||||
Engine *e = GetEngine(eid);
|
Engine *e = GetEngine(eid);
|
||||||
|
Player *p = GetPlayer(player);
|
||||||
|
|
||||||
SETBIT(e->player_avail, player);
|
SETBIT(e->player_avail, player);
|
||||||
if (e->type == VEH_TRAIN) {
|
if (e->type == VEH_TRAIN) {
|
||||||
const RailVehicleInfo *rvi = RailVehInfo(eid);
|
const RailVehicleInfo *rvi = RailVehInfo(eid);
|
||||||
Player *p = GetPlayer(player);
|
|
||||||
|
|
||||||
assert(rvi->railtype < RAILTYPE_END);
|
assert(rvi->railtype < RAILTYPE_END);
|
||||||
SETBIT(p->avail_railtypes, rvi->railtype);
|
SETBIT(p->avail_railtypes, rvi->railtype);
|
||||||
|
} else if (e->type == VEH_ROAD) {
|
||||||
|
SETBIT(p->avail_roadtypes, HASBIT(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
e->preview_player = INVALID_PLAYER;
|
e->preview_player = INVALID_PLAYER;
|
||||||
|
@ -127,8 +127,8 @@ struct Engine {
|
|||||||
* EngineInfo.misc_flags is a bitmask, with the following values
|
* EngineInfo.misc_flags is a bitmask, with the following values
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
EF_RAIL_TILTS = 0, ///< Rail vehicle tilts in curves (unsupported)
|
EF_RAIL_TILTS = 0, ///< Rail vehicle tilts in curves
|
||||||
EF_ROAD_TRAM = 0, ///< Road vehicle is a tram/light rail vehicle (unsup)
|
EF_ROAD_TRAM = 0, ///< Road vehicle is a tram/light rail vehicle
|
||||||
EF_USES_2CC = 1, ///< Vehicle uses two company colours
|
EF_USES_2CC = 1, ///< Vehicle uses two company colours
|
||||||
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
|
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
|
||||||
};
|
};
|
||||||
|
@ -930,14 +930,15 @@ static void ToolbarZoomOutClick(Window *w)
|
|||||||
static void ToolbarBuildRailClick(Window *w)
|
static void ToolbarBuildRailClick(Window *w)
|
||||||
{
|
{
|
||||||
const Player *p = GetPlayer(_local_player);
|
const Player *p = GetPlayer(_local_player);
|
||||||
Window *w2;
|
Window *w2 = PopupMainToolbMenu(w, 19, STR_1015_RAILROAD_CONSTRUCTION, RAILTYPE_END, ~p->avail_railtypes);
|
||||||
w2 = PopupMainToolbMenu(w, 19, STR_1015_RAILROAD_CONSTRUCTION, RAILTYPE_END, ~p->avail_railtypes);
|
|
||||||
WP(w2, menu_d).sel_index = _last_built_railtype;
|
WP(w2, menu_d).sel_index = _last_built_railtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ToolbarBuildRoadClick(Window *w)
|
static void ToolbarBuildRoadClick(Window *w)
|
||||||
{
|
{
|
||||||
Window *w2 = PopupMainToolbMenu(w, 20, STR_180A_ROAD_CONSTRUCTION, 1, 0);
|
const Player *p = GetPlayer(_local_player);
|
||||||
|
/* The standard road button is *always* available */
|
||||||
|
Window *w2 = PopupMainToolbMenu(w, 20, STR_180A_ROAD_CONSTRUCTION, 1, ~(p->avail_roadtypes | 1));
|
||||||
WP(w2, menu_d).sel_index = _last_built_roadtype;
|
WP(w2, menu_d).sel_index = _last_built_roadtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1716,7 +1716,10 @@ bool AfterLoadGame()
|
|||||||
|
|
||||||
if (CheckSavegameVersion(34)) FOR_ALL_PLAYERS(p) ResetPlayerLivery(p);
|
if (CheckSavegameVersion(34)) FOR_ALL_PLAYERS(p) ResetPlayerLivery(p);
|
||||||
|
|
||||||
FOR_ALL_PLAYERS(p) p->avail_railtypes = GetPlayerRailtypes(p->index);
|
FOR_ALL_PLAYERS(p) {
|
||||||
|
p->avail_railtypes = GetPlayerRailtypes(p->index);
|
||||||
|
p->avail_roadtypes = GetPlayerRoadtypes(p->index);
|
||||||
|
}
|
||||||
|
|
||||||
if (!CheckSavegameVersion(27)) AfterLoadStations();
|
if (!CheckSavegameVersion(27)) AfterLoadStations();
|
||||||
|
|
||||||
|
@ -168,6 +168,7 @@ struct Player {
|
|||||||
Livery livery[LS_END];
|
Livery livery[LS_END];
|
||||||
byte player_money_fraction;
|
byte player_money_fraction;
|
||||||
byte avail_railtypes;
|
byte avail_railtypes;
|
||||||
|
byte avail_roadtypes;
|
||||||
byte block_preview;
|
byte block_preview;
|
||||||
PlayerByte index;
|
PlayerByte index;
|
||||||
|
|
||||||
@ -248,6 +249,7 @@ static inline bool IsValidPlayer(PlayerID pi)
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte GetPlayerRailtypes(PlayerID p);
|
byte GetPlayerRailtypes(PlayerID p);
|
||||||
|
byte GetPlayerRoadtypes(PlayerID p);
|
||||||
|
|
||||||
/** Finds out if a Player has a certain railtype available */
|
/** Finds out if a Player has a certain railtype available */
|
||||||
static inline bool HasRailtypeAvail(const Player *p, RailType Railtype)
|
static inline bool HasRailtypeAvail(const Player *p, RailType Railtype)
|
||||||
|
@ -472,6 +472,7 @@ Player *DoStartupNewPlayer(bool is_ai)
|
|||||||
p->share_owners[0] = p->share_owners[1] = p->share_owners[2] = p->share_owners[3] = PLAYER_SPECTATOR;
|
p->share_owners[0] = p->share_owners[1] = p->share_owners[2] = p->share_owners[3] = PLAYER_SPECTATOR;
|
||||||
|
|
||||||
p->avail_railtypes = GetPlayerRailtypes(p->index);
|
p->avail_railtypes = GetPlayerRailtypes(p->index);
|
||||||
|
p->avail_roadtypes = GetPlayerRoadtypes(p->index);
|
||||||
p->inaugurated_year = _cur_year;
|
p->inaugurated_year = _cur_year;
|
||||||
p->face = ConvertFromOldPlayerFace(Random());
|
p->face = ConvertFromOldPlayerFace(Random());
|
||||||
|
|
||||||
@ -609,6 +610,24 @@ byte GetPlayerRailtypes(PlayerID p)
|
|||||||
return rt;
|
return rt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte GetPlayerRoadtypes(PlayerID p)
|
||||||
|
{
|
||||||
|
byte rt = 0;
|
||||||
|
EngineID i;
|
||||||
|
|
||||||
|
for (i = 0; i != TOTAL_NUM_ENGINES; i++) {
|
||||||
|
const Engine* e = GetEngine(i);
|
||||||
|
const EngineInfo *ei = EngInfo(i);
|
||||||
|
|
||||||
|
if (e->type == VEH_ROAD && HASBIT(ei->climates, _opt.landscape) &&
|
||||||
|
(HASBIT(e->player_avail, p) || _date >= e->intro_date + 365)) {
|
||||||
|
SETBIT(rt, HASBIT(ei->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rt;
|
||||||
|
}
|
||||||
|
|
||||||
static void DeletePlayerStuff(PlayerID pi)
|
static void DeletePlayerStuff(PlayerID pi)
|
||||||
{
|
{
|
||||||
Player *p;
|
Player *p;
|
||||||
|
@ -173,9 +173,6 @@ int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||||||
v->u.road.state = RVSB_IN_DEPOT;
|
v->u.road.state = RVSB_IN_DEPOT;
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
|
|
||||||
v->u.road.roadtype = ROADTYPE_ROAD;
|
|
||||||
v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
|
|
||||||
|
|
||||||
v->spritenum = rvi->image_index;
|
v->spritenum = rvi->image_index;
|
||||||
v->cargo_type = rvi->cargo_type;
|
v->cargo_type = rvi->cargo_type;
|
||||||
v->cargo_subtype = 0;
|
v->cargo_subtype = 0;
|
||||||
@ -194,6 +191,9 @@ int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||||||
v->max_speed = rvi->max_speed;
|
v->max_speed = rvi->max_speed;
|
||||||
v->engine_type = (byte)p1;
|
v->engine_type = (byte)p1;
|
||||||
|
|
||||||
|
v->u.road.roadtype = HASBIT(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
|
||||||
|
v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
|
||||||
|
|
||||||
e = GetEngine(p1);
|
e = GetEngine(p1);
|
||||||
v->reliability = e->reliability;
|
v->reliability = e->reliability;
|
||||||
v->reliability_spd_dec = e->reliability_spd_dec;
|
v->reliability_spd_dec = e->reliability_spd_dec;
|
||||||
@ -1064,7 +1064,7 @@ static Trackdir RoadFindPathToDest(Vehicle* v, TileIndex tile, DiagDirection ent
|
|||||||
TrackdirBits trackdirs = (TrackdirBits)GB(r, 0, 16);
|
TrackdirBits trackdirs = (TrackdirBits)GB(r, 0, 16);
|
||||||
|
|
||||||
if (IsTileType(tile, MP_STREET)) {
|
if (IsTileType(tile, MP_STREET)) {
|
||||||
if (GetRoadTileType(tile) == ROAD_TILE_DEPOT && (!IsTileOwner(tile, v->owner) || GetRoadDepotDirection(tile) == enterdir)) {
|
if (GetRoadTileType(tile) == ROAD_TILE_DEPOT && (!IsTileOwner(tile, v->owner) || GetRoadDepotDirection(tile) == enterdir || (GetRoadTypes(tile) & v->u.road.compatible_roadtypes) == 0)) {
|
||||||
/* Road depot owned by another player or with the wrong orientation */
|
/* Road depot owned by another player or with the wrong orientation */
|
||||||
trackdirs = TRACKDIR_BIT_NONE;
|
trackdirs = TRACKDIR_BIT_NONE;
|
||||||
}
|
}
|
||||||
|
@ -241,7 +241,7 @@ void AfterLoadVehicles()
|
|||||||
switch (v->type) {
|
switch (v->type) {
|
||||||
case VEH_ROAD:
|
case VEH_ROAD:
|
||||||
v->cur_image = GetRoadVehImage(v, v->direction);
|
v->cur_image = GetRoadVehImage(v, v->direction);
|
||||||
v->u.road.roadtype = ROADTYPE_ROAD;
|
v->u.road.roadtype = HASBIT(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD;
|
||||||
v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
|
v->u.road.compatible_roadtypes = RoadTypeToRoadTypes(v->u.road.roadtype);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user