コード例 #1
0
ファイル: LevelUpdate.cs プロジェクト: Doycie/Mater-tua
    public void update(GameTime gameTime)
    {
        count++;

        if (count % 60 == 0)
        {
            foreach (CombatUnit e in entities.OfType <CombatUnit>())
            {
                foreach (BuildingAndUnit g in entities)
                {
                    if (g.Faction != e.Faction && g.Faction != BuildingAndUnit.faction.Neutral)
                    {
                        e.Defend(g);
                    }
                }
            }
        }
        //  foreach (Unit e in entities.OfType<Unit>())
        //  {
        //      if (e.Faction == Unit.faction.Human)
        //      {
        //         foreach (CombatUnit g in entities.OfType<CombatUnit>())
        //          {
        //              if (g.Faction == CombatUnit.faction.Orc)
        //              {
        //                  g.Defend(e);
        //              }
        //          }
        //      }

        //}

        if (count % 5400 == 0 && count > 0)
        {
            foreach (Barracks b in entities.OfType <Barracks>())
            {
                if (b.Faction == BuildingAndUnit.faction.Orc)
                {
                    b.produceUnit(new Grunt(this, new Vector2(b.Position.X + 2 * data.tSize(), b.Position.Y + 1 * data.tSize())));
                }
            }
        }
        if (count > 0 && count % 8100 == 0)
        {
            Vector2 attackLocation = Vector2.Zero;
            foreach (Townhall t in entities.OfType <Townhall>())
            {
                if (t.Faction == BuildingAndUnit.faction.Human)
                {
                    attackLocation = t.Position - new Vector2(data.tSize(), -3 * data.tSize());
                }
            }
            foreach (CombatUnit c in entities.OfType <CombatUnit>())
            {
                if (c.Faction == BuildingAndUnit.faction.Orc)
                {
                    c.orderMove(new Point((int)attackLocation.X / data.tSize(), (int)attackLocation.Y / data.tSize()));
                }
            }
        }


        //Update all the entities in the level list
        for (int i = entities.Count() - 1; i >= 0; i--)
        {
            if (typeof(BuildingAndUnit).IsAssignableFrom(entities[i].GetType()))
            {
                entities[i].Update(gameTime);
                //if(count%60==0 && entities[i] is Barracks && entities[i].Faction == BuildingAndUnit.faction.Orc)
                //{
                //    (entities[i] as Barracks).produceUnit(new Grunt(this, new Vector2(entities[i].Position.X + 2* data.tSize(), entities[i].Position.Y + 1 * data.tSize())));
                //}
                if (typeof(Unit).IsAssignableFrom(entities[i].GetType()) && entities[i].HitPoints < 1)
                {
                    if (entities[i].Faction == BuildingAndUnit.faction.Human)
                    {
                        Player.UseFood(-(entities[i] as Unit).FoodCost);
                    }
                    GameEnvironment.getAssetManager().PlaySoundEffect("Sounds/Soundeffects/DieSound");
                }
                if (typeof(StaticBuilding).IsAssignableFrom(entities[i].GetType()) && entities[i].HitPoints < 1)
                {
                    GameEnvironment.getAssetManager().PlaySoundEffect("Sounds/Soundeffects/BuildingDemolitionSound");
                    if (entities[i].Faction == BuildingAndUnit.faction.Human && typeof(Townhall).IsAssignableFrom(entities[i].GetType()))
                    {
                        GameEnvironment.gameStateManager.State = GameStateManager.state.Defeat;
                    }
                    else if (entities[i].Faction == BuildingAndUnit.faction.Orc && typeof(Townhall).IsAssignableFrom(entities[i].GetType()))
                    {
                        GameEnvironment.gameStateManager.State = GameStateManager.state.Victory;
                    }
                }
                if ((entities[i] as BuildingAndUnit).HitPoints < 1)
                {
                    if (typeof(Tree).IsAssignableFrom(entities[i].GetType()))
                    {
                        specialFX.Add(new Spritesheet("Sprites/Misc/sparkle", entities[i].Position, entities[i].Size, 8, 32, 32, 60));
                        entities.RemoveAt(i);
                    }
                    else if (typeof(TreasureChest).IsAssignableFrom(entities[i].GetType()))
                    {
                        GameEnvironment.getAssetManager().PlaySoundEffect("Sounds/Soundeffects/OpenChest");
                        specialFX.Add(new Spritesheet("Sprites/Misc/sparkle", entities[i].Position, entities[i].Size, 8, 32, 32, 60));
                        entities.RemoveAt(i);
                    }
                    else if (typeof(Unit).IsAssignableFrom(entities[i].GetType()))
                    {
                        specialFX.Add(new Spritesheet("Sprites/Misc/BloodSplatter", entities[i].Position, entities[i].Size, 4, 128, 16, 180));
                        entities.RemoveAt(i);
                    }
                    else if (typeof(StaticBuilding).IsAssignableFrom(entities[i].GetType()))
                    {
                        specialFX.Add(new Spritesheet("Sprites/Misc/explosionSpriteSheet", entities[i].Position, entities[i].Size, 5, 96, 15, 180));
                        entities.RemoveAt(i);
                    }
                }
            }
        }

        for (int i = specialFX.Count() - 1; i >= 0; i--)
        {
            specialFX[i].Update(gameTime);
            if (specialFX[i] is Spritesheet)
            {
                if ((specialFX[i] as Spritesheet).remove())
                {
                    {
                        specialFX.RemoveAt(i);
                    }
                }
            }
        }
        for (int i = Projectiles.Count() - 1; i >= 0; i--)
        {
            Projectiles[i].Update(gameTime);
        }

        Player.Update();
    }