Example #1
0
 def __init__(self, parent=None):
     self.gui = PlaylistEditorGUI(parent)
     self.playlist = Playlist()
     self.main_saveable = self.playlist
     self.connector = ArrayConnector(self.playlist, self.gui.songs,
                                     self.gui.button, self.gui.name)
     self.connector.bind_move()
     self.gui.songs.signal_select.connect(self.on_select)
Example #2
0
class BehaviorWidgetConnector:
    def __init__(self, behavior_widget, behavior_obj):
        self.gui = behavior_widget
        self.behavior = behavior_obj
        self.node_connector = None
        self.signal_repack = Signal()
        self.behavior.signal_changed.connect(self.behavior_changed)

    def select_node(self, ind):
        if ind is not None:
            node_widget = self.gui.current_motion_widget
            current = self.node_connector.cur_selection
            combo_map = {D_UP: 0, D_RIGHT: 1, D_DOWN: 2, D_LEFT: 3}
            node_widget.steps.entry.config(
                textvariable=make_int_var(current.num_steps))
            node_widget.direction.config(
                textvariable=make_combo_var(current.direction, combo_map))

    def behavior_changed(self, Type, *args):
        widget_map = {
            StandStillBehavior: Still,
            SpinInPlaceBehavior: SpinInPlace,
            FollowPathBehavior: FollowPath,
            WanderBehavior: WanderFreely
        }
        if Type not in widget_map:
            return
        self.gui.change_widget(widget_map[Type])
        current = self.gui.current_motion_widget
        if Type == StandStillBehavior:
            self.signal_repack(False)
        elif Type == WanderBehavior:
            current.radius.entry.config(
                textvariable=make_int_var(self.behavior.wander.radius))
            self.signal_repack(False)
        elif Type == SpinInPlaceBehavior:
            dir_map = {D_CLOCK: 0, D_COUNTER: 1, D_RANDOM: 2}
            current.combo.config(textvariable=make_combo_var(
                self.behavior.spin.motion, dir_map))
            self.signal_repack(False)
        elif Type == FollowPathBehavior:
            for node in self.behavior.follow.nodes:
                current.node_list.clear()
                current.node_list.append(str(node), node)
            current.pack(padx=10, fill=tk.BOTH)
            current.check.config(
                variable=make_check_var(self.behavior.follow.reverse_loop))
            self.node_connector = ArrayConnector(self.behavior.follow.nodes,
                                                 current.node_list,
                                                 current.add_button,
                                                 current.direction,
                                                 current.steps)
            self.node_connector.bind_move()
            current.node_list.signal_select.connect(self.select_node)
            self.signal_repack(True)
Example #3
0
    def __init__(self, parent=None):
        self.gui = TrainerEditorGUI(parent)
        self.trainer = Trainer()
        self.main_saveable = self.trainer
        str_entry_map = {
            self.gui.name: self.trainer.name,
            self.gui.anim_name: self.trainer.animation,
            self.gui.before_convo: self.trainer.before_convo,
            self.gui.after_convo: self.trainer.after_convo,
            self.gui.lost_text: self.trainer.lose_message,
            self.gui.playlist: self.trainer.playlist,
            self.gui.background: self.trainer.background_image
        }

        self.gui.item_list.set_key(lambda item: item.get())
        for widget, saveable in str_entry_map.items():
            widget.entry.config(textvariable=make_str_var(saveable))
        self.gui.sight_range.entry.config(
            textvariable=make_int_var(self.trainer.sight_range))
        self.node_connector = None
        self.peoplemon_connector = ArrayConnector(self.trainer.peoplemon,
                                                  self.gui.peoplemon_list,
                                                  self.gui.add_peoplemon,
                                                  self.gui.file_name)
        self.peoplemon_connector.bind_move()
        self.item_connector = ArrayConnector(self.trainer.items,
                                             self.gui.item_list,
                                             self.gui.add_item,
                                             self.gui.item_id)
        self.gui.peoplemon_list.signal_select.connect(self.select_peoplemon)
        self.gui.item_list.signal_select.connect(self.select_item)

        ai_map = {
            AI_RANDOM: 0,
            AI_DUMB: 1,
            AI_SMART: 2,
            AI_SUICIDAL: 3,
            AI_AGGRESSIVE: 4,
            AI_DEFENSIVE: 5,
            AI_AVERAGE: 6,
            AI_ADAPTIVE: 7
        }
        behavior_map = {
            B_STILL: StandStillBehavior,
            B_SPIN: SpinInPlaceBehavior,
            B_FOLLOW: FollowPathBehavior,
            B_WANDER: WanderBehavior
        }
        self.gui.ai_type.config(
            textvariable=make_combo_var(self.trainer.ai_type, ai_map))
        self.gui.motion_type.config(
            textvariable=make_combo_var(self.trainer.behavior, behavior_map))
        self.behavior_connect = BehaviorWidgetConnector(
            self.gui.behavior_widget, self.trainer.behavior)
        self.behavior_connect.signal_repack.connect(self.on_repack)
