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); } }
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); }
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); }
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); }
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); } } }
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); } }
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); }