private void CheckCollision() { _speler.Land = false; _speler.BounceHorizontal = false; _collisionEndDoor = false; if (_speler.RectangleCollision.Intersects(_endDoor.RectangleCollision)) { _collisionEndDoor = true; } #region CollisionTiles foreach (GameObject g in tileObjecten) { if (g.Damage) { if (_speler.RectangleCollision.Intersects(g.RectangleCollision)) { _speler.Hit = true; } } else if (!(g is Collisionbox)) { //Botsen met hoofd if (_speler.RectangleCollisionHead.Intersects(g.RectangleCollision) && !_speler.Land) { _speler.BounceVertical = true; //Speler is tegen een tile gebotst! _speler.UpdateCollisionRectangles(); } //Horizontale collision --> Botsen tegen tile else if (_speler.RectangleCollision.Intersects(g.RectangleCollision)) { if (_speler.LocationX < g.RectangleCollision.X) { _speler.BounceHorizontalRichting = MoveGameObject.Richting.Rechts; //_speler.LocationX = g.RectangleCollision.X - _speler.RectangleCollision.Width; //Optie om speler niet in blok te laten gaan, lost bug op van landen in tile. } else { _speler.BounceHorizontalRichting = MoveGameObject.Richting.Links; //_speler.LocationX = g.RectangleCollision.X + g.RectangleCollision.Width - 20; } _speler.BounceHorizontal = true; _speler.UpdateCollisionRectangles(); } //Verticale collsion --> Landen if (_speler.RectangleCollisionFeet.Intersects(g.RectangleCollision)) { _speler.Land = true; _speler.LocationY = g.LocationY; _speler.UpdateCollisionRectangles(); } } #region Collision met kogels foreach (Bullet f in _bulletList) { if (!(g is Collisionbox) && f.RectangleCollision.Intersects(g.RectangleCollision)) //Kogels moeten niet collisionen met collisionboxen (TODO: ZOEK BETERE IMPLEMENTATIE) { f.Explode = true; } if (!(f is BulletPlayer) && f.RectangleCollision.Intersects(_speler.RectangleCollision)) //Geen friendly fire t.o.v. je eigen, anders kun je je zelf raken { _speler.Hit = true; f.Explode = true; } #endregion } #region Collision met Enemies! foreach (Enemy e in _enemyList) { if (e.RectangleCollision.Intersects(g.RectangleCollision)) { e.Direction *= -1; if (e.BewegingsRichting == Enemy.Beweging.Horizontaal) { if (e.LocationX < g.RectangleCollision.X) { //Zorgt ervoor dat Enemy niet in de tile terecht komt! e.LocationX = g.RectangleCollision.X - e.RectangleCollision.Width; } else { e.LocationX = g.RectangleCollision.X + g.RectangleCollision.Width; } } e.UpdateCollisionRectangles(); //Update collision rectangle zodanig dat deze klopt! (Indien niet gaat de collision rectangle voor een stuk de tile in en kan dit incorrect collision maken met de speler) } #endregion } } #endregion #region Collision between PLAYER/ENEMY & ENEMY/BULLET foreach (Enemy e in _enemyList) { if (_speler.RectangleCollision.Intersects(e.RectangleCollision) && _speler.Hit == false) { _speler.Hit = true; } foreach (Bullet t in _bulletList) { //Er is geen friendly fire, enemies kunnen geen enemies neerschieten! Enkel speler kogels kunnen enemies doodden! if (t is BulletPlayer) { if (t.RectangleCollision.Intersects(e.RectangleCollision)) { t.Remove = true; if (!(e is Mine)) { _speler.ScoreInt += 100; e.Die = true; } } } } } #endregion foreach (RemoveGameObject r in _bonusObjecten) { if (_speler.RectangleCollision.Intersects(r.RectangleCollision)) { _speler.ScoreInt += 200; r.Remove = true; if (r is Cola) { _speler.AddLive(); } else if (_endList.Count > 0) //Vanaf deze waarde nul is moet er niet meer gekeken worden alle sleutes zijn opgeraakt! { if (r is KeyBlue) { _keyList.Add(Sleutels.Blue); } else if (r is KeyRed) { _keyList.Add(Sleutels.Red); } } } } #region RemovingItems //Remove items if they are dead/unnecessary for (int x = _enemyList.Count - 1; x >= 0; x--) { if (_enemyList[x].Remove) { _enemyList.RemoveAt(x); } } for (int i = _bulletList.Count - 1; i >= 0; i--) { if (_bulletList[i].LocationX <0 || _bulletList[i].LocationX> LevelWidth || _bulletList[i].LocationY > LevelHeight) { _bulletList.RemoveAt(i); } else if (_bulletList[i].Remove) { _bulletList.RemoveAt(i); } } for (int x = _bonusObjecten.Count - 1; x >= 0; x--) { if (_bonusObjecten[x].Remove) { _bonusObjecten.RemoveAt(x); } } //Verwijderen van sleutes uit de endList! //Deze lijst bevat welke sleutels je nodig hebt om door te kunnen naar het volgende level! //Als deze lijst een Count heeft van nul kun je naar het volgende level!!! for (int x = _endList.Count - 1; x >= 0; x--) { if (_keyList.Contains(_endList[x])) { _endList.RemoveAt(x); } } #endregion }
public override GameLoop Update(GameTime g) { Screen.Update(_textureActive.Width / 2, _textureActive.Height / 2); //Center the screen! _ticks += g.ElapsedGameTime.Milliseconds; if (_anim == true) { if (_ticks > 2000) { _textureActive = _picAnimatie[1]; } if (_ticks > 4000) { _textureActive = _picAnimatie[2]; _anim = false; } } #region UpdateTexture if (_enter && _textureActive == _picAnimatie[2]) { _textureActive = _picAnimatie[3]; _enter = false; } else if (_enter && _textureActive == _picAnimatie[5]) { _textureActive = _picAnimatie[6]; _enter = false; } else if (_enter && _textureActive == _picAnimatie[6]) { _enter = false; return(new Level1(new Speler())); } else if (_esc) { if (_textureActive == _picAnimatie[3]) { _textureActive = _picAnimatie[2]; } else if (_textureActive == _picAnimatie[4]) { _textureActive = _picAnimatie[3]; } _esc = false; } else if (_i && _textureActive == _picAnimatie[3]) { _textureActive = _picAnimatie[4]; _i = false; } else if (_s && _textureActive == _picAnimatie[3]) { _s = false; _textureActive = _picAnimatie[5]; } else if (_l && _textureActive == _picAnimatie[3]) { _l = false; FileStream inFile = new FileStream(_FILENAME, FileMode.Open, FileAccess.Read); StreamReader reader = new StreamReader(inFile); string recordIn; string[] fields; List <Enemy> tempEnemy = new List <Enemy>(); List <RemoveGameObject> tempBonus = new List <RemoveGameObject>(); List <Sleutels> tempSleutels = new List <Sleutels>(); bool blue = false; bool red = false; string Level = reader.ReadLine(); int ScoreSpeler = Convert.ToInt32(reader.ReadLine()); int Levens = Convert.ToInt32(reader.ReadLine()); int PosX = Convert.ToInt32(reader.ReadLine()); int PosY = Convert.ToInt32(reader.ReadLine()); Speler tempSpeler = new Speler(PosX, PosY); tempSpeler.ScoreInt = ScoreSpeler; for (int i = 0; i < Levens; i++) { tempSpeler.AddLive(); } recordIn = reader.ReadLine(); while (recordIn != null) { fields = recordIn.Split(';'); if (fields[0] == "Robot") { tempEnemy.Add(new Robot((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "MonsterRight") { tempEnemy.Add(new MonsterRight((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "MonsterLeft") { tempEnemy.Add(new MonsterLeft((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "Mine") { tempEnemy.Add(new Mine((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "Tank") { tempEnemy.Add(new Tank((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]), (int)Convert.ToDouble(fields[3]))); } else if (fields[0] == "FireRobot") { tempEnemy.Add(new FireRobot((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]), (int)Convert.ToDouble(fields[3]))); } else if (fields[0] == "Floppy") { tempBonus.Add(new Floppy((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "Cola") { tempBonus.Add(new Cola((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "KeyRed") { tempBonus.Add(new KeyRed((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } else if (fields[0] == "KeyBlue") { tempBonus.Add(new KeyBlue((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]))); } recordIn = reader.ReadLine(); } reader.Close(); inFile.Close(); foreach (RemoveGameObject r in tempBonus) { if (r is KeyBlue) { blue = true; } else if (r is KeyRed) { red = true; } } if (!red) { tempSleutels.Add(Sleutels.Red); } if (!blue) { tempSleutels.Add(Sleutels.Blue); } if (Level == "Level1") { return(new Level1(tempSpeler, tempEnemy, tempBonus, tempSleutels)); } else { return(new Level2(tempSpeler, tempEnemy, tempBonus, tempSleutels)); } } #endregion return(this); }