示例#1
0
 def __init__( self, character_datas, goto_battle_count_max, **kargs ) :
     super( UICombatPrepare, self ).__init__( **kargs )
     self.goto_battle_count_max= goto_battle_count_max
     self.bind( on_open=    UICombatPrepare.on_opened,
                on_dismiss= UICombatPrepare.on_dismissing )
     self.hp_max_name= get_property( u'hp_max' ).__doc__
     self.speed_name= get_property( u'speed' ).__doc__
     self.dex_name= get_property( u'dex' ).__doc__
     goto_battle_count= 0
     for character_data in character_datas :
         if goto_battle_count >= goto_battle_count_max :
             character_data[u'goto_battle']= False
         is_goto_battle= character_data[u'goto_battle']
         if is_goto_battle :
             goto_battle_count += 1
         ui_prepare_character= UIPrepareCharacter( self, character_data )
         if is_goto_battle :
             index= self.get_character_middle_index()
         else :
             index= 0
         self.character_list.add_widget( ui_prepare_character, index )
         ui_prepare_character.is_goto_battle= is_goto_battle
         ui_prepare_character.is_selected= False
         ui_prepare_character.image= character_data[u'image']
         ui_prepare_character.name= character_data[u'name']
         self.setup_skill_icons_using( ui_prepare_character )
     if self.character_list.children :
         self.character_on_select( self.character_list.children[-1] )
     self.update_skill_value_total()
     self.update_skill_value_total_max()
示例#2
0
文件: combat.py 项目: sjinny/Game1
 def sync( self ) :
     self.sync_selected_skill_info()
     show_empty= ( self.active_character is None or \
                   self.active_character.camp != self.self_camp or \
                   not isinstance( self.active_character.controller, CommandController ) or \
                   self.active_character.controller.actions )
     if self.selected_detail.current == u'empty' and not show_empty :
         self.selected_detail.current= u'skills'
     elif self.selected_detail.current != u'empty' and show_empty :
         self.selected_detail.current= u'empty'
     if self.selected_detail.current == u'skills' :
         skill_src= self.active_character
         skills= [ ( skill_id, skill_src.get_skill( skill_id ) ) for skill_id in skill_src.skills_using ]
         skills= filter( lambda ( skill_id, skill ) : skill is not None, skills )
         skills.sort( reverse= True, key= lambda ( skill_id, skill ) : skill_id )
         len_need= len( skills )
         def create_ui_skill_menu_item() :
             ui_skill_menu_item= Factory.UISkillMenuItem()
             ui_skill_menu_item.ui_combat= self
             ui_skill_menu_item.skill_src= None
             ui_skill_menu_item.skill_id= None
             return ui_skill_menu_item
         resize( self.ui_skills, len_need, create_ui_skill_menu_item )
         for i in xrange( len_need ) :
             skill_id, skill= skills[i]
             ui_skill_item= self.ui_skills.children[i]
             ui_skill_item.skill_name= skill.name
             ui_skill_item.skill_src= skill_src
             ui_skill_item.skill_id= skill_id
             ui_skill_item.is_valid= skill.valid( self.combat, self.combat.objects, skill_src )
             ui_skill_item.icon= skill.icon
     self.__update_valid_ui_targets()
     self.__sync_characters( self.self_character_list,  self.self_camp  )
     self.__sync_characters( self.enemy_character_list, self.enemy_camp )
     self.light_name= get_property( u'light' ).__doc__
     self.light_value= self.combat.light
     self.light_max= self.combat.light_max
     self.dark_name= get_property( u'dark' ).__doc__
     self.dark_value= self.combat.dark
     self.dark_max= self.combat.dark_max
     self.chaos_name= get_property( u'chaos' ).__doc__
     self.chaos_value= self.combat.chaos
     self.chaos_max= self.combat.chaos_max