Example #4
0
class PlaylistEditor:
    def __init__(self, parent=None):
        self.gui = PlaylistEditorGUI(parent)
        self.playlist = Playlist()
        self.main_saveable = self.playlist
        self.connector = ArrayConnector(self.playlist, self.gui.songs,
                                        self.gui.button, self.gui.name)
        self.connector.bind_move()
        self.gui.songs.signal_select.connect(self.on_select)

    def on_select(self, ind):
        current = self.connector.cur_selection
        self.gui.name.entry.config(textvariable=make_str_var(current))

    def pack(self, **kwargs):
        self.gui.pack(**kwargs)
Example #5
0
    def on_select(self, id):
        peoplemon = self.item_connector.cur_selection
        gui = self.gui
        int_map = {
            gui.id: peoplemon.id,
            gui.base_xp: peoplemon.base_xp_yield,
            gui.special_id: peoplemon.special_ability_id,
            gui.type: peoplemon.type,
            gui.evolve_level: peoplemon.evolve_level,
            gui.evolve_id: peoplemon.evolve_id
        }
        for widget, saveable in int_map.items():
            widget.entry.config(textvariable=make_int_var(saveable))
        for widget, saveable in ((gui.description, peoplemon.description),
                                 (gui.name.entry, peoplemon.name)):
            widget.config(textvariable=make_str_var(saveable))
        gui.xp_group.combo.config(
            textvariable=make_combo_var(peoplemon.xp_group, XP_MAP))

        for stats_gui, stats, in ((self.gui.base_stats, peoplemon.base_stats),
                                  (self.gui.ev_stats, peoplemon.ev_stats)):
            for widget, saveable in ((stats_gui.attack, stats.attack),
                                     (stats_gui.defense, stats.defense),
                                     (stats_gui.special_attack,
                                      stats.special_attack),
                                     (stats_gui.special_defense,
                                      stats.special_defense), (stats_gui.hp,
                                                               stats.hp),
                                     (stats_gui.speed,
                                      stats.speed), (stats_gui.accuracy,
                                                     stats.accuracy),
                                     (stats_gui.evade,
                                      stats.evade), (stats_gui.critical,
                                                     stats.critical)):
                widget.entry.config(textvariable=make_int_var(saveable))
        self.learn_move_connector = ArrayConnector(peoplemon.learn_moves,
                                                   gui.learn_list,
                                                   gui.add_learn_move,
                                                   gui.learn_move_id,
                                                   gui.learn_level)
        self.available_move_connector = ArrayConnector(
            peoplemon.valid_moves, gui.available_list,
            gui.add_available_button, gui.available_move_id)
        self.gui.learn_list.signal_select.connect(self.on_learn_move_select)
        self.gui.available_list.signal_select.connect(
            self.on_available_move_select)
