Marching Queue
from maya import cmds import AtomsMath 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 man """ 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 = AtomsMath.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 ''' def register(): Atoms.BehaviourModules.instance().registerBehaviourModule("marchingQueue", MarchingQueueModule, True) def setup(): cmds.file(new=True, f=True) cmds.tcAtoms(init=True) register() agent_group = agentgroup.create_agent_group() ag = MayaAtomsGroupHostBridge() ag.set_app_obj(agent_group) ag.add_module("pointsLayout") ag.add_module("stateMachine") ag.add_module("marchingQueue") ag.set_display_type(2) int_type_str = AtomsCore.IntMetadata.staticTypeStr() str_type_str = AtomsCore.StringMetadata.staticTypeStr() vec_type_str = AtomsCore.Vector3Metadata.staticTypeStr() ag.set_metadata_value("stateMachine", "state", int_type_str, 1) count = 6 for i in range(count): ag.set_metadata_value("pointsLayout", "agentTypes", str_type_str, "man", index=i) ag.set_metadata_value("pointsLayout", "directions", vec_type_str, (1, 0, 0), index=i) ag.set_metadata_value("pointsLayout", "points", vec_type_str, ((count - i) * 60, 0, 0), index=i) setup()
Copyright © 2017, Toolchefs LTD.