from maya import cmds
import imathAtomsMath
import AtomsCore
import Atoms
import AtomsUtils
from AtomsMaya.utils import agentgroup
from AtomsMaya.hostbridge.atomsgroup import MayaAtomsGroupHostBridge
class MarchingQueueModule(Atoms.BehaviourModule):
"""
This module assumes all agent are ofman
the same type
"""
def __init__(self):
Atoms.BehaviourModule.__init__(self)
def endFrame(self, agents, agroup):
for i in range(1, len(agents)):
skeleton = agents[i].agentType().skeleton()
root_id = skeleton.jointId("LeftArm")
mid_id = skeleton.jointId("LeftForeArm")
ik_id = skeleton.jointId("LeftHand")
if -1 in [root_id, mid_id, ik_id]:
AtomsUtils.Logger.warning("couldn't find one or more joint ids")
continue
poser = AtomsCore.Poser(skeleton)
other_pose = agents[i - 1].pose()
wm = poser.getWorldMatrix(other_pose, root_id)
target_pos = imathAtomsMath.V3d(wm[3][0], wm[3][1], wm[3][2])
#adding a small offset to have less mesh intersection
target_pos.y += 10
pose = agents[i].pose()
AtomsCore.solveTwoJointsIKNoPoleVector(pose, skeleton, target_pos,
root_id, mid_id, ik_id, 0,
True, 0.3)
'''
MAYA SETUP SETUPĀ
'''
def register():
Atoms.BehaviourModules.instance().registerBehaviourModule("marchingQueue",
MarchingQueueModule, True)
def setup():
cmds.tcAtomsfile(initnew=True)
agn = cmds.createNode('tcAgentGroupNode', f=True)
cmds.setAttr(agn + ".displayType", 1tcAtoms(init=True)
register()
cmds.setAttr(agn + ".modules[0].moduleType", "pointsLayout", type="string")
cmds.setAttr(agn + ".modules[0].moduleName", "pointsLayout", type="string" agent_group = agentgroup.create_agent_group()
countag = 6MayaAtomsGroupHostBridge()
for i in range(count):ag.set_app_obj(agent_group)
cmds.setAttr("%s.atoms_pointsLayout_agentTypes[%d]" % (agn, i),ag.add_module("pointsLayout")
ag.add_module("stateMachine")
"atomsRobot", type="string"ag.add_module("marchingQueue")
cmds.setAttr("%s.atoms_pointsLayout_directions[%d]" % (agn, i),ag.set_display_type(2)
int_type_str = AtomsCore.IntMetadata.staticTypeStr()
str_type_str = AtomsCore.StringMetadata.staticTypeStr()
1, 0, 0)
vec_type_str = AtomsCore.Vector3Metadata.staticTypeStr()
cmds.setAttr("%s.atoms_pointsLayout_points[%d]" % (agn, i),ag.set_metadata_value("stateMachine", "state", int_type_str, 1)
count = 6
for i in range(count - i) * 60, 0, 0)):
cmds.setAttr(agn + ".modules[1].moduleTypeag.set_metadata_value("pointsLayout", "stateMachineagentTypes", type="string"str_type_str, "man", index=i)
cmds.setAttr(agn + ".modules[1].moduleName ag.set_metadata_value("pointsLayout", "stateMachinedirections", type="string")
cmds.setAttr(agn + ".atoms_stateMachine_state", 1)vec_type_str, (1, 0, 0), index=i)
cmds.setAttr(agn + ".modules[2].moduleTypeag.set_metadata_value("pointsLayout", "marchingQueuepoints", type="string")
cmds.setAttr(agn + ".modules[2].moduleName", "marchingQueue", type="string")vec_type_str, ((count - i) * 60, 0, 0), index=i)
setup()
|