Пример #1
0
        public override void update(float dT)
        {
            base.update(dT);

            #region Seed (cursor) placement
            Leaf closestLeaf        = null;
            float closestDist       = float.MaxValue;
            Vector2 mouseWorldPos   = (InputManager.getMousePos() - GameManager.WORLDOGIRIN)/GameManager.ZOOMLEVEL;
            for (int i = 0; i < _leaves.Count; i++) //Find closest leaf
            {
                _leaves[i].isSelected = false;

                float distToLeaf = (_leaves[i].getPosition() - mouseWorldPos).Length() - _leaves[i].getRadius();
                if (distToLeaf < closestDist && distToLeaf >= 0) //Find closest leaf
                {
                    closestLeaf = _leaves[i];
                    closestDist = distToLeaf;
                }
            }

            if (closestLeaf != null) //We have a winner!
            {
                closestLeaf.isSelected  = true;
                Vector2 leafToMouse     = mouseWorldPos - closestLeaf.getPosition();
                leafToMouse.Normalize();
                leafToMouse             *= closestLeaf.getRadius() + 1;
                Vector2 seedPos         = closestLeaf.getPosition() + leafToMouse;
                bool canPlace           = true;

                for (int i = 0; i < _leaves.Count; i++) //Find intersecting leaves
                {
                    if ((_leaves[i].getPosition() - seedPos).LengthSquared() < _leaves[i].getRadius() * _leaves[i].getRadius())
                        canPlace = false;
                }

                if (canPlace)
                    _seedCursor.setPosition(seedPos);

                //Handle input
                if (InputManager.isMouseLeftReleased() &&
                    _gameManager.GraphicsDevice.Viewport.Bounds.Contains(InputManager.getMouseX(), InputManager.getMouseY()))
                {
                    Leaf newLeaf = new Leaf(_gameManager, this);
                    newLeaf.setPosition(_seedCursor.getPosition());
                    addLeaf(newLeaf);
                    closestLeaf.addChild(newLeaf);
                }
            }
            #endregion

            _seedCursor.update(dT);

            //Pulse hearts
            if (GameManager.CURRENTTIME - _lastPulseTime >= _timeBetweenPulses)
            {
                _lastPulseTime = GameManager.CURRENTTIME;
                for (int i = 0; i < _hearts.Count; i++)
                    _hearts[i].pulse();
            }
        }