示例#1
0
        public bool setTarget(Smaragd smaragd)
        {
            noTarget = false;
            if (smaragd != null && smaragd.Drone == null)
            {
                target       = smaragd;
                target.Drone = this;

                return(true);
            }
            return(false);
        }
示例#2
0
        public Drone(Vec2f position, float rotation, float hp, Vec2f velocity, Player player)
            : base(position, rotation, 1, hp, 2, velocity, Team.Good, "Drone", new Sprite(texture))
        {
            sprite.Origin = new Vec2f(sprite.Texture.Size.X, sprite.Texture.Size.Y) / 2;
            this.player   = player;
            noTarget      = true;
            maxspeed      = 3;
            target        = null;
            cooldown      = TimeSpan.FromSeconds(0);
            threshold     = TimeSpan.FromSeconds(0.5);

            initialize();
        }
示例#3
0
        public override void update(GameTime gameTime)
        {
            cooldown += gameTime.ElapsedTime;

            if (target == null)
            {
                moveTowardsEntity(player);

                //noTarget = (cooldown >= threshold);
                if (cooldown > threshold)
                {
                    noTarget = true;

                    cooldown = TimeSpan.FromSeconds(0);
                }
            }
            else
            {
                if (loaded)
                {
                    moveTowardsEntity(player);
                }
                else
                {
                    moveTowardsEntity(target);
                    if (collide(target))
                    {
                        loaded = true;
                        letter = target.Name;
                    }
                }
            }
            position += velocity;
            if (loaded && collide(player))
            {
                loaded = false;
                target = null;
                player.addLetter(letter);
            }
        }
示例#4
0
        public void update(GameTime gameTime)
        {
            List <Entity> tmp = new List <Entity>();

            for (int i = entities.Count - 1; i >= 0; --i)
            {
                entities.ElementAt(i).update(gameTime);
                Projectiles p = entities[i].shoot();
                if (p != null)
                {
                    tmp.Add(p);
                }
                for (int j = i + 1; j < entities.Count; ++j)
                {
                    Team teamI = entities[i].Team;
                    Team teamJ = entities[j].Team;

                    if (teamI == Team.Neutral || teamI != teamJ)
                    {
                        bool collides = entities[i].collide(entities[j]);
                        if (collides)
                        {
                            if (i == 0 && entities[j].getEntityType() == EntityType.EnemyBreeder)
                            {
                            }
                            entities[i].Hp -= entities[j].Damage;
                            entities[j].Hp -= entities[i].Damage;

                            if (entities[i].getEntityType() == EntityType.Player && entities[j].getEntityType() == EntityType.Letter)
                            {
                                ((Player)entities[i]).addLetter(entities[j].Name);
                                entities[j].canExplode = false;
                            }
                        }
                    }
                }
                // Spezialbehandlung für einige klassen
                EntityType type = entities.ElementAt(i).getEntityType();
                switch (type)
                {
                case EntityType.EnemyBreeder:
                    Breeder bre = (Breeder)entities.ElementAt(i);
                    if (bre.ReadyToSpawn)
                    {
                        float   alpha = (float)rand.NextDouble() * 360;
                        Breeder bre2  = new Breeder(bre.Position + (new Vec2f((float)(20 * Math.Cos(alpha)), (float)(20 * Math.Sin(alpha)))), 0, new Vec2f(0, 0), "Breeder", player);
                        tmp.Add(bre2);
                        bre.ReadyToSpawn = false;
                    }

                    break;

                case EntityType.Drone:
                    Drone drone = (Drone)entities.ElementAt(i);
                    if (drone.noTarget)
                    {
                        Smaragd smaragd = null;
                        foreach (Entity ent in entities)
                        {
                            if (ent.getEntityType() == EntityType.Letter)
                            {
                                Smaragd sam = (Smaragd)ent;
                                if ((smaragd == null) || (sam.Drone == null && (player.Position - sam.Position).length() < (player.Position - smaragd.Position).length()))
                                {
                                    smaragd        = sam;
                                    ent.canExplode = false;
                                }
                            }
                        }
                        drone.setTarget(smaragd);
                    }

                    break;

                case EntityType.Bomb:
                    Bomb bomb = (Bomb)entities.ElementAt(i);
                    entities.AddRange(bomb.getBombFragment());

                    if (bomb.getBombFragment().Count > 1)
                    {
                        bomb.ToDelete = true;
                    }

                    break;

                default:
                    break;
                }

                if (entities.ElementAt(i).ToDelete)
                {
                    if (entities[i].canExplode && (entities[i].getEntityType() != EntityType.Projectile || ((Projectiles)entities[i]).LifeTime >= 0))
                    {
                        particleSpawner.Add(new PSpawner(entities[i].Position, 500));
                        sound.Play();
                    }
                    entities[i].onDeath();
                    entities.RemoveAt(i);
                }
            }
            entities.AddRange(tmp);

            entities.AddRange(player.spawnNewEnemy());

            runSpawnTimeSmaragd += (float)gameTime.ElapsedTime.TotalMilliseconds;

            if (rand.NextDouble() < 0.01f)//runSpawnTimeSmaragd > spawnTimeSmaragd)
            {
                runSpawnTimeSmaragd = 0;
                spawnSmaragd();
            }

            Entity spawnedEntity = spawner.spawn(gameTime);

            if (spawnedEntity != null)
            {
                entities.Add(spawnedEntity);
            }

            for (int i = particleSpawner.Count - 1; i > 0; --i)
            {
                particleSpawner.ElementAt(i).update(gameTime);
                if (particleSpawner.ElementAt(i).isSpawnerFinish())
                {
                    particleSpawner.RemoveAt(i);
                }
            }
            JoystickButton[] upgradeButton = { JoystickButton.A, JoystickButton.B, JoystickButton.X, JoystickButton.Y, JoystickButton.LB, JoystickButton.RB };
            Keyboard.Key[]   upgradeKeys   = { Keyboard.Key.Num1, Keyboard.Key.Num2, Keyboard.Key.Num3, Keyboard.Key.Num4, Keyboard.Key.Num5, Keyboard.Key.Num6 };
            UpgradeType[]    upgradeTypes  = { UpgradeType.AddCannon, UpgradeType.IncreaseDamage, UpgradeType.DecreaseCooldown, UpgradeType.AddDrone, UpgradeType.Heal, UpgradeType.Bomb };

            for (int i = 0; i < upgradeKeys.Length; ++i)
            {
                if (Game.keyboardInput.isClicked(upgradeKeys[i]) || Game.joystickInput.isClicked(upgradeButton[i]))
                {
                    player.upgrade(upgradeTypes[i], entities);
                }
            }
        }