Example #1
0
    def __add_commands_of_action(self, class_name):
        # Ask for the InitAction prototype
        dlg = newcmddlg.NewInitActionCmdDlg(self)
        result_ok = dlg.ShowModal() == wx.ID_OK
        if result_ok:
            init_proto = dlg.get_command_prototype()
        else:
            init_proto = 'b_init_o'
        dlg.Destroy()
        
        # Add action commands
        self.__add_command(class_name, 'action_init', init_proto)
        self.__add_command(class_name, 'action_run', 'b_run_v')
        self.__add_command(class_name, 'action_end', 'v_end_v')
        
        # Open InitAction script so the user doesn't 
        # forget to set the parameters
        if result_ok:
            cmd_unpath = self.__get_cmd_path(class_name, init_proto, True)
            win = scripteditordlg.create_window(
                        app.get_top_window(), 
                        cmd_unpath 
                        )
            win.display()

        app.get_top_window().emit_app_event(
            events.ActionAdded(class_name) 
            )
Example #2
0
 def on_inspect_class_button(self, event):
     class_name = str(self.model.get_object_class())
     entity_server = servers.get_entity_class_server()
     class_to_inspect = entity_server.getentityclass(class_name)
     win = objdlg.create_window(app.get_top_window(),
                                class_to_inspect.getfullname())
     win.display()
Example #3
0
 def __save_docs(self):
     dlg = waitdlg.WaitDialog(app.get_top_window())
     for i in range(len(self.savers)):
         if self.checklist.IsChecked(i):
             dlg.set_message("Saving %s ..." % self.savers[i].get_brief())
             self.savers[i].save()
     dlg.Destroy()
Example #4
0
def layer_can_be_deleted(layer):
    """ Check that the layer can be deleted.
    Warn the user if it isn't and return false.
    Otherwise just return true. """
    # check the layer has not been locked
    layer_name = layer.getlayername()
    if layer.islocked():
        cjr.show_error_message(
            "You cannot delete the '%s' layer.\n\n" \
                "It is not possible to delete a locked layer." % layer_name
            )
        return False

    # check that there're at least two layers
    manager = servers.get_layer_manager()
    if manager.getnumlayers() <= 1:
        msg = "You cannot delete the '%s' layer.\n\n" \
                    "A level must always have at least one layer." % layer_name
        cjr.show_error_message(msg)
        return False

    # check if there's some entity not marked as deleted within the layer
    try:
        try:
            wx.BeginBusyCursor()
            e_server = servers.get_entity_object_server()
            entity = e_server.getfirstentityobject()
            report = []
            while entity is not None:
                if entity.hascomponent('ncEditor'):
                    if not entity.isdeleted():
                        entity_layer_id = entity.getlayerid()
                        if entity_layer_id >= 0:
                            entity_layer = manager.searchlayerbyid(
                                entity_layer_id)
                            if entity_layer.getlayername() == layer_name:
                                entity_class = entity.getentityclass().getname(
                                )
                                entity_name = ""
                                if entity.hascomponent('ncGameplay'):
                                    entity_name = entity.getname()
                                report.append((entity.getid(), entity_class,
                                               entity_name))
                entity = e_server.getnextentityobject()
        finally:
            wx.EndBusyCursor()
    except:
        # make sure any errors are not hidden
        raise

    # show a report about all the entities found in the layer, if any
    if len(report) > 0:
        caption = "Error deleting the '%s' layer" % layer_name
        msg = "Unable to delete the '%s' layer because it " \
                    "still contains the following entities" % layer_name
        log = (['Id', 'Class', 'Name'], report)
        usagelog.UsageLogDialog(app.get_top_window(), caption, msg, log)
        return False

    return True
Example #5
0
 def edit_brushes(self):
     # cannot edit brushes for default material
     if not self.is_for_default_material():
         dlg = grassbrushes.MaterialBrushesDialog(app.get_top_window(),
                                                  self.material)
         dlg.ShowModal()
         dlg.Destroy()
