public static bool StrikeLightning(Vector2 position, Inpc npc, short damage) { if (npc.Friendly == false) { if (LineSegmentF.Lenght(npc.Boundary.Origin, position) < 256) { LineSegmentF _ray = new LineSegmentF(npc.Boundary.Origin, position); if (CompareF.LineVsMap(Game1.mapLive.MapTree, new LineObject(Game1.mapLive, _ray)).Count == 0) { Game1.mapLive.mapLightings.Add(new Lightning(npc.Boundary.Origin, position, Game1.debug_thin, 6)); Game1.mapLive.mapLightings.Add(new Lightning(npc.Boundary.Origin, position, Game1.debug_thin, 2)); npc.Stun(); npc.Push(new Vector2(0, -0.2f)); npc.KineticDamage(damage); Camera2DGame.Shake(5, position); Sound _strikeSound = new Sound(Game1.soundElectro, position); Game1.Sounds3D.Add(_strikeSound); Game1.Sounds3D[Game1.Sounds3D.IndexOf(_strikeSound)].Play(); } return(true); } } return(false); }
public static void Explode(Vector2 pos, short damage) { CircleF circle = new CircleF(pos, 128); foreach (IParticle prtcl in Game1.mapLive.mapParticles) { if (prtcl.Boundary != null) { LineSegmentF Temp = new LineSegmentF(pos, prtcl.Boundary.Origin); Vector2?_thru = CompareF.IntersectionLineWithOthers(Temp, Game1.mapLive.TileMapLines, null); if (_thru == null) { prtcl.Push(Vector2.Normalize(Temp.NormalizedWithZeroSolution() * (float)(Globals.GlobalRandom.NextDouble()) * 2)); } } } int j = 0; foreach (Inpc npc in Game1.mapLive.MapNpcs) { if (j < 8) { LineSegmentF Temp = new LineSegmentF(pos, npc.Boundary.Origin); Vector2?_thru = CompareF.IntersectionLineWithOthers(Temp, Game1.mapLive.TileMapLines, null); if (_thru == null && LineSegmentF.Lenght(pos, npc.Boundary.Origin) < 256) { if (npc.Friendly == false) { npc.KineticDamage(damage); } npc.Push(Vector2.Normalize(Temp.NormalizedWithZeroSolution() * (float)(Globals.GlobalRandom.NextDouble()) * 2)); j++; } } } int x = 4; for (int i = 0; i < x; i++) { Game1.mapLive.mapParticles.Add(new ParticleSmokeBig(circle.GenerateRandomPoint())); } for (int i = 0; i < x; i++) { Game1.mapLive.mapParticles.Add(new ParticleFireBig(circle.GenerateRandomPoint())); } for (int i = 0; i < x; i++) { Game1.mapLive.mapParticles.Add(new ParticleFireSmall(circle.GenerateRandomPoint())); } Camera2DGame.Shake(10, pos); Sound.PlaySoundPosition(pos, Game1.soundExplosion, CustomMath.RandomAroundZero(Globals.GlobalRandom) / 2f); }
private void ApplyGDamage(Player player, Vector2 tempVelocity) { if (player.Resolver.TouchVertical == true) { if (Math.Abs(tempVelocity.Y) > 0.5f) { HealthMachine -= Math.Abs(tempVelocity.Y) * 8f; Camera2DGame.Shake((int)(Math.Abs(tempVelocity.Y * 4f)), Camera2DGame.Boundary.Origin); } } if (player.Resolver.TouchHorizontal == true) { if (Math.Abs(tempVelocity.X) > 0.5f) { HealthMachine -= Math.Abs(tempVelocity.X) * 8f; Camera2DGame.Shake((int)(Math.Abs(tempVelocity.X * 4f)), Camera2DGame.Boundary.Origin); } } if (HealthMachine <= 0 || player.Resolver.VerticalPressure == true || player.Resolver.HorizontalPressure == true) { player.DestroyVehicle(); } }