public void Palleroi(Morte peli) { for (int i = 0; i < Palloja; i++) { double scale = RandomGen.NextDouble(0.5, 1.5); double dir = RandomGen.NextDouble(-10, 10); double velocity = VOIMA; double hue = (dir + 10) / 20 * 240; var p = new FysiikkaObjekti(Koko * scale, Koko * scale); p.Color = ColorUtils.HsvToRgb(hue, 1, 0.9); p.Shape = Shape.Circle; p.LifetimeLeft = TimeSpan.FromSeconds(2); p.Position = peli.Pelaaja.AbsolutePosition + peli.Pelaaja.Sijainti_Suu; var mouse = peli.Mouse.PositionOnWorld; var rad = Math.Atan2(mouse.Y - p.Position.Y, mouse.X - p.Position.X); p.Hit(Vector.FromLengthAndAngle(velocity, Angle.FromRadians(rad) + Angle.FromDegrees(dir))); p.AddCollisionIgnoreGroup(Sankari.IGNORE_ID); peli.AddCollisionHandlerByTag <FysiikkaObjekti, Vihulainen>(p, "vihu", OsuVihuun); peli.Add(p, Morte.TASO_OLETUS); } Toistin.Interval += 0.002; peli.Pelaaja.Vahingoita(2); }
public void OsuVihuun(FysiikkaObjekti saha, Vihulainen vihu) { if (Käynnissä) { // Yritä paikantaa sopiva veriroiskeen paikka. var a = Angle.FromRadians(Math.Atan2(AbsolutePosition.Y - vihu.AbsolutePosition.Y, AbsolutePosition.X - vihu.AbsolutePosition.X)); // HACK Purkkaviritys. var m = (double)(vihu.Width * vihu.Height) / (Width * Height); var d = Vector.Distance(AbsolutePosition, vihu.AbsolutePosition) / m; var roiske = AbsolutePosition - new Vector(d * a.Cos, d * a.Sin); Morte.Instance.Veriroiske.AddEffect(roiske, VAHINKO); vihu.Vahingoita(VAHINKO); } }
public void OsuVihuun(FysiikkaObjekti pallura, Vihulainen vihu) { vihu.Vahingoita(1); pallura.Destroy(); }