//---------------------------------------------------------------------------------- // Constructor //---------------------------------------------------------------------------------- public ExplosionSpriteObserver(GameSprite.Name spriteName, float delay = 0.2f) { this.pTargetObj = null; this.pExplosionSprite = null; this.name = spriteName; this.timeDelay = delay; }
//---------------------------------------------------------------------------------- // Abstract Methods //---------------------------------------------------------------------------------- public override void Notify() { // Delete missile //Debug.WriteLine("RemoveBombObserver: {0} {1}", this.pSubject.pObjA, this.pSubject.pObjB); // Need to separate out collision-pairs since this class can handle multiple Explosion cases. switch (this.name) { case GameSprite.Name.AlienExplosion: this.pTargetObj = this.pSubject.pObjB; break; case GameSprite.Name.MissileExplosion: this.pTargetObj = this.pSubject.pObjA; break; case GameSprite.Name.BombExplosion: this.pTargetObj = this.pSubject.pObjA; break; case GameSprite.Name.SaucerExplosion: this.pTargetObj = this.pSubject.pObjB; break; case GameSprite.Name.ShipExplosionA: this.pTargetObj = this.pSubject.pObjB; break; case GameSprite.Name.ShipExplosionB: this.pTargetObj = this.pSubject.pObjB; break; default: Debug.WriteLine("There is no Default explosion. Make sure you enter the name you want."); Debug.Assert(false); break; } Debug.Assert(this.pTargetObj != null); float px = this.pTargetObj.x; float py = this.pTargetObj.y; // Factor attaches to the correct sprite batches // Could be an AlienExplosion, BombExplosion, MissileExplosion // Should be explosion sprites this.pExplosionSprite = EF.Create(this.name, px, py); this.pExplosionSprite.SetPosition(px, py); // Delay ExplosionSpriteObserver pObserver = new ExplosionSpriteObserver(this); DelayedObjectManager.Attach(pObserver); }
//---------------------------------------------------------------------------------- // Constructor //---------------------------------------------------------------------------------- public ExplosionSprite Create(GameSprite.Name theName, float posx = 0.0f, float posy = 0.0f) { ExplosionSprite pSprite = null; switch (theName) { case GameSprite.Name.AlienExplosion: pSprite = this.Grab(theName); // If not there then create. if (pSprite == null) { pSprite = new ExplosionSprite(GameSprite.Name.AlienExplosion, posx, posy); DLink.AddToFront(ref this.pHead, pSprite); ExplosionSpriteCreationCount++; } break; case GameSprite.Name.MissileExplosion: pSprite = this.Grab(theName); // If not there then create. if (pSprite == null) { pSprite = new ExplosionSprite(GameSprite.Name.MissileExplosion, posx, posy); DLink.AddToFront(ref this.pHead, pSprite); ExplosionSpriteCreationCount++; } break; case GameSprite.Name.BombExplosion: pSprite = this.Grab(theName); // If not there then create. if (pSprite == null) { pSprite = new ExplosionSprite(GameSprite.Name.BombExplosion, posx, posy); DLink.AddToFront(ref this.pHead, pSprite); ExplosionSpriteCreationCount++; } break; case GameSprite.Name.SaucerExplosion: pSprite = this.Grab(theName); // If not there then create. if (pSprite == null) { pSprite = new ExplosionSprite(GameSprite.Name.SaucerExplosion, posx, posy); DLink.AddToFront(ref this.pHead, pSprite); ExplosionSpriteCreationCount++; } break; case GameSprite.Name.ShipExplosionA: pSprite = this.Grab(theName); // If not there then create. if (pSprite == null) { pSprite = new ExplosionSprite(GameSprite.Name.ShipExplosionA, posx, posy); DLink.AddToFront(ref this.pHead, pSprite); ExplosionSpriteCreationCount++; } break; case GameSprite.Name.ShipExplosionB: pSprite = this.Grab(theName); // If not there then create. if (pSprite == null) { pSprite = new ExplosionSprite(GameSprite.Name.ShipExplosionB, posx, posy); DLink.AddToFront(ref this.pHead, pSprite); ExplosionSpriteCreationCount++; } break; default: Debug.WriteLine("Choose the Explosion you want by name."); Debug.Assert(false); break; } pSprite.AddExplosion(); Debug.Assert(pSprite != null); return(pSprite); }
//---------------------------------------------------------------------------------- // Constructor //---------------------------------------------------------------------------------- public ExplosionSpriteEvent(ExplosionSprite expSprite) { this.pExplosionSprite = expSprite; }