/// <summary> /// This method allows to update the destruction preview. /// </summary> public void UpdateRemovePreview() { foreach (SocketBehaviour Socket in BuildManager.Instance.Sockets) { if (Socket != null) { Socket.DisableCollider(); } } float Distance = OutOfRangeDistance == 0 ? ActionDistance : OutOfRangeDistance; if (CurrentRemovePreview != null) { AreaBehaviour NearestArea = BuildManager.Instance.GetNearestArea(CurrentRemovePreview.transform.position); if (NearestArea != null) { AllowDestruction = NearestArea.AllowDestruction; } else { AllowDestruction = true; } CurrentRemovePreview.ChangeState(StateType.Remove); AllowPlacement = false; } if (Physics.Raycast(GetRay(), out RaycastHit Hit, Distance, BuildManager.Instance.FreeLayers)) { PartBehaviour Part = Hit.collider.GetComponentInParent <PartBehaviour>(); if (Part != null) { if (CurrentRemovePreview != null) { if (CurrentRemovePreview.GetInstanceID() != Part.GetInstanceID()) { ClearRemovePreview(); CurrentRemovePreview = Part; } } else { CurrentRemovePreview = Part; } } else { ClearRemovePreview(); } }
/// <summary> /// This method allows to place a part. /// </summary> public PartBehaviour PlacePrefab(PartBehaviour part, Vector3 position, Vector3 rotation, Vector3 scale, GroupBehaviour group = null, SocketBehaviour socket = null) { GameObject PlacedTemp = Instantiate(part.gameObject, position, Quaternion.Euler(rotation)); PlacedTemp.transform.localScale = scale; PartBehaviour PlacedPart = PlacedTemp.GetComponent <PartBehaviour>(); if (group == null) { if (socket != null) { if (socket.AttachedPart.HasGroup) { PlacedTemp.transform.SetParent(socket.AttachedPart.transform.parent, true); } } else { GameObject Group = new GameObject("Group (" + PlacedPart.GetInstanceID() + ")", typeof(GroupBehaviour)); PlacedTemp.transform.SetParent(Group.transform, true); } } else { PlacedTemp.transform.SetParent(group.transform, true); } PlacedPart.EntityInstanceId = PlacedPart.GetInstanceID(); EventHandlers.PlacedPart(PlacedPart, socket); PlacedPart.ChangeState(DefaultState); return(PlacedPart); }