Beispiel #1
0
        public void EnemyShipDestroyed(GameObject gameObject)
        {
            var items = new[]
            {
                new { Texture = SpaceGraphics.EnemyShipChunkAssets[0], Direction = new Vector2(-1, -1) },
                new { Texture = SpaceGraphics.EnemyShipChunkAssets[1], Direction = new Vector2(1, -1) },
                new { Texture = SpaceGraphics.EnemyShipChunkAssets[2], Direction = new Vector2(-1, 0) },
                new { Texture = SpaceGraphics.EnemyShipChunkAssets[3], Direction = new Vector2(1, 0) }
            };

            foreach (var item in items)
            {
                var centre      = gameObject.CentreLocal;
                var direction   = item.Direction + gameObject.Velocity;
                var chunk       = new GameObject("EnemyChunk", gameObject.Centre + (centre * item.Direction));
                var sprite      = new SpriteComponent(item.Texture, color: Color.White);
                var instance    = new InstanceComponent();
                var outOfBounds = new OutOfBoundsComponent(ObjectEvent.RemoveEntity);
                var movement    = new MovementComponent(gameObject.Velocity.Y, FaceDirection.Down, direction);
                chunk.AddComponent(outOfBounds);
                chunk.AddComponent(sprite);
                chunk.AddComponent(instance);
                chunk.AddComponent(movement);
                gameObject.GameLayer.AddGameObject(chunk);
            }
        }
Beispiel #2
0
        private void CreateBossOne(int enemyBulletDelay, int scale = 1)
        {
            var xPosition = GameHelper.GetRelativeScaleX(0.5f);
            var enemy     = new GameObject("Boss", new Vector2(xPosition, 0))
            {
                Scale = scale
            };

            var shipTexture            = SpaceGraphics.BossAAsset.First();
            var enemySprite            = new SpriteComponent(shipTexture);
            var enemyMovement          = new MovementComponent(0.1f, FaceDirection.Down, new Vector2(0, 1));
            var enemyBullet            = new BulletComponent(TopDown.EnemyBulletName, SpaceGraphics.BulletAsset[0], enemyMovement);
            var enemyBoundary          = new BoundaryComponent(SpaceGraphics.BoundaryAsset.First(), shipTexture.Width, shipTexture.Height);
            var enemyTimed             = new TimedActionComponent(ObjectEvent.Fire, enemyBulletDelay);
            var enemyOutOfBounds       = new OutOfBoundsComponent(ObjectEvent.RemoveEntity);
            var healthCounterComponent = new CounterIncrementComponent(ObjectEvent.CollisionEnter, ObjectEvent.HealthRemoved, ObjectEvent.HealthEmpty, ObjectEvent.HealthReset, 5, 0);
            var healthBarComponent     = new SpriteRepeaterComponent(SpaceGraphics.HealthBarAsset[1], new Vector2(0, 25), false, ObjectEvent.HealthRemoved, healthCounterComponent);
            var deathAction            = new ObjectEventComponent(ObjectEvent.HealthEmpty, BossDeath);

            enemy.AddComponent(enemySprite);
            enemy.AddComponent(enemyMovement);
            enemy.AddComponent(enemyBullet);
            enemy.AddComponent(enemyBoundary);
            enemy.AddComponent(enemyOutOfBounds);
            enemy.AddComponent(enemyTimed);
            enemy.AddComponent(healthCounterComponent);
            enemy.AddComponent(healthBarComponent);
            enemy.AddComponent(deathAction);

            ForegroundLayer.AddGameObject(enemy);
        }
Beispiel #3
0
        private void GenerateFoam(int xPosition, int width)
        {
            var _gameHeight          = GameHelper.GetRelativeScaleY(1f);
            var bottomPadding        = _gameHeight - (_yPosition + _waveHeight + 20);
            var gameObject           = new GameObject("FOAM", new Vector2(xPosition, _yPosition));
            var movementComponent    = new MovementComponent(1, FaceDirection.Down, new Vector2(_waveSpeed, 1));
            var spriteComponent      = new SpriteComponent(GetRandomTexture(_majorTextures), drawScale: new Vector2(width, 1), color: new Color(Color.Gray, 20));
            var outOfBoundsComponent = new OutOfBoundsComponent(ObjectEvent.RemoveEntity, leftPadding: -50, bottomPadding: bottomPadding);

            gameObject.AddComponent(movementComponent);
            gameObject.AddComponent(spriteComponent);
            gameObject.AddComponent(outOfBoundsComponent);
            _topLayer.AddGameObject(gameObject);
        }
