Ejemplo n.º 1
0
    // Update is called once per frame

    public IEnumerator DelayedChop()
    {
        for (float i = 0; i < ChopDelay; i += 0.03f)
        {
            if (targetTree == null || targetTree.GetComponent <TreeDataObject>().Destroyed)
            {
                state = LumberjackState.idle;
                break;
            }
            yield return(new WaitForSeconds(0.03f));
        }
        if (targetTree == null || targetTree.GetComponent <TreeDataObject>().Destroyed)
        {
            state = LumberjackState.idle;
        }
        else
        {
            targetTree.GetComponent <TreeDataObject>().Damage(ChopDMG);
            if (targetTree == null || targetTree.GetComponent <TreeDataObject>().Destroyed)
            {
                state = LumberjackState.idle;
            }
            else
            {
                yield return(DelayedChop());
            }
        }
    }
Ejemplo n.º 2
0
    void Update()
    {
        switch (state)
        {
        case LumberjackState.idle:
            var trees       = FindObjectsOfType <TreeDataObject>();
            var minDistance = 1000.0f;
            foreach (var tree in trees)
            {
                if (tree.Destroyed || tree.Targeted)
                {
                    continue;
                }
                var treeObject = tree.gameObject.GetComponent <WorldObject>();
                var distance   = WorldObject.Distance(treeObject, worldObject);
                if (distance < minDistance)
                {
                    minDistance = distance;
                    targetTree  = tree.gameObject;
                }
            }
            if (targetTree != null)
            {
                state = LumberjackState.goingToTree;
                targetTree.GetComponent <TreeDataObject>().Targeted = true;
            }
            break;

        case LumberjackState.goingToTree:
            if (targetTree == null || targetTree.GetComponent <TreeDataObject>().Destroyed)
            {
                state = LumberjackState.idle;
                break;
            }
            Move(((((targetTree.GetComponent <WorldObject>().Angle - worldObject.Angle + 360 + 180) % 360) - 180) < 0));
            if (WorldObject.AreClose(targetTree.GetComponent <WorldObject>(), worldObject))
            {
                state = LumberjackState.chopping;
                StartCoroutine(DelayedChop());
            }
            break;

        case LumberjackState.chopping:
            Move(Mathf.Sin(20 * Time.time) > 0);
            break;

        case LumberjackState.goingBack:
            break;
        }
    }