def select(self): self.is_selected = True if self.tog_lock.GetValue() == False: app.get_outdoor().selectlayer(self.layer_id) else: app.get_outdoor().selectlayer(-1) self.__update_colors()
def on_new_layer(self, event): if app.get_outdoor() is None: cjr.show_information_message( "You need to create a terrain first" ) return if app.get_outdoor().getlayercount() >= MaxLayers: cjr.show_information_message( "You cannot have more than %s layers" % str(MaxLayers) ) return dlg = trnlayerprefsdlg.NewLayerDialog(self) if dlg.ShowModal() == wx.ID_OK: try: try: wx.BeginBusyCursor() # create new layer layer_id = app.get_outdoor().createlayer() app.get_outdoor().getlayerbyhandle(layer_id).loadresources() # create new layer control self.Freeze() layer_ctrl = self.__add_layer_ctrl(layer_id) dlg.apply_layer_settings(layer_ctrl) self.__refresh_layers() self.Thaw() finally: wx.EndBusyCursor() except: # make sure any errors are not hidden raise dlg.Destroy()
def apply_layer_settings(self, layer_ctrl): u_value = float(self.settings.choice_u.GetValue()) v_value = float(self.settings.choice_v.GetValue()) layer_ctrl.set_layer_name(str(self.settings.text_name.GetValue())) if self.settings.radio_local_texture.GetValue(): layer_ctrl.set_texture_filename( str( format.append_to_path( self.settings.get_textures_path(), self.settings.combo_local_texture.GetStringSelection()) )) else: layer_ctrl.set_texture_filename( str( format.append_to_path( self.settings.get_shared_path(), self.settings.button_shared_texture.GetLabel()))) layer_ctrl.set_uv_scale((self.settings.uvsize2scale(u_value), self.settings.uvsize2scale(v_value))) layer_ctrl.set_projection( self.settings.choice_projection.GetSelection()) layer_ctrl.set_color_mask(self.settings.color_sel.get_value()) layer_ctrl.set_game_material( self.settings.choice_game_material.GetStringSelection()) # update material info try: app.get_outdoor().updatematerialall() except: pass
def on_toggle_lock(self, event): if event.GetIsDown(): if self.is_selected: app.get_outdoor().selectlayer(-1) else: if self.is_selected: app.get_outdoor().selectlayer(self.layer_id) self.__update_colors()
def on_delete_layer(self, event): if self.layer_selected is not None: msg = "Are you sure that you want to delete the '%s' layer?"\ % self.layer_selected.get_layer_name() result = cjr.confirm_yes_no(self, msg) if result == wx.ID_YES: # delete selected layer app.get_outdoor().removelayer( self.layer_selected.get_layer_id() ) # delete layer control self.Freeze() self.__delete_layer_ctrl(self.layer_selected) self.__refresh_layers() self.Thaw()
def on_copy_material(self, event): material = self.material_selected.material # Ask for material name dlg = wx.TextEntryDialog( self, "This will create a copy of the '%s' material.\n\n" \ "Enter a name for the new material." % material.getname(), "Create a copy of an existing grass material" ) if dlg.ShowModal() == wx.ID_OK: name = str(dlg.GetValue()) if name.strip() == "": cjr.show_error_message( "Please enter a name for the new grass material.") else: # Validate name terrain = app.get_outdoor() if terrain.hasgrowthmaterialwithname(name): cjr.show_error_message( "There is already a grass material called '%s'." % name) else: # Add copy of material terrain.addcopyofgrowthmaterial(material, name) self.__build_material_list() dlg.Destroy()
def restore(self, data): if data.has_key('alpha'): alpha = data['alpha'] self.slider_alpha.set_value( alpha ) terrain = app.get_outdoor() if terrain is not None: terrain.setgrowtheditionalpha( alpha )
def on_new_material(self, event): # Ask for material name dlg = wx.TextEntryDialog( self, "Enter a material name", "New grass material" ) if dlg.ShowModal() == wx.ID_OK: name = str( dlg.GetValue() ) if name.strip() == "": cjr.show_error_message( "Please enter a name for the new grass material." ) else: # Validate name terrain = app.get_outdoor() if terrain.hasgrowthmaterialwithname(name): cjr.show_error_message( "There is already a grass material called '%s'." % name ) else: # Add new material terrain.creategrowthmaterial(name) self.__build_material_list() dlg.Destroy()
def __init__(self, parent): togwin.ChildToggableDialog.__init__(self, "Terrain materials", parent) self.layer_selected = None # all controls but layers self.scroll_layers = wx.ScrolledWindow( self, -1, style=wx.NO_BORDER|wx.TAB_TRAVERSAL ) self.button_new = wx.Button(self, -1, "&New material") self.button_delete = wx.Button(self, -1, "Delete &material") self.button_close = wx.Button(self, wx.ID_CANCEL, "&Close") self.lines = [] # layer controls self.layers = [] outdoor = app.get_outdoor() if outdoor is not None: layer_count = outdoor.getlayercount() for i in range(layer_count): layer_id = outdoor.getlayerhandle(i) self.__add_layer_ctrl(layer_id) self.__set_properties() self.__do_layout() self.__bind_events()
def restore(self, data): if data.has_key('alpha'): alpha = data['alpha'] self.slider_alpha.set_value(alpha) terrain = app.get_outdoor() if terrain is not None: terrain.setgrowtheditionalpha(alpha)
def on_copy_material(self, event): material = self.material_selected.material # Ask for material name dlg = wx.TextEntryDialog( self, "This will create a copy of the '%s' material.\n\n" \ "Enter a name for the new material." % material.getname(), "Create a copy of an existing grass material" ) if dlg.ShowModal() == wx.ID_OK: name = str( dlg.GetValue() ) if name.strip() == "": cjr.show_error_message( "Please enter a name for the new grass material." ) else: # Validate name terrain = app.get_outdoor() if terrain.hasgrowthmaterialwithname(name): cjr.show_error_message( "There is already a grass material called '%s'." % name ) else: # Add copy of material terrain.addcopyofgrowthmaterial( material, name ) self.__build_material_list() dlg.Destroy()
def __init__(self, *args, **kwds): ToolPanel.__init__(self, *args, **kwds) self.tool = trn.get_terrain_tool('toolFlatten') # controls # Needed to set the slider range here because using the # __update_slider_range doesn't update the slider range if called # during dialog contruction. outdoor = app.get_outdoor() if outdoor is None: min_value = 0.0 max_value = 100.0 else: min_value = outdoor.getminheight() max_value = outdoor.getmaxheight() value = (max_value - min_value) / 2 self.slider_height = floatslider.FloatSlider(self, -1, "Height", value, min_value, max_value, precision=10.0) self.checkbox_adaptive = wx.CheckBox(self, -1, "") self.slider_adaptive = floatslider.FloatSlider(self, -1, "Adaptive", 0.5, 0.0, 1.0, precision=1000.0) self.__set_properties() self.__do_layout() self._bind_events()
def on_ok(self, event): if app.get_outdoor() is not None: cjr.show_error_message( "The level already has a terrain instance." ) return if self.list.GetSelection() == wx.NOT_FOUND: cjr.show_error_message( "Please select a terrain class." ) else: # Create a new terrain dlg = waitdlg.WaitDialog( self.GetParent(), "Creating terrain instance..." ) created_ok = trn.get_terrain_module().createterraininstance( str( self.list.GetStringSelection() ) ) dlg.Destroy() if not created_ok: cjr.show_error_message( "Unable to create the terrain instance." ) else: # Closes dialog reporting OK self.EndModal(wx.ID_OK)
def __init__(self, *args, **kwds): ToolPanel.__init__(self, *args, **kwds) self.tool = trn.get_terrain_tool('toolFlatten') # controls # Needed to set the slider range here because using the # __update_slider_range doesn't update the slider range if called # during dialog contruction. outdoor = app.get_outdoor() if outdoor is None: min_value = 0.0 max_value = 100.0 else: min_value = outdoor.getminheight() max_value = outdoor.getmaxheight() value = (max_value - min_value) / 2 self.slider_height = floatslider.FloatSlider( self, -1, "Height", value, min_value, max_value, precision=10.0 ) self.checkbox_adaptive = wx.CheckBox(self, -1, "") self.slider_adaptive = floatslider.FloatSlider( self, -1, "Adaptive", 0.5, 0.0, 1.0, precision=1000.0 ) self.__set_properties() self.__do_layout() self._bind_events()
def __init__(self, *args, **kwds): ToolPanel.__init__(self, *args, **kwds) self.tool = trn.get_terrain_tool('toolPaint') self.slider_blend = floatslider.FloatSlider(self, -1, "Blend", 0.5, 0.0, 1.0, precision=1000.0) self.staticbox_filter = wx.StaticBox(self, -1, "Filter") self.checkbox_slope = wx.CheckBox(self, -1, "Filter by slope") self.slider_min_slope = floatslider.FloatSlider(self, -1, "Min. slope", 15.0, 0.0, 90.0, precision=10.0) self.slider_max_slope = floatslider.FloatSlider(self, -1, "Max. slope", 45.0, 0.0, 90.0, precision=10.0) self.staticline_filter = wx.StaticLine(self, -1) self.checkbox_height = wx.CheckBox(self, -1, "Filter by height") # Needed to set the height sliders range here because using the # __update_sliders_height doesn't update the height sliders range if # called during dialog contruction. outdoor = app.get_outdoor() if outdoor is None: min_value = 0.0 max_value = 100.0 else: min_value = outdoor.getminheight() max_value = outdoor.getmaxheight() value = 0.8 * min_value + 0.2 * max_value self.slider_min_height = floatslider.FloatSlider(self, -1, "Min. height", value, min_value, max_value, precision=10.0) value = 0.2 * min_value + 0.8 * max_value self.slider_max_height = floatslider.FloatSlider(self, -1, "Max. height", value, min_value, max_value, precision=10.0) self.__set_properties() self._do_layout() self._bind_events()
def __set_properties(self): self.text_classname.SetMaxLength( cfg.MAX_LENGTH_CLASS_NAME ) self.checkbox_make_terrain.Enable( app.get_outdoor() is None ) self.button_ok.SetDefault()
def refresh(self): outdoor = app.get_outdoor() self.Enable( ID_NewTerrain, outdoor is None ) self.Enable( ID_Properties, outdoor is not None ) self.Enable( ID_Import, outdoor is not None ) self.Enable( ID_Export, outdoor is not None ) self.Enable( ID_ImportTerrainMaterials, outdoor is not None ) self.Enable( ID_ImportGrassMaterials, outdoor is not None )
def __update_sliders_height(self): # Update height sliders' range outdoor = app.get_outdoor() if outdoor is not None: self.slider_min_height.set_range(outdoor.getminheight(), outdoor.getmaxheight()) self.slider_max_height.set_range(outdoor.getminheight(), outdoor.getmaxheight())
def refresh(self): outdoor = app.get_outdoor() self.Enable(ID_NewTerrain, outdoor is None) self.Enable(ID_Properties, outdoor is not None) self.Enable(ID_Import, outdoor is not None) self.Enable(ID_Export, outdoor is not None) self.Enable(ID_ImportTerrainMaterials, outdoor is not None) self.Enable(ID_ImportGrassMaterials, outdoor is not None)
def __update_sliders_height(self): # Update height sliders' range outdoor = app.get_outdoor() if outdoor is not None: self.slider_min_height.set_range( outdoor.getminheight(), outdoor.getmaxheight() ) self.slider_max_height.set_range( outdoor.getminheight(), outdoor.getmaxheight() )
def __set_properties(self): self.SetSize((400, 300)) self.scroll_materials.SetScrollRate(10, 10) if app.get_outdoor() is None: cjr.show_warning_message("The current level has no terrain") return self.__build_material_list()
def set_properties(self): self.button_close.SetDefault() # Fill all property controls outdoor = app.get_outdoor() self.props_ctrls.set_properties(outdoor) if outdoor is not None: self.text_classname.SetValue( outdoor.getname() ) # Disable all property controls since are read-only self.text_classname.Disable()
def apply_layer_settings(self, layer_ctrl): u_value = float( self.settings.choice_u.GetValue() ) v_value = float( self.settings.choice_v.GetValue() ) layer_ctrl.set_layer_name( str( self.settings.text_name.GetValue() ) ) if self.settings.radio_local_texture.GetValue(): layer_ctrl.set_texture_filename( str( format.append_to_path( self.settings.get_textures_path(), self.settings.combo_local_texture.GetStringSelection() ) ) ) else: layer_ctrl.set_texture_filename( str( format.append_to_path( self.settings.get_shared_path(), self.settings.button_shared_texture.GetLabel() ) ) ) layer_ctrl.set_uv_scale(( self.settings.uvsize2scale(u_value), self.settings.uvsize2scale(v_value) )) layer_ctrl.set_projection( self.settings.choice_projection.GetSelection() ) layer_ctrl.set_color_mask( self.settings.color_sel.get_value() ) layer_ctrl.set_game_material( self.settings.choice_game_material.GetStringSelection() ) # update material info try: app.get_outdoor().updatematerialall() except: pass
def __update_material_ctrls(self): """Build the list of controls for display""" for each_control in self.material_ctrls: self.__delete_material_ctrl(each_control) self.material_ctrls = [] outdoor = app.get_outdoor() if outdoor is not None: for material_index in range( outdoor.getnumberofgrowthmaterials() ): material = outdoor.getgrowthmaterialbyid(material_index) self.__add_material_ctrl(material_index, material)
def __set_properties(self): self.SetSize((400, 300)) self.scroll_layers.SetScrollRate(10, 10) if app.get_outdoor() is None: return # default layer states not stored in nebula terrain object layers = [] for layer in self.layers: layers.append({ 'lock': False }) data = { 'selected layer': app.get_outdoor().getselectedlayerhandle(), 'layers': layers } self.restore([data])
def __update_material_ctrls(self): """Build the list of controls for display""" for each_control in self.material_ctrls: self.__delete_material_ctrl(each_control) self.material_ctrls = [] outdoor = app.get_outdoor() if outdoor is not None: for material_index in range(outdoor.getnumberofgrowthmaterials()): material = outdoor.getgrowthmaterialbyid(material_index) self.__add_material_ctrl(material_index, material)
def __set_properties(self): self.SetSize( (400, 300) ) self.scroll_materials.SetScrollRate(10, 10) if app.get_outdoor() is None: cjr.show_warning_message( "The current level has no terrain" ) return self.__build_material_list()
def restore(self, data_list): data = data_list[0] # layer states not stored in nebula terrain object for i in range(min( len(self.layers), len(data['layers']) )): layer_data = data['layers'][i] self.layers[i].set_lock( layer_data['lock'] ) # selected layer if app.get_outdoor() is not None: app.get_outdoor().selectlayer( data['selected layer'] ) if data['selected layer'] != -1: for layer in self.layers: if layer.get_layer_id() == data['selected layer']: if self.layer_selected is not None: self.layer_selected.deselect() self.layer_selected = layer layer.select() break # enable/disable delete button self.button_delete.Enable( len(self.layers) > 1 )
def on_update_height(self, event): """Update grass height""" level_manager = servers.get_level_manager() level_name = level_manager.getcurrentlevelobject().getname() if level_name == "default": cjr.show_error_message( "Unable to update grass height for default level.") else: dlg = waitdlg.WaitDialog(self.get_frame(), "Updating grass height...") terrain = app.get_outdoor() terrain.grassupdateheight() dlg.Destroy()
def on_delete_material(self, event): material_id = self.__get_id_for_selected_material() # don't allow the user to delete the default material if material_id > 0: # Ask for confirmation name = self.__get_name_of_selected_material() msg = "Are you sure you want to delete the '%s' grass material?" \ % name result = cjr.confirm_yes_no(self, msg) if result == wx.ID_YES: # Delete material terrain = app.get_outdoor() terrain.deletegrowthmaterial( material_id ) self.__build_material_list()
def on_delete_material(self, event): material_id = self.__get_id_for_selected_material() # don't allow the user to delete the default material if material_id > 0: # Ask for confirmation name = self.__get_name_of_selected_material() msg = "Are you sure you want to delete the '%s' grass material?" \ % name result = cjr.confirm_yes_no(self, msg) if result == wx.ID_YES: # Delete material terrain = app.get_outdoor() terrain.deletegrowthmaterial(material_id) self.__build_material_list()
def persist(self): # layer states not stored in nebula terrain object layers = [] for layer in self.layers: layers.append({ 'lock': layer.is_locked() }) # selected layer if app.get_outdoor() is None: layer_id = -1 else: layer_id = app.get_outdoor().getselectedlayerhandle() data = { 'selected layer': layer_id, 'layers': layers } return [ create_window, (), # no parameters for create function data ]
def on_update_height(self, event): """Update grass height""" level_manager = servers.get_level_manager() level_name = level_manager.getcurrentlevelobject().getname() if level_name == "default": cjr.show_error_message( "Unable to update grass height for default level." ) else: dlg = waitdlg.WaitDialog( self.get_frame(), "Updating grass height..." ) terrain = app.get_outdoor() terrain.grassupdateheight() dlg.Destroy()
def on_generate_grass_dirty(self, event): """Generate terrain grass, only dirty""" level_manager = servers.get_level_manager() level_name = level_manager.getcurrentlevelobject().getname() if level_name == "default": cjr.show_error_message( "Unable to generate grass for default level.") else: dlg = waitdlg.WaitDialog(self.get_frame(), "Generating grass...") terrain = app.get_outdoor() editing = terrain.isingrowthedition() if not editing: terrain.begingrowthediton() terrain.buildonlydirtygrowth() if not editing: terrain.endgrowtedition(False) dlg.Destroy()
def on_generate_grass_dirty(self, event): """Generate terrain grass, only dirty""" level_manager = servers.get_level_manager() level_name = level_manager.getcurrentlevelobject().getname() if level_name == "default": cjr.show_error_message( "Unable to generate grass for default level." ) else: dlg = waitdlg.WaitDialog( self.get_frame(), "Generating grass..." ) terrain = app.get_outdoor() editing = terrain.isingrowthedition() if not editing: terrain.begingrowthediton() terrain.buildonlydirtygrowth() if not editing: terrain.endgrowtedition( False ) dlg.Destroy()
def on_ok(self, event): outdoor = app.get_outdoor() if outdoor is None: cjr.show_error_message("The level has no terrain instance.") return if self.has_terrain_class_selected(): # Import terrain materials try: dlg = waitdlg.WaitDialog(self.GetParent(), self.importing_materials_text()) imported_ok = self.import_materials_to_outdoor(outdoor) finally: dlg.Destroy() if imported_ok: # Closes dialog reporting OK self.EndModal(wx.ID_OK) else: cjr.show_error_message( "Please select a terrain class from the list.")
def on_ok(self, event): if app.get_outdoor() is not None: cjr.show_error_message("The level already has a terrain instance.") return if self.list.GetSelection() == wx.NOT_FOUND: cjr.show_error_message("Please select a terrain class.") else: # Create a new terrain dlg = waitdlg.WaitDialog(self.GetParent(), "Creating terrain instance...") created_ok = trn.get_terrain_module().createterraininstance( str(self.list.GetStringSelection())) dlg.Destroy() if not created_ok: cjr.show_error_message( "Unable to create the terrain instance.") else: # Closes dialog reporting OK self.EndModal(wx.ID_OK)
def on_new_material(self, event): # Ask for material name dlg = wx.TextEntryDialog(self, "Enter a material name", "New grass material") if dlg.ShowModal() == wx.ID_OK: name = str(dlg.GetValue()) if name.strip() == "": cjr.show_error_message( "Please enter a name for the new grass material.") else: # Validate name terrain = app.get_outdoor() if terrain.hasgrowthmaterialwithname(name): cjr.show_error_message( "There is already a grass material called '%s'." % name) else: # Add new material terrain.creategrowthmaterial(name) self.__build_material_list() dlg.Destroy()
def __init__(self, *args, **kwds): ToolPanel.__init__(self, *args, **kwds) self.tool = trn.get_terrain_tool('toolPaint') self.slider_blend = floatslider.FloatSlider( self, -1, "Blend", 0.5, 0.0, 1.0, precision=1000.0 ) self.staticbox_filter = wx.StaticBox(self, -1, "Filter") self.checkbox_slope = wx.CheckBox(self, -1, "Filter by slope") self.slider_min_slope = floatslider.FloatSlider( self, -1, "Min. slope", 15.0, 0.0, 90.0, precision=10.0 ) self.slider_max_slope = floatslider.FloatSlider( self, -1, "Max. slope", 45.0, 0.0, 90.0, precision=10.0 ) self.staticline_filter = wx.StaticLine(self, -1) self.checkbox_height = wx.CheckBox(self, -1, "Filter by height") # Needed to set the height sliders range here because using the # __update_sliders_height doesn't update the height sliders range if # called during dialog contruction. outdoor = app.get_outdoor() if outdoor is None: min_value = 0.0 max_value = 100.0 else: min_value = outdoor.getminheight() max_value = outdoor.getmaxheight() value = 0.8 * min_value + 0.2 * max_value self.slider_min_height = floatslider.FloatSlider( self, -1, "Min. height", value, min_value, max_value, precision=10.0 ) value = 0.2 * min_value + 0.8 * max_value self.slider_max_height = floatslider.FloatSlider( self, -1, "Max. height", value, min_value, max_value, precision=10.0 ) self.__set_properties() self._do_layout() self._bind_events()
def on_ok(self, event): outdoor = app.get_outdoor() if outdoor is None: cjr.show_error_message("The level has no terrain instance.") return if self.has_terrain_class_selected(): # Import terrain materials try: dlg = waitdlg.WaitDialog( self.GetParent(), self.importing_materials_text() ) imported_ok = self.import_materials_to_outdoor(outdoor) finally: dlg.Destroy() if imported_ok: # Closes dialog reporting OK self.EndModal(wx.ID_OK) else: cjr.show_error_message( "Please select a terrain class from the list." )
def __get_material(self): return app.get_outdoor().getlayerbyhandle(self.layer_id)
def on_alpha(self, event): alpha = self.slider_alpha.get_value() terrain = app.get_outdoor() terrain.setgrowtheditionalpha( alpha )
def get_textures_path(self): return "wc:export/assets/%s/textures" % app.get_outdoor().getname()
def __set_properties(self): # default projection self.choice_projection.SetSelection(0) # allowed UV size values outdoor = app.get_outdoor() min_value = 0.25 self.max_uvsize = outdoor.getheightmap().getgridscale() * \ (outdoor.getblocksize() - 1) while min_value <= self.max_uvsize: self.choice_u.Append( str(min_value) ) self.choice_v.Append( str(min_value) ) min_value = min_value * 2 # valid texture files self.__update_combo_local_texture() # default texture files self.button_shared_texture.SetLabel( "dds/ground/cesped_test_terrain.dds" ) if self.combo_local_texture.GetCount() == 0: self.radio_local_texture.Enable(False) else: self.combo_local_texture.SetSelection(0) self.radio_local_texture.SetValue(False) self.radio_shared_texture.SetValue(True) # default UV size self.choice_u.SetValue("1.0") self.choice_v.SetValue("1.0") # align texture box fields by setting all labels to longest length format.align_labels([ self.radio_local_texture, self.radio_shared_texture, self.label_u, self.label_projection ]) # valid game materials self.__update_game_materials_choicer() # current settings if self.layer_ctrl is not None: self.text_name.SetValue( self.layer_ctrl.get_layer_name() ) mangled_path = format.mangle_path( self.layer_ctrl.get_texture_filename() ) mangled_local_dir = format.mangle_path( self.get_textures_path() ) mangled_shared_dir = format.mangle_path( self.get_shared_path() ) if mangled_path.startswith( mangled_local_dir ): self.combo_local_texture.SetStringSelection( format.get_relative_path( mangled_local_dir, mangled_path ) ) self.radio_shared_texture.SetValue(False) self.radio_local_texture.SetValue(True) else: self.button_shared_texture.SetLabel( format.get_relative_path( mangled_shared_dir, mangled_path ) ) self.radio_local_texture.SetValue(False) self.radio_shared_texture.SetValue(True) uv_scale = self.layer_ctrl.get_uv_scale() self.choice_u.SetValue( str( self.uvscale2size(uv_scale[0]) ) ) self.choice_v.SetValue( str( self.uvscale2size(uv_scale[1]) ) ) self.choice_projection.SetSelection( self.layer_ctrl.get_projection() ) color = self.layer_ctrl.get_color_mask().Get() self.color_sel.set_value(color)
def on_alpha(self, event): alpha = self.slider_alpha.get_value() terrain = app.get_outdoor() terrain.setgrowtheditionalpha(alpha)
def __set_properties(self): # default projection self.choice_projection.SetSelection(0) # allowed UV size values outdoor = app.get_outdoor() min_value = 0.25 self.max_uvsize = outdoor.getheightmap().getgridscale() * \ (outdoor.getblocksize() - 1) while min_value <= self.max_uvsize: self.choice_u.Append(str(min_value)) self.choice_v.Append(str(min_value)) min_value = min_value * 2 # valid texture files self.__update_combo_local_texture() # default texture files self.button_shared_texture.SetLabel( "dds/ground/cesped_test_terrain.dds") if self.combo_local_texture.GetCount() == 0: self.radio_local_texture.Enable(False) else: self.combo_local_texture.SetSelection(0) self.radio_local_texture.SetValue(False) self.radio_shared_texture.SetValue(True) # default UV size self.choice_u.SetValue("1.0") self.choice_v.SetValue("1.0") # align texture box fields by setting all labels to longest length format.align_labels([ self.radio_local_texture, self.radio_shared_texture, self.label_u, self.label_projection ]) # valid game materials self.__update_game_materials_choicer() # current settings if self.layer_ctrl is not None: self.text_name.SetValue(self.layer_ctrl.get_layer_name()) mangled_path = format.mangle_path( self.layer_ctrl.get_texture_filename()) mangled_local_dir = format.mangle_path(self.get_textures_path()) mangled_shared_dir = format.mangle_path(self.get_shared_path()) if mangled_path.startswith(mangled_local_dir): self.combo_local_texture.SetStringSelection( format.get_relative_path(mangled_local_dir, mangled_path)) self.radio_shared_texture.SetValue(False) self.radio_local_texture.SetValue(True) else: self.button_shared_texture.SetLabel( format.get_relative_path(mangled_shared_dir, mangled_path)) self.radio_local_texture.SetValue(False) self.radio_shared_texture.SetValue(True) uv_scale = self.layer_ctrl.get_uv_scale() self.choice_u.SetValue(str(self.uvscale2size(uv_scale[0]))) self.choice_v.SetValue(str(self.uvscale2size(uv_scale[1]))) self.choice_projection.SetSelection( self.layer_ctrl.get_projection()) color = self.layer_ctrl.get_color_mask().Get() self.color_sel.set_value(color)