Skip to content

Commit 9276dc1

Browse files
committed
ADD: new flag for bridges and ways in makeobj 60.9 clip_below Default is (1) but for slim structures (e.g. powerline) it could be set to zero for nicer display of structures below
git-svn-id: svn://tron.homeunix.org/simutrans/simutrans/trunk@11863 8aca7d54-2c30-db11-9de9-000461428c89
1 parent ae2b119 commit 9276dc1

File tree

15 files changed

+102
-21
lines changed

15 files changed

+102
-21
lines changed

.github/workflows/nightly-android.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ jobs:
4040
echo "($pwd)/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin" >> $GITHUB_PATH
4141
ln -s llvm-objdump ${ANDROID_HOME}/ndk/29.0.14206865/toolchains/llvm/prebuilt/linux-x86_64/bin/objdump
4242
echo "Github path ($PATH)"
43-
echo "Github path ($ENV)"
4443
4544
- name: Setup Android SDK environment variables
4645
run: |

simutrans/history.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
FIX: (k47) world borders soemthimes not correctly displayed
5454
FIX: city connects correct over slopes but not to depots
5555
CHG: if defined USE_TOWN_ROAD_BUILDER_TOOL the cityroad building tool will use the internal tool of the city (default off)
56+
ADD: new flag for bridges and ways in makeobj 60.9 "clip_below" Default is (1) but for slim structures (e.g. powerline) it could be set to zero for nicer display of structures below
5657

5758

5859
Release of 124.3.1 (r11671 on 5-Apr-2025):

