Beispiel #1
0
        protected override void OnMouseUp(MouseButtonEventArgs e)
        {
            var btnDown = e.Button == MouseButton.Left;

            if (!ClientRectangle.Contains(e.Position) && !btnDown)
            {
                _holding = null;
                return;
            }
            if (!btnDown || _holding == null)
            {
                return;
            }

            if (_trashEntity != null && _trashEntity.MouseOver)
            {
                _elementEntities.Remove(_holding);
            }

            if (GetTopElementAtPoint(new PointF(_holding.X, _holding.Y), _holding) is ElementEntity ee)
            {
                var products = ElementRegistry.GetProducts(ee.Element, _holding.Element);

                var max = ElementEntity.ElementIconSize / 2;

                foreach (var product in products)
                {
                    if (product == null)
                    {
                        continue;
                    }

                    var middleX = (_holding.X + ee.X) / 2;
                    var middleY = (_holding.Y + ee.Y) / 2;

                    _elementEntities.Remove(_holding);
                    _elementEntities.Remove(ee);

                    middleX += max - (float)_rand.NextDouble() * max * 2;
                    middleY += max - (float)_rand.NextDouble() * max * 2;

                    LearnElement(product);

                    SpawnElementEntity(middleX, middleY, product);
                }

                if (products.Length > 0)
                {
                    if (_learntElements.Count == ElementRegistry.GetTotalCount())
                    {
                        _toastQueue.Add(new AchievementToast("That's it!", "You know everything!", TextureManager.GetOrRegister("obsidian"), this));
                    }
                }
            }

            _holding = null;
        }
Beispiel #2
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            var partialTicks = (float)(_updateTimer.Elapsed.TotalMilliseconds / (TargetUpdatePeriod * 1000f));

            _trashEntity?.SetShown(_holding != null && _trashEntity.MouseOverDestination && !_inventoryGui.IsShown());
            _trashEntity?.Render(partialTicks);

            for (var index = 0; index < _elementEntities.Count; index++)
            {
                var entity = _elementEntities[index];

                if (entity != _holding)
                {
                    entity?.Render(partialTicks);
                }
            }

            _holding?.Render(partialTicks);

            var offsetY = 0f;

            if (_toastQueue.Count > 0)
            {
                var toast = _toastQueue.First();

                if (toast != null)
                {
                    toast.Render(partialTicks);
                    offsetY = toast.CurrentY;
                }
            }

            var baseCount = ElementRegistry.GetBaseElements().Length;

            FontRenderer.DrawTextCentered(Width / 2f, 16 - offsetY, $"DISCOVERED {_learntElements.Count - baseCount}/{ElementRegistry.GetTotalCount() - baseCount}");

            _inventoryGui?.SetShown(_holding == null && (_inventoryGui.MouseOverTrigger || _inventoryGui.IsShown() && _inventoryGui.MouseOverRectangle));
            _inventoryGui?.Render(partialTicks);

            SwapBuffers();
        }