protected float Angle(Vec v, Vec target) { float a = v.Angle(target); if (target.X > v.X) { a = -a; } if (target.Y < v.Y) { a = (float)Math.PI - a; } return(a); }
protected override void Controls() { if (cdat.keys[0]) { vel.Y -= Movespeed * 0.1f; InvisTime = Invis; } if (cdat.keys[3]) { vel.Y += Movespeed * 0.1f; InvisTime = Invis; } if (cdat.keys[1]) { vel.X -= Movespeed * 0.1f; InvisTime = Invis; } if (cdat.keys[2]) { vel.X += Movespeed * 0.1f; InvisTime = Invis; } if (cdat.keys[4] && !EPress) { AutoFire = !AutoFire; EPress = true; } if (EPress && !cdat.keys[4]) { EPress = false; } if (cdat.keys[5] && !CPress) { AutoSpin = !AutoSpin; CPress = true; } if (CPress && !cdat.keys[5]) { CPress = false; } Vec scrolledpos = new Vec(300, 300); Vec msp = cdat.mousep ?? new Vec() * (size / 20f); if (AutoSpin) { msp = new Vec(0, 100); msp.RotateByZero(-rotation + Game.Dt); msp += scrolledpos; } rotation = scrolledpos.Angle(msp); if (msp.X < scrolledpos.X) { rotation = -rotation; } if (msp.Y < scrolledpos.Y) { rotation = (float)Math.PI - rotation; } if (cdat.mouseb[0] || AutoFire) { if (!LastShoot) { foreach (Cannon c in cannons) { c.AddReload(); } } LastShoot = true; foreach (Cannon c in cannons) { c.TryShoot(); } } else { LastShoot = false; } }
protected override void Controls() { if (Form1.press.Contains(Keys.W)) { vel.Y -= Movespeed * 0.1f; InvisTime = Invis; } if (Form1.press.Contains(Keys.S)) { vel.Y += Movespeed * 0.1f; InvisTime = Invis; } if (Form1.press.Contains(Keys.A)) { vel.X -= Movespeed * 0.1f; InvisTime = Invis; } if (Form1.press.Contains(Keys.D)) { vel.X += Movespeed * 0.1f; InvisTime = Invis; } if (Form1.press.Contains(Keys.E) && !EPress) { AutoFire = !AutoFire; EPress = true; } if (EPress && !Form1.press.Contains(Keys.E)) { EPress = false; } if (Form1.press.Contains(Keys.C) && !CPress) { AutoSpin = !AutoSpin; CPress = true; } if (CPress && !Form1.press.Contains(Keys.C)) { CPress = false; } Vec scrolledpos = new Vec(300, 300) * zoom; Vec msp = Game.mousepos * (size / 20f); if (AutoSpin) { msp = new Vec(0, 100); msp.RotateByZero(-rotation + Game.Dt); msp += scrolledpos; } rotation = scrolledpos.Angle(msp); if (msp.X < scrolledpos.X) { rotation = -rotation; } if (msp.Y < scrolledpos.Y) { rotation = (float)Math.PI - rotation; } if (Game.mousedown || AutoFire) { if (!LastShoot) { foreach (Cannon c in cannons) { c.AddReload(); } } LastShoot = true; foreach (Cannon c in cannons) { c.TryShoot(); } } else { LastShoot = false; } }