Beispiel #1
0
    def get_description(self):
        ''' Gets a human-readable description of this glyph, accounting for any exceptions to the "normal" form '''

        # Should only trigger when all of the exceptions are the same, but the normal is different (since the len of the set
        # should be at least 2 if there are no exceptions, but 1 if they're all the same
        if self.normal != self.before_consonant and len({self.before_consonant, self.after_consonant, self.at_end, self.at_beginning}) == 1:
            written_exceptions = 'often written as "{0}"'.format(self.before_consonant)

        else:
            identical_letters = defaultdict(list)
            # Loop through each instance where the letters may be different, and build up the dict of identical letters if they're the same
            for letter_at_condition, text_description_of_condition in ((self.before_consonant, 'before a consonant'), (self.after_consonant, 'after a consonant'),
                                                                       (self.at_beginning, 'at the beginning of a word'), (self.at_end, 'at the end of a word')):
                if letter_at_condition != self.normal:
                    identical_letters[letter_at_condition].append(text_description_of_condition)

            # Sort so that the letters with the fewest instances have their descriptions first (helps with readability)
            identical_letters = sorted([(letter, description_of_condition_list) for letter, description_of_condition_list in identical_letters.iteritems()], key=lambda x: len(x[1]))

            # Build up the list of descriptions for each letter (because of the above code, each letter may have multiple descriptions of places it can occur
            desc_list = []
            for letter, description_of_condition_list in identical_letters:
                desc_list.append('"{0}" when occuring {1}'.format(letter, join_list(description_of_condition_list, conjunction='or')))

            # Finally, join all of the descriptions together into one big list of exceptions to the "normal" glpyh being displayed
            written_exceptions = ''
            if desc_list:
                written_exceptions += 'written as {0}'.format(join_list(desc_list, oxford_comma=','))


        return self.normal, p.data.id_to_phoneme[self.phoneme_id].description, written_exceptions
Beispiel #2
0
 def describe(self):
     des = "On {0}, {1} was born to {2}".format(
         g.WORLD.time_cycle.date_to_text(self.date),
         self.child.fullname(),
         join_list([p.fulltitle() for p in self.parents]),
     )
     return des
Beispiel #3
0
    def get_wound_descriptions(self):
        light_wounds = 0
        medium_wounds = 0
        serious_wounds = 0
        grievous_wounds = 0

        for wound in self.wounds:
            if wound.damage <= 20:
                light_wounds += 1
            elif wound.damage <= 50:
                medium_wounds += 1
            elif wound.damage <= 80:
                serious_wounds += 1
            else:
                grievous_wounds += 1

        wound_list = []
        if light_wounds > 0:
            wound_list.append(ct('light wound', light_wounds))
        if medium_wounds > 0:
            wound_list.append(ct('medium wound', medium_wounds))
        if serious_wounds > 0:
            wound_list.append(ct('serious wound', serious_wounds))
        if grievous_wounds > 0:
            wound_list.append(ct('grievous wound', grievous_wounds))

        return join_list(wound_list)
Beispiel #4
0
    def get_wound_descriptions(self):
        light_wounds = 0
        medium_wounds = 0
        serious_wounds = 0
        grievous_wounds = 0

        for wound in self.wounds:
            if wound.damage <= 20:
                light_wounds += 1
            elif wound.damage <= 50:
                medium_wounds += 1
            elif wound.damage <= 80:
                serious_wounds += 1
            else:
                grievous_wounds += 1

        wound_list = []
        if light_wounds > 0:
            wound_list.append(ct('light wound', light_wounds))
        if medium_wounds > 0:
            wound_list.append(ct('medium wound', medium_wounds))
        if serious_wounds > 0:
            wound_list.append(ct('serious wound', serious_wounds))
        if grievous_wounds > 0:
            wound_list.append(ct('grievous wound', grievous_wounds))

        return join_list(wound_list)
Beispiel #5
0
Datei: goap.py Projekt: pangal/it
    def get_name(self):
        # A string count of the commodity being input as well as the number input
        input_info = ct_collective(word=self.reaction.input_commodity_name, num=self.get_input_commodity_quantity_for_this_reaction())

        # Info about the reactants in the reaction
        reactants = join_list([ct_collective(commodity, self.consumed_in_this_reaction[commodity]) for commodity in self.consumed_in_this_reaction])
        if reactants != 'nothing':      reactant_sentence = ', comsuming {0} in the process'.format(reactants)
        else:                           reactant_sentence = ''

        product = ct_collective(self.commodity, self.quantity)
        goal_name = '{0} {1} into {2}{3}'.format(self.reaction.verb, input_info, product, reactant_sentence)
        return goal_name
