public override Task <Entity> CreateEntity(EntityHierarchyItemViewModel parent) { var name = ComputeNewName(parent, "Instance"); var component = new InstanceComponent(); return(CreateEntityWithComponent(name, component)); }
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); } }
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); } }