Example #6
0
 def __edit_command_of_class(self, class_name, cmd_name):
     cmd_unpath = self.__get_cmd_path( class_name, cmd_name, True )
     win = scripteditordlg.create_window(
                 app.get_top_window(), 
                 cmd_unpath 
                 )
     win.display()
Example #7
0
    def on_new_cmd(self, event):
        # Ask for a command prototype
        dlg = newcmddlg.NewCommandDialog(self)
        result_ok = dlg.ShowModal() == wx.ID_OK
        if result_ok:
            cmd_proto = dlg.get_command_prototype()
        dlg.Destroy()

        # Create and add the new command to the selected class
        if result_ok:
            # Get the class name for the new command
            class_name = self.tree_classes.get_selected_class_name()
            if class_name is None:
                cjr.show_error_message(
                    "Cannot add commands to the selected class"
                    )
                return

            # Create an empty command for the selected class from a template
            self.__add_command( class_name, 'command', cmd_proto )

            # Add the new command to the command list
            self.list_cmds.Append( cmd_proto )
            servers.get_script_server().refreshclass( str(class_name) )

            # Open for editing the new command script
            cmd_unpath = self.__get_cmd_path(class_name, cmd_proto, True)
            win = scripteditordlg.create_window(
                        app.get_top_window(), 
                        cmd_unpath 
                        )
            win.display()
Example #8
0
    def __can_delete_selector(self, class_name):
        usage_log = usagelog.find_fsm_selector( class_name )
        if len( usage_log[1] ) > 0:
            dlg = usagelog.DeleteErrorDialog(
                app.get_top_window(),
                "FSM selector '" + class_name + "'",
                usage_log
                )
            dlg.Show()
            return False

        # Save FSMs to avoid inconsistences between memory and persisted states
        # (and make the previous check valid)
        delete = self.__save_fsms('FSM selector')
        
        # Delete the singleton selector instance so the class can be deleted
        if delete:
            selector_path = format.append_to_path(
                                    fsm.get_fsm_selectors_lib(), 
                                    class_name 
                                    )
            try:
                pynebula.delete( str(selector_path) )
            except:
                pass
        return delete
Example #9
0
    def on_new_cmd(self, event):
        # Ask for a command prototype
        dlg = newcmddlg.NewCommandDialog(self)
        result_ok = dlg.ShowModal() == wx.ID_OK
        if result_ok:
            cmd_proto = dlg.get_command_prototype()
        dlg.Destroy()

        # Create and add the new command to the selected class
        if result_ok:
            # Get the class name for the new command
            class_name = self.tree_classes.get_selected_class_name()
            if class_name is None:
                cjr.show_error_message(
                    "Cannot add commands to the selected class")
                return

            # Create an empty command for the selected class from a template
            self.__add_command(class_name, 'command', cmd_proto)

            # Add the new command to the command list
            self.list_cmds.Append(cmd_proto)
            servers.get_script_server().refreshclass(str(class_name))

            # Open for editing the new command script
            cmd_unpath = self.__get_cmd_path(class_name, cmd_proto, True)
            win = scripteditordlg.create_window(app.get_top_window(),
                                                cmd_unpath)
            win.display()
Example #10
0
def postlevel_process(is_new_level):
    if not is_new_level:
        return
    # What follows should be done only for new and open level commands

    # Load the level preset
    apply_level_preset()

    # Set the new outdoor to the terrain state
    if servers.get_conjurer().getcurrentstate() == 'terrain':
        trn.get_terrain_module().setoutdoor(
            app.get_outdoor_obj() 
            )

    # End the persist-restore process (continue from prelevel_process)
    # Close guiDialog windows
    frame = app.get_top_window()
    for child in frame.get_child_dialogs():
        child.Close()
    # Refresh other GUI features
    frame.refresh_all()
    # Restore persisted guiDialog windows
    for data in prelevel_process.child_data:
        restore_window(data)
    prelevel_process.child_data = []
Example #11
0
 def on_select_colour(self):
     # cannot change colour of default material
     if not self.is_for_default_material():
         dlg = grasscolor.MaterialColorDialog(app.get_top_window(),
                                              self.material)
         if dlg.ShowModal() == wx.ID_OK:
             self.set_button_colour_from_material()
         dlg.Destroy()
