コード例 #1
0
    private SequenceBehaviour createActionSequence()
    {
        SequenceBehaviour actionSequence       = new SequenceBehaviour(Agent);
        Rigidbody         rigidbody            = gameObject.GetComponent(typeof(Rigidbody)) as Rigidbody;
        WoodComponent     nearestWoodComponent = getNearestWoodComponent(rigidbody.transform.position);

        if (nearestWoodComponent == null)
        {
            Stop();
            notifyFinished();
            return(null);
        }
        StorageComponent storageComponent = getNearestStorageComponent(nearestWoodComponent.transform.position);

        if (storageComponent == null)
        {
            Stop();
            notifyFinished();
            return(null);
        }
        BackpackComponent backpackComponent = gameObject.GetComponent(typeof(BackpackComponent)) as BackpackComponent;

        if (backpackComponent == null)
        {
            Stop();
            notifyFinished();
            return(null);
        }
        MoveTowardsBehaviour             moveTowardsStorageBehaviour      = new MoveTowardsBehaviour(Agent, rigidbody, speed, storageComponent.transform.position);
        PutMaterialsIntoStorageBehaviour putMaterialsIntoStorageBehaviour = new PutMaterialsIntoStorageBehaviour(Agent, storageComponent, backpackComponent);

        if (!backpackComponent.hasWood)
        {
            MoveTowardsBehaviour moveTowardsWoodBehaviour = new MoveTowardsBehaviour(Agent, rigidbody, speed, nearestWoodComponent.transform.position);
            GatherWoodBehaviour  gatherWoodBehaviour      = new GatherWoodBehaviour(Agent, backpackComponent, nearestWoodComponent);
            actionSequence.AddSequentialBehaviour(moveTowardsWoodBehaviour);
            actionSequence.AddSequentialBehaviour(gatherWoodBehaviour);
        }
        actionSequence.AddSequentialBehaviour(moveTowardsStorageBehaviour);
        actionSequence.AddSequentialBehaviour(putMaterialsIntoStorageBehaviour);
        return(actionSequence);
    }
コード例 #2
0
    private WoodComponent getNearestWoodComponent(Vector3 currentPosition)
    {
        WoodComponent[] woodComponents = (WoodComponent[])UnityEngine.GameObject.FindObjectsOfType(typeof(WoodComponent));
        WoodComponent   closest        = null;
        float           closestDist    = 0;

        foreach (WoodComponent woodComponent in woodComponents)
        {
            if (woodComponent.PiecesAvailable == 0)
            {
                continue;
            }

            if (closest == null)
            {
                closest     = woodComponent;
                closestDist = (woodComponent.gameObject.transform.position - currentPosition).magnitude;
            }
            else
            {
                float dist = (woodComponent.gameObject.transform.position - currentPosition).magnitude;
                if (dist < closestDist)
                {
                    closest     = woodComponent;
                    closestDist = dist;
                }
            }
        }

        if (closest == null)
        {
            Stop();
            return(null);
        }

        return(closest);
    }
コード例 #3
0
 public float workDuration = 2; // seconds
 public GatherWoodBehaviour(Agent agent, BackpackComponent backpackComponent, WoodComponent woodComponent) : base(agent)
 {
     this.woodComponent     = woodComponent;
     this.backpackComponent = backpackComponent;
 }