public override void Update(GameTime gameTime) { SoundInstance = SoundManager.PlayLoopingSound(SoundInstance, "SlowFieldHum", new Vector3(Position.X(), Y, Position.Y()), 0.03f, MaxEngagementDistance + 200, 2); Size.set(new Vector2(SlowFieldCard.STurretSize - 5 + 10 * Rand.F())); Vector2 ProjectedPosition = Position.get() + Rand.NV2() * MaxEngagementDistance; Vector3 Position3 = new Vector3(ProjectedPosition.X, Y, ProjectedPosition.Y); ParticleManager.CreateParticle(Position3, Rand.V3() * Size.X() * 2, ParticleColor, 40, 5); if (!Dead) { SearchTime += gameTime.ElapsedGameTime.Milliseconds; if (SearchTime > MaxSearchTime) { bool CanEmp = true; SearchTime -= MaxSearchTime; QuadGrid quad = Parent2DScene.quadGrids.First.Value; foreach (Basic2DObject o in quad.Enumerate(Position.get(), new Vector2(MaxEngagementDistance * 2))) { if (o.GetType().IsSubclassOf(typeof(UnitBasic))) { UnitBasic s = (UnitBasic)o; if (!s.Dead && !s.IsAlly(this) && Vector2.Distance(Position.get(), o.Position.get()) < MaxEngagementDistance - o.Size.X()) { if (s.GetType().IsSubclassOf(typeof(UnitShip))) { UnitShip s2 = (UnitShip)s; if (!s2.Slowed) { s2.Slowed = true; s2.Acceleration /= 2; if (s.Weakness == AttackType.Blue) { s2.Acceleration /= 2; if (CanEmp) { CanEmp = false; s2.EMP(this, IsUpdgraded ? 1 : 0); if (s2.TestTag(UnitTag.Monster)) { SearchTime -= MaxSearchTime / 5; } } } s2.MaxEngagementDistance /= 1.5f; s2.MinEngagementDistance /= 1.5f; } } } } } } } base.Update(gameTime); }
public override void Update(GameTime gameTime) { if (!Dead) { if (ShutDownTime > 0 || VirusTime > 0) { if (ShutDownTime > 0) { ShutDownTime -= gameTime.ElapsedGameTime.Milliseconds * 3; } else { Rotation.set(Rotation.get() + MathHelper.ToRadians(gameTime.ElapsedGameTime.Milliseconds * 20)); } } else { SearchTime += gameTime.ElapsedGameTime.Milliseconds; if (SearchTime > SnapSearchTime) { SearchTime -= SnapSearchTime; bool Found = false; QuadGrid quad = Parent2DScene.quadGrids.First.Value; foreach (Basic2DObject o in quad.Enumerate(Position.get(), new Vector2(MaxEngagementDistance * 2))) { if (o.GetType().IsSubclassOf(typeof(UnitShip))) { UnitShip s = (UnitShip)o; if (!s.Dead && !s.IsAlly(this) && Vector2.Distance(Position.get(), o.Position.get()) < MaxEngagementDistance) { if (s.CanBeTargeted() && s.SnapBounce()) { s.EMP(this, IsUpdgraded ? 1 : 0); } SnapSearchTime += (int)(StartingMaxSearchTime / 20 * (1.5f + s.UnitLevel) / 2f); Found = true; } } } if (Found) { SoundManager.Play3DSound("SnapTurretFire", new Vector3(Position.X(), Y, Position.Y()), 0.75f, 800, 2); Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y()); for (int i = 0; i < 30; i++) { ParticleManager.CreateParticle(Position3, Rand.V3() * MaxEngagementDistance / 1000f * 3, ParticleColor, 40, 5); } for (int i = 0; i < 2; i++) { FlareSystem.AddLightingPoint(Position3, new Vector3(0.3f), new Vector3(0, 0, 1), MaxEngagementDistance / 10, 40, 5, 10); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, MaxEngagementDistance * 6, 5); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, MaxEngagementDistance * 3, 4); } } } } } base.Update(gameTime); }
public override void Update(GameTime gameTime) { Vector2 StartPosition = Position.get(); Vector2 EndPosition = Position.get() + Vector2.Normalize(Speed) * SpearTurretCard.EngagementDistance; ParticleManager.CreateParticle(new Vector3(StartPosition.X, 0, StartPosition.Y), Vector3.Zero, ParticleColor, 300, 5); ParticleManager.CreateParticle(new Vector3(StartPosition.X, 0, StartPosition.Y), Vector3.Zero, ParticleColor, 300, 7); ParticleManager.CreateParticle(new Vector3(StartPosition.X, 0, StartPosition.Y), Vector3.Zero, ParticleColor, 300, 4); for (int i = 0; i < 100; i++) { ParticleManager.CreateParticle( new Vector3(StartPosition.X, 0, StartPosition.Y) + (new Vector3(EndPosition.X - StartPosition.X, 0, EndPosition.Y - StartPosition.Y) * i / 100), Vector3.Zero, ParticleColor, 150, 5); } ParticleManager.CreateParticle(new Vector3(EndPosition.X, 0, EndPosition.Y), Vector3.Zero, ParticleColor, 300, 5); ParticleManager.CreateParticle(new Vector3(EndPosition.X, 0, EndPosition.Y), Vector3.Zero, ParticleColor, 300, 7); ParticleManager.CreateParticle(new Vector3(EndPosition.X, 0, EndPosition.Y), Vector3.Zero, ParticleColor, 300, 4); QuadGrid quadGrid = Parent2DScene.quadGrids.First.Value; Vector2 UpperLeftCorner = Logic.Min(StartPosition, EndPosition) - new Vector2(200); Vector2 LowerRightCorner = Logic.Max(StartPosition, EndPosition) + new Vector2(200); QuadGridXMin = (int)((UpperLeftCorner.X - quadGrid.Min.X) / quadGrid.CellSize.X); QuadGridXMax = (int)((LowerRightCorner.X - quadGrid.Min.X) / quadGrid.CellSize.X); QuadGridYMin = (int)((UpperLeftCorner.Y - quadGrid.Min.Y) / quadGrid.CellSize.Y); QuadGridYMax = (int)((LowerRightCorner.Y - quadGrid.Min.Y) / quadGrid.CellSize.Y); if (QuadGridXMax > quadGrid.CellsX - 1) { QuadGridXMax = quadGrid.CellsX - 1; } if (QuadGridXMin > quadGrid.CellsX - 1) { QuadGridXMin = quadGrid.CellsX - 1; } if (QuadGridYMax > quadGrid.CellsY - 1) { QuadGridYMax = quadGrid.CellsY - 1; } if (QuadGridYMin > quadGrid.CellsY - 1) { QuadGridYMin = quadGrid.CellsY - 1; } if (QuadGridXMax < 0) { QuadGridXMax = 0; } if (QuadGridXMin < 0) { QuadGridXMin = 0; } if (QuadGridYMax < 0) { QuadGridYMax = 0; } if (QuadGridYMin < 0) { QuadGridYMin = 0; } foreach (Basic2DObject g in quadGrid.Enumerate(QuadGridXMin, QuadGridYMin, QuadGridXMax, QuadGridYMax)) { if (g.GetType().IsSubclassOf(typeof(BasicShipGameObject))) { BasicShipGameObject s = (BasicShipGameObject)g; if (!s.IsAlly(ParentUnit) && CheckCircle(s, StartPosition, EndPosition, AttackLineWidth)) { s = s.ReturnCollision(); if (s != null) { if (s.TestTag(UnitTag.Human)) { s.Damage(Damage, 5, EndPosition - StartPosition, ParentUnit, AttackType.Blue); } if (s.GetType().IsSubclassOf(typeof(UnitShip))) { UnitShip ship = (UnitShip)s; UnitTurret t = (UnitTurret)ParentUnit; ship.EMP(ParentUnit, t.IsUpdgraded ? 1 : 0); } } } } } Destroy(); }