Example #12
0
 def _save_fsms(self):
     msg = "Deleting a %s will save any modified finite state machine.\n\n" % self.caption
     msg = msg + "Continue anyway?"
     result = cjr.confirm_yes_no(self, msg)
     delete = (result == wx.ID_YES)
     if delete:
         # Save modified FSMs
         fsm_paths = fsm.get_fsms()
         for fsm_path in fsm_paths:
             sm = pynebula.lookup( fsm_path )
             if sm.isdirty():
                 servers.get_fsm_server().savefsm( sm )
                 sm.setdirty( False )
                 app.get_top_window(self).emit_app_event(
                     events.FSMSaved( fsm_path )
                     )
     return delete
Example #13
0
 def __save_fsms(self, caption):
     msg = "Deleting a %s will save any modified " \
                 "finite state machine.\n\n" \
                 "Continue anyway?" % caption
     result = cjr.confirm_yes_no(self, msg)
     delete = (result == wx.ID_YES)
     if delete:
         # Save modified FSMs
         fsm_paths = fsm.get_fsms()
         for fsm_path in fsm_paths:
             state_machine = pynebula.lookup(fsm_path)
             if state_machine.isdirty():
                 servers.get_fsm_server().savefsm(state_machine)
                 state_machine.setdirty(False)
                 app.get_top_window().emit_app_event(
                     events.FSMSaved(fsm_path))
     return delete
Example #14
0
 def __on_emitters(self, event):
     if self.has_item_selected():
         particle_system_name = self.get_selected_class_name()
         win = particleemitdlg.create_window(app.get_top_window(),
                                             str(particle_system_name))
         win.display()
     else:
         cjr.show_error_message("Please select a Particle System.")
Example #15
0
 def on_zoom_texture(self, event):
     material = self.__get_material()
     tex_path = servers.get_file_server().manglepath(
         material.gettexturethumbnail(0) )
     dlg = imagepreview.PreviewDialog( app.get_top_window(self), tex_path,
         self.get_texture_filename() )
     dlg.Show()
     os.remove( tex_path )
Example #16
0
 def open_inspector (self):
     """Open a property editor for selected entities"""
     entity_list = self.get_selected_entities()
     select_count = len(entity_list)
     if select_count > 1:
         model = scripting.ScriptingModelMultiObject(entity_list)
         propertyview.create_window(
             app.get_top_window(), 
             model 
             )
     elif select_count == 1:
         entity = entity_list[0]
         entity_id = entity.getid()
         win = objdlg.create_window(
                     app.get_top_window(), 
                     entity_id 
                     )
         win.display()
Example #17
0
 def __save_docs(self):
     dlg = waitdlg.WaitDialog( app.get_top_window() )
     for i in range( len(self.savers) ):
         if self.checklist.IsChecked(i):
             dlg.set_message(
                 "Saving %s ..." % self.savers[i].get_brief()
                 )
             self.savers[i].save()
     dlg.Destroy()
Example #18
0
 def edit_brushes(self):
     # cannot edit brushes for default material
     if not self.is_for_default_material():
         dlg = grassbrushes.MaterialBrushesDialog(
                     app.get_top_window(),
                     self.material
                     )
         dlg.ShowModal()
         dlg.Destroy()
Example #19
0
 def on_select_objects(self, event):
     """Set the selection objects mode"""
     enabled = event.Checked()
     self.Check(ID_SelectObjects, enabled)
     msg = "Do you want to save subentity changes?"
     result = cjr.confirm_yes_no(app.get_top_window(), msg)
     save = (result == wx.ID_YES)
     succeed = app.get_object_state().setselectionmode(0, save)
     if succeed:
         self.__get_toolbar().select_selection_mode(0)
Example #20
0
 def on_select_colour(self):
     # cannot change colour of default material
     if not self.is_for_default_material():
         dlg = grasscolor.MaterialColorDialog(
                     app.get_top_window(), 
                     self.material
                     )
         if dlg.ShowModal() == wx.ID_OK:
             self.set_button_colour_from_material()
         dlg.Destroy()
