public void tick(GameWorld w) { if (dead) return; this.rotation += this.rotSpeed; this.position += this.speed; if (enemy) this.speed += (w.currentPlayer.position - this.position).Normalized() * 0.003f; for (int i = 0; i < 3 * w.particleMultiplier(position); i++) { if (enemy) { Particle pz = new Particle(this.position, new OpenTK.Vector2(((float)r.NextDouble() * 0.4f) - 0.2f, ((float)r.NextDouble() * 0.4f) - 0.2f), System.Drawing.Color.Cornsilk, 1.0f); w.addParticle(pz); } else { Particle pz = new Particle(this.position, new OpenTK.Vector2(((float)r.NextDouble() * 0.4f) - 0.2f, ((float)r.NextDouble() * 0.4f) - 0.2f), System.Drawing.Color.Azure, 1.0f); w.addParticle(pz); } } if (w.currentPlayer.health > 0.0f) { if (enemy && (((this.position - w.currentPlayer.position).LengthFast < 3.0f) || ((w.currentPlayer.parent.position - position).Length < w.currentPlayer.parent.radius))) { dead = true; w.currentPlayer.hurting = 1.0f; w.currentPlayer.health -= 8.0f + ((float)r.NextDouble() * 7.0f); if(w.currentPlayer.health > 0.0f) Program.theMixer.addSource(Properties.Resources.Hurtd, 1.0f / (((w.currentPlayer.position - position).Length / 10.0f) + 1.0f)); else Program.theMixer.addSource(Properties.Resources.Death, 1.0f); for (int i = 0; i < 30 * w.particleMultiplier(position); i++) { Particle pz = new Particle(this.position, new OpenTK.Vector2(((float)r.NextDouble() * 0.4f) - 0.2f, ((float)r.NextDouble() * 0.4f) - 0.2f), System.Drawing.Color.Blue, 1.0f); w.addParticle(pz); } } } if (dead) return; foreach (Planet p in w.planets) { //this.speed += 0.05f * ((p.position - this.position).Normalized() / (((this.position - p.position).Length) + 1.0f)) * (float)(Math.Sqrt(p.radius / 2.0f)); this.speed += 1.0f * ((p.position - this.position).Normalized() / (((this.position - p.position).LengthSquared) + 1.0f)) * (float)(Math.Sqrt(p.radius / 2.0f)+0.5f); if ((p.position - position).Length < p.radius) { Program.theMixer.addSource(Properties.Resources.PingHit, 1.0f / (((w.currentPlayer.position - position).Length / 10.0f) + 1.0f)); dead = true; } } if (position.Length > 300.0f) dead = true; }
public void addParticle(Particle p) { lock (theParticles) theParticles.Add(p); }
public void tick(GameWorld w) { if (dead) return; position = position + speed; //deflect with planets foreach (Planet p in w.planets) { this.speed += ((p.position - this.position).Normalized() / (((this.position - p.position).LengthSquared) + 1.0f)) * (float)(Math.Sqrt(p.radius / 2.0f)) * 0.1f; //if ((p.position - position).Length < p.radius) // dead = true; } //attracted towards player //if(this.position.Length > 50.0f) this.speed +=(w.currentPlayer.position - this.position).Normalized() * 0.001f; foreach (Projectile p in w.projectiles) if ((p.position - position).LengthFast < 7.0f && !p.enemy) { for (int i = 0; i < 800 * w.particleMultiplier(position); i++) { Particle pz = new Particle(this.position, new OpenTK.Vector2(((float)r.NextDouble() * 0.8f) - 0.4f, ((float)r.NextDouble() * 0.8f) - 0.4f), System.Drawing.Color.White,5.0f); w.addParticle(pz); } for (int i = 0; i < 2; i++) { Particle pz2 = new Particle(this.position, new OpenTK.Vector2(((float)r.NextDouble() * 0.04f) - 0.02f, ((float)r.NextDouble() * 0.4f) - 0.2f), System.Drawing.Color.White, 20.0f); pz2.flash = true; w.addParticle(pz2); } Program.theMixer.addSource(Properties.Resources.FakeExplosion, 1.0f / (((w.currentPlayer.position - position).Length / 50.0f) + 1.0f)); dead = true; p.dead = true; } if (DateTime.Now.Subtract(lastShot).TotalMilliseconds > nextFireRate) { Program.theMixer.addSource(Properties.Resources.EnemyShoot, 1.0f / (((w.currentPlayer.position - position).Length / 10.0f) + 1.0f)); OpenTK.Vector2 v = (this.position - w.currentPlayer.position).Normalized(); v.X += (float)r.NextDouble() - (float)r.NextDouble(); v.Y += (float)r.NextDouble() - (float)r.NextDouble(); OpenTK.Vector2 vz = v * 0.1f; Projectile p = new Projectile(position, vz); p.enemy = true; w.addProjectile(p); lastShot = DateTime.Now; nextFireRate = fireRate + r.Next(200) - r.Next(200); } if (position.Length > 400.0f) position = position.Normalized() * 400.0f; }