Skip to content

Commit eb764aa

Browse files
committed
finish implementation
1 parent 0a4dd37 commit eb764aa

File tree

3 files changed

+73
-18
lines changed

3 files changed

+73
-18
lines changed

rct-graphics-helper/angle_sections/track.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,13 @@
125125
[True, 4, -8.0503, -45, 0],
126126
[True, 4, -8.0503, 45, 0]
127127
],
128-
'Slopes16Banked22': [
128+
'slopes16Banked22': [
129129
[True, 4, 16.1005, -22.5, 0],
130130
[True, 4, 16.1005, 22.5, 0],
131131
[True, 4, -16.1005, -22.5, 0],
132132
[True, 4, -16.1005, 22.5, 0]
133133
],
134-
'Slopes16Banked45': [
134+
'slopes16Banked45': [
135135
[True, 4, 16.1005, -45, 0],
136136
[True, 4, 16.1005, 45, 0],
137137
[True, 4, -16.1005, -45, 0],
@@ -282,6 +282,7 @@
282282
"curvedLiftHillDown": [32, "Spiral lifthill down track"]
283283
}
284284

285+
# All legacy groups. See list in rct_graphics_helper_panel.py for which ones are displayed
285286
legacy_group_names = [
286287
"VEHICLE_SPRITE_FLAG_FLAT",
287288
"VEHICLE_SPRITE_FLAG_GENTLE_SLOPES",
@@ -299,6 +300,16 @@
299300
"VEHICLE_SPRITE_FLAG_RESTRAINT_ANIMATION",
300301
"VEHICLE_SPRITE_FLAG_CURVED_LIFT_HILL",
301302
"VEHICLE_SPRITE_FLAG_ZERO_G_ROLLS",
303+
"VEHICLE_SPRITE_FLAG_INVERTED",
304+
"VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPE_BANKED"
305+
]
306+
307+
# Legacy sprite groups that are reset every time the user makes a selection
308+
legacy_groups_implied = [
309+
"VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS",
310+
"VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS",
311+
"VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS",
312+
"VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS",
302313
"VEHICLE_SPRITE_FLAG_INVERTED"
303314
]
304315

@@ -322,6 +333,7 @@
322333
"VEHICLE_SPRITE_FLAG_CURVED_LIFT_HILL": ["Spiral Lifthill", "Render sprites for spiral lifthills", False],
323334
"VEHICLE_SPRITE_FLAG_ZERO_G_ROLLS": ["Zero-G Rolls", "Render sprites for zero-G rolls", False],
324335
"VEHICLE_SPRITE_FLAG_INVERTED": ["", "", False],
336+
"VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPE_BANKED": ["Diagonal Sloped Banked", "Render sprites for diagonal sloped banked track", False],
325337
}
326338

327339
# What full sprite groups each legacy group maps to
@@ -342,15 +354,19 @@
342354
'VEHICLE_SPRITE_FLAG_RESTRAINT_ANIMATION': ['restraintAnimation'],
343355
'VEHICLE_SPRITE_FLAG_CURVED_LIFT_HILL': ['curvedLiftHillUp', 'curvedLiftHillDown'],
344356
'VEHICLE_SPRITE_FLAG_ZERO_G_ROLLS': ["slopes60Banked22", "slopes42Banked22","slopes42Banked45","slopes42Banked67","slopes42Banked90", "slopes25InlineTwists", "slopes25Banked67","slopes25Banked90"],
345-
'VEHICLE_SPRITE_FLAG_INVERTED': ['slopeInverted']
357+
'VEHICLE_SPRITE_FLAG_INVERTED': ['slopeInverted'],
358+
'VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPE_BANKED': ['slopes8Banked45', 'slopes16Banked22', 'slopes16Banked45']
346359
}
347360

