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>()); } }
public void OnPickup() { CurrentConveyorBeltPart = null; }