Beispiel #4
0
        public void Fire()
        {
            var bulletTexture = _texture2D;
            var direction     = _movementComponent.FaceDirection.GetVector2();

            direction.Normalize();

            var startLocation = Owner.Centre;

            startLocation += (direction * new Vector2(Owner.Width, Owner.Height));
            startLocation += (direction * new Vector2(bulletTexture.Width + 1, bulletTexture.Height + 1));
            startLocation += _offset;

            var bullet = new GameObject(_bulletGameType, startLocation);

            if (_bulletSpeed > 0)
            {
                var movement = new MovementComponent(_bulletSpeed, _movementComponent.FaceDirection, direction);
                bullet.AddComponent(movement);
            }
            if (_bulletAcceleration > 0)
            {
                var acceleration = new AccelerateMovementComponent(new Vector2(0, -_bulletAcceleration));
                bullet.AddComponent(acceleration);
            }

            var bulletSprite   = new SpriteComponent(bulletTexture, color: _color);
            var bulletBoundary = new BoundaryComponent(SpaceGraphics.BoundaryAsset.First(), bulletTexture.Width, bulletTexture.Height, true, false, _ignoreCollisionTypes);

            if (_collisionAction != null)
            {
                var collisionAction = new ObjectEventComponent(ObjectEvent.CollisionEnter, _collisionAction);
                bullet.AddComponent(collisionAction);
            }
            else
            {
                var instanceComponent = new InstanceComponent();
                bullet.AddComponent(instanceComponent);
            }

            var bulletOutOfBounds = new OutOfBoundsComponent(ObjectEvent.RemoveEntity);

            bullet.AddComponent(bulletSprite);
            bullet.AddComponent(bulletBoundary);

            bullet.AddComponent(bulletOutOfBounds);

            Owner.GameLayer.AddGameObject(bullet);
        }
Beispiel #5
0
        public void Update(GameTime gameTime)
        {
            if (gameTime.TotalGameTime > _lastTimeSpan.Add(new TimeSpan(0, 0, 0, 1)))
            {
                _lastTimeSpan = gameTime.TotalGameTime;

                // TODO: Use perpendicular
                var y = _random.Next(0, GameConstants.ScreenBoundary.Bottom);


                var isLeftDirection = _random.Next(0, 2) == 1;
                if (isLeftDirection)
                {
                    var x = GameConstants.ScreenBoundary.Right;

                    var asteroid            = new GameObject("Asteroid", new Vector2(x, y));
                    var asteroidInstance    = new InstanceComponent();
                    var asteroidGraphics    = new SpriteComponent(GetRandomTexture());
                    var asteroidMovement    = new MovementComponent(1, FaceDirection.Left, new Vector2(-1, 0));
                    var asteroidBoundary    = new BoundaryComponent(SpaceGraphics.BoundaryAsset.First(), asteroidGraphics.Width, asteroidGraphics.Height);
                    var asteroidOutOfBounds = new OutOfBoundsComponent(ObjectEvent.RemoveEntity, -50, 0, -50, 0);
                    asteroid.AddComponent(asteroidInstance);
                    asteroid.AddComponent(asteroidGraphics);
                    asteroid.AddComponent(asteroidMovement);
                    asteroid.AddComponent(asteroidBoundary);
                    asteroid.AddComponent(asteroidOutOfBounds);
                    _gameLayer.AddGameObject(asteroid);
                }
                else
                {
                    var x                   = GameConstants.ScreenBoundary.Left;
                    var asteroid            = new GameObject("Asteroid", new Vector2(x, y));
                    var asteroidInstance    = new InstanceComponent();
                    var asteroidGraphics    = new SpriteComponent(GetRandomTexture());
                    var asteroidMovement    = new MovementComponent(1, FaceDirection.Right, new Vector2(1, 0));
                    var asteroidBoundary    = new BoundaryComponent(SpaceGraphics.BoundaryAsset.First(), asteroidGraphics.Width, asteroidGraphics.Height);
                    var asteroidOutOfBounds = new OutOfBoundsComponent(ObjectEvent.RemoveEntity, -50, 0, -50, 0);
                    asteroid.AddComponent(asteroidInstance);
                    asteroid.AddComponent(asteroidGraphics);
                    asteroid.AddComponent(asteroidMovement);
                    asteroid.AddComponent(asteroidBoundary);
                    asteroid.AddComponent(asteroidOutOfBounds);

                    _gameLayer.AddGameObject(asteroid);
                }
            }
        }