Example #21
0
    def __on_change_name(self, event):
        # Change the FSM file and object names
        fsm = pynebula.lookup( self.fsm_path )
        old_name = str( format.get_name( self.fsm_path ) )
        new_name = str( self.text_name.get_value() )
        fsm.setname( new_name )
        servers.get_fsm_server().savefsm( fsm )
        fsm.setname( old_name )
        servers.get_fsm_server().erasefsm( fsm )
        fsm.setname( new_name )
        # Update the controls
        self.fsm_path = fsm.getfullname()
        self.ctrl_states.set_fsm( self.fsm_path )
        self.ctrl_statetype.set_state(None)
        self.ctrl_transitions.set_state(None)
#        self.ctrl_emotactions.set_state(None)
        # Notify change to update the name in the FSM library
        app.get_top_window(self).emit_app_event( events.FSMNameChanged(
            new_name=new_name, old_name=old_name ) )
        fsmevents.signal_fsm_change( self, fsmevents.ID_FSMNameChanged, self.fsm_path )
Example #22
0
 def on_inspect_class_button(self, event):
     class_name = str( self.model.get_object_class() )
     entity_server = servers.get_entity_class_server()
     class_to_inspect = entity_server.getentityclass(
                                 class_name
                                 )
     win = objdlg.create_window(
                 app.get_top_window(), 
                 class_to_inspect.getfullname()
                 )
     win.display()
Example #23
0
 def __on_change_name(self, event):
     # Change the FSM file and object names
     fsm = pynebula.lookup(self.fsm_path)
     old_name = str(format.get_name(self.fsm_path))
     new_name = str(self.text_name.get_value())
     fsm.setname(new_name)
     servers.get_fsm_server().savefsm(fsm)
     fsm.setname(old_name)
     servers.get_fsm_server().erasefsm(fsm)
     fsm.setname(new_name)
     # Update the controls
     self.fsm_path = fsm.getfullname()
     self.ctrl_states.set_fsm(self.fsm_path)
     self.ctrl_statetype.set_state(None)
     self.ctrl_transitions.set_state(None)
     #        self.ctrl_emotactions.set_state(None)
     # Notify change to update the name in the FSM library
     app.get_top_window(self).emit_app_event(
         events.FSMNameChanged(new_name=new_name, old_name=old_name))
     fsmevents.signal_fsm_change(self, fsmevents.ID_FSMNameChanged,
                                 self.fsm_path)
 def __on_emitters(self, event):
     if self.has_item_selected():
         particle_system_name = self.get_selected_class_name()
         win = particleemitdlg.create_window(
                     app.get_top_window(), 
                     str(particle_system_name)
                     )
         win.display()
     else:
         cjr.show_error_message(
             "Please select a Particle System."
             )
Example #25
0
    def __can_delete_action(self, class_name):
        usage_log = usagelog.find_behaviour_action(class_name)
        if len(usage_log[1]) > 0:
            dlg = usagelog.DeleteErrorDialog(
                app.get_top_window(), "behaviour action '" + class_name + "'",
                usage_log)
            dlg.Show()
            return False

        # Save FSMs to avoid inconsistences between memory and persisted states
        # (and make the previous check valid)
        return self.__save_fsms('behaviour action')
Example #26
0
 def __on_edit(self, event):
     if self.has_item_selected():
         particle_system = self.get_selected_class()
         try:
             wx.BeginBusyCursor()
             win = objdlg.create_window(app.get_top_window(),
                                        particle_system.getfullname())
         finally:
             wx.EndBusyCursor()
         win.display()
     else:
         cjr.show_error_message("Please select a Particle System to edit.")
Example #27
0
 def on_select_objects(self, event):
     """Set the selection objects mode"""
     enabled = event.Checked()
     self.Check( ID_SelectObjects, enabled )
     msg = "Do you want to save subentity changes?"
     result = cjr.confirm_yes_no(
                     app.get_top_window(),
                     msg
                     )
     save = (result == wx.ID_YES)
     succeed = app.get_object_state().setselectionmode( 0, save )
     if succeed:
         self.__get_toolbar().select_selection_mode( 0 )
