protected override void AfterCollision(Map map, Vector2Object hit) { foreach (Inpc npc in map.MapNpcs) { LightningAttack.StrikeLightning(_position, npc, _damage); } for (int i = 0; i < 8; i++) { Game1.mapLive.mapParticles.Add(new ParticleBlackDrop(hit.Vector2, _velocity, Game1.Textures["BlackParticle"])); } }
public void Update(Map map) { _size = (float)Math.Sin(Game1.Time * 32) / 8 + 0.5f; _particleTime.Update(); if (_ballTime.Ready) { _effects.Add(new EnerergyCircle(new CircleF(_position, 16), 16, _velocity)); _ballTime.Reset(); } List <Vector2> trackVectors = LineSegmentF.PointsOnLine(_position, _oldPosition, 64); if (_particleTime.Ready == true) { foreach (Vector2 vector in trackVectors) { Game1.mapLive.mapParticles.Add(new ParticleBlackDrop(vector, _velocity, Game1.Textures["BlackParticle"])); } _particleTime.Reset(); } UpdateLine(); _lightTime.Update(); _ballTime.Update(); GetWet(map); int j = 0; foreach (Inpc npc in map.MapNpcs.Reverse <Inpc>()) { if (j < 8) { if (npc.Friendly == false) { List <Vector2Object> intersections = CompareF.LineIntersectionRectangle(npc, new LineObject(npc, _track.Line)); if (intersections != null && intersections.Count > 0) { Damage(npc, this); break; } else if (CompareF.RectangleVsVector2(npc.Boundary, _track.Line.End) == true) { Damage(npc, this); break; } if (_lightTime.Ready) { if (LightningAttack.StrikeLightning(_position, npc, _damage) == true) { j++; } _lightTime.Reset(); } } } } Vector2Object hitPos = null; if (OutOfmap(this, out hitPos) == true) { AfterCollision(map, hitPos); } if (RemoveOnMapCollision(map.MapTree, this, out hitPos) == true) { AfterCollision(map, hitPos); } if (CollisionWithMovables(map, this, out hitPos) == true) { AfterCollision(map, hitPos); } if (_wet == true) { Game1.mapLive.MapProjectiles.Remove(this); } foreach (IEffect effect in _effects.Reverse <IEffect>()) { effect.Update(_effects); } }