void aiMove() { this.Speed = 8f; if (Vector2.Distance(this.Position, this.moveTo) < 50f) moveTo = new Vector2(Config.Rand.Next(50, 1550), Config.Rand.Next(50, 910)); for (int i = Powerup.Powerups.Count - 1; i >= 0; i--) { if ((Vector2.Distance(this.Position, moveTo) > (Vector2.Distance(this.Position, Powerup.Powerups[i].Position)))) { moveTo = Powerup.Powerups[i].Position; } } this.rotation = Steering.TurnToFace(this.Position, moveTo, this.rotation, 0.2f); for (int i = enemyProjectile.EnemyProjectiles.Count - 1; i >= 0; i--) { if (Vector2.Distance(this.Position, enemyProjectile.EnemyProjectiles[i].Position) < 100) { this.rotation = Steering.TurnToFace(enemyProjectile.EnemyProjectiles[i].Position, this.Position, this.rotation, 0.4f); } } for (int i = AIProjectile.AIProjectiles.Count - 1; i >= 0; i--) { if (Vector2.Distance(this.Position, AIProjectile.AIProjectiles[i].Position) < 100) { this.rotation = Steering.TurnToFace(AIProjectile.AIProjectiles[i].Position, this.Position, this.rotation, 0.4f); } } //if (this.target != null) // if (Vector2.Distance(this.Position, this.target.Position) < 200) // this.rotation = Steering.TurnToFace(this.Position, moveTo, this.rotation, 0.4f); for (int i = Enemy.Enemies.Count - 1; i >= 0; i--) { if (Vector2.Distance(this.Position, Enemy.Enemies[i].Position) < 250) { this.rotation = Steering.TurnToFace(Enemy.Enemies[i].Position, this.Position, this.rotation, 0.4f); } } this.Direction = new Vector2((float)Math.Cos(this.rotation), (float)Math.Sin(this.rotation)); this.Direction.Normalize(); this.Rotation = rotation + MathHelper.PiOver2; if (this.moveTo.X < 5) moveTo = new Vector2(Config.Rand.Next(50, 1550), Config.Rand.Next(50, 910)); else if (this.moveTo.X > Config.WorldBoundsX - 5) moveTo = new Vector2(Config.Rand.Next(50, 1550), Config.Rand.Next(50, 910)); if (this.moveTo.Y < 5) moveTo = new Vector2(Config.Rand.Next(50, 1550), Config.Rand.Next(50, 910)); else if (this.moveTo.Y > Config.WorldBoundsY - 5) moveTo = new Vector2(Config.Rand.Next(50, 1550), Config.Rand.Next(50, 910)); //ability usage if (GameplayScreen.playerAbilityUses > 0 && Enemy.Enemies.Count > 30) { if (Config.ship1Active) { if (Player.Ship != null) { //Player.Ship.Health = (int)MathHelper.Min(Player.Ship.Health + 25, Player.Ship.MaxHealth); Player.Ship.Health = (int)MathHelper.Min(Player.Ship.Health + 10, Player.Ship.MaxHealth); Player.Ship.Shield.ShieldRegen(20); GameplayScreen.playerAbilityUses--; } } else if (Config.ship2Active) { if (Player.Ship != null) { PowerupDamageAll AoEDamage = new PowerupDamageAll(Config.PowerupSlowAllSpriteSheet); AoEDamage.Position = Player.Ship.Position; GameplayScreen.playerAbilityUses--; } } else if (Config.ship3Active) { if (Player.Ship != null) { Player.Ship.InvulnerableTimer.Start(10); Player.Ship.isInvulnerable = true; GameplayScreen.playerAbilityUses--; Player.Ship.InvulnAbilityBar = new Bar(100, 20, new Color(255, 255, 255, 5)); Player.Ship.InvulnAbilityBar.Position = new Vector2(5, 290); } } } }
void SpawnItem(LevelItem_1 item) { GameNode node = null; if (item.Type == ItemType_1.EnemyInterceptor) node = new EnemyInterceptor(Config.EnemyInterceptorSpriteSheet); else if (item.Type == ItemType_1.EnemyAvoider) node = new EnemyAvoider(Config.EnemyAvoiderSpriteSheet); else if (item.Type == ItemType_1.EnemyChaser) node = new EnemyChaser(Config.EnemyChaserSpriteSheet); else if (item.Type == ItemType_1.EnemyDasher) node = new EnemyDasher(Config.EnemyDasherSpriteSheet); else if (item.Type == ItemType_1.EnemyShooter) node = new EnemyShooter(Config.EnemyShooterSpriteSheet); else if (item.Type == ItemType_1.PowerupHealth) node = new PowerupHealth(Config.PowerupSlowAllSpriteSheet); else if (item.Type == ItemType_1.PowerupMissiles) node = new PowerupMissiles(Config.PowerupMissileSpriteSheet); else if (item.Type == ItemType_1.PowerupWeaponAutoBurst) node = new PowerupWeaponAutoBurst(Config.PowerupSlowAllSpriteSheet); else if (item.Type == ItemType_1.boss1) node = new boss1(Config.BossSpriteSheet); else if (item.Type == ItemType_1.PowerupDamageAll) node = new PowerupDamageAll(Config.PowerupSlowAllSpriteSheet); else if (item.Type == ItemType_1.PowerupFreeze) node = new PowerupFreeze(Config.PowerupMissileSpriteSheet); else if (item.Type == ItemType_1.PowerupDoubleShot) node = new PowerupDoubleShot(Config.PowerupSlowAllSpriteSheet); else if (item.Type == ItemType_1.PowerupTripleShot) node = new PowerupTripleShot(Config.PowerupSlowAllSpriteSheet); else if (item.Type == ItemType_1.PowerupAddBullet) node = new PowerupAddBullet(Config.PowerupAddProjectileSpriteSheet); else if (item.Type == ItemType_1.PowerupShotSpeed) node = new PowerupShotSpeed(Config.PowerupProjectileSpeedSpriteSheet); else if (item.Type == ItemType_1.Coin) node = new Coin(Config.CoinSpriteSheet); if (node != null) { //TODO: suppy levelItem Y position from item //node.Position = new Vector2(item.PositionX, -node.Sprite.Origin.Y); node.Position = new Vector2(item.PositionX, item.PositionY); node.Speed = item.Speed; node.Direction = item.Direction; } }
/// <summary> /// Updates the virtual thumbsticks based on current touch state. This must be called every frame. /// </summary> public static void Update() { TouchLocation? leftTouch = null, rightTouch = null; TouchCollection touches = TouchPanel.GetState(); //TouchCollection touches = input.TouchState; // Examine all the touches to convert them to virtual dpad positions. Note that the 'touches' // collection is the set of all touches at this instant, not a sequence of events. The only // sequential information we have access to is the previous location for of each touch. foreach (var touch in touches) { if (touch.Id == leftId) { // This is a motion of a left-stick touch that we're already tracking leftTouch = touch; continue; } if (touch.Id == rightId) { // This is a motion of a right-stick touch that we're already tracking rightTouch = touch; continue; } // We're didn't continue an existing thumbstick gesture; see if we can start a new one. // // We'll use the previous touch position if possible, to get as close as possible to where // the gesture actually began. TouchLocation earliestTouch; if (!touch.TryGetPreviousLocation(out earliestTouch)) earliestTouch = touch; if (earliestTouch.Position.X > 300 && earliestTouch.Position.X < 500 && earliestTouch.Position.Y > 430 && earliestTouch.Position.Y < 480) { if (GamePage.playerAbilityUses > 0) { if (Config.ship1Active) { if (Player.Ship != null) { //Player.Ship.Health = (int)MathHelper.Min(Player.Ship.Health + 25, Player.Ship.MaxHealth); Player.Ship.Health = (int)MathHelper.Min(Player.Ship.Health + 10, Player.Ship.MaxHealth); Player.Ship.Shield.ShieldRegen(20); GamePage.playerAbilityUses--; } } else if (Config.ship2Active) { if (Player.Ship != null) { PowerupDamageAll AoEDamage = new PowerupDamageAll(Config.PowerupSlowAllSpriteSheet); AoEDamage.Position = Player.Ship.Position; GamePage.playerAbilityUses--; } } else if (Config.ship3Active) { if (Player.Ship != null) { Player.Ship.InvulnerableTimer.Start(10); Player.Ship.isInvulnerable = true; Player.Ship.megaMagnetActive = true; GamePage.playerAbilityUses--; Player.Ship.InvulnAbilityBar = new Bar(100, 20, new Color(255, 255, 255, 5)); Player.Ship.InvulnAbilityBar.Position = new Vector2(5, 290); } } } } if (leftId == -1) { // if we are not currently tracking a left thumbstick and this touch is on the left // half of the screen, start tracking this touch as our left stick if (earliestTouch.Position.X < TouchPanel.DisplayWidth / 2) { leftTouch = earliestTouch; continue; } } if (rightId == -1) { // if we are not currently tracking a right thumbstick and this touch is on the right // half of the screen, start tracking this touch as our right stick if (earliestTouch.Position.X >= TouchPanel.DisplayWidth / 2) { rightTouch = earliestTouch; continue; } } } // if we have a left touch if (leftTouch.HasValue) { // if we have no center, this position is our center if (Config.ControlOption == 2) { LeftThumbstickCenter = LeftThumbstickFixed; } else if (!LeftThumbstickCenter.HasValue) LeftThumbstickCenter = leftTouch.Value.Position; // save the position of the touch leftPosition = leftTouch.Value.Position; if (Config.ControlOption == 0) { if (Vector2.Distance(LeftThumbstickCenter.Value, leftPosition) > 50) LeftThumbstickCenter -= Vector2.Normalize(LeftThumbstickCenter.Value - leftPosition); } // save the ID of the touch leftId = leftTouch.Value.Id; } else { // otherwise reset our values to not track any touches // for the left thumbstick LeftThumbstickCenter = null; leftId = -1; } // if we have a right touch if (rightTouch.HasValue) { // if we have no center, this position is our center if (Config.ControlOption == 2) { RightThumbstickCenter = RightThumbstickFixed; } else if (!RightThumbstickCenter.HasValue) RightThumbstickCenter = rightTouch.Value.Position; // save the position of the touch rightPosition = rightTouch.Value.Position; if (Config.ControlOption == 0) { if (Vector2.Distance(RightThumbstickCenter.Value, rightPosition) > 50) RightThumbstickCenter -= Vector2.Normalize(RightThumbstickCenter.Value - rightPosition); } // save the ID of the touch rightId = rightTouch.Value.Id; } else { // otherwise reset our values to not track any touches // for the right thumbstick RightThumbstickCenter = null; rightId = -1; } }