Beispiel #6
0
    def get_name(self):
        # A string count of the commodity being input as well as the number input
        input_info = ct_collective(
            word=self.reaction.input_commodity_name,
            num=self.get_input_commodity_quantity_for_this_reaction())

        # Info about the reactants in the reaction
        reactants = join_list([
            ct_collective(commodity, self.consumed_in_this_reaction[commodity])
            for commodity in self.consumed_in_this_reaction
        ])
        if reactants != 'nothing':
            reactant_sentence = ', comsuming {0} in the process'.format(
                reactants)
        else:
            reactant_sentence = ''

        product = ct_collective(self.commodity, self.quantity)
        goal_name = '{0} {1} into {2}{3}'.format(self.reaction.verb,
                                                 input_info, product,
                                                 reactant_sentence)
        return goal_name
Beispiel #7
0
def economy_tab(world, city):
    agent_index = 0

    key_pressed = None
    event = libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS | libtcod.EVENT_MOUSE, key, mouse)

    while key_pressed != libtcod.KEY_ESCAPE:
        if key_pressed == libtcod.KEY_PAGEUP:
            if agent_index - 1 < 0:
                pass
            else:
                agent_index -= 1
        if key_pressed == libtcod.KEY_PAGEDOWN:
            agent_index += 1

        if key_pressed == libtcod.KEY_UP:
            agent_index = 0
        if key_pressed == libtcod.KEY_DOWN:
            agent_index = 0

        elif key_pressed == 'p':
            show_people(world=world)
        elif key_pressed == 'e':
            view = 'economy'
        elif key_pressed == 'b':
            view = 'building'
        elif key_pressed == 'r':
            city.econ.run_simulation()

        libtcod.console_clear(0) ## 0 should be variable "con"?

        #### General ######
        g.game.interface.root_console.draw_box(0, g.SCREEN_WIDTH - 1, 0, g.SCREEN_HEIGHT - 1, g.PANEL_FRONT) #Box around everything
        g.game.interface.root_console.draw_box(1, g.SCREEN_WIDTH - 2, 1, 7, g.PANEL_FRONT)
        libtcod.console_print(0, 2, 2, 'Civilizations (ESC to exit, LEFT and RIGHT arrows to scroll)')
        libtcod.console_print(0, 2, 4, '<p> - Show people    <b> - Show buildings    <f> - Show figures    <e> Show economy')

        libtcod.console_set_default_foreground(0, g.PANEL_FRONT)
        libtcod.console_print(0, 2, 5, '{0} square km. Access to: {1}'.format(len(city.territory), join_list(city.native_res.keys())))

        ####### AGENTS ############
        y = 10

        libtcod.console_set_default_foreground(0, g.PANEL_FRONT * .7)
        libtcod.console_print(0, 5, y, 'Agent name')
        libtcod.console_print(0, 25, y, 'Inventory')
        libtcod.console_print(0, 45, y, 'Beliefs')

        libtcod.console_set_default_foreground(0, g.PANEL_FRONT)
        #for agent in city.econ.resource_gatherers + city.econ.good_producers + city.econ.buy_merchants + city.econ.sell_merchants:
        iy, cy, ly = y, y, y
        agent_list = city.econ.resource_gatherers + city.econ.good_producers #+ city.econ.buy_merchants + city.econ.sell_merchants
        if agent_index > len(agent_list) - 6:
            agent_index = len(agent_list) - 6
        for agent in agent_list[agent_index:agent_index + 6]:
            y = max(iy, cy, ly, y + 6) + 1
            if y > 70:
                break
            libtcod.console_print(0, 5, y, agent.name)
            libtcod.console_print(0, 5, y + 1, '{0} gold'.format(agent.gold))
            libtcod.console_print(0, 5, y + 2, '{0} buys'.format(agent.buys))
            libtcod.console_print(0, 5, y + 3, '{0} sells'.format(agent.sells))
            libtcod.console_print(0, 5, y + 4, 'Alive: {0}'.format(agent.turns_alive))
            libtcod.console_print(0, 5, y + 5, '{0} since food'.format(agent.turns_since_food))

            inventory = Counter(agent.inventory)
            iy = y
            for item, amount in inventory.iteritems():
                libtcod.console_print(0, 25, iy, '{0} ({1})'.format(item, amount))
                iy += 1
                if iy > 70: break

            cy, ly = y, y
            if agent in city.econ.resource_gatherers + city.econ.good_producers:
                for commodity, value in agent.perceived_values.iteritems():
                    libtcod.console_print(0, 45, cy, '{0}: {1} ({2})'.format(commodity, value.center, value.uncertainty))
                    cy += 1
                    if cy > 70: break

                for j in xrange(len(agent.last_turn)):
                    libtcod.console_print(0, 70, ly, agent.last_turn[j])
                    ly += 1
                    if ly > 70: break

            elif agent in city.econ.buy_merchants + city.econ.sell_merchants and agent.current_location == city.econ:
                for commodity, value in agent.buy_perceived_values.iteritems():
                    libtcod.console_print(0, 45, cy, '{0} - {1}: {2} ({3})'.format(agent.buy_economy.owner.name, commodity, value.center, value.uncertainty))
                    cy += 1
                    if cy > 70: break
                for commodity, value in agent.sell_perceived_values.iteritems():
                    libtcod.console_print(0, 45, cy, '{0} - {1}: {2} ({3})'.format(agent.sell_economy.owner.name, commodity, value.center, value.uncertainty))
                    cy += 1
                    if cy > 70: break

                for j in xrange(len(agent.last_turn)):
                    libtcod.console_print(0, 70, ly, agent.last_turn[j])
                    ly += 1
                    if ly > 70: break

                    ###### End print individual agents ######
        '''
        ## Print good info ##
        y = 12
        libtcod.console_print_left(0, 80, y, libtcod.BKGND_NONE, 'Commodity')
        libtcod.console_print_left(0, 95, y, libtcod.BKGND_NONE, 'Avg/LR/Sply/Dmnd/iterations')

        y += 2

        for commodity, auction in city.econ.auctions.iteritems():
            if auction.supply != None and auction.demand != None:
                libtcod.console_print_left(0, 80, y, libtcod.BKGND_NONE, commodity)
                libtcod.console_print_left(0, 95, y, libtcod.BKGND_NONE, str(auction.mean_price))
                libtcod.console_print_left(0, 100, y, libtcod.BKGND_NONE, str(auction.price_history[-1]))
                libtcod.console_print_left(0, 104, y, libtcod.BKGND_NONE, str(auction.supply))
                libtcod.console_print_left(0, 108, y, libtcod.BKGND_NONE, str(auction.demand))
                libtcod.console_print_left(0, 112, y, libtcod.BKGND_NONE, str(auction.iterations))
                y += 1
        '''
        ## End print good info ##
        libtcod.console_flush()

        event = libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS | libtcod.EVENT_MOUSE, key, mouse)
        key_pressed = g.game.get_key(key)
