void ReleaseDesignerOutlets()
        {
            if (ErrorContainer != null)
            {
                ErrorContainer.Dispose();
                ErrorContainer = null;
            }

            if (ErrorLabel != null)
            {
                ErrorLabel.Dispose();
                ErrorLabel = null;
            }

            if (LoadingContainer != null)
            {
                LoadingContainer.Dispose();
                LoadingContainer = null;
            }

            if (LoadingLabel != null)
            {
                LoadingLabel.Dispose();
                LoadingLabel = null;
            }
        }
        void ReleaseDesignerOutlets()
        {
            if (UsernameTextField != null)
            {
                UsernameTextField.Dispose();
                UsernameTextField = null;
            }

            if (PasswordTextField != null)
            {
                PasswordTextField.Dispose();
                PasswordTextField = null;
            }

            if (LoginButton != null)
            {
                LoginButton.Dispose();
                LoginButton = null;
            }

            if (LoadingContainer != null)
            {
                LoadingContainer.Dispose();
                LoadingContainer = null;
            }
        }
        private bool CheckContainersNotOnGround(ContainerBase mainContainer, LoadingContainer loadingContainer, HashSet <LoadingContainer> loadedContainers)
        {
            var ppp = new Dictionary <Vector, bool>();

            ppp.Add(loadingContainer.Position.Shift(loadingContainer.ContainerType.Length, 0, 0), false);
            ppp.Add(loadingContainer.Position.Shift(0, loadingContainer.ContainerType.Width, 0), false);
            ppp.Add(loadingContainer.Position.Shift(loadingContainer.ContainerType.Length, loadingContainer.ContainerType.Width, 0), false);

            foreach (var item in loadedContainers)
            {
                if (ppp.Values.All(c => c))
                {
                    return(true);
                }

                foreach (var point in ppp)
                {
                    if (item.Position.X < point.Key.X && item.Position.X + item.ContainerType.Length < point.Key.X &&
                        item.Position.Z < point.Key.Z && item.Position.Z + item.ContainerType.Width < point.Key.Z &&
                        item.ContainerType.Height == point.Key.Y)
                    {
                        ppp[point.Key] = true;
                    }
                }
            }

            if (ppp.Values.All(c => c))
            {
                return(true);
            }

            return(false);
        }
        public void Load(
            ContainerBase mainContainer,
            Dictionary <Container, int> containers
            )
        {
            HashSet <LoadingContainer> loadedContainers = new HashSet <LoadingContainer>();
            IList <Vector>             startCoord       = new List <Vector>
            {
                new Vector(0, 0, 0)
            };

            foreach (var item in containers)
            {
                var loadingContainer = new LoadingContainer()
                {
                    ContainerType = item.Key,
                    Position      = GetCoord(startCoord)
                };

                while (item.Value > 0 && TryAddContainer(mainContainer, loadingContainer, loadedContainers))
                {
                    loadedContainers.Add(loadingContainer);
                    containers[item.Key]--;

                    startCoord.Add(loadingContainer.Position.Shift(loadingContainer.ContainerType.Length, 0, 0));
                    startCoord.Add(loadingContainer.Position.Shift(0, loadingContainer.ContainerType.Width, 0));
                    startCoord.Add(loadingContainer.Position.Shift(loadingContainer.ContainerType.Length, loadingContainer.ContainerType.Width, 0));
                    startCoord.Add(loadingContainer.Position.Shift(0, 0, loadingContainer.ContainerType.Height));

                    startCoord.Remove(loadingContainer.Position);
                }
            }
        }
        private bool TryAddContainer(ContainerBase mainContainer, LoadingContainer loadingContainer, HashSet <LoadingContainer> loadedContainers)
        {
            if (loadingContainer.Position.Y != 0 && CheckContainersNotOnGround(mainContainer, loadingContainer, loadedContainers))
            {
                return(true);
            }

            return(false);
        }