Example #28
0
 def on_export_entities(self, event):
     """Open an export dialog"""
     if self.layer_selected is None:
         cjr.show_error_message("Please select a layer")
         return
     entity_list = self.get_all_exportable_entities_for_selected_layer()
     if entity_list:
         dialog = expentdlg.create_window(app.get_top_window(), entity_list)
         dialog.ShowModal()
         dialog.Destroy()
     else:
         cjr.show_error_message(
             "There are no entities available for export in this layer")
Example #29
0
 def on_pg_right_click(self, event):
     """ Open an inspector if the click property is an object """
     pid = event.get_value()
     prop_type = self.pg.get_property_type(pid)
     if prop_type == propgrid.Type_Object:
         prop_value = self.pg.get_property_value(pid)
         if prop_value is not None:
             obj_type = self.model.get_object_type()
             if obj_type == "nroot" or obj_type == "entityclass":
                 prop_value = prop_value.getfullname()
             win = objdlg.create_window(app.get_top_window(), prop_value)
             win.display()
     event.Skip()
Example #30
0
 def on_ok(self, event):
     if self.button_texture.GetLabel() == "<default>":
         entity_class = particle.CreateClass( str(self.text_name.GetValue()), self.target_library )
     else:
         texture = format.append_to_path( "wc:export/textures", self.button_texture.GetLabel() )
         entity_class = particle.CreateClass( str(self.text_name.GetValue()), self.target_library, str(texture) )
     if entity_class is None:
         wx.MessageBox( "Couldn't create the particle system class named '" \
             + self.text_name.GetValue() + "'", "Conjurer",
             style=wx.ICON_ERROR )
     else:
         objdlg.create_window( app.get_top_window(), entity_class.getfullname() )
         self.EndModal(wx.ID_OK)
Example #31
0
    def __can_delete_action(self, class_name):
        usage_log = usagelog.find_behaviour_action( class_name )
        if len( usage_log[1] ) > 0:
            dlg = usagelog.DeleteErrorDialog(
                app.get_top_window(),
                "behaviour action '" + class_name + "'",
                usage_log
                )
            dlg.Show()
            return False

        # Save FSMs to avoid inconsistences between memory and persisted states
        # (and make the previous check valid)
        return self.__save_fsms('behaviour action')
Example #32
0
 def open_export_dialog(self):
     """Open an export dialog for the selected entities"""
     entity_list = self.get_selected_entities_ok_for_export()
     select_count = len(entity_list)
     if select_count > 0:
         dialog = expentdlg.createWindow( 
                         app.get_top_window(),   
                         entity_list 
                         )
         dialog.ShowModal()
         dialog.Destroy()
     else:
         cjr.show_error_message(
             "There are no entities currently selected"
             )
Example #33
0
    def __add_commands_of_action(self, class_name):
        # Ask for the InitAction prototype
        dlg = newcmddlg.NewInitActionCmdDlg(self)
        result_ok = dlg.ShowModal() == wx.ID_OK
        if result_ok:
            init_proto = dlg.get_command_prototype()
        else:
            init_proto = 'b_init_o'
        dlg.Destroy()

        # Add action commands
        self.__add_command(class_name, 'action_init', init_proto)
        self.__add_command(class_name, 'action_run', 'b_run_v')
        self.__add_command(class_name, 'action_end', 'v_end_v')

        # Open InitAction script so the user doesn't
        # forget to set the parameters
        if result_ok:
            cmd_unpath = self.__get_cmd_path(class_name, init_proto, True)
            win = scripteditordlg.create_window(app.get_top_window(),
                                                cmd_unpath)
            win.display()

        app.get_top_window().emit_app_event(events.ActionAdded(class_name))
 def __on_edit(self, event):
     if self.has_item_selected():
         particle_system = self.get_selected_class()
         try:
             wx.BeginBusyCursor()
             win = objdlg.create_window(
                         app.get_top_window(), 
                         particle_system.getfullname()
                         )
         finally:
             wx.EndBusyCursor()
         win.display()
     else:
         cjr.show_error_message(
             "Please select a Particle System to edit."
             )
