Esempio n. 1
0
 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()
Esempio n. 2
0
    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()
Esempio n. 3
0
    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
Esempio n. 4
0
 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()
Esempio n. 5
0
 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()
Esempio n. 6
0
 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()
Esempio n. 7
0
 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 )
Esempio n. 8
0
 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()
Esempio n. 9
0
 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()
Esempio n. 10
0
 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)
Esempio n. 11
0
 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()
Esempio n. 12
0
    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()
Esempio n. 13
0
 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)
Esempio n. 14
0
 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()
Esempio n. 15
0
    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()
Esempio n. 16
0
 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()
Esempio n. 17
0
 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 )
Esempio n. 18
0
 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())
Esempio n. 19
0
 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)
Esempio n. 20
0
 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() )
Esempio n. 21
0
    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()
Esempio n. 22
0
 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()
Esempio n. 23
0
 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
Esempio n. 24
0
 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)
Esempio n. 25
0
 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])
Esempio n. 26
0
 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)
Esempio n. 27
0
    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()
Esempio n. 28
0
    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 )
Esempio n. 29
0
 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()
Esempio n. 30
0
 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()
Esempio n. 31
0
 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()
Esempio n. 32
0
    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
            ]
Esempio n. 33
0
 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()
Esempio n. 34
0
 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()
Esempio n. 35
0
 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()
Esempio n. 36
0
 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.")
Esempio n. 37
0
    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)
Esempio n. 38
0
 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()
Esempio n. 39
0
 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()
Esempio n. 40
0
 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."
             )
Esempio n. 41
0
 def __get_material(self):
     return app.get_outdoor().getlayerbyhandle(self.layer_id)
Esempio n. 42
0
 def on_alpha(self, event):
     alpha = self.slider_alpha.get_value()
     terrain = app.get_outdoor()
     terrain.setgrowtheditionalpha( alpha )
Esempio n. 43
0
 def get_textures_path(self):
     return "wc:export/assets/%s/textures" % app.get_outdoor().getname() 
Esempio n. 44
0
 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)
Esempio n. 45
0
 def on_alpha(self, event):
     alpha = self.slider_alpha.get_value()
     terrain = app.get_outdoor()
     terrain.setgrowtheditionalpha(alpha)
Esempio n. 46
0
 def get_textures_path(self):
     return "wc:export/assets/%s/textures" % app.get_outdoor().getname()
Esempio n. 47
0
    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)