348361
# What legacy groups are implied by combinations of other legacy sprite groups
349-
legacy_group_implications = {
362+
legacy_group_dependencies = {
350363
frozenset({'VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS'}): frozenset({'VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS','VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_WHILE_BANKED_TRANSITIONS','VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS'}),
351364
frozenset({'VEHICLE_SPRITE_FLAG_FLAT_BANKED','VEHICLE_SPRITE_FLAG_GENTLE_SLOPES'}): frozenset({'VEHICLE_SPRITE_FLAG_FLAT_TO_GENTLE_SLOPE_BANKED_TRANSITIONS'}),
352365
frozenset({'VEHICLE_SPRITE_FLAG_FLAT_BANKED','VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES'}): frozenset({'VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS'}),
353366
frozenset({'VEHICLE_SPRITE_FLAG_INLINE_TWISTS'}): frozenset({'VEHICLE_SPRITE_FLAG_FLAT_BANKED', 'VEHICLE_SPRITE_FLAG_INVERTED'}),
354-
frozenset({'VEHICLE_SPRITE_FLAG_CORKSCREWS'}): frozenset({'VEHICLE_SPRITE_FLAG_INVERTED_SLOPES'}),
355-
frozenset({'VEHICLE_SPRITE_FLAG_ZERO_G_ROLLS'}): frozenset({'VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS', 'VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS', 'VEHICLE_SPRITE_FLAG_GENTLE_SLOPES', 'VEHICLE_SPRITE_FLAG_INVERTED'})
367+
frozenset({'VEHICLE_SPRITE_FLAG_CORKSCREWS'}): frozenset({'VEHICLE_SPRITE_FLAG_INVERTED'}),
368+
frozenset({'VEHICLE_SPRITE_FLAG_ZERO_G_ROLLS'}): frozenset({'VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS', 'VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TRANSITIONS', 'VEHICLE_SPRITE_FLAG_GENTLE_SLOPES', 'VEHICLE_SPRITE_FLAG_INVERTED'}),
369+
frozenset({'VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPE_BANKED'}): frozenset({'VEHICLE_SPRITE_FLAG_DIAGONAL_GENTLE_SLOPE_BANKED_TRANSITIONS'})
356370
}
371+
372+

rct-graphics-helper/properties/vehicle_properties.py

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import os
1313

1414
from ..operators.render_operator import RCTRender
15-
from ..angle_sections.track import sprite_group_metadata, legacy_group_names, legacy_group_metadata
15+
from ..angle_sections.track import sprite_group_metadata, legacy_group_names, legacy_group_metadata, legacy_groups_implied, legacy_group_dependencies, legacy_group_map
1616

1717
class SpriteTrackFlag(object):
1818
name = ""
@@ -29,19 +29,44 @@ def __init__(self, section_id, name, description, default_value):
2929

3030
def CreateSpriteEnum(defaultValue):
3131
return (
32-
("0", "Disabled" + (defaultValue == 0 and " (Default)" or ""), "No sprites rendered", 0),
32+
("0", "None" + (defaultValue == 0 and " (Default)" or ""), "No sprites rendered", 0),
3333
("1", "1" + (defaultValue == 1 and " (Default)" or ""), "1 sprite", 1),
3434
("2", "2" + (defaultValue == 2 and " (Default)" or ""), "2 sprites", 2),
3535
("4", "4" + (defaultValue == 4 and " (Default)" or ""), "4 sprites (recommended minimum)", 4),
3636
("8", "8" + (defaultValue == 8 and " (Default)" or ""), "8 sprites", 8),
37-
("16", "16" + (defaultValue == 16 and " (Default)" or ""), "16 sprites (RCT1 default)", 16),
37+
("16", "16" + (defaultValue == 16 and " (Default)" or ""), "16 sprites", 16),
3838
("32", "32" + (defaultValue == 32 and " (Default)" or ""), "32 sprites (RCT2 default)", 32),
39-
("64", "64" + (defaultValue == 64 and " (Default)" or ""), "64 sprites (OpenRCT2 not yet implemented)", 64)
39+
("64", "64" + (defaultValue == 64 and " (Default)" or ""), "64 sprites ", 64)
4040
)
4141

42+
def set_groups_by_legacy_set(self, set):
43+
for groupname, newgroups in legacy_group_map.items():
44+
for group in newgroups:
45+
self[group] = sprite_group_metadata[group][0] * (groupname in set)
46+
4247
# this is called with self as VehicleProperties
43-
def legacy_groups_to_set(self, value):
44-
difference = [(self.sprite_track_flags[i] != value[i]) * (value[i] and 1 or -1) for i in range(len(self.sprite_track_flags))]
48+
def legacy_groups_set(self, value):
49+
new_with_implied = { legacy_group_names[i] for i in range(len(value)) if value[i] or (legacy_group_names[i] in legacy_groups_implied) }
50+
new = { legacy_group_names[i] for i in range(len(value)) if value[i] and not legacy_group_names[i] in legacy_groups_implied }
51+
for implied, dependencies in legacy_group_dependencies.items():
52+
if implied.issubset(new_with_implied):
53+
for group in dependencies:
54+
new.add(group)
55+
if not implied.issubset(new_with_implied) and len(implied) == 1:
56+
for group in implied:
57+
new.discard(group)
58+
set_groups_by_legacy_set(self, new)
59+
value = [group in new for group in legacy_group_names]
60+
for i in range(len(value)):
61+
self.sprite_track_flags[i] = value[i]
62+
63+
def legacy_flags_get(self):
64+
return [x for x in self.sprite_track_flags]
65+
66+
# When the user switches from full to simple mode, force the groups to match the simple mode
67+
def sprite_group_mode_updated(self, context):
68+
if self.sprite_group_mode == "SIMPLE":
69+
set_groups_by_legacy_set(self, self.get_legacy_set())
4570

4671
class VehicleProperties(bpy.types.PropertyGroup):
4772
# Create legacy sprite groups
@@ -53,11 +78,19 @@ class VehicleProperties(bpy.types.PropertyGroup):
5378
legacy_defaults.append(config[2])
5479

5580
sprite_track_flags = bpy.props.BoolVectorProperty(
81+
name="Track Pieces",
82+
default=legacy_defaults,
83+
description="Which track pieces to render sprites for",
84+
size=len(legacy_spritegroups)
85+
)
86+
87+
legacy_flags = bpy.props.BoolVectorProperty(
5688
name="Track Pieces",
5789
default=legacy_defaults,
5890
description="Which track pieces to render sprites for",
5991
size=len(legacy_spritegroups),
60-
set = legacy_groups_to_set
92+
set = legacy_groups_set,
93+
get = legacy_flags_get
6194
)
6295

6396
# Create modern sprite groups
@@ -80,9 +113,14 @@ class VehicleProperties(bpy.types.PropertyGroup):
80113
"Combines several sprite groups and sets their sprite precisions automatically", 1),
81114
("FULL", "Full sprite groups",
82115
"Set all sprite group precisions manually", 2),
83-
)
116+
),
117+
update = sprite_group_mode_updated
84118
)
85119