Example #35
0
 def on_pg_right_click (self, event):
     """ Open an inspector if the click property is an object """
     pid = event.get_value()
     prop_type = self.pg.get_property_type(pid)
     if prop_type == propgrid.Type_Object:
         prop_value = self.pg.get_property_value(pid)
         if prop_value is not None:
             obj_type = self.model.get_object_type()
             if obj_type == "nroot" or obj_type == "entityclass":
                 prop_value = prop_value.getfullname()
             win = objdlg.create_window(
                         app.get_top_window(), 
                         prop_value
                         )
             win.display()
     event.Skip()
Example #36
0
 def on_export_entities(self, event):
     """Open an export dialog"""
     if self.layer_selected is None:
         cjr.show_error_message("Please select a layer")
         return
     entity_list = self.get_all_exportable_entities_for_selected_layer()
     if entity_list:
         dialog = expentdlg.create_window(
                         app.get_top_window(), 
                         entity_list 
                         )
         dialog.ShowModal()
         dialog.Destroy()
     else:
         cjr.show_error_message(
             "There are no entities available for export in this layer"
             )
Example #37
0
 def __on_left_dlcick (self, event):
     # get entity id
     row_index = event.GetRow()
     row_data = self.__get_data_for_row(row_index)
     an_id = row_data[0]
     if self.parent.modal:
         entity_name = row_data[2]
         string_to_show = "%s (id = %s)" % ( entity_name, str(an_id) )
         grand_parent = self.parent.GetParent()
         grand_parent.SetTitle(string_to_show)
         grand_parent.Hide()
         grand_parent.EndModal(wx.ID_OK)
     else:
         # show an inspector window for the entity
         win = objdlg.create_window(
                     app.get_top_window(), 
                     an_id
                     )
         win.display()
Example #38
0
    def __on_selection_mode(self, event):
        mode = self.choice_selection_mode.GetSelection()
        menu = self.GetParent().get_menubar().get_menu('&View')
        succeed = False
        if mode == 0 and app.is_subentity_mode_active():
            result = cjr.confirm_yes_no(
                app.get_top_window(), "Do you want to save subentity changes?")
            save = (result == wx.ID_YES)
            succeed = app.get_object_state().setselectionmode(mode, save)
        else:
            succeed = app.get_object_state().setselectionmode(mode, False)

        if succeed:
            if mode == 0:
                id_selection = viewcmds.ID_SelectObjects
            elif mode == 1:
                id_selection = viewcmds.ID_SelectWaypoints
            else:
                id_selection = viewcmds.ID_SelectTerrainCells
            menu.Check(id_selection, True)
Example #39
0
def prelevel_process(is_new_level):
    # Forbid any level operation while in game mode
    if app.is_in_gameplay_mode():
        cjr.show_error_message(
            "Operation not allowed while in game mode"
            )
        return False

    # Exit from any test mode
    app.get_ai_tester().disablegameplayupdating()
    app.get_ai_tester().disablesoundsources()

    # Clear undo buffer
    servers.get_command_server().clean()

    if not is_new_level:
        return True
    # Discard deleted entities
    servers.get_entity_object_server().discarddeletedobjects()
    servers.get_entity_class_server().discarddeletedclasses()

    # What follows should be done only for new and open level commands

    # Clear selection
    app.get_object_state().resetselection()

    # Make terrain state release some buffers
    if servers.get_conjurer().getcurrentstate() == 'terrain':
        trn.get_terrain_module().setoutdoor(None)

    # Begin a persist-restore process to close those invalid windows for
    # the new level and refresh the valid ones (continue in postlevel_process)
    # Persist guiDialog windows
    frame = app.get_top_window()
    prelevel_process.child_data = []
    for child in frame.get_child_dialogs():
        data = persist_window(child)
        if data is not None:
            prelevel_process.child_data.insert(0, data)
    return True
