public override Task <Entity> CreateEntity(EntityHierarchyItemViewModel parent)
        {
            var name      = ComputeNewName(parent, "Instance");
            var component = new InstanceComponent();

            return(CreateEntityWithComponent(name, component));
        }
Beispiel #2
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 #3
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 #4
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);
            }
        }