Beispiel #8
0
def show_civs(world):
    city_number = 0
    minr, maxr = 0, g.SCREEN_HEIGHT - 6

    view = 'economy'

    key_pressed = None
    event = libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS | libtcod.EVENT_MOUSE, key, mouse)

    while key_pressed != libtcod.KEY_ESCAPE:
        if key_pressed == libtcod.KEY_PAGEUP or mouse.wheel_up:
            if not minr - 1 < 0:
                minr -= 1
                maxr -= 1
        if key_pressed == libtcod.KEY_PAGEDOWN or mouse.wheel_down:
            if not maxr + 1 > len(all_agents):
                maxr += 1
                minr += 1

        if key_pressed == libtcod.KEY_LEFT:
            city_number -= 1
            minr, maxr = 0, g.SCREEN_HEIGHT - 6
        if key_pressed == libtcod.KEY_RIGHT:
            city_number += 1
            minr, maxr = 0, g.SCREEN_HEIGHT - 6

        if city_number < 0:
            city_number = len(world.cities) - 1
        elif city_number > len(world.cities) - 1:
            city_number = 0

        libtcod.console_clear(0) ## 0 should be variable "con"?

        #### Set current variables ####
        city = world.cities[city_number]
        ################################

        if key_pressed == 'p':
            show_people(world=world)
        elif key_pressed == 'e':
            view = 'economy'
        elif key_pressed == 'd':
            economy_tab(world=world, city=city)
        elif key_pressed == 'b':
            view = 'building'
        elif key_pressed == 'f':
            view = 'figures'
        elif key_pressed == 'c':
            show_cultures(world=world, spec_culture=city.culture)
        elif key_pressed == 'r':
            world.cities[city_number].econ.run_simulation()
        elif key_pressed == 'a':
            city.econ.graph_results(solid=city.econ.get_all_available_commodity_tokens(), dot=[])


        #### General ######
        g.game.interface.root_console.draw_box(0, g.SCREEN_WIDTH - 1, 0, g.SCREEN_HEIGHT - 1, g.PANEL_FRONT) #Box around everything
        g.game.interface.root_console.draw_box(1, g.SCREEN_WIDTH - 2, 1, 7, g.PANEL_FRONT)
        libtcod.console_print(0, 2, 2, 'Civilizations (ESC to exit, LEFT and RIGHT arrows to change city, PGUP PGDOWN to scroll vertically)')
        libtcod.console_print(0, 2, 4, '<p> Show people   <b> Show buildings   <f> Show figures   <e> Show economy   <d> Detailed economy   <c> Culture')

        ## Show government type - left panel
        #g.game.interface.root_console.draw_box(1, 28, 8, g.SCREEN_HEIGHT - 2, g.PANEL_FRONT) # Around relations
        # Check for title holder

        # if city.faction.leader:
        #     title_info = '{0} {1}, age {2}'.format(city.faction.leader_prefix, city.faction.get_leader().fullname(), city.faction.get_leader().creature.get_age())
        # else:
        #     title_info = 'No holder'
        # libtcod.console_print(0, 2, 11, title_info)
        # libtcod.console_print(0, 2, 12, 'Dynastic heirs:')
        #
        # y = 13
        # for heir in city.faction.heirs:
        #     libtcod.console_print(0, 2, y, '{0}, age {1}'.format(heir.fullname(), heir.creature.get_age()))
        #     y += 1

        ######### Cities and governers #############
        g.game.interface.root_console.draw_box(1, g.SCREEN_WIDTH - 2, 8, g.SCREEN_HEIGHT - 2, g.PANEL_FRONT) # Around cities + govs

        y = 14
        libtcod.console_set_default_foreground(0, libtcod.color_lerp(city.color, g.PANEL_FRONT, .5))
        libtcod.console_print(0, 4, y - 4, 'City of {0} (Population: {1}, {2} gold)'.format(city.name, city.get_population(), city.treasury))
        libtcod.console_print(0, 4, y - 3, 'Access to: {0}'.format(join_list(city.native_res.keys())))
        if city.faction.parent is None:
            liege = ' * Independent *  '
        else:
            liege = 'Vassal to ' + city.faction.parent.site.name + '. '
        libtcod.console_print(0, 4, y - 2, liege + 'Vassals: ' + ', '.join([vassal.site.name for vassal in city.faction.subfactions]))
        libtcod.console_set_default_foreground(0, g.PANEL_FRONT)

        if view == 'building':
            ####### Positions of interest in the city ###########
            libtcod.console_print(0, 4, y, '-* Important structures *-')

            y += 1
            for building in city.buildings:
                y += 1
                if y > g.SCREEN_HEIGHT - 12:
                    libtcod.console_print(0, 4, y, '<< More >> ')
                    break

                libtcod.console_print(0, 4, y, '-* ' + building.name + ' *- ')
                for worker in building.current_workers:
                    y += 1
                    libtcod.console_print(0, 4, y, worker.fulltitle())
                y += 1


        elif view == 'economy':

            ####### AGENTS ############
            libtcod.console_set_default_foreground(0, g.PANEL_FRONT * .7)
            libtcod.console_print(0, 4, y, 'Agent name')
            libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.yellow, g.PANEL_FRONT, .7))
            libtcod.console_print(0, 30, y, 'Gold')

            libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.light_yellow, g.PANEL_FRONT, .7))
            libtcod.console_print(0, 40, y, 'g/i')

            #libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.blue, g.PANEL_FRONT, .7))
            #libtcod.console_print_ex(0, 40, y, libtcod.BKGND_NONE, libtcod.RIGHT, 'Buys')
            #libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.cyan, g.PANEL_FRONT, .7))
            #libtcod.console_print(0, 46, y, 'Sells')
            libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.green, g.PANEL_FRONT, .7))
            libtcod.console_print(0, 52, y, 'Alive')

            libtcod.console_set_default_foreground(0, g.PANEL_FRONT)


            all_agents = (city.econ.resource_gatherers + city.econ.good_producers + city.econ.buy_merchants + city.econ.sell_merchants)
            merchants = city.econ.buy_merchants + city.econ.sell_merchants

            for agent in all_agents[minr:maxr]:
                y += 1
                if y > g.SCREEN_HEIGHT - 5:
                    break


                if agent in merchants and agent.current_location == city:
                    agent_name = '{0} {1} (here)'.format(agent.name, agent.id_)
                elif agent in merchants and agent.current_location is not None:
                    agent_name = '{0} {1} ({2})'.format(agent.name, agent.id_, agent.current_location.owner.name)
                elif agent in merchants and agent.current_location is None:
                    agent_name = '{0} {1} (traveling)'.format(agent.name, agent.id_)
                else:
                    agent_name = '{0} {1}'.format(agent.name, agent.id_)

                if agent.attached_to == g.player:
                    agent_name += ' (you)'

                ### (debug) Player can take on role of economy agent at a whim
                if mouse.cy == y and 4 <= mouse.cx <= 85:
                    acolor = libtcod.dark_yellow

                    # Set the g.player to "become" one of these agents
                    if mouse.lbutton_pressed:
                        agent.update_holder(figure=g.player)

                        for panel in g.game.interface.gui_panels:
                            if panel.name == 'Panel4':
                                break

                        panel.render = True
                        pcolor = libtcod.color_lerp(g.PANEL_FRONT, libtcod.light_green, .5)
                        hcolor = pcolor * 2
                        panel.wmap_buttons.append(Button(gui_panel=panel, func=g.WORLD.time_cycle.goto_next_week, args=[],
                                                              text='Advance', topleft=(15, 40), width=12, height=3, color=pcolor, hcolor=hcolor, do_draw_box=True) )

                else:
                    acolor = g.PANEL_FRONT

                libtcod.console_set_default_foreground(0, acolor)
                libtcod.console_print(0, 4, y, agent_name[:26])
                libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.yellow, g.PANEL_FRONT, .7))
                libtcod.console_print(0, 30, y, str(agent.gold))

                libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.light_yellow, g.PANEL_FRONT, .7))
                libtcod.console_print(0, 40, y, '{0:.2f}'.format(agent.gold / agent.represented_population_number))

                #libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.blue, g.PANEL_FRONT, .7))
                #libtcod.console_print(0, 40, y, str(agent.buys))
                #libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.cyan, g.PANEL_FRONT, .7))
                #libtcod.console_print(0, 46, y, str(agent.sells))
                libtcod.console_set_default_foreground(0, libtcod.color_lerp(libtcod.green, g.PANEL_FRONT, .7))
                libtcod.console_print(0, 52, y, str(agent.turns_alive))

            # Set color back
            libtcod.console_set_default_foreground(0, g.PANEL_FRONT)
            ###### End print individual agents ######

            ## Print good info ##
            y = 12
            libtcod.console_print(0, 60, y - 2, 'Most demanded last turn: ' + city.econ.find_most_demanded_commodity(restrict_based_on_available_resource_slots=0))

            libtcod.console_print(0, 60, y, 'Commodity')
            libtcod.console_print(0, 78, y, 'Avg$')
            libtcod.console_print(0, 84, y, 'Last$')
            libtcod.console_print(0, 90, y, 'Sply')
            libtcod.console_print(0, 96, y, 'Dmnd')
            libtcod.console_print(0, 102, y, 'D:S')
            libtcod.console_print(0, 108, y, '#')

            y += 2

            for commodity, auction in city.econ.auctions.iteritems():
                if auction.supply is not None and auction.demand is not None:
                    libtcod.console_print(0, 60, y, commodity)
                    libtcod.console_print(0, 78, y, str(auction.mean_price))

                    # Color trades - green means price last round was > than avg, red means < than avg
                    if auction.mean_price <= auction.get_last_valid_price():
                        color = libtcod.color_lerp(libtcod.green, g.PANEL_FRONT, auction.mean_price / max(1, auction.get_last_valid_price()) ) #prevent division by 0
                    else:
                        color = libtcod.color_lerp(libtcod.red, g.PANEL_FRONT, auction.get_last_valid_price() / max(1, auction.mean_price) ) #prevent division by 0
                    libtcod.console_set_default_foreground(0, color)
                    libtcod.console_print(0, 84, y, str(auction.get_last_valid_price()))
                    ## /color trades
                    libtcod.console_set_default_foreground(0, g.PANEL_FRONT)
                    libtcod.console_print(0, 90, y, str(auction.supply))
                    libtcod.console_print(0, 96, y, str(auction.demand))
                    # Ratio
                    d_s_ratio = auction.demand / max(auction.supply, 1)

                    if auction.supply == 0:
                        color_mod = .5
                        color = libtcod.red
                    elif auction.demand == 0:
                        color_mod = .5
                        color = libtcod.magenta
                    else:
                        color_mod = min(abs(1 - d_s_ratio), .75)
                        color = libtcod.green

                    libtcod.console_set_default_foreground(0, libtcod.color_lerp(color, g.PANEL_FRONT, color_mod))
                    libtcod.console_print(0, 102, y, "{0:.2f}".format(round(d_s_ratio, 2)))
                    libtcod.console_set_default_foreground(0, g.PANEL_FRONT)

                    # Iteration in economy
                    libtcod.console_print(0, 108, y, str(auction.iterations))
                    y += 1


            # Prepare agent counts for a summary table
            agents_condensed = [a.name for a in city.econ.resource_gatherers + city.econ.good_producers]
            for m in city.econ.sell_merchants:
                agents_condensed.append('{0} (sell)'.format(m.name))
            for m in city.econ.buy_merchants:
                agents_condensed.append('{0} (buy)'.format(m.name))

            agent_counts = Counter(agents_condensed)
            agent_counts_sorted = [(k, v) for k, v in agent_counts.iteritems()]
            agent_counts_sorted.sort(key=lambda x: x[1], reverse=True)


            secotion_2_y = y + 3
            y = secotion_2_y

            libtcod.console_print(0, 60, y - 1, '-* {0} agents *-'.format(len(agents_condensed)))


            for agent_name, num in agent_counts_sorted:
                y += 1
                if y < g.SCREEN_HEIGHT - 5:
                    libtcod.console_print(0, 60, y, '{0} {1}'.format(num, trim(agent_name, 26)))



            ### Good info ###
            y = secotion_2_y

            libtcod.console_print(0, 90, y - 1, '-* Imports *-')
            for other_city, commodities in city.imports.iteritems():
                for commodity in commodities:
                    y += 1
                    if y < g.SCREEN_HEIGHT - 5:
                        libtcod.console_print(0, 90, y, '{0} from {1}'.format(commodity, other_city.name))

            y += 3
            libtcod.console_print(0, 90, y - 1, '-* Exports *-')
            for other_city, commodities in city.exports.iteritems():
                for commodity in commodities:
                    y += 1
                    if y < g.SCREEN_HEIGHT - 5:
                        libtcod.console_print(0, 90, y, '{0} to {1}'.format(commodity, other_city.name))
                        ## End print good info ##


        elif view == 'figures':
            selected = False
            ## Figures currently residing here
            y = 16
            ny = y # for opinions

            libtcod.console_print(0, 34, y - 2, '{0} notable characters'.format(len(world.tiles[city.x][city.y].entities)))
            for figure in world.tiles[city.x][city.y].entities:
                if y > g.SCREEN_HEIGHT - 5:
                    break

                ##
                #if 34 <= mouse.cx <= 34+len(figure.fullname()) and mouse.cy == y:
                if 34 <= mouse.cx <= 60 + len(figure.creature.get_profession()) and mouse.cy == y:
                    selected = True

                    if figure.creature.sex:
                        symb = chr(11)
                        color = libtcod.light_blue
                    else:
                        color = libtcod.light_red
                        symb = chr(12)

                    libtcod.console_set_default_foreground(0, color)
                    libtcod.console_print(0, 85, ny, symb)
                    libtcod.console_set_default_foreground(0, g.PANEL_FRONT)

                    libtcod.console_print(0, 87, ny, figure.fullname())
                    libtcod.console_print(0, 85, ny + 1,
                                          figure.creature.get_profession() + ', age ' + str(figure.creature.get_age()))

                    spouseinfo = 'No spouse'
                    if figure.creature.spouse:
                        end = ''
                        if figure.creature.spouse.creature.status == 'dead':
                            end = ' (dead)'
                        spouseinfo = 'Married to ' + figure.creature.spouse.fulltitle() + end

                    libtcod.console_print(0, 85, ny + 2, spouseinfo)

                    if figure.creature.current_citizenship == city:
                        info = 'Currently lives here'
                    else:
                    #    info = 'Staying at ' + random.choice(city.get_building_type('Tavern')).get_name()
                        info = 'Currently visiting'

                    libtcod.console_print(0, 85, ny + 3, info)

                    ny += 4
                    for trait, m in figure.creature.traits.iteritems():
                        libtcod.console_print(0, 85, ny + 1, tdesc(trait, m))
                        ny += 1

                    ny += 1
                    for issue, (opinion, reasons) in figure.creature.opinions.iteritems():
                        ny += 1
                        ##
                        s = issue + ': ' + str(opinion)
                        libtcod.console_print(0, 85, ny, s)
                        for reason, amount in reasons.iteritems():
                            ny += 1
                            libtcod.console_print(0, 86, ny, reason + ': ' + str(amount))

                if selected:
                    libtcod.console_set_default_foreground(0, libtcod.color_lerp(g.PANEL_FRONT, libtcod.yellow, .5))
                    selected = False

                elif libtcod.console_get_default_foreground != g.PANEL_FRONT:
                    libtcod.console_set_default_foreground(0, g.PANEL_FRONT)

                libtcod.console_print(0, 34, y, figure.fullname())

                libtcod.console_print(0, 57, y, str(figure.creature.get_age()))

                libtcod.console_print(0, 60, y, figure.creature.get_profession())

                if figure.creature.dynasty:
                    libtcod.console_put_char_ex(0, 32, y, figure.creature.dynasty.symbol,
                                                figure.creature.dynasty.symbol_color,
                                                figure.creature.dynasty.background_color)

                if figure.creature.sex:
                    symb = chr(11)
                    color = libtcod.light_blue
                else:
                    color = libtcod.light_red
                    symb = chr(12)

                libtcod.console_set_default_foreground(0, color)
                libtcod.console_print(0, 55, y, symb)
                libtcod.console_set_default_foreground(0, g.PANEL_FRONT)


                # Increase so next figure goes onto next line
                y += 1

        libtcod.console_flush()

        event = libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS | libtcod.EVENT_MOUSE, key, mouse)
        key_pressed = g.game.get_key(key)
