1212import os
1313
1414from ..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
1717class SpriteTrackFlag (object ):
1818 name = ""
@@ -29,19 +29,44 @@ def __init__(self, section_id, name, description, default_value):
2929
3030def 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
4671class 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
87125def register_vehicles_properties ():
88126 bpy .types .Scene .rct_graphics_helper_vehicle_properties = bpy .props .PointerProperty (
0 commit comments