Beispiel #1
0
        /// <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();
                }
            }
Beispiel #2
0
        /// <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);
        }