Example #40
0
    def __can_delete_selector(self, class_name):
        usage_log = usagelog.find_fsm_selector(class_name)
        if len(usage_log[1]) > 0:
            dlg = usagelog.DeleteErrorDialog(
                app.get_top_window(), "FSM selector '" + class_name + "'",
                usage_log)
            dlg.Show()
            return False

        # Save FSMs to avoid inconsistences between memory and persisted states
        # (and make the previous check valid)
        delete = self.__save_fsms('FSM selector')

        # Delete the singleton selector instance so the class can be deleted
        if delete:
            selector_path = format.append_to_path(fsm.get_fsm_selectors_lib(),
                                                  class_name)
            try:
                pynebula.delete(str(selector_path))
            except:
                pass
        return delete
Example #41
0
    def __on_selection_mode(self, event):
        mode = self.choice_selection_mode.GetSelection()
        menu = self.GetParent().get_menubar().get_menu('&View')
        succeed = False
        if mode == 0 and app.is_subentity_mode_active():
            result = cjr.confirm_yes_no(
                            app.get_top_window(),
                            "Do you want to save subentity changes?"
                            )
            save = (result == wx.ID_YES)
            succeed = app.get_object_state().setselectionmode( mode, save )
        else:
            succeed = app.get_object_state().setselectionmode( mode, False )

        if succeed:
            if mode == 0:
                id_selection = viewcmds.ID_SelectObjects
            elif mode == 1:
                id_selection = viewcmds.ID_SelectWaypoints
            else:
                id_selection = viewcmds.ID_SelectTerrainCells
            menu.Check( id_selection, True )
Example #42
0
def prelevel_process(is_new_level):
    # Forbid any level operation while in game mode
    if app.is_in_gameplay_mode():
        cjr.show_error_message("Operation not allowed while in game mode")
        return False

    # Exit from any test mode
    app.get_ai_tester().disablegameplayupdating()
    app.get_ai_tester().disablesoundsources()

    # Clear undo buffer
    servers.get_command_server().clean()

    if not is_new_level:
        return True
    # Discard deleted entities
    servers.get_entity_object_server().discarddeletedobjects()
    servers.get_entity_class_server().discarddeletedclasses()

    # What follows should be done only for new and open level commands

    # Clear selection
    app.get_object_state().resetselection()

    # Make terrain state release some buffers
    if servers.get_conjurer().getcurrentstate() == 'terrain':
        trn.get_terrain_module().setoutdoor(None)

    # Begin a persist-restore process to close those invalid windows for
    # the new level and refresh the valid ones (continue in postlevel_process)
    # Persist guiDialog windows
    frame = app.get_top_window()
    prelevel_process.child_data = []
    for child in frame.get_child_dialogs():
        data = persist_window(child)
        if data is not None:
            prelevel_process.child_data.insert(0, data)
    return True
Example #43
0
def postlevel_process(is_new_level):
    if not is_new_level:
        return
    # What follows should be done only for new and open level commands

    # Load the level preset
    apply_level_preset()

    # Set the new outdoor to the terrain state
    if servers.get_conjurer().getcurrentstate() == 'terrain':
        trn.get_terrain_module().setoutdoor(app.get_outdoor_obj())

    # End the persist-restore process (continue from prelevel_process)
    # Close guiDialog windows
    frame = app.get_top_window()
    for child in frame.get_child_dialogs():
        child.Close()
    # Refresh other GUI features
    frame.refresh_all()
    # Restore persisted guiDialog windows
    for data in prelevel_process.child_data:
        restore_window(data)
    prelevel_process.child_data = []
Example #44
0
 def select_current_tool(self):
     self.terrain.selecttool( self.GetSelection() )
     self.terrain.setpaintbrushsize(
         self.GetParent().slider_size.get_value() 
         )
     app.get_top_window(self).get_menubar().get_menu('T&ools').on_terrain_tool(None)
Example #45
0
 def open_log_group_editor(self, log_class_name):
     win = loggrpdlg.create_window(app.get_top_window(), log_class_name)
     win.display()
Example #46
0
 def on_help(self, event):
     iehelpwindow.CreateWindow( app.get_top_window(self),
         "http://thezombieengine.sourceforge.net/SWD+Nebula+Conjurer+FSM+editor" )
