private void Generatepart(GameObject prefab, Vector3 direction, int index)
    {
        ConveyorBeltPart newPart = Instantiate(prefab).GetComponent <ConveyorBeltPart>();

        newPart.transform.SetParent(transform);
        newPart.transform.position = transform.position + direction * index * singleElementSize + spawnOffset;
        newPart.transform.LookAt(newPart.transform.position + direction);
        newPart.name = $"Part {index}";
        parts.Add(newPart);
    }
    public void Initialize(ConveyorBelt conveyorBelt, ConveyorBeltPart previous, float size)
    {
        ParentConveyorBelt = conveyorBelt;
        if (previous != null)
        {
            Previous      = previous;
            previous.Next = this;
        }
        this.size = size;
#if UNITY_EDITOR
        OnValidate();
#endif
    }
    private void GenerateParts(Vector3 direction)
    {
        parts = new List <ConveyorBeltPart>();

        if (transferType == TransferType.Entrance || transferType == TransferType.Both)
        {
            Generatepart(conveyorBeltEntrancePrefab, direction, 0);
        }
        else
        {
            Generatepart(conveyorBeltPartPrefab, direction, 0);
        }


        for (int i = 1; i < Count; i++)
        {
            Generatepart(conveyorBeltPartPrefab, direction, i);
        }

        if (transferType == TransferType.Exit || transferType == TransferType.Both)
        {
            Generatepart(isFinisher ? conveyorBeltFinisherPrefab : conveyorBeltExitPrefab, direction, Count);
        }
        else
        {
            Generatepart(conveyorBeltPartPrefab, direction, Count);
        }

        var it = parts.GetEnumerator();
        ConveyorBeltPart previous = null;

        while (it.MoveNext())
        {
            it.Current.Initialize(this, previous, singleElementSize);
            previous = it.Current;
        }

        if (transferType == TransferType.Exit || transferType == TransferType.Both)
        {
            parts[Count].GetComponent <ConveyorBeltExit>().SetIsFinisher(isFinisher);
        }
    }
    private void InteractWithConveyorBelt(ConveyorBeltPart cbp)
    {
        if (cbp as ConveyorBeltEntrance != null || cbp as ConveyorBeltExit != null)
        {
            return;
        }

        Vector3         center       = cbp.transform.position + cbp.transform.up;
        Vector3         halfExtents  = new Vector3(0.4f, 0.4f, 0.4f);
        List <Collider> foundObjects = new List <Collider>(Physics.OverlapBox(center, halfExtents));

        Collider closer = null;

        var it = foundObjects.GetEnumerator();

        while (it.MoveNext())
        {
            if (!it.Current.CompareTag(CarryableObject.commonTag))
            {
                continue;
            }

            if (closer == null || Vector3.Distance(center, it.Current.transform.position) < Vector3.Distance(center, closer.transform.position))
            {
                closer = it.Current;
            }
        }

        if (closer == null)
        {
            Dispose(cbp.CarryablesAnchor);
        }
        else
        {
            PickUp(closer.GetComponent <CarryableObject>());
        }
    }
Пример #5
0
 public void OnPickup()
 {
     CurrentConveyorBeltPart = null;
 }