Пример #1
0
 public RiotGuardWallMemento()
 {
     wallPos = RiotGuardWall.wallPos;
     drillingTime = RiotGuardWall.drillingTime;
     timeToDrill = RiotGuardWall.timeToDrill;
     mode = RiotGuardWall.mode;
     drillingEmitterMemento = RiotGuardWall.drillingEmitter.GenerateMementoFromCurrentFrame();
 }
Пример #2
0
 public static void StartMoving()
 {
     if (mode != RiotGuardMode.Moving)
         SoundManager.PlaySoundOnce("RiotGuardAlarm", playInReverseDuringReverse: true);
     drillingTime = 0;
     mode = RiotGuardMode.Moving;
 }
Пример #3
0
        public static void Update(GameTime gameTime)
        {
            float seconds = gameTime.getSeconds();

            drillingEmitter.active = false;
            int oldLevelX = levelX;
            switch (mode)
            {
                case RiotGuardMode.Waiting:
                    break;
                case RiotGuardMode.Drilling:
                    drillingTime += seconds;
                    if (drillingTime >= timeToDrill)
                        farthestLevelX++;

                    int heroLevelX = 0;
                    foreach (Hero hero in RetroGame.getHeroes())
                    {
                        if (hero.levelX > oldHeroLevelX)
                            heroLevelX = hero.levelX;
                    }
                    if(heroLevelX > farthestLevelX)
                        farthestLevelX = heroLevelX;

                    if (farthestLevelX > levelX)
                    {
                        StartMoving();
                    }

                    float drillingRatio = drillingTime / timeToDrill;
                    drillingEmitter.position = new Vector2(wallPosition + Level.TILE_SIZE / 2, guardCoverageArea.Top);
                    drillingEmitter.positionB = new Vector2(wallPosition + Level.TILE_SIZE / 2, guardCoverageArea.Bottom);
                    drillingEmitter.startSize = DRILLING_PARTICLE_GROWTH * drillingRatio + DRILLING_PARTICLE_BASE_SIZE;
                    drillingEmitter.active = true;
                    break;
                case RiotGuardMode.Moving:
                    wallPosition += MOVING_SPEED * seconds;
                    break;
            }
            drillingEmitter.Update(gameTime);
            updateGuards(gameTime);

            if(levelX > oldLevelX)
                mode = RiotGuardMode.Drilling;
            float levelInterp = 1 - (float)levelX / LEVELS_TO_MAX_SPEED;
            timeToDrill = levelInterp * (MAX_TIME_TO_DRILL - MIN_TIME_TO_DRILL) + MIN_TIME_TO_DRILL;

            foreach (Hero hero in RetroGame.getHeroes())
            {
                if(!hero.Alive)
                    continue;

                if (wallPosition - hero.position.X >= AUTO_GAMEOVER_DISTANCE)
                {
                    RetroGame.GameOver();
                }
                if (wallPosition >= hero.getLeft().X)
                    hero.collideWithRiotGuardWall();
            }
        }
Пример #4
0
        public static void Initialize(SaveGame saveGame = null)
        {
            riotGuardTexture = TextureManager.Get(RIOTGUARD_TEXTURE_NAME);
            drillingEmitter = LineEmitter.getPrebuiltEmitter(PrebuiltLineEmitter.RiotGuardWallDrillSparks);

            farthestLevelX = (saveGame != null) ? saveGame.levelX : LevelManager.STARTING_LEVEL.X;
            wallPos = new Vector2((farthestLevelX - 0.5f) * Level.TEX_SIZE, 0);
            if(saveGame != null) farthestLevelX++; //automatically chase after reloading
            int heroY = (int)RetroGame.getHeroes()[0].position.Y;
            mode = (saveGame != null) ? RiotGuardMode.Moving : RiotGuardMode.Waiting;
            drillingTime = 0;

            heroCoverageArea = new Rectangle[RetroGame.NUM_PLAYERS];

            guardOffsets = new RiotGuardOffset[GUARD_OFFSET_COUNT];
            for(int i = 0; i < GUARD_OFFSET_COUNT; i++)
            {
                guardOffsets[i] = new RiotGuardOffset();
            }
        }