def __on_old_game_teardown_end(self, event): assert isinstance(event[0], map.Map) del globals.active_objects_list[:] globals.active_map = event[0] pf.new_game_string(globals.active_map.pfmap_str(), update_navgrid=False) minimap_pos = pf.get_minimap_position() pf.set_minimap_position(UI_LEFT_PANE_WIDTH + minimap_pos[0], minimap_pos[1]) self.view.hide() if event[1] is not None: assert len(globals.active_objects_list) == 0 try: globals.active_objects_list = pf.load_scene( event[1], update_navgrid=False) globals.scene_filename = event[1] for obj in globals.active_objects_list: obj.selectable = True faction_descs = pf.get_factions_list() except: print("Failed to load scene! [{0}]".format(event[1])) if len(pf.get_factions_list()) == 0: pf.add_faction(DEFAULT_FACTION_NAME, DEFAULT_FACTION_COLOR)
def __on_fac_new(self, event): if len(pf.get_factions_list()) == DiplomacyVC.MAX_NUM_FACTIONS: print("Maximum number of factions reached!") return new_name = event[0] new_clr = event[1] pf.add_faction(new_name, new_clr) self.view.selected_fac_idx = len(pf.get_factions_list()) - 1
def factions_group(self): factions_list = pf.get_factions_list() self.layout_row_static(25, UI_LEFT_PANE_WIDTH-60, 1) for i in range(0, len(factions_list)): old = self.selected_fac_idx on = self.selectable_label(factions_list[i]["name"], pf.NK_TEXT_ALIGN_LEFT, i == self.selected_fac_idx) if on: self.selected_fac_idx = i if self.selected_fac_idx != old: factions_list = pf.get_factions_list() pf.global_event(EVENT_DIPLO_FAC_SELECTION_CHANGED, i)
def activate(self): pf.register_event_handler(pf.SDL_MOUSEMOTION, ObjectsVC.__on_mousemove, self) pf.register_event_handler(pf.SDL_MOUSEBUTTONDOWN, ObjectsVC.__on_click, self) pf.register_event_handler(pf.SDL_MOUSEBUTTONUP, ObjectsVC.__on_release, self) pf.register_event_handler(pf.SDL_MOUSEWHEEL, ObjectsVC.__on_mousewheel, self) pf.register_event_handler(pf.EVENT_NEW_GAME, ObjectsVC.__on_new_game, self) pf.register_event_handler(EVENT_OBJECT_SELECTION_CHANGED, ObjectsVC.__on_selected_object_changed, self) pf.register_event_handler(EVENT_MOUSE_ENTERED_MAP, ObjectsVC.__on_mouse_enter_map, self) pf.register_event_handler(EVENT_MOUSE_EXITED_MAP, ObjectsVC.__on_mouse_exit_map, self) pf.register_event_handler(EVENT_OBJECTS_TAB_MODE_CHANGED, ObjectsVC.__on_mode_changed, self) pf.register_event_handler(EVENT_OBJECT_SELECTED_UNIT_PICKED, ObjectsVC.__on_selected_unit_picked, self) pf.register_event_handler(EVENT_OBJECT_DELETE_SELECTION, ObjectsVC.__on_delete_selection, self) pf.register_event_handler(EVENT_OLD_GAME_TEARDOWN_BEGIN, ObjectsVC.__on_old_game_teardown_begin, self) self.__set_selection_for_mode() if self.view.mode == self.view.OBJECTS_MODE_PLACE: self.current_object = self.__object_at_index( self.view.selected_object_idx) else: self.current_object = None # Handle the case where we deleted some factions so our view's index is now stale factions_list = pf.get_factions_list() if self.view.selected_faction_idx >= len(factions_list): self.view.selected_faction_idx = len(factions_list) - 1
def __on_fac_removed(self, event): pf.remove_faction(event) factions_list = pf.get_factions_list() if event == len(factions_list): # we removed the last element self.view.selected_fac_idx = len(factions_list) - 1 self.view.fac_name = factions_list[self.view.selected_fac_idx]["name"] self.view.fac_color = factions_list[ self.view.selected_fac_idx]["color"]
def __init__(self): vresx, vresy = (1920, 1080) super(DiplomacyTabWindow, self).__init__("DiplomacyTab", (0, UI_TAB_BAR_HEIGHT + 1, UI_LEFT_PANE_WIDTH, vresy - UI_TAB_BAR_HEIGHT - 1), pf.NK_WINDOW_BORDER, (vresx, vresy), resize_mask = pf.ANCHOR_X_LEFT | pf.ANCHOR_Y_TOP | pf.ANCHOR_Y_BOT) self.selected_fac_idx = 0 factions_list = pf.get_factions_list() assert len(factions_list) > 0 self.fac_name = factions_list[self.selected_fac_idx]["name"] self.fac_color = factions_list[self.selected_fac_idx]["color"]
def __on_fac_removed(self, event): factions_list = pf.get_factions_list() globals.active_objects_list = [ obj for obj in globals.active_objects_list if obj.faction_id is not event ] pf.remove_faction(event) if event == factions_list[-1]["id"]: # we removed the last element self.view.selected_fac_idx = len(factions_list) - 1 self.view.fac_name = factions_list[self.view.selected_fac_idx]["name"] self.view.fac_color = factions_list[ self.view.selected_fac_idx]["color"]
def __init__(self, view): self.__view = view self.__perf_view = psw.PerfStatsWindow() self.__settings_vc = tbvc.TabBarVC(stw.SettingsTabbedWindow(), tab_change_event=common.constants.EVENT_SETTINGS_TAB_SEL_CHANGED) self.__settings_vc.push_child("Video", vsvc.VideoSettingsVC(vsw.VideoSettingsWindow())) self.__settings_vc.push_child("Game", gsvc.GameSettingsVC(gsw.GameSettingsWindow())) self.__settings_shown = False self.__view.fac_names = [fac["name"] for fac in pf.get_factions_list()] assert len(self.__view.fac_names) > 0 if len(self.__view.fac_names) >= 2: self.__view.active_fac_idx = 1 else: self.__view.active_fac_idx = 0
def __on_click(self, event): if not mouse_events.mouse_over_map: return if pf.map_pos_under_cursor() is None: return if event[0] == pf.SDL_BUTTON_LEFT: if self.current_object: self.current_object.faction_id = pf.get_factions_list()[self.view.selected_faction_idx]["id"] globals.active_objects_list.append(self.current_object) self.current_object = self.__object_at_index(self.view.selected_object_idx) self.current_object.pos = pf.map_pos_under_cursor() elif event[0] == pf.SDL_BUTTON_RIGHT: self.right_mousebutton_state = event[1] sel = pf.get_unit_selection() if len(sel) == 1: sel[0].pos = pf.map_pos_under_cursor()
def __on_selection_changed(self, event): self.__view.clear_actions() if self.__active_controllable and self.__active_controllable(): self.__uninstall_hotkeys(self.__active_controllable()) self.__active_controllable = None sel = pf.get_unit_selection() controllable_sel = [ent for ent in sel if isinstance(ent, cont.Controllable)] if len(controllable_sel) > 0: first = controllable_sel[0] fac_list = pf.get_factions_list() if fac_list[first.faction_id]["controllable"]: self.__active_controllable = weakref.ref(first) self.__install_hotkeys(first) self.__view.actions = [first.action(i) for i in range(0, ACTION_NUM_ROWS * ACTION_NUM_COLS)]
def update(self): # Mode self.layout_row_dynamic(20, 1) self.label_colored_wrap("Mode:", (255, 255, 255)) old_mode = self.mode self.layout_row_dynamic(20, 2) if self.option_label("Place", self.mode == self.OBJECTS_MODE_PLACE): self.mode = self.OBJECTS_MODE_PLACE if self.option_label("Select", self.mode == self.OBJECTS_MODE_SELECT): self.mode = self.OBJECTS_MODE_SELECT self.layout_row_dynamic(10, 1) if self.mode != old_mode: pf.global_event(EVENT_OBJECTS_TAB_MODE_CHANGED, self.mode) if self.mode == self.OBJECTS_MODE_PLACE: # Faction self.layout_row_dynamic(20, 1) self.label_colored_wrap("Faction:", (255, 255, 255)) self.layout_row_dynamic(25, 1) fac_names = [fac["name"] for fac in pf.get_factions_list()] self.selected_faction_idx = self.combo_box( fac_names, self.selected_faction_idx, 25, (UI_LEFT_PANE_WIDTH - 30, 200)) self.layout_row_dynamic(10, 1) # Objects self.layout_row_dynamic(20, 1) self.label_colored_wrap("Objects:", (255, 255, 255)) def objects_group(): self.layout_row_static(25, UI_LEFT_PANE_WIDTH - 60, 1) for i in range(0, len(self.objects_list)): old = self.selected_object_idx on = self.selectable_label(self.objects_list[i], pf.NK_TEXT_ALIGN_LEFT, i == self.selected_object_idx) if on: self.selected_object_idx = i if self.selected_object_idx != old: pf.global_event(EVENT_OBJECT_SELECTION_CHANGED, i) self.layout_row_static(400, UI_LEFT_PANE_WIDTH - 30, 1) self.group("Objects", pf.NK_WINDOW_BORDER, objects_group) elif self.mode == self.OBJECTS_MODE_SELECT: # Selection sel_obj_list = pf.get_unit_selection() if len(sel_obj_list) == 0: return self.layout_row_dynamic(20, 1) self.label_colored_wrap("Selection:", (255, 255, 255)) if len(sel_obj_list) > 1: def selection_group(): self.layout_row_static(25, UI_LEFT_PANE_WIDTH - 60, 1) for i in range(0, len(sel_obj_list)): name = "{0} {1}".format( sel_obj_list[i].name, format_str_for_numlist(sel_obj_list[i].pos)) on = self.selectable_label(name, pf.NK_TEXT_ALIGN_LEFT, False) if on: pf.global_event(EVENT_OBJECT_SELECTED_UNIT_PICKED, sel_obj_list[i]) self.layout_row_static(400, UI_LEFT_PANE_WIDTH - 30, 1) self.group("Selection", pf.NK_WINDOW_BORDER, selection_group) else: assert (len(sel_obj_list) == 1) self.layout_row_dynamic(10, 1) self.layout_row_dynamic(20, 1) self.label_colored_wrap(sel_obj_list[0].name, (200, 200, 0)) pos_str = "Position: {0}".format( format_str_for_numlist(sel_obj_list[0].pos)) self.layout_row_dynamic(20, 1) self.label_colored_wrap(pos_str, (255, 255, 255)) rot_str = "Rotation: {0}".format( format_str_for_numlist(sel_obj_list[0].rotation)) self.layout_row_dynamic(20, 1) self.label_colored_wrap(rot_str, (255, 255, 255)) scale_str = "Scale: {0}".format( format_str_for_numlist(sel_obj_list[0].scale)) self.layout_row_dynamic(20, 1) self.label_colored_wrap(scale_str, (255, 255, 255)) select_str = "Selectable: {0}".format( "True" if sel_obj_list[0].selectable else "False") self.layout_row_dynamic(20, 1) self.label_colored_wrap(select_str, (255, 255, 255)) fac = next(f for f in pf.get_factions_list() if f["id"] == sel_obj_list[0].faction_id) select_str = "Faction: {0}".format(fac["name"]) self.layout_row_dynamic(20, 1) self.label_colored_wrap(select_str, (255, 255, 255)) def on_delete(): pf.global_event(EVENT_OBJECT_DELETE_SELECTION, None) self.layout_row_dynamic(30, 1) self.button_label("Delete", on_delete)
def __on_controlled_faction_chagned(self, event): pf.clear_unit_selection() for i in range(len(pf.get_factions_list())): pf.set_faction_controllable(i, False) pf.set_faction_controllable(event, True)
def update(self): factions_list = pf.get_factions_list() self.layout_row_dynamic(20, 1) self.label_colored_wrap("Factions:", (255, 255, 255)) def factions_group(): self.layout_row_static(25, UI_LEFT_PANE_WIDTH - 60, 1) for i in range(0, len(factions_list)): old = self.selected_fac_idx on = self.selectable_label(factions_list[i]["name"], pf.NK_TEXT_ALIGN_LEFT, i == self.selected_fac_idx) if on: self.selected_fac_idx = i if self.selected_fac_idx != old: pf.global_event(EVENT_DIPLO_FAC_SELECTION_CHANGED, i) self.layout_row_static(400, UI_LEFT_PANE_WIDTH - 30, 1) self.group("Factions", pf.NK_WINDOW_BORDER, factions_group) def on_delete_selected(): pf.global_event(EVENT_DIPLO_FAC_REMOVED, self.selected_fac_idx) self.layout_row_dynamic(30, 1) if len(factions_list) > 1: self.button_label("Delete Selected", on_delete_selected) else: #disabled - We cannot delete the very last faction old_style = (pf.button_style.normal, pf.button_style.hover, pf.button_style.active) old_style_text = (pf.button_style.text_normal, pf.button_style.text_hover, pf.button_style.text_active) pf.button_style.normal = DiplomacyTabWindow.DISABLED_BG_COLOR pf.button_style.hover = DiplomacyTabWindow.DISABLED_BG_COLOR pf.button_style.active = DiplomacyTabWindow.DISABLED_BG_COLOR pf.button_style.text_normal = DiplomacyTabWindow.DISABLED_TEXT_COLOR pf.button_style.text_hover = DiplomacyTabWindow.DISABLED_TEXT_COLOR pf.button_style.text_active = DiplomacyTabWindow.DISABLED_TEXT_COLOR self.button_label("Delete Selected", lambda: None) pf.button_style.normal, pf.button_style.hover, pf.button_style.active = old_style pf.button_style.text_normal, pf.button_style.text_hover, pf.button_style.text_active = old_style_text self.layout_row_dynamic(10, 1) self.layout_row_dynamic(20, 1) self.label_colored_wrap("Faction Name:", (255, 255, 255)) self.layout_row_dynamic(30, 1) self.fac_name = self.edit_string(pf.NK_EDIT_SIMPLE, self.fac_name) self.layout_row_dynamic(20, 1) self.label_colored_wrap("Faction Color:", (255, 255, 255)) self.layout_row_dynamic(30, 1) self.fac_color = self.color_picker(self.fac_color, (UI_LEFT_PANE_WIDTH - 30, 120)) self.layout_row_dynamic(10, 1) def on_update_fac(): pf.global_event( EVENT_DIPLO_FAC_CHANGED, (self.selected_fac_idx, self.fac_name, self.fac_color)) def on_new_fac(): pf.global_event(EVENT_DIPLO_FAC_NEW, (self.fac_name, self.fac_color)) if len(self.fac_name) > 0: self.layout_row_dynamic(30, 1) self.button_label("Update Selected", on_update_fac) self.layout_row_dynamic(30, 1) self.button_label("Add New Faction", on_new_fac) else: #disabled - Can't update name to empty string old_style = (pf.button_style.normal, pf.button_style.hover, pf.button_style.active) old_style_text = (pf.button_style.text_normal, pf.button_style.text_hover, pf.button_style.text_active) pf.button_style.normal = DiplomacyTabWindow.DISABLED_BG_COLOR pf.button_style.hover = DiplomacyTabWindow.DISABLED_BG_COLOR pf.button_style.active = DiplomacyTabWindow.DISABLED_BG_COLOR pf.button_style.text_normal = DiplomacyTabWindow.DISABLED_TEXT_COLOR pf.button_style.text_hover = DiplomacyTabWindow.DISABLED_TEXT_COLOR pf.button_style.text_active = DiplomacyTabWindow.DISABLED_TEXT_COLOR self.layout_row_dynamic(30, 1) self.button_label("Update Selected", lambda: None) self.layout_row_dynamic(30, 1) self.button_label("Add New Faction", lambda: None) pf.button_style.normal, pf.button_style.hover, pf.button_style.active = old_style pf.button_style.text_normal, pf.button_style.text_hover, pf.button_style.text_active = old_style_text
def update(self): factions_list = pf.get_factions_list() self.layout_row_dynamic(20, 1) self.label_colored_wrap("Factions:", (255, 255, 255)) self.layout_row_static(400, UI_LEFT_PANE_WIDTH - 30, 1) self.group("Factions", pf.NK_WINDOW_BORDER, self.factions_group) def on_delete_selected(): pf.global_event(EVENT_DIPLO_FAC_REMOVED, factions_list[self.selected_fac_idx]["id"]) self.layout_row_dynamic(30, 1) if len(factions_list) > 1: self.button_label("Delete Selected", on_delete_selected) else: #disabled - We cannot delete the very last faction button_style = { "normal": DiplomacyTabWindow.DISABLED_BG_COLOR, "hover": DiplomacyTabWindow.DISABLED_BG_COLOR, "active": DiplomacyTabWindow.DISABLED_BG_COLOR, "text_normal": DiplomacyTabWindow.DISABLED_TEXT_COLOR, "text_hover": DiplomacyTabWindow.DISABLED_TEXT_COLOR, "text_active": DiplomacyTabWindow.DISABLED_TEXT_COLOR } with btc.ButtonStyle(**button_style): self.button_label("Delete Selected", lambda: None) self.layout_row_dynamic(10, 1) self.layout_row_dynamic(20, 1) self.label_colored_wrap("Faction Name:", (255, 255, 255)) self.layout_row_dynamic(30, 1) self.fac_name = self.edit_string(pf.NK_EDIT_SIMPLE, self.fac_name) self.layout_row_dynamic(20, 1) self.label_colored_wrap("Faction Color:", (255, 255, 255)) self.layout_row_dynamic(30, 1) self.fac_color = self.color_picker(self.fac_color, (UI_LEFT_PANE_WIDTH - 30, 120)) self.layout_row_dynamic(10, 1) def on_update_fac(): facs = pf.get_factions_list() pf.global_event(EVENT_DIPLO_FAC_CHANGED, (facs[self.selected_fac_idx]["id"], self.fac_name, self.fac_color)) def on_new_fac(): pf.global_event(EVENT_DIPLO_FAC_NEW, (self.fac_name, self.fac_color)) if len(self.fac_name) > 0: self.layout_row_dynamic(30, 1) self.button_label("Update Selected", on_update_fac) self.layout_row_dynamic(30, 1) self.button_label("Add New Faction", on_new_fac) else: #disabled - Can't update name to empty string button_style = { "normal": DiplomacyTabWindow.DISABLED_BG_COLOR, "hover": DiplomacyTabWindow.DISABLED_BG_COLOR, "active": DiplomacyTabWindow.DISABLED_BG_COLOR, "text_normal": DiplomacyTabWindow.DISABLED_TEXT_COLOR, "text_hover": DiplomacyTabWindow.DISABLED_TEXT_COLOR, "text_active": DiplomacyTabWindow.DISABLED_TEXT_COLOR } with btc.ButtonStyle(**button_style): self.layout_row_dynamic(30, 1) self.button_label("Update Selected", lambda: None) self.layout_row_dynamic(30, 1) self.button_label("Add New Faction", lambda: None)
def on_update_fac(): facs = pf.get_factions_list() pf.global_event(EVENT_DIPLO_FAC_CHANGED, (facs[self.selected_fac_idx]["id"], self.fac_name, self.fac_color))
def __on_new_game(self, event): self.view.selected_fac_idx = 0 factions_list = pf.get_factions_list() self.view.fac_name = factions_list[0]["name"] self.view.fac_color = factions_list[0]["color"]
def __on_fac_sel_changed(self, event): factions_list = pf.get_factions_list() self.view.fac_name = factions_list[event]["name"] self.view.fac_color = factions_list[event]["color"]