Beispiel #6
0
        public void Update(GameTime gameTime)
        {
            var enemyCount = _gameLayer.GameObjects.Count(gameObject => gameObject.GameType == _enemyName);

            _elapsedTimeMilliseconds += gameTime.ElapsedGameTime.TotalMilliseconds;

            if (_elapsedTimeMilliseconds > _spawnDelayMilliseconds &&
                enemyCount < _currentMaximumEnemies &&
                enemyCount < _totalMaximumEnemies)
            {
                _elapsedTimeMilliseconds = 0;
                var xLocation = _random.Next(0, GameConstants.ScreenBoundary.Right - _shipTexture.Width);

                var gameObject = new GameObject(_enemyName, new Vector2(xLocation, 0));
                var sprite     = new SpriteComponent(_shipTexture);
                var movement   = new MovementComponent(1, FaceDirection.Down, new Vector2(0, _speed));
                gameObject.AddComponent(sprite);
                gameObject.AddComponent(movement);

                var bullet      = new BulletComponent(_bulletName, SpaceGraphics.BulletAsset[0], movement, ignoreCollisionTypes: _enemyName);
                var timedAction = new TimedActionComponent(ObjectEvent.Fire, _bulletDelayMilliseconds);
                gameObject.AddComponent(bullet);
                gameObject.AddComponent(timedAction);

                var boundary    = new BoundaryComponent(SpaceGraphics.BoundaryAsset.First(), _shipTexture.Width, _shipTexture.Height, true, false, _enemyName);
                var instance    = new InstanceComponent();
                var outOfBounds = new OutOfBoundsComponent(ObjectEvent.RemoveEntity);
                gameObject.AddComponent(boundary);
                gameObject.AddComponent(instance);
                gameObject.AddComponent(outOfBounds);

                var score           = new ObjectEventComponent(ObjectEvent.CollisionEnter, IncreaseScore);
                var deathSound      = new EventSoundComponent(_deathSound, ObjectEvent.CollisionEnter);
                var collisionAction = new ObjectEventComponent(ObjectEvent.CollisionEnter, CollisionAction);
                gameObject.AddComponent(score);
                gameObject.AddComponent(deathSound);
                gameObject.AddComponent(collisionAction);

                foreach (var objectEventAction in _eventActions)
                {
                    var objectEvent = new ObjectEventComponent(objectEventAction.Item1, objectEventAction.Item2);
                    gameObject.AddComponent(objectEvent);
                }

                _gameLayer.AddGameObject(gameObject);
            }
        }
Beispiel #7
0
        private GameObject CreatePlayer(int playerNumber, Color color)
        {
            // MonoGame works in Radians
            // http://msdn.microsoft.com/en-us/library/system.math.sin%28v=vs.110%29.aspx
            var startX        = GameHelper.GetRelativeScaleX(0.1f);
            var startLocation = new Vector2(startX, _waveTopY) + new Vector2(playerNumber * startX, 0);
            var startRotation = (float)(90 * (Math.PI / 180));

            var texture            = SurfingGraphics.Surfboard_Large_White_Asset;
            var player             = new GameObject("Player", startLocation, startRotation);
            var airGravityMovement = new AccelerateMovementComponent(new Vector2(0, 0.05f));
            var outOfBoundary      = new OutOfBoundsComponent(ObjectEvent.ResetEntity);
            var boundary           = new BoundaryComponent(texture, texture.Width, texture.Height);
            var rotationMovement   = new RotationMovementComponent(2, Vector2.Zero);
            var rotation           = new RotationComponent(Vector2.Zero);
            var sprite             = new SpriteComponent(texture, rotationOrigin: texture.Centre(), color: color);

            player.AddComponent(airGravityMovement);
            player.AddComponent(sprite);
            player.AddComponent(rotationMovement);
            player.AddComponent(boundary);
            player.AddComponent(outOfBoundary);
            player.AddComponent(rotation);

            var onWave = "OnWave";
            var inAir  = "InAir";

            var state = new StateStringComponent();

            state.AddComponentState(rotationMovement, onWave, inAir);
            state.AddComponentState(rotation, inAir, onWave);
            state.AddComponentState(airGravityMovement, inAir, onWave);

            player.AddComponent(state);

            var boundaryState = new BoundaryStateComponent(new Rectangle(0, _waveTopY, GameHelper.GetRelativeScaleX(1f), (int)(_waveHeight * 1.3f)), onWave, inAir);

            player.AddComponent(boundaryState);

            ForegroundLayer.AddGameObject(player);

            return(player);
        }