public override void Update(GameTime gameTime) { Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y()); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 80, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 100 + Rand.F() * 100, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 20 + Rand.F() * 40, 2); FlareSystem.AddLightning(Position3, ParticleColor2, 10, 20, 3, 5); base.Update(gameTime); }
public override void Update(GameTime gameTime) { int Mult = 4; Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y()); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 60 * Mult, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (70 + Rand.F() * 70) * Mult, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (10 + Rand.F() * 20) * Mult, 2); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (10 + Rand.F() * 20) * Mult, 0); FlareSystem.AddLightning(Position3, ParticleColor2, 4, 20, 4, 10); SearchTime += gameTime.ElapsedGameTime.Milliseconds; if (SearchTime > MaxSearchTime || (AttackTarget != null && !AttackTarget.CanBeTargeted())) { SearchTime -= MaxSearchTime; AttackTarget = null; float BestDistance = SearchDistance; QuadGrid quad = Parent2DScene.quadGrids.First.Value; foreach (Basic2DObject o in quad.Enumerate(Position.get(), new Vector2(SearchDistance * 2))) { if (o.GetType().IsSubclassOf(typeof(UnitTurret))) { UnitBasic s = (UnitBasic)o; if (s.CanBeTargeted() && !s.IsAlly(ParentUnit)) { float d = Vector2.Distance(Position.get(), o.Position.get()); if (d < BestDistance && !o.GetType().Equals(typeof(CrystalWall))) { BestDistance = d; AttackTarget = s; } } } } } if (AttackTarget != null) { Speed = Logic.ToVector2(Logic.Clerp(Logic.ToAngle(Speed), Logic.ToAngle(AttackTarget.Position.get() - Position.get()), TurnSpeed * gameTime.ElapsedGameTime.Milliseconds * 60 / 1000f)) * SpeedL; } base.Update(gameTime); }
public override void Update(GameTime gameTime) { int Mult = 4; SearchTime += gameTime.ElapsedGameTime.Milliseconds; if (SearchTime > MaxSearchTime) { MaxSearchTime -= SearchTime; int EnemyCount = 0; QuadGrid quadGrid = Parent2DScene.quadGrids.First.Value; foreach (GameObject g in quadGrid.Enumerate(Position.get(), new Vector2(BulletExplosionDistance))) { if (g.GetType().IsSubclassOf(typeof(UnitBasic))) { UnitBasic s = (UnitBasic)g; if (Vector2.Distance(Position.get(), s.Position.get()) < BulletExplosionDistance / 8 && !s.IsAlly(ParentUnit) && !s.GetType().IsSubclassOf(typeof(UnitBuilding)) && !s.Dead) { EnemyCount += s.GetUnitWeight(); } } } if (BestEnemyCount > 4 && EnemyCount < BestEnemyCount) { Destroy(); } else { BestEnemyCount = EnemyCount; } } Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y()); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 60 * Mult, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (70 + Rand.F() * 70) * Mult, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (10 + Rand.F() * 20) * Mult, 2); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (10 + Rand.F() * 20) * Mult, 0); FlareSystem.AddLightning(Position3, ParticleColor2, 30, 20, 4, 10); base.Update(gameTime); }
protected override void AI(GameTime gameTime) { float TargetRevolutionSpeed = 0.01f; if (CurrentAttackTarget != null && CurrentAttackTarget.CanBeTargeted() && (Vector2.Distance(Position.get(), CurrentAttackTarget.Position.get()) < GetEngagementDistance() || Commited)) { if (ChargeTime > MaxChargeTime / 2) { TargetRevolutionSpeed = 0.1f; } ChargeTime += gameTime.ElapsedGameTime.Milliseconds; float Alpha = ChargeTime / (float)MaxChargeTime; Vector3 Position3 = new Vector3(Position.X(), Y, Position.Y()); ParticleManager.CreateParticle(Position3, Vector3.Zero, LaserColor * Alpha, LaserStartSize + LaserEndSize * Alpha * 8, 1); FlareSystem.AddLightning(Position3, LaserColor * Alpha, 40, LaserStartSize + LaserEndSize * Alpha / 4, 3, 15); if (!Commited && ChargeTime > CommitTime) { Commited = true; AttackPosition = CurrentAttackTarget.Position.get(); AttackPosition = Position.get() + Vector2.Normalize(AttackPosition - Position.get()) * GetEngagementDistance(); } if (CurrentAttackTarget != null) { Rotation.set(MathHelper.ToDegrees(Logic.Clerp(Rotation.getAsRadians(), Logic.ToAngle(CurrentAttackTarget.Position.get() - Position.get()), RotationSpeed * gameTime.ElapsedGameTime.Milliseconds * 60.0f / 1000.0f))); RotationMatrix = Matrix.CreateFromYawPitchRoll(Rotation.getAsRadians() + RotationOffset.X, RotationOffset.Y, RotationOffset.Z); } if (ChargeTime > MaxChargeTime) { if (Vector2.Distance(AttackPosition, Position.get()) > 0) { for (int i = 0; i < 5; i++) { ParticleManager.CreateParticle(new Vector3(Position.X(), Y, Position.Y()), Vector3.Zero, LaserColor, LaserStartSize + LaserEndSize, 0); } if (Shots > 1) { FireShot(Position.get(), AttackPosition, AttackLineWidth); ChargeTime = MaxChargeTime - ShotTime; Shots--; } else { FireShot(Position.get(), AttackPosition, AttackLineWidth); ChargeTime = 0; Shots = MaxShots; FreezeTime = AttackFreezeTime; Commited = false; } } else { ChargeTime = 0; Shots = MaxShots; } } SearchTime += gameTime.ElapsedGameTime.Milliseconds; if (SearchTime > MaxSearchTime) { SearchTime -= MaxSearchTime; AISearch(gameTime); } } else { if (ChargeTime > 0) { ChargeTime -= gameTime.ElapsedGameTime.Milliseconds; float Alpha = ChargeTime / MaxChargeTime; ParticleManager.CreateParticle(new Vector3(Position.X(), Y, Position.Y()), Vector3.Zero, LaserColor * Alpha, LaserStartSize + LaserEndSize * Alpha, 1); if (ChargeTime < 0) { ChargeTime = 0; } } base.AI(gameTime); } RevolutionSpeed += (TargetRevolutionSpeed - RevolutionSpeed) * gameTime.ElapsedGameTime.Milliseconds * 60 / 1000f * 0.1f; RotationOffsetSpeed = new Vector3(0, 0, RevolutionSpeed); }
public void Update(int Timer) { FlareSystem.AddLightning(Position, new Color(Logic.RLerp(MinColor, MaxColor) * (1 - (Timer - StartTime) / (float)LifeTime)), Size, Spread, Lines, LinePop); }
public override void Update(GameTime gameTime) { if (!BulletHasBounced) { if (CurrentAttackTarget != null && CurrentAttackTarget.CanBeTargeted()) { Speed = Vector2.Normalize(CurrentAttackTarget.Position.get() - Position.get()) * Speed.Length(); } else { if (CurrentAttackTarget == null) { SearchTime += gameTime.ElapsedGameTime.Milliseconds; } else { SearchTime = MaxSearchTime + 1; } if (SearchTime > MaxSearchTime) { CurrentAttackTarget = null; SearchTime -= MaxSearchTime; QuadGrid quad = Parent2DScene.quadGrids.First.Value; float BestDistance = SearchDistance; foreach (Basic2DObject o in quad.Enumerate(Position.get(), new Vector2(SearchDistance))) { if (o.GetType().IsSubclassOf(typeof(UnitBasic)) && !o.GetType().IsSubclassOf(typeof(UnitBuilding))) { float d = Vector2.Distance(Position.get(), o.Position.get()); if (d < BestDistance) { UnitBasic u = (UnitBasic)o; if (u.CanBeTargeted() && !ParentUnit.IsAlly(u)) { CurrentAttackTarget = u; BestDistance = d; } } } } } } } float Mult = (TimeAlive - MinCollideTimeAlive) / (LifeTime - MinCollideTimeAlive) * 8; if (Mult < 1) { Mult = 1; } Mult *= 3; Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y()); FlareSystem.AddLightning(Position3, ParticleColor2, 10, 70, 3, 6); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 60 * Mult, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (70 + Rand.F() * 70) * Mult, 1); ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, (10 + Rand.F() * 20) * Mult, 2); base.Update(gameTime); }