Example #6
0
    def __init__(self, parent=None):
        self.gui = CreditsEditorGUI(parent)
        self.credits = array(Credit)()
        self.main_saveable = self.credits

        self.array_connector = ArrayConnector(self.credits, self.gui.list,
                                              None, self.gui.x_pos,
                                              self.gui.y_buf)
        self.array_connector.bind_move()
        self.add_button_connector = AddButtonConnector(
            self.credits, self.gui.list, {
                self.gui.add_text_button: TextType,
                self.gui.add_image_button: ImageType
            })

        self.add_button_connector.signal_about_to_add.connect(
            self.on_credit_about_to_add)
        self.gui.list.signal_select.connect(self.credit_changed)
        self.gui.list.signal_delete.connect(self.on_delete)
        self.credits.signal_add.connect(self.on_credit_add)
Example #7
0
    def __init__(self, parent=None):
        self.gui = TravelEditorGUI(parent)
        self.maps = self.MapType()
        self.main_saveable = self.maps
        for entry in self.gui.entries:
            entry.state(('disabled', ))
        self.cur_selected = None

        self.array_connector = ArrayConnector(self.maps, self.gui.maps,
                                              self.gui.add_button,
                                              *self.gui.entries)
        self.gui.maps.signal_select.connect(self.select_override)
        self.gui.maps.set_key(lambda map: map.spawn_id.get())
Example #8
0
 def behavior_changed(self, Type, *args):
     widget_map = {
         StandStillBehavior: Still,
         SpinInPlaceBehavior: SpinInPlace,
         FollowPathBehavior: FollowPath,
         WanderBehavior: WanderFreely
     }
     if Type not in widget_map:
         return
     self.gui.change_widget(widget_map[Type])
     current = self.gui.current_motion_widget
     if Type == StandStillBehavior:
         self.signal_repack(False)
     elif Type == WanderBehavior:
         current.radius.entry.config(
             textvariable=make_int_var(self.behavior.wander.radius))
         self.signal_repack(False)
     elif Type == SpinInPlaceBehavior:
         dir_map = {D_CLOCK: 0, D_COUNTER: 1, D_RANDOM: 2}
         current.combo.config(textvariable=make_combo_var(
             self.behavior.spin.motion, dir_map))
         self.signal_repack(False)
     elif Type == FollowPathBehavior:
         for node in self.behavior.follow.nodes:
             current.node_list.clear()
             current.node_list.append(str(node), node)
         current.pack(padx=10, fill=tk.BOTH)
         current.check.config(
             variable=make_check_var(self.behavior.follow.reverse_loop))
         self.node_connector = ArrayConnector(self.behavior.follow.nodes,
                                              current.node_list,
                                              current.add_button,
                                              current.direction,
                                              current.steps)
         self.node_connector.bind_move()
         current.node_list.signal_select.connect(self.select_node)
         self.signal_repack(True)
Example #9
0
    def __init__(self, parent=None):
        self.gui = MoveEditorGUI(parent)
        self.moves = array(Move)()
        self.main_saveable = self.moves
        self.sort_var = tk.StringVar(parent)
        self.sort_var.trace('w', lambda *args: self.gui.items.set_key(SORT_MAP[self.sort_var.get()]))
        self.sort_var.set('Move ID')
        self.gui.sort.combo.config(values=list(SORT_MAP.keys()), textvariable=self.sort_var)

        gui = self.gui
        self.item_connector = ArrayConnector(self.moves, self.gui.items, self.gui.add_button,
                                             gui.name, gui.id, gui.classification, gui.attack, gui.accuracy,
                                             gui.effect, gui.priority, gui.pp, gui.type, gui.chance, gui.intensity,
                                             gui.score, gui.attacker_anim, gui.defender_anim, gui.is_special,
                                             gui.targets_self, gui.description)
        self.gui.items.signal_select.connect(self.on_select)
