Esempio n. 1
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)
Esempio n. 2
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)
Esempio n. 3
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)
Esempio n. 4
0
class TrainerEditor:
    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)

    def on_repack(self, expand):
        self.gui.right_frm.pack_forget()
        self.gui.right_frm.pack(side=tk.LEFT, expand=expand, fill=tk.BOTH)

    def select_peoplemon(self, ind):
        if ind is not None:
            current = self.peoplemon_connector.cur_selection
            self.gui.file_name.entry.config(textvariable=make_str_var(current))

    def select_item(self, ind):
        if ind is not None:
            current = self.item_connector.cur_selection
            self.gui.item_id.entry.config(textvariable=make_int_var(current))

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