Agent Aim

from maya import cmds

import AtomsMath
import AtomsCore
import Atoms
import AtomsUtils
from AtomsMaya.utils import agentgroup
from AtomsMaya.hostbridge.atomsgroup import MayaAtomsGroupHostBridge
 


class AgentAimModule(Atoms.BehaviourModule):

    def __init__(self):
        Atoms.BehaviourModule.__init__(self)

        metadata = self.attributes()
        metadata.addEntry("target", AtomsCore.Vector3Metadata())

    def initFrame(self, agents, agroup):
        target = self.attributes().getEntry("target").get()

        for agent in agents:
            agent_position = agent.metadata()["position"].value()
            new_direction = target - agent_position
            new_direction.normalize()
            agent.metadata()["direction"].set(new_direction)


'''
MAYA SETUP 
'''
from maya import cmds

def register():
    Atoms.BehaviourModules.instance().registerBehaviourModule("agentAim",
                                                              AgentAimModule,
                                                              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("gridLayout")
    ag.add_module("stateMachine")
    ag.add_module("agentAim")
    ag.set_display_type(2)
    
    int_type_str = AtomsCore.IntMetadata.staticTypeStr()
    str_type_str = AtomsCore.StringMetadata.staticTypeStr()
    
    cmds.playbackOptions(min=1, max=50)
    
    s = cmds.spaceLocator()[0]
    cmds.setAttr(s + ".t", 200, 50, -120)
    cmds.setKeyframe(s)
    cmds.currentTime(50)
    cmds.setAttr(s + ".t", 420, 50, 200)
    cmds.setKeyframe(s)
    cmds.currentTime(1)

    ag.set_metadata_value("stateMachine", "state", int_type_str, 1)

    cmds.connectAttr(s + ".t", agent_group + ".atoms_agentAim_target")
    
    
setup()

Copyright © 2017, Toolchefs LTD.