public override void Update(GameTime gameTime)
        {
            FieldSound = true;
            BuzzTime  += gameTime.ElapsedGameTime.Milliseconds;
            if (RotationOffsetSpeed != Vector3.Zero)
            {
                RotationOffset += RotationOffsetSpeed;
            }
            else
            {
                RotationOffset -= RotationOffsetSpeed * gameTime.ElapsedGameTime.Milliseconds / 1000f;
            }

            if (ShieldAlpha > 0)
            {
                ShieldAlpha -= gameTime.ElapsedGameTime.Milliseconds * 0.05f * 60 / 1000f;
                if (ShieldAlpha < 0 && InstancerCommit())
                {
                    ShieldInstancer.Remove(this);
                }
            }

            UpdateShip(gameTime);
            base.Update(gameTime);


            SetQuadGridPosition();
        }
        public void ShieldFlash(float A)
        {
            if (ShieldAlpha <= 0 && InstancerCommit())
            {
                ShieldInstancer.Add(this);
            }

            ShieldAlpha = A;
        }
        public override void BlowUp()
        {
            if (ShieldAlpha > 0 && InstancerCommit())
            {
                ShieldInstancer.Remove(this);
                ShieldAlpha = -1;
            }

            Destroy();
            base.BlowUp();
        }
        public override void Destroy()
        {
            DeathParticles();

            if (InstancerCommit())
            {
                InstanceManager.RemoveChild(this);
                ShieldInstancer.Remove(this);
            }
            if (UnitAdded)
            {
                FactionManager.RemoveUnit(this);
                UnitAdded = false;
            }

            base.Destroy();
        }
示例#5
0
 static InstanceManager()
 {
     bulletInstancer = new BulletInstancer();
     shieldInstancer = new ShieldInstancer();
 }
        public override void BlowUp()
        {
            if (Dead || Lives < 1)
            {
                return;
            }

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

            for (int i = 0; i < 10; i++)
            {
                LineParticleSystem.AddParticle(P3, P3 + Rand.V3() * MaxEngagementDistance, TeamInfo.GetColor(GetTeam()));
            }

            foreach (Faction f in FactionManager.Factions)
            {
                if (MyCard == null)
                {
                    MyCard = (TurretCard)FactionCard.FactionTurretDeck[0];
                }

                if (f.Team != GetTeam())
                {
                    f.roundReport.TurretsKilled++;
                    f.AddEvent(MyCard.Name + " Destroyed", new Color(1, 0.5f, 0.5f), FactionEvent.KillTexture);
                }
                else
                {
                    f.roundReport.TurretsLost++;
                    f.AddEvent(MyCard.Name + " Lost", new Color(1, 0.5f, 0.5f), FactionEvent.LossTexture);
                }
            }

            if (ShouldDeathSound)
            {
                SoundManager.Play3DSound(DeathSound, new Vector3(Position.X(), Y, Position.Y()), DeathVolume, 1000, 1);
                ShouldDeathSound = false;
            }


            FreezeMult = 0;
            VirusTime  = 0;
            DeathParticles();
            Lives--;

            Dead = true;
            if (MyBustedTurret == null)
            {
                MyBustedTurret = new BustedTurret(this);
                ParentLevel.AddObject(MyBustedTurret);
                MyBustedTurret.SetPosition(getPosition());
            }

            MyBustedTurret.WorldMatrix = WorldMatrix;
            MyBustedTurret.Activate();
            InstanceManager.RemoveChild(this);
            RemoveTag(GameObjectTag._2DSolid);
            RemoveTag(GameObjectTag._2DForward);

            LinkedList <GameObject> GList = Parent2DScene.GetList(GameObjectTag._2DSolid);

            if (GList.Contains(this))
            {
                GList.Remove(this);
            }

            BuildTimer = 0;

            float    BulletExplosionDistance = 200;
            float    BulletExplosionDamage   = 1f;
            QuadGrid grid = Parent2DScene.quadGrids.First.Value;


            for (int i = 0; i < 2; i++)
            {
                bool ActivateDeathSound = true;

                foreach (Basic2DObject o in grid.Enumerate(Position.get(), new Vector2(BulletExplosionDistance * 2)))
                {
                    if (o.GetType().IsSubclassOf(typeof(UnitShip)))
                    {
                        BasicShipGameObject s = (BasicShipGameObject)o;
                        float dist            = Vector2.Distance(s.Position.get(), Position.get()) - o.Size.X() / 2;

                        if (dist < BulletExplosionDistance && GetTeam() != s.GetTeam() && s.CanBeTargeted())
                        {
                            float DistMult = 1;
                            if (dist > 0)
                            {
                                DistMult = (BulletExplosionDistance - dist) / BulletExplosionDistance;
                            }

                            if (s.GetType().IsSubclassOf(typeof(UnitShip)))
                            {
                                UnitShip ship = (UnitShip)s;
                                ship.CanDeathSound = ActivateDeathSound;
                            }
                            s.Damage(DistMult * BulletExplosionDamage, DistMult, Vector2.Normalize(s.Position.get() - Position.get()), this, AttackType.Explosion);

                            if (s.Dead)
                            {
                                ActivateDeathSound = false;
                            }
                            else if (s.GetType().IsSubclassOf(typeof(UnitShip)))
                            {
                                UnitShip ship = (UnitShip)s;
                                ship.CanDeathSound = true;
                            }
                        }
                    }
                }
            }

            if (ShieldAlpha > 0)
            {
                ShieldInstancer.Remove(this);
                ShieldAlpha = -1;
            }
        }
示例#7
0
 public ShieldInstancer()
 {
     self = this;
     Load();
 }