Example #10
0
    def __init__(self, parent=None):
        self.gui = PeoplemonEditorGUI(parent)
        self.peoplemon_array = array(Peoplemon)()
        self.main_saveable = self.peoplemon_array

        gui = self.gui
        self.learn_move_connector = None
        self.available_move_connector = None
        self.item_connector = ArrayConnector(
            self.peoplemon_array, self.gui.items, self.gui.add_button,
            gui.description, gui.id, gui.name, gui.base_xp, gui.xp_group,
            gui.special_id, gui.type, gui.evolve_level, gui.evolve_id,
            gui.base_stats, gui.ev_stats, gui.learn_list, gui.learn_move_id,
            gui.learn_level, gui.available_list, gui.available_move_id,
            gui.add_available_button, gui.add_learn_move)
        self.gui.items.signal_select.connect(self.on_select)
        self.sort_connector = SortConnector(gui.items, gui.sort.combo,
                                            SORT_MAP)
        gui.learn_list.set_key(lambda learn: learn.learn_level.get())
        gui.available_list.set_key(lambda move: move.get())
Example #11
0
class CreditsEditor:
    TYPE_MAP = {ImageType: ImageEditorGUI, TextType: TextEditorGUI}

    def __init__(self, parent=None):
        self.gui = CreditsEditorGUI(parent)
        self.credits = array(Credit)()
        self.main_saveable = self.credits

        self.array_connector = ArrayConnector(self.credits, self.gui.list,
                                              None, self.gui.x_pos,
                                              self.gui.y_buf)
        self.array_connector.bind_move()
        self.add_button_connector = AddButtonConnector(
            self.credits, self.gui.list, {
                self.gui.add_text_button: TextType,
                self.gui.add_image_button: ImageType
            })

        self.add_button_connector.signal_about_to_add.connect(
            self.on_credit_about_to_add)
        self.gui.list.signal_select.connect(self.credit_changed)
        self.gui.list.signal_delete.connect(self.on_delete)
        self.credits.signal_add.connect(self.on_credit_add)

    @staticmethod
    def on_credit_about_to_add(credit, type):
        credit.type.set(type)

    def on_delete(self):
        if not len(self.gui.list):
            self.gui.multi_widget.change_widget(None)

    def credit_changed(self, ind):
        current = self.array_connector.cur_selection
        self.gui.multi_widget.change_widget(self.TYPE_MAP[current.type.get()])
        widget = self.gui.multi_widget.current_widget
        if current.type.get() == ImageType:
            widget.path.entry.configure(
                textvariable=make_str_var(current.type.image))
        elif current.type.get() == TextType:
            text_credit = current.type.text
            widget.text.entry.configure(
                textvariable=make_str_var(text_credit.text))
            widget.size.entry.configure(
                textvariable=make_int_var(text_credit.size))
            widget.signal_color_selected.connect(self.on_color_selected)
            for saveable in (text_credit.blue, ):
                saveable.signal_changed.connect(self.on_color_changed)
            self.on_color_changed(None)
        self.gui.x_pos.entry.config(textvariable=make_int_var(current.x))
        self.gui.y_buf.entry.config(textvariable=make_int_var(current.y_buf))

    def on_color_selected(self, r, g, b):
        current = self.array_connector.cur_selection
        current.type.text.red = r
        current.type.text.green = g
        current.type.text.blue = b

    def on_color_changed(self, val):
        text_credit = self.array_connector.cur_selection.type.text
        r, g, b = text_credit.red.get(), text_credit.green.get(
        ), text_credit.blue.get()
        self.gui.multi_widget.current_widget.change_color(r, g, b)
        selection = self.gui.list.get_selection()
        if selection:
            self.gui.list.itemconfig(selection,
                                     foreground=TextEditorGUI.rgb_to_hex(
                                         r, g, b))

    def on_credit_add(self, ind, val):
        if val.type.get() == TextType:
            text = val.type.text
            self.gui.list.itemconfig(ind,
                                     foreground=TextEditorGUI.rgb_to_hex(
                                         text.red.get(), text.green.get(),
                                         text.blue.get()))

    def pack(self, **kwargs):
        self.gui.pack(**kwargs)