/
State machine debugger data

State machine debugger data

Maya

from AtomsMaya.hostbridge.atomsgroup import MayaAtomsGroupHostBridge
from AtomsMaya.hostbridge.commands import MayaCommandsHostBridge

def get_state_machine_operator_from_agent(agent):
    network = agent.network()
    for no in network.manager().getAllNodes():
        if isinstance(no, Atoms.StateMachineOperator):
            return no


nh = MayaAtomsGroupHostBridge()
nh.set_app_obj("tcAgentGroupNodeShape1")
ag = nh.get_agent_group()

ids = ag.agentLocalIds()

for i in range(1001, 1010):
    MayaCommandsHostBridge.set_frame(i)
    for agent_id in ids:
        agent = ag.agent(agent_id)
        state_machine_op = get_state_machine_operator_from_agent(agent)
        
        values = []
        
        all_nodes = state_machine_op.network().manager().getAllNodes()
        for n in all_nodes:
            if not isinstance(n, (Atoms.BlendSpaceOperator,
                                  Atoms.AnimationStateOperator)):
                continue
    
            ap = n.getInputPort("active")
            if not ap or not ap.get():
                continue
    
            state_weight = 1.0
    
            pp = n.getOutputPort("outPose")
            if pp:
                for conn in pp.getConnections():
                    if not conn:
                        continue
                    if not conn.node():
                        continue
    
                    if not isinstance(conn.node(), Atoms.MergeOperator):
                        continue
    
                    pp_name = conn.name()
                    wp = "inPoseWeight" + pp_name[6:]
                    w_port = conn.node().getInputPort(wp)
                    if not w_port:
                        continue
    
                    state_weight = w_port.get()
                    break
    
            all_in_nodes = n.network().manager().getAllNodes()
            for cn in all_in_nodes:
                ap = cn.getInputPort("active")
                if not ap or not ap.get():
                    continue
    
                fp = cn.getOutputPort("outClipFrame")
                if not fp:
                    continue
    
                v = ["", 0, 0, "", 0]
                v[0] = cn.name()
                v[1] = fp.get()
    
                cpp = cn.getOutputPort("outPose")
                if cpp:
                    for conn in cpp.getConnections():
                        if not conn:
                            continue
                        if not conn.node():
                            continue
    
                        if not isinstance(conn.node(), Atoms.MergeOperator):
                            continue
    
                        pp_name = conn.name()
                        wp = "inPoseWeight" + pp_name[6:]
                        w_port = conn.node().getInputPort(wp)
                        if not w_port:
                            continue
    
                        v[2] = w_port.get()
                        v[3] = n.name()
                        v[4] = state_weight
    
                values.append(v)
    
        values.sort(key=lambda tup: (tup[4], tup[2]), reverse=True)
        
    print(i, values)
    

    

Houdini

from AtomsHoudini.hostbridge.atomsgroup import HoudiniAtomsGroupHostBridge
from AtomsHoudini.hostbridge.commands import HoudiniCommandsHostBridge

def get_state_machine_operator_from_agent(agent):
    network = agent.network()
    for no in network.manager().getAllNodes():
        if isinstance(no, Atoms.StateMachineOperator):
            return no


nh = HoudiniAtomsGroupHostBridge()
nh.set_app_obj("/obj/AgentGroupName")
ag = nh.get_agent_group()

ids = ag.agentLocalIds()

for i in range(1001, 1010):
    HoudiniCommandsHostBridge.set_frame(i)
    for agent_id in ids:
        agent = ag.agent(agent_id)
        state_machine_op = get_state_machine_operator_from_agent(agent)
        
        values = []
        
        all_nodes = state_machine_op.network().manager().getAllNodes()
        for n in all_nodes:
            if not isinstance(n, (Atoms.BlendSpaceOperator,
                                  Atoms.AnimationStateOperator)):
                continue
    
            ap = n.getInputPort("active")
            if not ap or not ap.get():
                continue
    
            state_weight = 1.0
    
            pp = n.getOutputPort("outPose")
            if pp:
                for conn in pp.getConnections():
                    if not conn:
                        continue
                    if not conn.node():
                        continue
    
                    if not isinstance(conn.node(), Atoms.MergeOperator):
                        continue
    
                    pp_name = conn.name()
                    wp = "inPoseWeight" + pp_name[6:]
                    w_port = conn.node().getInputPort(wp)
                    if not w_port:
                        continue
    
                    state_weight = w_port.get()
                    break
    
            all_in_nodes = n.network().manager().getAllNodes()
            for cn in all_in_nodes:
                ap = cn.getInputPort("active")
                if not ap or not ap.get():
                    continue
    
                fp = cn.getOutputPort("outClipFrame")
                if not fp:
                    continue
    
                v = ["", 0, 0, "", 0]
                v[0] = cn.name()
                v[1] = fp.get()
    
                cpp = cn.getOutputPort("outPose")
                if cpp:
                    for conn in cpp.getConnections():
                        if not conn:
                            continue
                        if not conn.node():
                            continue
    
                        if not isinstance(conn.node(), Atoms.MergeOperator):
                            continue
    
                        pp_name = conn.name()
                        wp = "inPoseWeight" + pp_name[6:]
                        w_port = conn.node().getInputPort(wp)
                        if not w_port:
                            continue
    
                        v[2] = w_port.get()
                        v[3] = n.name()
                        v[4] = state_weight
    
                values.append(v)
    
        values.sort(key=lambda tup: (tup[4], tup[2]), reverse=True)
        
    print(i, values)
    

Related content

Creating agent groups
Creating agent groups
More like this
Check if an agent is in a transition
Check if an agent is in a transition
More like this
Behaviour module handling
Behaviour module handling
More like this
Reading the world joint matrices of an agent
Reading the world joint matrices of an agent
More like this
Iterating through the agents of an agent group
Iterating through the agents of an agent group
More like this
Access agent data (AtomsUnreal)
Access agent data (AtomsUnreal)
More like this

Copyright Âİ 2017, Toolchefs LTD.