Exemple #1
0
    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)
Exemple #2
0
 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
Exemple #3
0
    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)
Exemple #4
0
 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
Exemple #5
0
    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"]
Exemple #6
0
    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"]
Exemple #7
0
    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"]
Exemple #8
0
    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)]
Exemple #11
0
    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)
Exemple #12
0
 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)
Exemple #13
0
    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
Exemple #14
0
    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)
Exemple #15
0
 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))
Exemple #16
0
 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"]
Exemple #17
0
 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"]