Пример #1
0
        public override void Render(BufferedGraphics g)
        {
            if (IsVisible)
            {
                // Render the sprite. Returns the render coordiates.
                PointF renderCoords = SpriteWithDirectionsRenderer.Render(g, _graphicsTracker, LocationCenter);

                if (IsAlive)
                {
                    g.Graphics.DrawString($"{_health.Health:#.0}", _fontsAndColors.MonospaceFontSmaller,
                                          _fontsAndColors.BlueBrush, renderCoords.X, renderCoords.Y - 10);
                }
                else
                {
                    g.Graphics.DrawString("Aaaaarrrghhh!", _fontsAndColors.MonospaceFontSmaller,
                                          _fontsAndColors.BlackBrush, renderCoords.X - 35, renderCoords.Y - 20);
                }
            }
        }
Пример #2
0
        public TowerBase(TowerSettings settings, GameLevelTime gameLevelTime,
                         GameLevel gameLevel, GraphicsTracker graphicsTracker, SpriteSheets spriteSheets, InputManager inputManager)
        {
            _shootLimiter    = new GameLevelActionLimiter(gameLevelTime, settings.ShootFrequency);
            Settings         = settings;
            _gameLevel       = gameLevel;
            _graphicsTracker = graphicsTracker;
            _inputManager    = inputManager;

            // TODO: Create sprite without direction.
            var spr = new SpriteWithDirections
            {
                Sprites = new Dictionary <SpriteDirectionEnum, SpriteDetails>
                {
                    { SpriteDirectionEnum.BottomLeft, spriteSheets.GetSprite(SpriteEnum.Tower) },
                    { SpriteDirectionEnum.BottomRight, spriteSheets.GetSprite(SpriteEnum.Tower) },
                    { SpriteDirectionEnum.TopLeft, spriteSheets.GetSprite(SpriteEnum.Tower) },
                    { SpriteDirectionEnum.TopRight, spriteSheets.GetSprite(SpriteEnum.Tower) }
                }
            };

            _sprite = new SpriteWithDirectionsRenderer(spr);
        }
Пример #3
0
        public override void Update(TimeSpan timeDelta)
        {
            if (!IsVisible)
            {
                return;
            }

            if (!IsAlive)
            {
                AgonyPeriod -= timeDelta;
                if (AgonyPeriod.Ticks < 0)
                {
                    IsVisible = false;
                    _bus.Publish(new EnemyDespawned(this));
                }
                return;
            }

            if (_currentWaypoint == 0)
            {
                Point mapLocation = ActualLocationByMap(_waypoints[_currentWaypoint].X, _waypoints[_currentWaypoint].Y);
                _currentX = mapLocation.X;
                _currentY = mapLocation.Y;

                _currentWaypoint = 1;
            }
            else
            {
                if (_waypoints.Count <= _currentWaypoint)
                {
                    FoundPointG = true;
                    _bus.Publish(new EnemyReachedGoal(this));
                    return;
                }

                Point currentWaypointMap = _waypoints[_currentWaypoint];
                Point currentWaypoint    = ActualLocationByMap(currentWaypointMap.X, currentWaypointMap.Y);

                // From current position to the current waypoint.
                Vector2 toWaypoint = new Vector2(currentWaypoint.X - _currentX, currentWaypoint.Y - _currentY);

                SpriteWithDirectionsRenderer.ChangeDirection(toWaypoint);

                // Distance traveled.
                float traveled = (float)timeDelta.TotalSeconds * speed;

                // From current position to the position where we should be (position delta)
                Vector2 traveledRelative = Vector2.Lerp(Vector2.Zero, toWaypoint, traveled / toWaypoint.Length());

                _currentX += traveledRelative.X;
                _currentY += traveledRelative.Y;


                if (Math.Abs(toWaypoint.X) <= 1 && Math.Abs(toWaypoint.Y) <= 1)
                {
                    _currentWaypoint++;
                }
            }

            LocationCenter = new PointF(_currentX - SpriteWithDirectionsRenderer.Sprite.Location.Width / 2,
                                        _currentY - SpriteWithDirectionsRenderer.Sprite.Location.Height / 2);
        }