void OnCollisionEnter(Collision collision) { Collider collider = collision.collider; PlayerBase pb = playerBase.gameObject.GetComponent <PlayerBase>(); if (live) { if (collider.CompareTag("Invader") || collider.CompareTag("MysteryInvader")) { Invader invader = collider.gameObject.GetComponent <Invader>(); if (invader.live) { invader.Die(); } } else if (collider.CompareTag("InvaderMissile")) { InvaderMissile i_missile = collider.gameObject.GetComponent <InvaderMissile>(); // The invader missile's collision function will handle its own death } else if (collider.CompareTag("BaseShield")) { Destroy(collider.gameObject); } if (!isBeam) { live = false; gameObject.GetComponent <Renderer>().material.color = new Color(0.2f, 0, 0); } } }
internal cInvaderRow(int count, int health, int width, int index, Size size, InvaderMissile fireMissile, DropItem dropItem, Random r, int level) { Invaders = new List <cInvader>(); for (int i = 1; i <= count; i++) { Invaders.Add(new cInvader() { Random = r, Location = new System.Drawing.Point(i * width / (count + 1) - 20, 50 * index), Health = health, HealthMax = health, DamageOnContact = 500 + level * 100, Size = size, FireMissile = fireMissile, DropItem = dropItem, Speed = 20, MoveType = MovementType.Invader, Level = level }); } this.Index = index; }
internal ucGame(SetControl viewChanger) { InitializeComponent(); this.viewChanger = viewChanger; this.Load += new EventHandler(UcGame_CreateBackBuffer); this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true); Size tmpSize = new Size(60, 80); spaceShip = new cSpaceship() { Image = Properties.Resources.SpaceShip, Location = new Point((this.Width - tmpSize.Width) / 2, (this.Height - 150)), Size = tmpSize, Damage = 200, DamageOnContact = 50000, WeaponStrength = 1, WeaponFrequency = 1, Health = 1000, HealthMax = 1000, ShieldMax = 1000 }; invMissile = new InvaderMissile(InvaderMissileHandler); dropItem = new DropItem(DropItemHandler); invMissiles = new List <cMissile>(); missiles = new List <cMissile>(); invaderRows = new List <cInvaderRow>(); dropItems = new List <cDropItem>(); GameTimer = new Timer(); GameTimer.Interval = 15; GameTimer.Tick += GameTimer_Tick; MovementTimer = new Timer(); MovementTimer.Interval = 5; MovementTimer.Tick += MovementTimer_Tick; FireTimer = new Timer(); FireTimer.Interval = 500; FireTimer.Tick += (sender, e) => { addSpaceshipMissile(spaceShip.WeaponStrength); }; ShieldTimer = new Timer(); ShieldTimer.Interval = 20; ShieldTimer.Tick += (sender, e) => { if (spaceShip.Shield > 0) { spaceShip.Shield -= 3; } }; RegenerationTimer = new Timer(); RegenerationTimer.Interval = 20; RegenerationTimer.Tick += (sender, e) => { if (spaceShip.Health < spaceShip.HealthMax) { spaceShip.Health += 0.3f; } }; MoveRowDownTimer = new Timer(); MoveRowDownTimer.Interval = 5000; MoveRowDownTimer.Tick += (sender, e) => { if (rowsMovedDownCount < 5) { foreach (cInvaderRow row in invaderRows) { foreach (cInvader inv in row.Invaders) { inv.MoveDown(); } } } else { MoveRowDownTimer.Stop(); } }; InvaderFireTimer = new Timer(); InvaderFireTimer.Interval = 400; InvaderFireTimer.Tick += (sender, e) => { if (bossEnemy != null) { return; } List <cInvader> invaders = new List <cInvader>(); foreach (cInvaderRow row in invaderRows) { foreach (cInvader inv in row.Invaders) { invaders.Add(inv); } } int random = r.Next(0, invaders.Count); int s = r.Next(200, 300 + level); if (invaders.Count == 0) { return; } InvaderMissileHandler(invaders[random].Location, s, false); int d = r.Next(0, invaders.Count); int t = r.Next(-1, 5); DropItemHandler(invaders[d].CenterDropLocation, invaders[d].GetDropItemType(t)); }; }