示例#1
0
class main_window(Ui_MainWindow):
    '''
    This class inherits the Ui_Mainwindow class. The inheritance is 
    used to add bindings to launch the host/connect window dialog
    '''
    def __init__(self, MainWindow):
        self.main_window = MainWindow
        self.setupUi(self.main_window)
        self.ui_connect = Ui_connect_window()
        self.ui_add_monster = Ui_monsters_options()
        self.main_window.resize(1280, 720)
        
        self.dock_campain.hide()
        self.dock_client.hide()
        self.toolbox_hexa_tabs.hide()
        
        self.actionHost_Game.triggered.connect(self.launch_host_game)
        self.actionConnect_to.triggered.connect(self.launch_connect_window)
        self.actionNew_Campain.triggered.connect(self.new_campain)
        self.actionAdd_Monsters.triggered.connect(self.add_monsters)        
        
        self.button_rollatable.clicked.connect(self.set_encounter_table)
        self.button_rollamonster.clicked.connect(self.set_monster_stats)
        self.line_treasure_value.returnPressed.connect(self.set_treasure)
        self.button_generate_npc.clicked.connect(self.set_npc)
        self.button_clear_text.clicked.connect(self.clear_generated_npc)
        self.button_disease_generate.clicked.connect(self.set_disease)
        self.button_poison_generate.clicked.connect(self.set_poison)

        self.list_of_encounters = ["_"]*12
        self.treasure_value = self.line_treasure_value.text()
        # slider for chance encounters on encounters tab
        self.slider_value = 10
        # hook up slider change to setter functions
        self.slider_chanceofencounter.valueChanged[int].connect(self.changevalue)
    
    def changevalue(self, value):
        self.slider_value = value

    def launch_host_game(self):
        '''
        This method will launch the host window as a dialog.
        '''       
        host_dialog = QtGui.QDialog()
        ui = Ui_host_window()
        ui.setupUi(host_dialog)
        host_dialog.exec_()

    def new_campain(self):
        self.dock_campain.hide()        
        
        self.display_disease.clear()
        self.display_generated_npc.clear()
        self.display_gems.clear()
        self.display_jewels.clear()
        self.display_magicitems.clear()
        self.display_plant.clear()
        self.display_poison.clear()
        
        self.lineedit_numberofcoins_copper.clear()
        self.lineedit_numberofcoins_silver.clear()
        self.lineedit_numberofcoins_electrum.clear()
        self.lineedit_numberofcoins_gold.clear()
        self.lineedit_numberofcoins_platinum.clear()
        
        self.label_nameofrolledmonster_1.setText("_")
        self.label_nameofrolledmonster_2.setText("_")
        self.label_nameofrolledmonster_3.setText("_")
        self.label_nameofrolledmonster_4.setText("_")
        self.label_nameofrolledmonster_5.setText("_")
        self.label_nameofrolledmonster_6.setText("_")
        self.label_nameofrolledmonster_7.setText("_")
        self.label_nameofrolledmonster_8.setText("_")
        self.label_nameofrolledmonster_9.setText("_")
        self.label_nameofrolledmonster_10.setText("_")
        self.label_nameofrolledmonster_11.setText("_")
        self.label_nameofrolledmonster_12.setText("_")
        
        self.dock_campain.show()

    def launch_connect_window(self):
        '''
        This method will launch the connect window dialog
        '''
        connect_dialog = QtGui.QDialog()
        self.ui_connect.setupUi(connect_dialog)
        self.ui_connect.button_connect.clicked.connect(self.launch_dock_client)
        connect_dialog.exec_()
        if self.ui_connect.button_connect.isDown():
            connect_dialog.close()

    def launch_dock_client(self):
        self.dock_client.show()
        host_ip = self.ui_connect.line_host_ip.text()
        port = self.ui_connect.line_port.text()
        name = self.ui_connect.line_name.text()

    def set_encounter_table(self):
        environment = str(self.combo_environmentofencounter.currentText())
        self.list_of_encounters = get_random_encounters_table(get_monster_dict_xml(),environment)
        self.label_nameofrolledmonster_1.setText(self.list_of_encounters[0])
        self.label_nameofrolledmonster_2.setText(self.list_of_encounters[1])
        self.label_nameofrolledmonster_3.setText(self.list_of_encounters[2])
        self.label_nameofrolledmonster_4.setText(self.list_of_encounters[3])
        self.label_nameofrolledmonster_5.setText(self.list_of_encounters[4])
        self.label_nameofrolledmonster_6.setText(self.list_of_encounters[5])
        self.label_nameofrolledmonster_7.setText(self.list_of_encounters[6])
        self.label_nameofrolledmonster_8.setText(self.list_of_encounters[7])
        self.label_nameofrolledmonster_9.setText(self.list_of_encounters[8])
        self.label_nameofrolledmonster_10.setText(self.list_of_encounters[9])
        self.label_nameofrolledmonster_11.setText(self.list_of_encounters[10])
        self.label_nameofrolledmonster_12.setText(self.list_of_encounters[11])

    def set_monster_stats(self):
        chance_of_encounter = self.slider_value
        chosen_monster = get_a_monster(self.list_of_encounters, chance_of_encounter)
        life, ac, movement, attacks, damages, number_met, save_poison, save_wands,\
        save_paralysis, save_dragon, save_spells, moral, treasure, alignment,\
        xp_value = get_a_monster_stats(get_monster_dict_xml(), chosen_monster)
        
        self.group_statsofrolledmonster.setTitle("Stats of Rolled Monster : {0}".format(chosen_monster))
        self.monster_ac_value.setText(ac)
        self.monster_movement_value.setText(movement)
        self.monster_attack_value.setText(attacks)
        self.monster_damages_value.setText(damages)
        self.monster_moral_value.setText(moral)
        self.monster_treasure_value.setText(treasure)
        self.monster_alignment_value.setText(alignment)
        self.monster_xp_value.setText(xp_value)
        self.monster_saves_poison_value.setText(save_poison)
        self.monster_saves_wands_value.setText(save_wands)
        self.monster_saves_paralysis_value.setText(save_paralysis)
        self.monster_saves_dragonbreath_value.setText(save_dragon)
        self.monster_saves_spells_value.setText(save_spells)


    def set_treasure(self):
        """
        This method sets up the generated treasure
        """
        #Variables used
        self.treasure_value = self.line_treasure_value.text()
        has_gems = self.check_gems.isChecked()
        has_jewels = self.check_jewels.isChecked()
        has_magic = self.check_magic_items.isChecked()
        gem_string = ""
        jewel_string = ""
        magic_string = ""
        #try to convert to an int, if it is a string, returns 0 and doesn't generate a treasure
        try:
            treasure_value = int(self.treasure_value)
        except ValueError:
            self.line_treasure_value.setText("")
            treasure_value = 0
            pass
        #generate treasure, returns a dict where keys are "pieces", "jewels", "gems", "magic_items"
        treasure = get_treasure(treasure_value, has_magic, has_gems, has_jewels)
        #formatting gems, magic items and jewels asserting we have all keys in the dict
        try:        
            for gem_tuple in treasure["gems"]:
                gem_string += "{0} : {1}\n".format(gem_tuple[0], gem_tuple[1])
            for jewel_tuple in treasure["jewels"]:
                jewel_string += "{0} : {1}\n".format(jewel_tuple[0], jewel_tuple[1])
            for magic_item in treasure["magic_items"]:
                magic_string += magic_item + "\n"
        except KeyError:
            if not has_gems:
                gem_string = ""
            if not has_jewels:
                jewel_string = ""
            if not has_magic:
                magic_string = ""

        #sets the text in the lineedits and plaintextviewers
        self.display_gems.setPlainText(gem_string)
        self.display_jewels.setPlainText(jewel_string)
        self.display_magicitems.setPlainText(magic_string)
        self.lineedit_numberofcoins_platinum.setText(str(treasure["pieces"][0]))
        self.lineedit_numberofcoins_gold.setText(str(treasure["pieces"][1]))
        self.lineedit_numberofcoins_electrum.setText(str(treasure["pieces"][2]))
        self.lineedit_numberofcoins_silver.setText(str(treasure["pieces"][3]))
        self.lineedit_numberofcoins_copper.setText(str(treasure["pieces"][4]))
        pass

    def set_npc(self):
        """
        This method adds generated npcs
        """
        print("set_npc")
        alignment = str(self.combobox_alignmentofnpc.currentText())
        print(alignment)
        gender = str(self.combobox_genderofnpc.currentText())
        print(gender)
        race = str(self.combobox_raceofnpc.currentText())
        print(race)
        class_ = str(self.combobox_classofnpc.currentText())
        print(class_)
        stats = str(self.combobox_statsofnpc.currentText())
        print(stats)
        level = int(self.slider_levelofnpc.value())
        print(level)
        generated_npc = generate_npc(alignment, gender, race, class_, level, stats)
        print(generated_npc)
        self.display_generated_npc.append(generated_npc + "\n")
        pass

    def clear_generated_npc(self):
        """
        This method clears the generated npcs
        """
        self.display_generated_npc.clear()
        pass

    def set_disease(self):
        """
        This method sets up the generated disease
        """
        region = self.combobox_disease_region.currentText()
        sequels = self.combobox_disease_sequels.currentText()
        source = self.combobox_disease_source.currentText()
        generated_disease = generate_disease(source, region, sequels)
        self.display_disease.setText(generated_disease)
        pass

    def set_poison(self):
        """
        This method sets up the generated poison
        """
        type_ = self.combobox_poison_type.currentText()
        category = self.combobox_poison_category.currentText()
        price = self.lineedit_poison_price.text()
        generated_poison = generate_poison(type_, category, price)
        self.display_poison.setText(generated_poison)
        pass

    def add_monsters(self):
        """
        This method will launch the add monsters window dialog
        """
        add_monster_dialog = QtGui.QDialog()
        self.ui_add_monster.setupUi(add_monster_dialog)
        add_monster_dialog.exec_()