示例#1
0
 private void CreateShoot(CCShootBase m)
 {
     lock (Shoots)
     {
         Shoots.Add(m);
     }
     AddChild(m);
 }
示例#2
0
 private void CreateEnemyShoot(CCShootBase m)
 {
     lock (EnemyShoots)
     {
         EnemyShoots.Add(m);
     }
     AddChild(m);
 }
示例#3
0
 public void RemoveEnemyShoot(CCShootBase m)
 {
     lock (EnemyShoots)
     {
         EnemyShoots.Remove(m);
     }
     RemoveChild(m);
 }
示例#4
0
 public void RemoveShoot(CCShootBase m)
 {
     lock (Shoots)
     {
         Shoots.Remove(m);
     }
     RemoveChild(m);
 }
示例#5
0
        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();
                            }

                    }

                }

            }
        }