public static void GenerateFromCsv(string csv, SpriteMapping spriteMapping, GameLayer layer) { var spriteNames = CsvHelper.ReadCsv(csv); var tiles = TransformNamesToVectors(spriteNames, spriteMapping.Width, spriteMapping.Height); foreach (var tile in tiles) { var tileNames = tile.Value; var tileArray = tileNames.Split(';'); var tileName = string.Format("Tile_{0}_{1}_{2}", tileNames, tile.Key.X, tile.Key.Y); var gameObject = new GameObject(tileName, tile.Key); var spriteName = tileArray[0]; var sprite = new SpriteMappingComponent(spriteMapping, spriteName); if (tileArray.Count() > 1) { var blockingProperty = tileArray[1]; if (blockingProperty.ToUpperInvariant() == "B") { var boundary = new BoundaryComponent(spriteMapping.Width, spriteMapping.Height); gameObject.AddComponent(boundary); } } gameObject.AddComponent(sprite); layer.AddGameObject(gameObject); } }
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); }
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 // PRIVATE // PRIVATE STATIC // PRIVATE COROUTINE // PRIVATE INVOKE //-------------------------------------- // Events //-------------------------------------- /// <summary> /// _ons the user interface collision enter2 D signal. /// </summary> /// <param name="aTag_string">A tag_string.</param> private void _onUICollisionEnter2DSignal(GameObject aCollidedWith_gameobject) { //WHAT DID WE HIT? switch (aCollidedWith_gameobject.tag) { case CPUPaddleUI.TAG: case PlayerPaddleUI.TAG: // PaddleComponent paddleComponent = aCollidedWith_gameobject.GetComponent <PaddleComponent>(); view.doHandleCollisionWithPaddle(paddleComponent.velocity); paddleComponent.doSpinOnce(); // soundPlaySignal.Dispatch(new SoundPlayVO(SoundType.PADDLE_HIT)); break; case BoundaryComponent.TAG: //WHICH TYPE OF BOUNDARY WAS HIT? BoundaryComponent boundaryComponent = aCollidedWith_gameobject.GetComponent <BoundaryComponent>(); // switch (boundaryComponent.boundaryType) { case BoundaryType.LeftGoal: //LEFT BOUND HIT? THEN REWARD RIGHT SCORE rightPaddleScoreChangeSignal.Dispatch(1); soundPlaySignal.Dispatch(new SoundPlayVO(SoundType.GOAL_LOSS)); break; case BoundaryType.RightGoal: //RIGHT BOUND HIT? THEN REWARD LEFT SCORE leftPaddleScoreChangeSignal.Dispatch(1); soundPlaySignal.Dispatch(new SoundPlayVO(SoundType.GOAL_WIN)); break; case BoundaryType.None: soundPlaySignal.Dispatch(new SoundPlayVO(SoundType.PADDLE_HIT)); break; default: #pragma warning disable 0162 throw new SwitchStatementException(); break; #pragma warning restore 0162 } break; } }
private void MissileCollision(GameObject gameObject) { var explosionScale = 7; var explosionTexture = SpaceGraphics.LargeExpolosionAsset[0]; var dimension = explosionTexture.Width * explosionScale; var explosion = new GameObject("Collision", gameObject.TopLeft); var animation = new ScaleAnimationComponent(explosionTexture, 0, explosionScale, 100, Color.OrangeRed, null, ObjectEvent.RemoveEntity); var boundary = new BoundaryComponent(null, dimension, dimension, isInvulnerable: true); explosion.AddComponent(animation); explosion.AddComponent(boundary); gameObject.GameLayer.AddGameObject(explosion); gameObject.RemoveGameObject(); }
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 STATIC // PRIVATE COROUTINE // PRIVATE INVOKE //-------------------------------------- // Events // (This is a loose term for -- handling incoming messaging) // //-------------------------------------- /// <summary> /// Raises the collision enter2 d event. /// /// NOTE: This just detect BOUNDS /// /// </summary> /// <param name="aCollision2D">A collision2 d.</param> public void OnCollisionEnter2D(Collision2D aCollision2D) { //Debug.Log (aCollision2D.collider.gameObject.tag); // if (aCollision2D.collider.gameObject.tag == BoundaryComponent.TAG) { // BoundaryComponent boundaryComponent = aCollision2D.collider.gameObject.GetComponent <BoundaryComponent>(); // if (boundaryComponent.boundaryType == BoundaryType.LeftGoal) { //Debug.Log ("OnCollisionEnter2D() " + boundaryComponent.boundaryType); } else if (boundaryComponent.boundaryType == BoundaryType.RightGoal) { //Debug.Log ("OnCollisionEnter2D() " + boundaryComponent.boundaryType); } } }
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); }
private GameObject CreatePlayer(string playerCharacter, int xStartPosition, int yStartPosition, Keys key) { var player = new GameObject(playerCharacter, new Vector2(xStartPosition, yStartPosition)); // TODO: Pass in the actual player selected character through constructor var sprites = new SpriteMappingComponent(RpgGraphics.GameboySpriteMapping, playerCharacter); var bounday = new BoundaryComponent(null, 16, 16); var constantMovement = new AccelerateMovementComponent(GetMovement); var collisionEvent = new ObjectEventComponent(ObjectEvent.CollisionEnter, CollisionEnter); var collisionExit = new ObjectEventComponent(ObjectEvent.CollisionExit, CollisionExit); var keyAction = new KeyboardActionComponent(key, PlayerAttacked); player.AddComponent(sprites); player.AddComponent(bounday); player.AddComponent(constantMovement); player.AddComponent(collisionEvent); player.AddComponent(collisionExit); player.AddComponent(keyAction); ForegroundLayer.AddGameObject(player); return(player); }
private void CreatePlayer() { var xPosition = GameHelper.GetRelativeScaleX(0.5f); var yPosition = GameHelper.GetRelativeScaleY(0.8f); // PLAYER var player = new GameObject(TopDown.PlayerName, new Vector2(xPosition, yPosition)); // GENERAL var texture = SpaceGraphics.PlayerShipAsset.First(); var sprite = new SpriteComponent(texture); var boundary = new BoundaryComponent(SpaceGraphics.BoundaryAsset.First(), texture.Width, texture.Height); player.AddComponent(boundary); player.AddComponent(sprite); // MOVEMENT var movement = new MovementComponent(5, FaceDirection.Up, Vector2.Zero); var localKeyboard = new LocalKeyboardComponent(); var input = new InputComponent(InputHelper.KeyboardMappedKey(), localKeyboard, movement); player.AddComponent(movement); player.AddComponent(input); // THRUSTER var thrusterLeft = new SpriteComponent(SpaceGraphics.FlameAsset, new Vector2(2, 16), color: Color.BlueViolet); var thrusterRight = new SpriteComponent(SpaceGraphics.FlameAsset, new Vector2(11, 16), color: Color.BlueViolet); player.AddComponent(thrusterLeft); player.AddComponent(thrusterRight); // GUNS var gunLeft = new SpriteComponent(SpaceGraphics.PlayerGunLeftAsset, new Vector2(-6, 8), color: Color.White); var gunRight = new SpriteComponent(SpaceGraphics.PlayerGunRightAsset, new Vector2(16, 8), color: Color.White); player.AddComponent(gunLeft); player.AddComponent(gunRight); // STATE var state = new StateComponent(); state.AddComponentState(thrusterLeft, movement); state.AddComponentState(thrusterRight, movement); player.AddComponent(state); // HEALTH var healthCounter = new CounterIncrementComponent(ObjectEvent.CollisionEnter, ObjectEvent.HealthRemoved, ObjectEvent.HealthEmpty, ObjectEvent.HealthReset, 5, 0); var healthBar = new SpriteRepeaterComponent(SpaceGraphics.HealthBarAsset.First(), new Vector2(0, 35), false, ObjectEvent.HealthRemoved, healthCounter, false, Color.ForestGreen); //healthBar.SetDynamicColors(Color.DarkRed, Color.Red, Color.Orange, Color.Yellow, Color.ForestGreen); healthBar.SetColorEvent(ObjectEvent.HealthRemoved, HealthColourFunc); player.AddComponent(healthCounter); player.AddComponent(healthBar); // TODO: Refactor into their own game objects that are attached to PlayerObject // FIRING - MACHINE GUN var machineGun = new BulletComponent(TopDown.PlayerBulletName, SpaceGraphics.LargeBulletAsset, movement, ObjectEvent.AmmoRemoved, ObjectEvent.AmmoEmpty, ObjectEvent.AmmoReset, 20, Color.DarkOrange, 0, null, TopDown.EnemyBulletName); var ammoCounter = new CounterIncrementComponent(ObjectEvent.Fire, ObjectEvent.AmmoRemoved, ObjectEvent.AmmoEmpty, ObjectEvent.AmmoReset, 50, 0); var ammoBar = new SpriteRepeaterComponent(SpaceGraphics.OnePixelBarAsset.First(), new Vector2(-25, 25), true, ObjectEvent.AmmoRemoved, ammoCounter, true, Color.Red); var ammoMovement = new EventMovementComponent(new Vector2(0, 2), ObjectEvent.AmmoRemoved); var ammoSound = new EventSoundComponent(SpaceSounds.Sound_LongFire01, ObjectEvent.AmmoRemoved); player.AddComponent(machineGun); player.AddComponent(ammoCounter); player.AddComponent(ammoMovement); player.AddComponent(ammoBar); player.AddComponent(ammoSound); // FIRING - MISSILE var missileKeyboard = new KeyboardEventComponent(Keys.Z, ObjectEvent.MissileFire); var missile = new BulletComponent(TopDown.PlayerBulletName, SpaceGraphics.MissileAsset, movement, ObjectEvent.MissileRemoved, ObjectEvent.MissileEmpty, ObjectEvent.MissileReset, 0, Color.White, 0.5f, new Vector2(-10, 5), TopDown.EnemyBulletName); var missileCounter = new CounterIncrementComponent(ObjectEvent.MissileFire, ObjectEvent.MissileRemoved, ObjectEvent.MissileEmpty, ObjectEvent.MissileReset, 50, 0); var missileBar = new SpriteRepeaterComponent(SpaceGraphics.OnePixelBarAsset.First(), new Vector2(-30, 25), true, ObjectEvent.MissileRemoved, missileCounter, true, Color.DarkGray); var missileMovement = new EventMovementComponent(new Vector2(0, 5), ObjectEvent.MissileRemoved); var missileSound = new EventSoundComponent(SpaceSounds.Sound_ShortFire01, ObjectEvent.MissileRemoved); missile.SetCollisionAction(MissileCollision); player.AddComponent(missileKeyboard); player.AddComponent(missile); player.AddComponent(missileCounter); player.AddComponent(missileMovement); player.AddComponent(missileBar); player.AddComponent(missileSound); // FIRING - LASER var laserKeyboard = new KeyboardEventComponent(Keys.C, ObjectEvent.LaserFire); var laser = new BulletComponent(TopDown.PlayerBulletName, SpaceGraphics.LaserAsset, movement, ObjectEvent.LaserRemoved, ObjectEvent.LaserEmpty, ObjectEvent.LaserReset, 20, Color.LightBlue, 0, new Vector2(10, 5), TopDown.EnemyBulletName, TopDown.EnemyName); var laserCounter = new CounterIncrementComponent(ObjectEvent.LaserFire, ObjectEvent.LaserRemoved, ObjectEvent.LaserEmpty, ObjectEvent.LaserReset, 50, 0); var laserBar = new SpriteRepeaterComponent(SpaceGraphics.OnePixelBarAsset.First(), new Vector2(-20, 25), true, ObjectEvent.LaserRemoved, laserCounter, true, Color.Blue); var laserMovement = new EventMovementComponent(new Vector2(0, 1), ObjectEvent.LaserRemoved); var laserSound = new EventSoundComponent(SpaceSounds.Sound_ShortFire01, ObjectEvent.LaserRemoved); player.AddComponent(laserKeyboard); player.AddComponent(laser); player.AddComponent(laserCounter); player.AddComponent(laserMovement); player.AddComponent(laserBar); player.AddComponent(laserSound); // DAMAGE var fireCounter = new CounterIncrementComponent(ObjectEvent.CollisionEnter, ObjectEvent.ElectricalFire, ObjectEvent.Ignore, ObjectEvent.Ignore, 0, 5, false); var fireSprite = new SpriteGenericComponent(SpaceGraphics.FireAsset, Vector2.Zero, ObjectEvent.ElectricalFire, fireCounter, RandomDrawMethod); player.AddComponent(fireCounter); player.AddComponent(fireSprite); // DEATH var deathEvent = new ObjectEventComponent(ObjectEvent.HealthEmpty, PlayerDeath); player.AddComponent(deathEvent); ForegroundLayer.AddGameObject(player); }