示例#3
0
文件: combat.py 项目: sjinny/Game1
    def __sync_characters( self, ui_character_list, camp ) :
        characters= [ character for character in self.combat.objects if character.camp == camp ]
        characters.sort()
        len_need= len( characters )
        def create_ui_character() :
            ui_character= Factory.UICharacter()
            ui_character.ui_combat= self
            return ui_character
        resize( ui_character_list, len_need, create_ui_character )
        assert len( ui_character_list.children ) == len_need
        for i, character in enumerate( characters ) :
            ui_character= ui_character_list.children[i]
            ui_character.character= character

            ui_character.name= character.name
            ui_character.image= character.image
            ui_character.seq= str( 1+self.combat.objects.index( character ) )

            ui_character.hp_name= get_property( u'hp' ).__doc__
            ui_character.hp_value= character.hp
            ui_character.hp_max= character.hp_max

            ui_character.speed_name= get_property( u'speed' ).__doc__
            ui_character.speed_value= character.speed

            ui_character.dex_name= get_property( u'dex' ).__doc__
            ui_character.dex_value= character.dex

            ui_character.is_active= ( character is self.active_character )
            ui_character.is_invalid_target= ( self.selected_detail.current == u'skill' and \
                                              character not in self.__valid_targets )

            states= [ state for state in character.iter_states() ]
            len_need= len( states )
            resize( ui_character.state_list, len_need, Factory.UIState )
            assert( len( ui_character.state_list.children ) == len_need )
            for j, state in enumerate( states ) :
                ui_state= ui_character.state_list.children[j]
                ui_state.icon= state.icon
示例#4
0
文件: combat.py 项目: sjinny/Game1
 def __parse_logs( self, name2text_timelines, logs ) :
     for log in logs :
         if isinstance( log, LogSkillCast ) :
             pattern= u'对 {dst} 使用了 {skill_name}'
             text= pattern.format( dst= log.dst_name,
                                   skill_name= log.skill_name )
             full_pattern= u'{src} 对 {dst} 使用了 {skill_name}'
             full_text= full_pattern.format( src= log.src_name,
                                             dst= log.dst_name,
                                             skill_name= log.skill_name )
             name2text_timelines[log.src_name].append( ( text, full_text, datas.ui_effects.timelines_float_text ) )
             self.__parse_logs( name2text_timelines, log.logs )
         elif isinstance( log, LogPropChanged ) :
             pattern= u'{prop} {value_delta:+}'
             text= pattern.format( prop= log.prop_name,
                                   value_delta= log.value_delta )
             full_pattern= u'{owner} 的 {prop} {value_delta:+}'
             full_text= full_pattern.format( owner= log.owner_name,
                                             prop= log.prop_name,
                                             value_delta= log.value_delta )
             if log.prop_name == get_property( u'hp' ).__doc__ :
                 if log.value_delta <= 0 :
                     timeline= datas.ui_effects.timelines_harm
                 else :
                     timeline= datas.ui_effects.timelines_heal
             else :
                 timeline= datas.ui_effects.timelines_float_text
             name2text_timelines[log.owner_name].append( ( text, full_text, timeline ) )
         elif isinstance( log, LogState ) :
             if log.logs :
                 pattern= u'{state_name} 生效'
                 text= pattern.format( state_name= log.state_name )
                 full_pattern= u'{owner} 的 {state_name} 生效'
                 full_text= full_pattern.format( owner= log.owner_name,
                                                 state_name= log.state_name )
                 name2text_timelines[log.owner_name].append( ( text, full_text, datas.ui_effects.timelines_float_text ) )
                 self.__parse_logs( name2text_timelines, log.logs )
         elif isinstance( log, LogStateEnter ) :
             pattern= u'获得了 {state_name} 状态'
             text= pattern.format( state_name= log.state_name )
             full_pattern= u'{owner} 获得了 {state_name} 状态'
             full_text= full_pattern.format( owner= log.owner_name,
                                             state_name= log.state_name )
             name2text_timelines[log.owner_name].append( ( text, full_text, datas.ui_effects.timelines_float_text ) )
         elif isinstance( log, LogStateLeave ) :
             pattern= u'失去了 {state_name} 状态'
             text= pattern.format( state_name= log.state_name )
             full_pattern= u'{owner} 失去了 {state_name} 状态'
             full_text= full_pattern.format( owner= log.owner_name,
                                             state_name= log.state_name )
             name2text_timelines[log.owner_name].append( ( text, full_text, datas.ui_effects.timelines_float_text ) )
         elif isinstance( log, LogEvent ) :
             name2text_timelines[self.combat.name].append( ( log.text, log.text, log.timeline ) )
         elif isinstance( log, LogEffect ) :
             ui_owner= self.ui_owner_by_name( log.owner_name )
             if ui_owner is not None :
                 if isinstance( ui_owner, Factory.UICharacter ) :
                     ui_owner= ui_owner.ids.image_widget
                 timelines= timelines_effects.get( log.effect_name, None )
                 if timelines :
                     play_effect( ui_owner.canvas.after, ui_owner.center, timelines )
         else :
             Logger.error( u'unknown log: {name}'.format( name= log.__cls__.name ) )