public override void Update(GameTime gameTime, Spaceman player, BlackHole blackHole, Weapon weapon1, Weapon weapon2, InventoryManager inventory, Unicorn[] unicorns) { //resting stage if (_restTimer >= TimeSpan.Zero) //not started yet { _restTimer -= gameTime.ElapsedGameTime; if (_restTimer < TimeSpan.Zero) { setPosition(blackHole.Position, true); //set portal position } return; //not ready to start } //Waiting for previous or already complete if (!Active) { return; } //active stage //spawning //spawn particles if still spawning enemies if (_enemySpawnIndex < _numEnemies && SpawnEnable) { _portalEffect.Spawn(_spawnLocation, 90.0f + _portalAngle, gameTime.ElapsedGameTime, Vector2.Zero); _portalEffect.Spawn(_spawnLocation, -90.0f + _portalAngle, gameTime.ElapsedGameTime, Vector2.Zero); trySpawnEnemy(gameTime.ElapsedGameTime, blackHole.Position); } _portalAngle += (float)gameTime.ElapsedGameTime.TotalSeconds * c_portalRotationRate; _portalEffect.Update(gameTime); //update units base.Update(gameTime, player, blackHole, weapon1, weapon2, inventory, unicorns); }
Wave[] _waves; //collection of all trickle waves and active burst wave #endregion Fields #region Constructors public Level(ContentManager content, int levelNumber, InventoryManager im) : base(content, false, "Level") { LevelData data = DataManager.GetData<LevelData>(String.Format(c_levelNameFormat, levelNumber)); _levelBounds = new Rectangle(0, 0, data.Width, data.Height); _player = new Spaceman(new Vector2(data.PlayerX, data.PlayerY)); _blackHole = new BlackHole(data.BlackHole); //store active burst wave as last tricklewave _waves = new Wave[data.TrickleWaves.Length + data.BurstWaves.Length]; _camera = new Camera2D(_player.Position, _levelBounds.Width, _levelBounds.Height); //construct waves for (int i = 0; i < data.TrickleWaves.Length; i++) { _waves[i] = new TrickleWave(data.TrickleWaves[i], _levelBounds); } for (int i = 0; i < data.BurstWaves.Length; i++) { BurstWave prevWave = (i == 0) ? null : (BurstWave)_waves[i + data.TrickleWaves.Length - 1]; _waves[i + data.TrickleWaves.Length] = new BurstWave(data.BurstWaves[i], _levelBounds, prevWave); } //Test code to set weapons 1-6 to created weapons im.setPrimaryGadget(new Gadget("Teleporter", this)); im.setSecondaryGadget(new Gadget("Stopwatch", this)); im.setSlot(1, new ThrowableWeapon("Cryonade", _player)); if (data.Unicorns == null) { _unicorns = new Unicorn[0]; } else { _unicorns = new Unicorn[data.Unicorns.Length]; for (int j = 0; j < data.Unicorns.Length; j++) { _unicorns[j] = new Unicorn(data.Unicorns[j]); } } _primaryGadget = im.getPrimaryGadget(); _secondaryGadget = im.getSecondaryGadget(); _inventoryManager = im; userInterface = new Hud(_player, _blackHole, _waves); _cursorTextureCenter = new Vector2(s_CursorTexture.Width / 2 , s_CursorTexture.Height / 2); selectRandomWeapons(); }
public Level(int levelNumber, InventoryManager im) : base(false) { LevelData data = DataLoader.LoadLevel(levelNumber); _levelBounds = new Rectangle(0, 0, data.Width, data.Height); _player = new Spaceman(data.PlayerStartLocation); _blackHole = data.BlackHole; _waves = new Wave[data.TrickleWaveData.Length + data.BurstWaveData.Length]; _camera = new Camera2D(_player.Position, _levelBounds.Width, _levelBounds.Height); //construct waves for (int i = 0; i < data.TrickleWaveData.Length; i++) { _waves[i] = new Wave(data.TrickleWaveData[i], true, _levelBounds); } for (int i = 0; i < data.BurstWaveData.Length; i++) { _waves[i + data.TrickleWaveData.Length] = new Wave(data.BurstWaveData[i], false, _levelBounds); } //Test code to set weapons 1-6 to created weapons im.setPrimaryWeapon(new ProjectileWeapon("Rocket", _player)); im.setSecondaryWeapon(new ThrowableWeapon("Cryonade", _player)); im.setPrimaryGadget(new Gadget("Teleporter", this)); im.setSlot(1, new ThrowableWeapon("Cryonade", _player)); //Set Weapon holders in level _primaryWeapon = im.getPrimaryWeapon(); _secondaryWeapon = im.getSecondaryWeapon(); _unicorns = new Unicorn[data.Unicorns.Length]; for (int j = 0; j < data.Unicorns.Length; j++) { _unicorns[j] = new Unicorn(data.Unicorns[j]); } _foodCarts = data.FoodCarts; _primaryGadget = im.getPrimaryGadget(); _inventoryManager = im; userInterface = new GUI(_player, _blackHole); }
public Level(int levelNumber) : base(false) { LevelData data = DataLoader.LoadLevel(levelNumber); _player = new Spaceman(data.PlayerStartLocation); _blackHole = data.BlackHole; _waves = new Wave[data.TrickleWaveData.Length + data.BurstWaveData.Length]; //construct waves for (int i = 0; i < data.TrickleWaveData.Length; i++) { _waves[i] = new Wave(data.TrickleWaveData[i], true); } for (int i = 0; i < data.BurstWaveData.Length; i++) { _waves[i + data.TrickleWaveData.Length] = new Wave(data.BurstWaveData[i], false); } _primaryWeapon = new ProjectileWeapon("Rocket", _player); _secondaryWeapon = new ProjectileWeapon("Swarmer", _player); _primaryGadget = new Gadget(new Gadget.GadgetData { MaxEnergy = 1000 }); }
public virtual void Update(GameTime gameTime, Vector2 playerPosition, BlackHole blackHole, Rectangle levelBounds) { Vector2 playerDisposition = playerPosition - Position; Vector2 directionToPlayer; Vector2 blackHoleDisposition = blackHole.Position - Position; Vector2.Normalize(ref playerDisposition, out directionToPlayer); if (blackHoleDisposition.Length() < blackHole.Radius * c_blackHoleSafety) { //too close to black hole blackHoleDisposition.Normalize(); MoveDirection = -blackHoleDisposition; } else { MoveDirection = playerDisposition.Length() > _idealRange ? directionToPlayer : -directionToPlayer; } LookDirection = directionToPlayer; if (CurrentWeapon != null) { CurrentWeapon.Update(gameTime); if ((playerPosition - Position).Length() <= CurrentWeapon.Range && _lifeState == LifeState.Living) CurrentWeapon.Trigger(Center, playerPosition); } base.Update(gameTime, levelBounds); }
/// <summary> /// Update wave, updating behavior of all enemies. /// Check collisions against player and self, but not other waves /// </summary> /// <param name="gameTime"></param> /// <param name="player"></param> /// <param name="blackHole"></param> /// <param name="weapon1"></param> /// <param name="weapon2"></param> public void Update(GameTime gameTime, Spaceman player, BlackHole blackHole, Weapon weapon1, Weapon weapon2) { if (_startTimer >= TimeSpan.Zero) //not started yet { _startTimer -= gameTime.ElapsedGameTime; if (_startTimer < TimeSpan.Zero) { Active = true; //activate if start timer complete setPosition(blackHole.Position); //set first spawn position } } if (!Active) return; //don't update if not active //play particle effect if existant if (_portalEffect != null) { //spawn particles if still spawning enemies if (_spawnedSoFar < _numEnemies) { _portalEffect.Spawn(_spawnLocation, 90.0f + _portalAngle, gameTime.ElapsedGameTime, Vector2.Zero); _portalEffect.Spawn(_spawnLocation, -90.0f + _portalAngle, gameTime.ElapsedGameTime, Vector2.Zero); } _portalAngle += (float)gameTime.ElapsedGameTime.TotalSeconds * PORTAL_ROTATION_RATE; _portalEffect.Update(gameTime); if (_activationDelay >= TimeSpan.Zero) //gradually increase particle intensity { _portalEffect.IntensityFactor = 1.0f - (float)_activationDelay.TotalSeconds / ACTIVATION_DELAY_SECONDS; } } //only start spawning if activation delay is elapsed. //Otherwise, just start particleeffect and don't spawn enemies yet if (_activationDelay > TimeSpan.Zero) { _activationDelay -= gameTime.ElapsedGameTime; return; } //run spawning logic spawn(gameTime, _spawnLocation, blackHole.Position); //update all enemies in wave bool allDestroyed = true; //check if all enemies destroyed for (int i = _enemies.Length - 1; i >= 0; i--) { if (_enemies[i].UnitLifeState == PhysicalUnit.LifeState.Destroyed) continue; //don't update destroyed units allDestroyed = false; //found one that isn't destroyed for (int j = i - 1; j >= 0; j--) { //check collision against other enemies _enemies[i].CheckAndApplyUnitCollision(_enemies[j]); } _enemies[i].CheckAndApplyUnitCollision(player); _enemies[i].Update(gameTime, player.Position, Vector2.Zero); blackHole.ApplyToUnit(_enemies[i], gameTime); weapon1.CheckAndApplyCollision(_enemies[i]); weapon2.CheckAndApplyCollision(_enemies[i]); } //stay active unless it is not a trickle wave and all enemies are destroyed Active = Active && (_isTrickleWave || !allDestroyed); }
/// <summary> /// Update wave, updating behavior of all enemies. /// Check collisions against player and self, but not other waves /// Check weapon collisions against player /// </summary> /// <param name="gameTime"></param> /// <param name="player"></param> /// <param name="blackHole"></param> /// <param name="weapon1"></param> /// <param name="weapon2"></param> public virtual void Update(GameTime gameTime, Spaceman player, BlackHole blackHole, Weapon weapon1, Weapon weapon2, InventoryManager inventory, Unicorn[] unicorns) { if (!Active) { return; } //update all enemies in wave bool allDestroyed = true; //check if all enemies destroyed for (int i = _bodies.Length - 1; i >= 0; i--) { if (_bodies[i].UnitLifeState != PhysicalBody.LifeState.Destroyed) { allDestroyed = false; //found one that isn't destroyed } if (!_bodies[i].Updates) continue; //don't update units that shouldn't be updated for (int j = i - 1; j >= 0; j--) { //check collision against other enemies in same wave _bodies[i].CheckAndApplyUnitCollision(_bodies[j]); if (_bodies[i] is Obstacle) { (_bodies[i] as Obstacle).CheckAndApplyEffect(_bodies[j], gameTime.ElapsedGameTime); } } for (int j = 0; j < unicorns.Length; j++) { //check collision against unicorns unicorns[j].CheckAndApplyCollision(_bodies[i], gameTime); } _bodies[i].CheckAndApplyUnitCollision(player); if (_bodies[i] is Enemy) { (_bodies[i] as Enemy).CheckAndApplyWeaponCollision(player, gameTime.ElapsedGameTime); (_bodies[i] as Enemy).Update(gameTime, player.Position, blackHole, _levelBounds); } else { (_bodies[i] as Obstacle).Update(gameTime, _levelBounds); (_bodies[i] as Obstacle).CheckAndApplyEffect(player, gameTime.ElapsedGameTime); } blackHole.ApplyToUnit(_bodies[i], gameTime); if (weapon1 != null) { weapon1.CheckAndApplyCollision(_bodies[i], gameTime.ElapsedGameTime); } if (weapon2 != null) { weapon2.CheckAndApplyCollision(_bodies[i], gameTime.ElapsedGameTime); } inventory.CheckCollisions(gameTime, _bodies[i]); } trySpawnObstacle(gameTime.ElapsedGameTime, blackHole.Position); _allDestroyed = allDestroyed; }
public override void Update(GameTime gameTime, Spaceman player, BlackHole blackHole, Weapon weapon1, Weapon weapon2, InventoryManager inventory, Unicorn[] unicorns) { if (_startTimer > TimeSpan.Zero) { //not started yet _startTimer -= gameTime.ElapsedGameTime; return; } if (_endTimer <= TimeSpan.Zero) { SpawnEnable = false; } else { _endTimer -= gameTime.ElapsedGameTime; } if (trySpawnEnemy(gameTime.ElapsedGameTime, blackHole.Position)) { //reposition if enemy spawned successfully setPosition(blackHole.Position, false); } //cycle through enemy slots _enemySpawnIndex = (_enemySpawnIndex + 1) % _numEnemies; //update enemies base.Update(gameTime, player, blackHole, weapon1, weapon2, inventory, unicorns); }
public Hud(SpaceGame.units.Spaceman player, SpaceGame.units.BlackHole blackhole, Wave[] waves) { this.screenHeight = Game1.SCREENHEIGHT; this.screenWidth = Game1.SCREENWIDTH; targetWheelRec.X = (screenWidth / 2) - 32; targetWheelRec.Y = screenHeight - targetWheel.Height; targetWheelRec.Width = targetWheel.Width; targetWheelRec.Height = targetWheel.Height; leftClickRec.X = (screenWidth / 2) - 99; leftClickRec.Y = screenHeight - leftClick.Height; leftClickRec.Width = leftClick.Width; leftClickRec.Height = leftClick.Height; rightClickRec.X = (screenWidth / 2) + 148; rightClickRec.Y = screenHeight - rightClick.Height; rightClickRec.Width = rightClick.Width; rightClickRec.Height = rightClick.Height; spaceClickRec.X = (screenWidth / 2) + 256; spaceClickRec.Y = screenHeight - spaceClick.Height; spaceClickRec.Width = spaceClick.Width; spaceClickRec.Height = spaceClick.Height; shiftClickRec.X = (screenWidth / 2) - 340; shiftClickRec.Y = screenHeight - shiftClick.Height; shiftClickRec.Width = shiftClick.Width; shiftClickRec.Height = shiftClick.Height; button1Rec.X = (screenWidth / 2) - 412; button1Rec.Y = screenHeight - button1.Height; button1Rec.Width = button1.Width; button1Rec.Height = button1.Height; button3Rec.X = button1Rec.X; button3Rec.Y = button1Rec.Y - button1.Height - 5; button3Rec.Width = button3.Width; button3Rec.Height = button3.Height; button5Rec.X = button1Rec.X; button5Rec.Y = button1Rec.Y - 2*button1.Height - 2*5; button5Rec.Width = button5.Width; button5Rec.Height = button5.Height; button2Rec.X = (screenWidth / 2) - 484; button2Rec.Y = screenHeight - button2.Height; button2Rec.Width = button2.Width; button2Rec.Height = button2.Height; button4Rec.X = button2Rec.X; button4Rec.Y = button2Rec.Y - button2.Height - 5; button4Rec.Width = button4.Width; button4Rec.Height = button4.Height; button6Rec.X = button2Rec.X; button6Rec.Y = button2Rec.Y - 2 * button2.Height - 2 * 5; button6Rec.Width = button6.Width; button6Rec.Height = button6.Height; voidWheelRec.X = targetWheelRec.X + targetWheel.Width / 2 - voidWheel.Width / 2; voidWheelRec.Y = 0; voidWheelRec.Width = voidWheel.Width; voidWheelRec.Height = voidWheel.Height; this.player = player; this.blackhole = blackhole; //Initialize health bar in its location Vector2 healthBarLoc = new Vector2(targetWheelRec.X + targetWheelRec.Width / 2, (int)(targetWheelRec.Y + HEIGHT_ADJUST * targetWheelRec.Height)); healthBar = new RadialBar(healthBarLoc, targetWheelRec.Width / RADIUS_ADJUST, 25, -(float)Math.PI / ARC_ADJUST, (float)Math.PI / ARC_ADJUST, Color.Red); //Initialize void bar in its location Vector2 voidBarLoc = new Vector2(voidWheelRec.X + voidWheelRec.Width / 2, (int)(voidWheelRec.Y + voidWheelRec.Height - 10)); voidBar = new RadialBar(voidBarLoc, voidWheelRec.Width / RADIUS_ADJUST, 25, (float)(2 * Math.PI - (float)Math.PI / VOID_ARC_ADJUST), (float)Math.PI / VOID_ARC_ADJUST, Color.Purple); }