Example #47
0
 def __add_commands_of_condition(self, class_name):
     self.__add_command(class_name, 'condition', 'b_evaluate_o')
     app.get_top_window().emit_app_event(events.ConditionAdded(class_name))
Example #48
0
 def __add_commands_of_selector(self, class_name):
     self.__add_command(class_name, 'fsmselector', 's_SelectFSM_o')
     app.get_top_window().emit_app_event(
         events.FSMSelectorAdded(class_name) 
         )
Example #49
0
 def __add_commands_of_trigger(self, class_name):
     self.__add_command(class_name, 'trigger_output', 'v_ExecuteOutput_oo')
     app.get_top_window().emit_app_event(
         events.TriggerScriptAdded(class_name) 
         )
Example #50
0
def layer_can_be_deleted(layer):
    """ Check that the layer can be deleted.
    Warn the user if it isn't and return false.
    Otherwise just return true. """
    # check the layer has not been locked
    layer_name = layer.getlayername()
    if layer.islocked():
        cjr.show_error_message(
            "You cannot delete the '%s' layer.\n\n" \
                "It is not possible to delete a locked layer." % layer_name
            )
        return False

    # check that there're at least two layers
    manager = servers.get_layer_manager()
    if manager.getnumlayers() <= 1:
        msg = "You cannot delete the '%s' layer.\n\n" \
                    "A level must always have at least one layer." % layer_name
        cjr.show_error_message(msg)
        return False

    # check if there's some entity not marked as deleted within the layer
    try:
        try:
            wx.BeginBusyCursor()
            e_server = servers.get_entity_object_server()
            entity = e_server.getfirstentityobject()
            report = []
            while entity is not None:
                if entity.hascomponent('ncEditor'):
                    if not entity.isdeleted():
                        entity_layer_id = entity.getlayerid()
                        if entity_layer_id >= 0:
                            entity_layer = manager.searchlayerbyid(
                                                    entity_layer_id 
                                                    )
                            if entity_layer.getlayername() == layer_name:
                                entity_class = entity.getentityclass().getname()
                                entity_name = ""
                                if entity.hascomponent('ncGameplay'):
                                    entity_name = entity.getname()
                                report.append(
                                    (entity.getid(), entity_class, entity_name)
                                    )
                entity = e_server.getnextentityobject()
        finally:
            wx.EndBusyCursor()
    except:
        # make sure any errors are not hidden
        raise
    
    # show a report about all the entities found in the layer, if any
    if len( report ) > 0:
        caption = "Error deleting the '%s' layer" % layer_name
        msg = "Unable to delete the '%s' layer because it " \
                    "still contains the following entities" % layer_name
        log = ( ['Id', 'Class', 'Name'], report )
        usagelog.UsageLogDialog(
            app.get_top_window(), 
            caption, 
            msg, 
            log 
            )
        return False
    
    return True
Example #51
0
 def __add_commands_of_trigger(self, class_name):
     self.__add_command(class_name, 'trigger_output', 'v_ExecuteOutput_oo')
     app.get_top_window().emit_app_event(
         events.TriggerScriptAdded(class_name))
Example #52
0
 def __add_commands_of_selector(self, class_name):
     self.__add_command(class_name, 'fsmselector', 's_SelectFSM_o')
     app.get_top_window().emit_app_event(
         events.FSMSelectorAdded(class_name))
Example #53
0
 def select_current_tool(self):
     self.terrain.selecttool(self.GetSelection())
     self.terrain.setpaintbrushsize(
         self.GetParent().slider_size.get_value())
     app.get_top_window(self).get_menubar().get_menu(
         'T&ools').on_terrain_tool(None)
Example #54
0
 def on_button_inspect_clicked(self, event):
     win = objdlg.create_window(
                 app.get_top_window(), 
                 self.entity.getid()
                 )
     win.display()
Example #55
0
 def __edit_command_of_class(self, class_name, cmd_name):
     cmd_unpath = self.__get_cmd_path(class_name, cmd_name, True)
     win = scripteditordlg.create_window(app.get_top_window(), cmd_unpath)
     win.display()