src/simutrans/descriptor/bridge_desc.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class bridge_desc_t : public obj_desc_transport_infrastructure_t {
3939
uint8 max_height = 0; // =0 off, else maximum length
4040

4141
sint8 number_of_seasons = 0; // 0 = no seasons
42+
bool clip_below; // default is true
4243

4344
public:
4445
/*
@@ -79,6 +80,8 @@ class bridge_desc_t : public obj_desc_transport_infrastructure_t {
7980
return image != NULL ? image->get_id() : IMG_EMPTY;
8081
}
8182

83+
bool is_clip_below() const { return clip_below; }
84+
8285
img_t get_straight(ribi_t::ribi ribi, uint8 height) const;
8386
img_t get_start(slope_t::type slope) const;
8487
img_t get_ramp(slope_t::type slope) const;

src/simutrans/descriptor/reader/bridge_reader.cc

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,20 +132,36 @@ obj_desc_t *bridge_reader_t::read_node(FILE *fp, obj_node_info_t &node)
132132
desc->max_height = decode_uint8(p);
133133
desc->number_of_seasons = decode_uint8(p);
134134
}
135-
else if (version==10) {
135+
else if (version == 10) {
136136
// cost/maintenance as 64 bit ints
137-
desc->topspeed = decode_uint16(p);
138-
desc->price = decode_sint64(p);
139-
desc->maintenance = decode_sint64(p);
140-
desc->wtyp = decode_uint8(p);
141-
desc->pillars_every = decode_uint8(p);
142-
desc->max_length = decode_uint8(p);
143-
desc->intro_date = decode_uint16(p);
144-
desc->retire_date = decode_uint16(p);
137+
desc->topspeed = decode_uint16(p);
138+
desc->price = decode_sint64(p);
139+
desc->maintenance = decode_sint64(p);
140+
desc->wtyp = decode_uint8(p);
141+
desc->pillars_every = decode_uint8(p);
142+
desc->max_length = decode_uint8(p);
143+
desc->intro_date = decode_uint16(p);
144+
desc->retire_date = decode_uint16(p);
145145
desc->pillars_asymmetric = decode_uint8(p) != 0;
146-
desc->axle_load = decode_uint16(p);
147-
desc->max_height = decode_uint8(p);
148-
desc->number_of_seasons = decode_uint8(p);
146+
desc->axle_load = decode_uint16(p);
147+
desc->max_height = decode_uint8(p);
148+
desc->number_of_seasons = decode_uint8(p);
149+
}
150+
else if (version == 11) {
151+
// cost/maintenance as 64 bit ints
152+
desc->topspeed = decode_uint16(p);
153+
desc->price = decode_sint64(p);
154+
desc->maintenance = decode_sint64(p);
155+
desc->wtyp = decode_uint8(p);
156+
desc->pillars_every = decode_uint8(p);
157+
desc->max_length = decode_uint8(p);
158+
desc->intro_date = decode_uint16(p);
159+
desc->retire_date = decode_uint16(p);
160+
desc->pillars_asymmetric = decode_uint8(p) != 0;
161+
desc->axle_load = decode_uint16(p);
162+
desc->max_height = decode_uint8(p);
163+
desc->number_of_seasons = decode_uint8(p);
164+
desc->clip_below = decode_uint8(p);
149165
}
150166
else {
151167
dbg->fatal( "bridge_reader_t::read_node()", "Cannot handle too new node version %i", version );
@@ -161,6 +177,9 @@ obj_desc_t *bridge_reader_t::read_node(FILE *fp, obj_node_info_t &node)
161177
if( version < 9 ) {
162178
desc->axle_load = 9999;
163179
}
180+
if (version < 11) {
181+
desc->clip_below = desc->wtyp != powerline_wt;
182+
}
164183

165184
PAKSET_INFO("bridge_reader_t::read_node()",
166185
"version=%d, waytype=%d, price=%" PRId64 ", maintenance=%" PRId64 ", topspeed=%d, axle_load=%i, max_length=%i, max_height=%i, pillars=%i, asymmetric=%i, seasons=%i, intro=%i/%i, retire=%i/%i",

src/simutrans/descriptor/reader/way_reader.cc

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,22 @@ obj_desc_t * way_reader_t::read_node(FILE *fp, obj_node_info_t &node)
4848

4949
const uint16 version = node.size==0 ? 0 : decode_uint16(p)&0x7FFFu;
5050

51-
if (version == 7) {
51+
if (version == 8) {
52+
// clipping of elevated ways
53+
desc->price = decode_sint64(p);
54+
desc->maintenance = decode_sint64(p);
55+
desc->topspeed = decode_uint32(p);
56+
desc->max_weight = decode_uint32(p);
57+
desc->intro_date = decode_uint16(p);
58+
desc->retire_date = decode_uint16(p);
59+
desc->axle_load = decode_uint16(p);
60+
desc->wtyp = decode_uint8(p);
61+
desc->styp = decode_uint8(p);
62+
desc->draw_as_obj = decode_uint8(p);
63+
desc->clip_below = decode_uint8(p);
64+
desc->number_of_seasons = decode_sint8(p);
65+
}
66+
else if (version == 7) {
5267
// cost/maintenance as sint64
5368
desc->price = decode_sint64(p);
5469
desc->maintenance = decode_sint64(p);
@@ -164,6 +179,10 @@ obj_desc_t * way_reader_t::read_node(FILE *fp, obj_node_info_t &node)
164179
desc->axle_load = 9999;
165180
}
166181

182+
if (version < 8) {
183+
desc->clip_below = desc->wtyp != powerline_wt;
184+
}
185+
167186
// front images from version 5 on
168187
desc->front_images = version > 4;
169188

src/simutrans/descriptor/way_desc.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class way_desc_t : public obj_desc_transport_infrastructure_t {
6060
/// if true front_images lists exists as nodes
6161
bool front_images;
6262

63+
bool clip_below; // only relevant for elevated ways
64+
6365
/**
6466
* calculates index of image list for flat ways
6567
* for winter and/or front images
@@ -100,6 +102,8 @@ class way_desc_t : public obj_desc_transport_infrastructure_t {
100102

101103
bool is_tram() const { return wtyp == track_wt && styp == type_tram; }
102104

105+
bool is_clip_below() const { return clip_below; }
106+
103107
image_id get_image_id(ribi_t::ribi ribi, uint8 season, bool front = false) const
104108
{
105109
if (front && !front_images) {

src/simutrans/descriptor/writer/bridge_writer.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,15 @@ void bridge_writer_t::write_obj(FILE *outfp, obj_node_t &parent, tabfileobj_t &o
108108
max_length = obj.get_int_clamped("max_length", max_length, 0, UINT8_MAX); // with correct spelling
109109
const uint8 max_height = obj.get_int_clamped("max_height", 0, 0, UINT8_MAX); // max_height==0: unlimited
110110
const uint16 axle_load = obj.get_int_clamped("axle_load", 9999, 0, UINT16_MAX);
111+
const uint8 clip_below = obj.get_int_clamped("clip_below", 1, 0, 1); // clip ground below
111112

112113
// timeline
113114
const uint16 intro_date = 12*obj.get_int_clamped("intro_year", DEFAULT_INTRO_YEAR, 0, INT32_MAX) + obj.get_int_clamped("intro_month", 1, 1, 12) - 1;
114115
const uint16 retire_date = 12*obj.get_int_clamped("retire_year", DEFAULT_RETIRE_YEAR, 0, INT32_MAX) + obj.get_int_clamped("retire_month", 1, 1, 12) - 1;
115116

116-
obj_node_t node(this, 32, &parent);
117+
obj_node_t node(this, 33, &parent);
117118

118-
node.write_version(outfp, 10);
119+
node.write_version(outfp, 11);
119120
node.write_uint16(outfp, topspeed);
120121
node.write_sint64(outfp, price);
121122
node.write_sint64(outfp, maintenance);
@@ -127,6 +128,7 @@ void bridge_writer_t::write_obj(FILE *outfp, obj_node_t &parent, tabfileobj_t &o
127128
node.write_uint8 (outfp, pillar_asymmetric);
128129
node.write_uint16(outfp, axle_load);
129130
node.write_uint8 (outfp, max_height);
131+
node.write_uint8 (outfp, clip_below);
130132

131133
char keybuf[40];
132134
std::string str = obj.get("backimage[ns][0]");

src/simutrans/descriptor/writer/way_writer.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
3939
const sint32 topspeed = obj.get_int("topspeed", 999);
4040
const uint32 max_weight = obj.get_int("max_weight", 999);
4141
const uint16 axle_load = obj.get_int("axle_load", 9999);
42+
const uint8 clip_below = obj.get_int_clamped("clip_below", 1, 0, 1); // clip ground below (if elevated way)
43+
4244

4345
uint16 intro = obj.get_int("intro_year", DEFAULT_INTRO_YEAR) * 12;
4446
intro += obj.get_int("intro_month", 1) - 1;
@@ -61,9 +63,9 @@ void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
6163
uint8 draw_as_ding = (obj.get_int("draw_as_ding", 0) == 1);
6264
sint8 number_of_seasons = 0;
6365

64-
obj_node_t node(this, 36, &parent);
66+
obj_node_t node(this, 37, &parent);
6567

66-
node.write_version(outfp, 7);
68+
node.write_version(outfp, 8);
6769
node.write_sint64(outfp, price);
6870
node.write_sint64(outfp, maintenance);
6971
node.write_sint32(outfp, topspeed);
@@ -74,6 +76,7 @@ void way_writer_t::write_obj(FILE* outfp, obj_node_t& parent, tabfileobj_t& obj)
7476
node.write_uint8 (outfp, wtyp);
7577
node.write_uint8 (outfp, styp);
7678
node.write_uint8 (outfp, draw_as_ding);
79+
node.write_uint8 (outfp, clip_below);
7780

7881

7982
slist_tpl<std::string> keys;

src/simutrans/obj/bruecke.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ bruecke_t::bruecke_t(loadsave_t* const file) : obj_no_info_t()
2525
}
2626

2727

28+
bool bruecke_t::is_clipping_below_needed() const
29+
{
30+
// elevated no clip?
31+
return desc->is_clip_below();
32+
}
33+
34+
2835
bruecke_t::bruecke_t(koord3d pos, player_t *player, const bridge_desc_t *desc, bridge_desc_t::img_t img) :
2936
obj_no_info_t(pos)
3037
{

src/simutrans/obj/bruecke.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class bruecke_t : public obj_no_info_t
3939
void set_desc(const bridge_desc_t *b) { desc = b; }
4040
const bridge_desc_t *get_desc() const { return desc; }
4141

42+
virtual bool is_clipping_below_needed() const OVERRIDE;
43+
4244
// we will always replace first way image
4345
image_id get_image() const OVERRIDE { return IMG_EMPTY; }
4446

0 commit comments

Comments
 (0)