120+
def get_legacy_set(self):
121+
return { legacy_group_names[i] for i in range(len(self.sprite_track_flags)) if self.sprite_track_flags[i] }
122+
123+
86124

87125
def register_vehicles_properties():
88126
bpy.types.Scene.rct_graphics_helper_vehicle_properties = bpy.props.PointerProperty(

rct-graphics-helper/rct_graphics_helper_panel.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,12 @@ def draw_walls_panel(self, scene, layout):
173173

174174
legacy_group_display_order = [
175175
"VEHICLE_SPRITE_FLAG_FLAT",
176-
"VEHICLE_SPRITE_FLAG_GENTLE_SLOPES",
177-
"VEHICLE_SPRITE_FLAG_STEEP_SLOPES",
178-
"VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES",
179176
"VEHICLE_SPRITE_FLAG_FLAT_BANKED",
177+
"VEHICLE_SPRITE_FLAG_GENTLE_SLOPES",
180178
"VEHICLE_SPRITE_FLAG_GENTLE_SLOPE_BANKED_TURNS",
179+
"VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPES",
180+
"VEHICLE_SPRITE_FLAG_DIAGONAL_SLOPE_BANKED",
181+
"VEHICLE_SPRITE_FLAG_STEEP_SLOPES",
181182
"VEHICLE_SPRITE_FLAG_VERTICAL_SLOPES",
182183
"VEHICLE_SPRITE_FLAG_INLINE_TWISTS",
183184
"VEHICLE_SPRITE_FLAG_CORKSCREWS",
@@ -201,7 +202,7 @@ def draw_vehicle_panel(self, scene, layout):
201202
for legacy_group_name in self.legacy_group_display_order:
202203
sprite_track_flagset = properties.legacy_spritegroups[legacy_group_name]
203204
index = legacy_group_names.index(legacy_group_name)
204-
columns[i % 2].row().prop(properties, "sprite_track_flags",
205+
columns[i % 2].row().prop(properties, "legacy_flags",
205206
index=index, text=sprite_track_flagset.name)
206207
i += 1
207208
else:

0 commit comments

Comments
 (0)