public override void Update2(GameTime gameTime)
        {
            if (GetIntType() != -1)
            {
                InstanceManager.EmitParticle(GetIntType(), new Vector3(Position.X(), Y, Position.Y()), ref RotationMatrix, 0, Size.X(), 1);
            }
            Vector3 Position3 = new Vector3(Position.X(), Y, Position.Y());

            ParticleManager.CreateRing(Position3, Size.X() * BuildingRingSizeMult, GetTeam());
            WorldMatrix = Matrix.CreateScale(Size.X()) * Matrix.CreateFromYawPitchRoll(Rotation.getAsRadians() + RotationOffset.X, RotationOffset.Y, RotationOffset.Z) * Matrix.CreateTranslation(Position3);

            if (FreezeTime > 0 && StunState != AttackType.None)
            {
                switch (StunState)
                {
                case AttackType.Blue:
                    ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(0.25f, 0.25f, 1), Size.X() * 5 * Rand.F(), 1);
                    break;

                case AttackType.Red:
                    ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.25f, 0.25f), Size.X() * 5 * Rand.F(), 1);
                    break;

                case AttackType.Green:
                    ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(0.25f, 1, 0.25f), Size.X() * 5 * Rand.F(), 1);
                    break;
                }
            }
        }
        public override void Update(GameTime gameTime)
        {
            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());
            float   Mult      = 2;

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 100 * Mult, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, (200 + Rand.F() * 200) * Mult, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, (50 + Rand.F() * 50) * Mult, 2);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, (50 + Rand.F() * 50) * Mult, 0);

            base.Update(gameTime);
        }
        public override void Update(GameTime gameTime)
        {
            SearchTime += gameTime.ElapsedGameTime.Milliseconds;
            if (SearchTime > MaxSearchTime || (AttackTarget != null && AttackTarget.Dead))
            {
                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(UnitBasic)))
                    {
                        UnitBasic s = (UnitBasic)o;

                        if (!s.Dead && !s.IsAlly(ParentUnit))
                        {
                            float d = Vector2.Distance(Position.get(), o.Position.get());

                            if (d < BestDistance)
                            {
                                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;
            }

            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);
            base.Update(gameTime);
        }
        public override void Update(GameTime gameTime)
        {
            int Mult = TimeAlive * 4 / LifeTime + 1;

            Vector3 Position3 = new Vector3(Position.X(), Y, Position.Y());

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 60 * Mult, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 90 * 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);

            if (!Flashed)
            {
                Mult = 2;
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 80 * Mult, 0);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 80 * Mult, 4);
                Flashed = true;
            }

            base.Update(gameTime);
        }
        public override void Update(GameTime gameTime)
        {
            int Mult = Big ? 2 : 1;

            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 80 * Mult, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, (100 + Rand.F() * 100) * Mult, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, (20 + Rand.F() * 40) * Mult, 2);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, (20 + Rand.F() * 40) * Mult, 0);

            if (!Flashed)
            {
                Mult *= 2;
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 80 * Mult, 0);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 80 * Mult, 4);
                Flashed = true;
            }

            base.Update(gameTime);
        }
        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);
        }
Beispiel #7
0
        public virtual void Fire(GameTime gameTime)
        {
            if (ReloadTime <= 0)
            {
                bool   CreatedMatrix  = false;
                Matrix RotationMatrix = Matrix.Identity;
                ChargeTime += gameTime.ElapsedGameTime.Milliseconds;
                if (ChargeTime > MaxChargeTime)
                {
                    while (ROF >= MaxROF && ClipSize > 0 && BurstSize > 0 && (Ammo > 0 || Ammo == -100))
                    {
                        Vector3 P = Parent != null ?
                                    new Vector3(Parent.getParent().Position.X(), 0, Parent.getParent().Position.Y()) :
                                    new Vector3(ParentUnit.Position.X(), 0, ParentUnit.Position.Y());

                        SoundManager.Play3DSound(FireSound,
                                                 P,
                                                 FireVolume, FireDistance, FireExponent);


                        ChargeTime = 0;
                        if (!CreatedMatrix)
                        {
                            CreatedMatrix = true;
                            if (Parent != null)
                            {
                                RotationMatrix = Matrix.CreateRotationZ(-Parent.getRotation());
                            }
                            else if (ParentUnit.Guns != null)
                            {
                                RotationMatrix = Matrix.CreateRotationZ(-ParentUnit.Guns[0].getRotation());
                            }
                        }

                        ROF      -= MaxROF;
                        BurstTime = 0;
                        ClipSize--;
                        BurstSize--;
                        if (Ammo > 0)
                        {
                            Ammo--;
                        }

                        for (int i = 0; i < BulletCount; i++)
                        {
                            Bullet b = getBullet();
                            if (Parent != null)
                            {
                                if (Parent.getParent().GetType().IsSubclassOf(typeof(UnitShip)))
                                {
                                    UnitShip s = (UnitShip)Parent.getParent();
                                    if (s.IsHuge)
                                    {
                                        b.Big = true;
                                    }
                                }
                                Parent.getParent().ParentLevel.AddObject(b);
                                b.SetShipParent(Parent.getParent());

                                ParentUnit = Parent.getParent();
                                Vector3 P3 = InstanceManager.GetWeaponPosition(ParentUnit.GetIntType(), new Vector3(ParentUnit.Position.X(), ParentUnit.Y, ParentUnit.Position.Y()), ref ParentUnit.RotationMatrix, ParentUnit.WeaponIndexID++, ParentUnit.Size.X());

                                Vector2 P2 = getPositionPattern(i);
                                if (P2 != Vector2.Zero)
                                {
                                    P2 = Vector2.Transform(P2, RotationMatrix);
                                }

                                b.SetPosition(new Vector2(P3.X, P3.Z) + P2, false);
                                b.Y = P3.Y;
                                Vector2 v = BulletSpeed * Logic.ToVector2(Parent.getRotation() + Accuracy - Rand.F() * Accuracy * 2 + getDirectionPattern(i));
                                b.SetSpeed(v);
                            }
                            else
                            {
                                ParentUnit.ParentLevel.AddObject(b);
                                if (ParentUnit.GetType().IsSubclassOf(typeof(UnitShip)))
                                {
                                    UnitShip s = (UnitShip)ParentUnit;
                                    if (s.IsHuge)
                                    {
                                        b.Big = true;
                                    }
                                }
                                b.SetShipParent(ParentUnit);
                                b.SetPosition(ParentUnit.Position.get() + Vector2.Transform(getPositionPattern(i), RotationMatrix), false);
                                b.SetSpeed(BulletSpeed * Logic.ToVector2(ParentUnit.Guns[0].getRotation() + Accuracy - Rand.F() * Accuracy * 2 + getDirectionPattern(i)));
                            }

                            b.SetAttackType(attackType);
                            b.SetStartingPosition(b.getPosition());
                            b.SetDamage(Damage, PushTime, PushVelocityMult);
                            b.SetModifierFactor(ModifierFactor);
                            b.SetLifeTime(LifeTime);
                            b.SetExplosive(BulletExplosionDistance, BulletExplosionDamage);
                            b.AddTime(ROF);
                        }
                    }
                }
                else
                {
                    CreateChargeParticles(ChargeTime / (float)(MaxChargeTime));
                }
                if (ClipSize <= 0)
                {
                    ReloadTime += gameTime.ElapsedGameTime.Milliseconds;
                }
            }
        }
Beispiel #8
0
        public override void Update(GameTime gameTime)
        {
            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 120, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 150 + Rand.F() * 100, 1);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor2, 20 + Rand.F() * 40, 2);

            base.Update(gameTime);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }