private void CreateShoot(CCShootBase m) { lock (Shoots) { Shoots.Add(m); } AddChild(m); }
private void CreateEnemyShoot(CCShootBase m) { lock (EnemyShoots) { EnemyShoots.Add(m); } AddChild(m); }
public void RemoveEnemyShoot(CCShootBase m) { lock (EnemyShoots) { EnemyShoots.Remove(m); } RemoveChild(m); }
public void RemoveShoot(CCShootBase m) { lock (Shoots) { Shoots.Remove(m); } RemoveChild(m); }
public void CheckEnemyCollition(CCPlayerBase Player1) { if (Player1 == null) return; if (!Player1.HasCollision) { var deletedShoot = new List<CCShootBase>(); var deletedEnemy = new List<CCNode>(); bool enemydeleted = false; CCEnemyBase[] cacheEnemies = new CCEnemyBase[Enemies.Count]; Enemies.CopyTo(cacheEnemies); CCShootBase[] cacheShoots = new CCShootBase[Shoots.Count]; Shoots.CopyTo(cacheShoots); foreach (CCEnemyBase tmpEnemy in cacheEnemies) //cacheEnemies.Where(s => (typeof(EnemyMeteor) == s.GetType() && (s as EnemyMeteor).CheckCollition) || (typeof(EnemyShip) == s.GetType() && (s as EnemyShip).CheckCollition))) { enemydeleted = false; //COMPROBAMOS LOS DISPAROS QUE HAN IMPACTADO CON EL ENEMIGO foreach (var tmpShoot in cacheShoots) { //TODO: MEJORAR Y PONER UN CIRCULO CON RADIO ALTO Y ANCHO en el caso de los asteorides //AÑADIMOS LA RRAY DE ELEMENTOS PARA BOTTAR if (tmpEnemy.BoundingBox.IntersectsRect(tmpShoot.BoundingBox)) { deletedShoot.Add(tmpShoot); deletedEnemy.Add(tmpEnemy); enemydeleted = true; //SOLO ES PARA EL ENEMIGO } } if (enemydeleted) //SI HEMOS IMPACTADO EN ALGUN ENEMIGO LO BORRAMOS { //ELIMINAMOS EL DISPARO foreach (var tmpShoot in deletedShoot) RemoveShoot(tmpShoot);// tmpShoot.DeleteElement(); //Eliminamos el disparo que ha impactado con el enemigo if (tmpEnemy.GetType() == typeof(CCEnemyBase)) { if ((tmpEnemy as CCEnemyBase).RemoveLife(1)) { EnemyKills++; DeleteEnemy(tmpEnemy, true); } } else if (tmpEnemy.GetType() == typeof(CCEnemyBase)) { EnemyKills++; DeleteEnemy(tmpEnemy, true); } } else //SI EL ENEMIGO NO HA SIDO DESTRUIDO { //COMPROBAMOS QUE SALGA FUERA DE PANTALLA if (tmpEnemy.PositionX < -(3 + tmpEnemy.ContentSize.Width)) { DeleteEnemy(tmpEnemy, false); enemydeleted = true; } //Comprobamos que esté activada la colision if ((typeof(CCEnemyBase) == tmpEnemy.GetType() && (tmpEnemy as CCEnemyBase).CheckCollition)) //ENEMIGO CHOCA CON NAVE if (!enemydeleted && Player1.BoundingBox.IntersectsRect(tmpEnemy.BoundingBox)) { //TODO: COLLISION DETECTED EVENT // CollitionDetected(); } } } } }