Beispiel #9
0
def show_cultures(world, spec_culture=None):
    index = 0

    key_pressed = None
    event = libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS | libtcod.EVENT_MOUSE, key, mouse)

    while key_pressed != libtcod.KEY_ESCAPE:
        #### If there's been a specific culture specified
        if spec_culture:
            culture = spec_culture
            language = culture.language

        #### Handle flipping through the world's cultures with the arrow keys
        else:
            if key_pressed == libtcod.KEY_LEFT:
                index = looped_increment(initial_num=index, max_num=len(g.WORLD.cultures)-1, increment_amt=-1)
            elif key_pressed == libtcod.KEY_RIGHT:
                index = looped_increment(initial_num=index, max_num=len(g.WORLD.cultures)-1, increment_amt=-1)

            culture = world.cultures[index]
            language = culture.language

        # Clear console
        libtcod.console_clear(0) ## 0 should be variable "con"?

        culture_box_y = 13
        language_box_y = culture_box_y + 1

        #### General ######
        g.game.interface.root_console.draw_box(0, g.SCREEN_WIDTH - 1, 0, g.SCREEN_HEIGHT - 1, g.PANEL_FRONT) #Box around everything
        ## Box around cultural descriptions
        g.game.interface.root_console.draw_box(1, g.SCREEN_WIDTH - 2, 1, culture_box_y, g.PANEL_FRONT)
        ## Header
        libtcod.console_print(0, 2, 2, 'Cultures and Languages (ESC to exit, LEFT and RIGHT arrows to scroll)')

        libtcod.console_set_default_foreground(0, g.PANEL_FRONT)
        libtcod.console_print(0, 4, 4, '-* The {0} culture *-'.format(culture.name))

        ## Background info, including subsitence and races
        libtcod.console_print(0, 4, 6, 'The {0} are a {1}-speaking {2} culture of {3}.'.format(culture.name, language.name.capitalize(), culture.subsistence, join_list([c.capitalize() for c in culture.races])))
        traits = [tdesc(trait, m) for (trait, m) in culture.culture_traits.iteritems()]
        libtcod.console_print(0, 4, 7, 'They are considered {0}'.format(join_list(traits)))
        ## Religion
        libtcod.console_print(0, 4, 9, 'They worship {0} gods in the Pantheon of {1}'.format(len(culture.pantheon.gods), culture.pantheon.gods[0].fulltitle()))
        ## Cultural weapons
        libtcod.console_print(0, 4, 11, 'Their arsenal includes {0}'.format(join_list(culture.weapons)))

        ###### PHONOLOGY ########
        g.game.interface.root_console.draw_box(x=1, x2=40, y=language_box_y, y2=language_box_y + 2 + len(language.consonants), color=g.PANEL_FRONT)
        y = language_box_y + 1
        libtcod.console_print(0, 4, y, 'Consonants in {0}'.format(language.name))
        for consonant in language.consonants:
            y += 1
            cnum = consonant.num
            libtcod.console_print(0, 4, y, language.orthography.mapping[cnum])
            libtcod.console_print(0, 7, y, lang.PHON_TO_ENG_EXAMPLES[cnum])

        y += 4
        g.game.interface.root_console.draw_box(x=1, x2=40, y=y-1, y2=y-1 + 2 + len(language.vowel_freqs), color=g.PANEL_FRONT)
        libtcod.console_print(0, 4, y, 'Vowels in {0}'.format(language.name))
        for (vnum, vfreq) in language.vowel_freqs:
            y += 1
            libtcod.console_print(0, 4, y, language.orthography.mapping[vnum])
            libtcod.console_print(0, 7, y, lang.PHON_TO_ENG_EXAMPLES[vnum])
        ###### / PHONOLOGY #######

        ###### VOCABULARY ########
        y = language_box_y + 1
        g.game.interface.root_console.draw_box(x=41, x2=68, y=y-1, y2=y-1 + 2 + len(language.vocabulary), color=g.PANEL_FRONT)
        libtcod.console_print(0, 43, y, 'Basic {0} vocabulary'.format(language.name))
        sorted_vocab = [(k, v) for k, v in language.vocabulary.iteritems()]
        sorted_vocab.sort()
        for (eng_word, word) in sorted_vocab:
            y += 1
            if y > g.SCREEN_HEIGHT - 2:
                break
            libtcod.console_print(0, 43, y, eng_word)
            libtcod.console_print(0, 55, y, word)

        libtcod.console_flush()

        event = libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS | libtcod.EVENT_MOUSE, key, mouse)
        key_pressed = g.game.get_key(key)
Beispiel #10
0
 def describe(self):
     des = 'On {0}, {1} was born to {2}'.format(g.WORLD.time_cycle.date_to_text(self.date), self.child.fullname(), join_list([p.fulltitle() for p in self.parents]))
     return des
Beispiel #11
0
 def get_name(self):
     goal_name = 'load {0} in {1}'.format(
         join_list(self.commodities.keys()), self.target_city.name)
     return goal_name
Beispiel #12
0
 def get_name(self):
     return 'have {0} in {1} loaded'.format(
         join_list(self.commodities.keys()), self.target_city.name)
Beispiel #13
0
Datei: goap.py Projekt: pangal/it
 def get_name(self):
     return 'have {0} unloaded in {1}'.format(join_list(self.commodities.keys()), self.target_city.name)
Beispiel #14
0
Datei: goap.py Projekt: pangal/it
 def get_name(self):
     goal_name = 'load {0} in {1}'.format(join_list(self.commodities.keys()), self.target_city.name)
     return goal_name