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)
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)
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)
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)
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)
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)
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())
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)
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)
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())
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)