コード例 #1
0
    def LoadSchedules( self, npc=None ):
        import traceback
        import Ai.Tasks, Ai.Schedules

        if not npc:
            print( "Loading Python Ai Tasks and Schedules..." )

        # Resolve all our classes and modules up-front for simplicity
        if npc:
            task_class = npc._cust_tasks
            sched_class = npc._cust_sched
            cond_class = npc._cust_cond
        else:
            task_class = Ai.Tasks.Task
            sched_class = Ai.Schedules.Sched
            cond_class = Ai.Schedules.Cond

        # Load tasks registered in Ai.Tasks.Task or the passed NPC
        items = task_class.__dict__.items() if task_class else []
        for name, task in items:
            try:
                if issubclass( task.__class__, Ai.Tasks.BaseTask ):
                    GEUtil.DevMsg( "Registering Task: %s\n" % name )
                    task.Register( name )
            except:
                GEUtil.Warning( "Failed to register task: %s\n" % name )
                print( traceback.print_exc( file=sys.stderr ) )

        # Load in conditions defined in Ai.Schedules.Cond or the passed NPC
        items = cond_class.__dict__.items() if cond_class else []
        for name, cond in items:
            try:
                if issubclass( cond.__class__, Ai.Schedules.BaseCondition ):
                    GEUtil.DevMsg( "Registering Condition: %s\n" % name )
                    cond.Register( name )
            except:
                GEUtil.Warning( "Failed to register condition: %s\n" % name )
                print( traceback.print_exc( file=sys.stderr ) )

        # Load in schedules defined in Ai.Schedules.Sched or the passed NPC
        items = []
        if sched_class:
            load_order = getattr( sched_class, "_order", None )
            if load_order and type( load_order ) is list:
                for x in load_order:
                    if hasattr( sched_class, x ):
                        items.append( ( x, getattr( sched_class, x ) ) )
            items.extend( sched_class.__dict__.items() )

        for name, sched in items:
            try:
                if issubclass( sched.__class__, Ai.Schedules.BaseSchedule ):
                    GEUtil.DevMsg( "Registering schedule: %s\n" % name )
                    sched.Register( name )
            except:
                GEUtil.Warning( "Failed to register schedule: %s\n" % name )
                print( traceback.print_exc( file=sys.stderr ) )