Example #1
0
        private static Level CreateLevel0()
        {
            Level lvl = new Level();

            lvl.Gravity = 40f;
            lvl.InitialPosition = new Vector2(0, 0);

            lvl.AssetName = "Level0";
            lvl.LevelIdentifier = 0;

            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2000, 156), Surface.Normal));

            //2 beginning blocks
            lvl.Tiles.Add(new Tile(new Rectangle(4, 692, 248, 150), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(496, 691, 752 - 496, 150), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(999, 691, 1252 - 999, 150), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(1700, 680, 1998 - 1700, 150), Surface.Normal));

            lvl.Checkpoints.Add(new Checkpoint(120, 500, 0, 0, 4));
            lvl.Checkpoints.Add(new Checkpoint(0, 0, 1900, 0, 4));

            //Boundaries
            lvl.Tiles.Add(new Tile(new Rectangle(0, 1500 - 2, 2000, 2), Surface.Death));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 1500, 2), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2, 2000), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(2000 - 2, 0, 2, 1500), Surface.Absorbs));

            return lvl;
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 public GameplayScreen(Level lvl)
 {
     Narrator = new SpeechSynthesizer();
     TransitionOnTime = TimeSpan.FromSeconds(1.5);
     TransitionOffTime = TimeSpan.FromSeconds(0.5);
     mLevel = lvl;
 }
Example #3
0
        private static Level CreateLevel1()
        {
            Level lvl = new Level();

            lvl.Gravity = 40f;
            lvl.InitialPosition = new Vector2(0, -100);

            lvl.AssetName = "Level1";
            lvl.LevelIdentifier = 1;

            lvl.Checkpoints.Add(new Checkpoint(270, 661 - 134, 0, 0, 4));
            lvl.Checkpoints.Add(new Checkpoint(680, 661 - 134, 680, 1024, 1));
            lvl.Checkpoints.Add(new Checkpoint(1180, 661 - 134, 1180, 602, 1));

            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 301,147), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(301, 0, 361,147), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(662, 0, 49, 4), Surface.Death));
            lvl.Tiles.Add(new Tile(new Rectangle(711, 0, 569, 147), Surface.Amplifies));

            lvl.Tiles.Add(new Tile(new Rectangle(0, 490, 215, 174), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 490+174, 215, 363), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(215, 1024 - 363, 458-215, 363), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(936, 1024 - 421, 344, 421), Surface.Reflects));
            lvl.Tiles.Add(new Tile(new Rectangle(458, 490, 215, 174), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(458, 490+174, 215, 343), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(458+215, 1024 - 363, 830-458-215, 363), Surface.Normal));

            //Boundaries
            lvl.Tiles.Add(new Tile(new Rectangle(0, 1024 - 2, 1280, 2), Surface.Death));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 1280, 2), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2, 1024), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(1280 - 2, 0, 2, 1024), Surface.Absorbs));

            return lvl;
        }
Example #4
0
        public LevelOverScreen(Level level, HalfCakedGame game)
            : base("Level Complete!", new string[] {"Next Level", "Play Again", "Exit"}, 0)
        {
            IsPopup = true;
            mLevel = level;

            // Hook up menu event handlers.
            Buttons[0].Pressed += NextLevelMenuEntrySelected;
            Buttons[1].Pressed += ResetMenuEntrySelected;
            Buttons[2].Pressed += QuitGameMenuEntrySelected;

            Profile prof = game.CurrentProfile;
            String scoreString = "\n";

            if (prof.CurrentLevel < Level.MAX_LEVELS - 1 && prof.CurrentLevel == level.LevelIdentifier)
                prof.CurrentLevel++;

            if (prof.LevelStatistics[mLevel.LevelIdentifier] == null ||
                prof.LevelStatistics[mLevel.LevelIdentifier].Score > level.LevelStatistics.Score)
            {
                scoreString += "Congratulations! You set a new high score.\n";
                level.LevelStatistics.Date = DateTime.Now;
                prof.LevelStatistics[mLevel.LevelIdentifier] = level.LevelStatistics;
                Profile.SaveProfile(prof, "default.sav", game.Device);
            }
            else
            {
                scoreString += "High Score: " + prof.LevelStatistics[mLevel.LevelIdentifier].Score + "\n";
            }
            scoreString += "Your Score: " + level.LevelStatistics.Score + "\n";

            mMessage += scoreString;
        }
Example #5
0
        // First Level
        private static Level CreateLevel0()
        {
            Level lvl = new Level();

            lvl.Gravity = 40f;
            lvl.InitialPosition = new Vector2(0, 0);

            lvl.AssetName = "Level0";
            lvl.LevelIdentifier = 0;

            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2000, 156), Surface.Normal));

            //2 beginning blocks
            lvl.Tiles.Add(new Tile(new Rectangle(4, 692, 248, 150), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(496, 691, 752 - 496, 150), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(999, 691, 1252 - 999, 150), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(1700, 680, 1998 - 1700, 150), Surface.Normal));

            lvl.Checkpoints.Add(new Checkpoint(120, 500, 0, 0, 4, "Welcome to the experiment. I hope your performance meets expectations. For test subjects who manage to complete each test, cake will be provided."));
            lvl.Checkpoints.Add(new Checkpoint(1900, 680, 1800, 0, 4, null));

            //Boundaries
            lvl.Tiles.Add(new Tile(new Rectangle(0, 1500 - 2, 2000, 2), Surface.Death));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 1500, 2), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2, 2000), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(2000 - 2, 0, 2, 1500), Surface.Absorbs));

            return lvl;
        }
        public LevelOverScreen(Level level, HalfCakedGame game)
            : base("Level Complete!", "", new string[] {"Next Level", "Play Again", "Exit"}, 0)
        {
            IsPopup = true;
            mLevel = level;

            // Hook up menu event handlers.
            Buttons[0].Pressed += NextLevelMenuEntrySelected;
            Buttons[1].Pressed += ResetMenuEntrySelected;
            Buttons[2].Pressed += QuitGameMenuEntrySelected;
            Cancelled += QuitGameMenuEntrySelected;

            Profile prof = game.CurrentProfile;

            if (level.LevelIdentifier != -1) //One of the default levels
            {
                if (prof.CurrentLevel < Level.INIT_LID_FOR_WORLD.Last() && prof.CurrentLevel == level.LevelIdentifier)
                    prof.CurrentLevel++;

                if (prof.LevelStatistics[mLevel.LevelIdentifier] == null ||
                    prof.LevelStatistics[mLevel.LevelIdentifier].Score < level.LevelStatistics.Score)
                {
                    mContentLabel.Text = "Congratulations! You set a new High Score: " + level.LevelStatistics.Score;
                    level.LevelStatistics.Date = DateTime.Now;
                    prof.LevelStatistics[mLevel.LevelIdentifier] = level.LevelStatistics;

                    if (prof.GlobalIdentifer != -1)
                        level.LevelStatistics.UploadScore(prof.GlobalIdentifer);
                    else
                        prof.Register();

                    Profile.SaveProfile(prof, "default.sav", game.Device);
                }
                else
                {
                    mContentLabel.Text = "High Score: " + prof.LevelStatistics[mLevel.LevelIdentifier].Score
                                          + "   |   Your Score: " + level.LevelStatistics.Score;
                }
            }
            else //Custom level code
            {
                var entry = prof.CustomLevelStatistics.Find(x => x.Key == level.CustomLevelIdentifier);
                if (entry == null || entry.Value.Score < level.LevelStatistics.Score)
                {
                    mContentLabel.Text = "Congratulations! You set a new High Score: " + level.LevelStatistics.Score;
                    level.LevelStatistics.Date = DateTime.Now;

                    if(entry != null)
                        entry.Value = level.LevelStatistics;
                    else
                        prof.CustomLevelStatistics.Add(new KeyValuePair<Guid,Statistics>(level.CustomLevelIdentifier, level.LevelStatistics));

                    Profile.SaveProfile(prof, "default.sav", game.Device);
                }
                else
                {
                    mContentLabel.Text = "High Score: " + entry.Value.Score + "   |   Your Score: " + level.LevelStatistics.Score;
                }
            }
        }
 public CheckpointPropertiesWindow(Checkpoint checkpoint, Canvas canvas, DesignerItem item, Level level)
     : base()
 {
     InitializeComponent();
     item.PropertyWindow = this;
     DataContext = new CheckpointModel(checkpoint, item, level, canvas);
     (DataContext as CheckpointModel).RespawnIndicator.OnSelected += HandleSelection;
 }
 public TilePropertiesWindow(Tile tile, DesignerItem item, Level level)
     : base()
 {
     InitializeComponent();
     item.PropertyWindow = this;
     DataContext = new TileModel(tile, item, level);
     item.SizeChanged += new SizeChangedEventHandler(item_SizeChanged);
 }
 public DetailsWindow(Canvas canvas, Level level)
 {
     InitializeComponent();
     DataContext = new DetailsModel(level, canvas);
     mWidth = canvas.Width;
     mHeight = canvas.Height;
     mGravity = level.Gravity;
     mName = level.Name;
 }
Example #10
0
        private static Level CreateLevel0()
        {
            Level lvl = new Level();

            lvl.Gravity = 9.80f;
            lvl.InitialPosition = new Vector2(0, -500);

            lvl.AssetName = "Level0";
            lvl.LevelIdentifier = 0;

            lvl.Tiles.Add(new Tile(new Rectangle(778, 0, 186, 281), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(964, 0, 420, 195), Surface.Normal));

            lvl.Tiles.Add(new Tile(new Rectangle(0, 473, 301, 151), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(301, 473, 411, 151), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(711, 473, 569, 151), Surface.Amplifies));

            lvl.Tiles.Add(new Tile(new Rectangle(0, 1500 - 364, 216, 364), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(216, 1500 - 364, 240, 364), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(456, 1500 - 364, 216, 364), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(672, 1500 - 364, 159, 364), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 966, 216, 170), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(456, 966, 215, 170), Surface.Normal));

            lvl.Tiles.Add(new Tile(new Rectangle(936, 1500 - 421, 485, 421), Surface.Reflects));

            lvl.Tiles.Add(new Tile(new Rectangle(1718, 915, 282, 585), Surface.Absorbs));

            lvl.Checkpoints.Add(new Checkpoint(270, 1136 - 134, 0, 0, 4));
            lvl.Checkpoints.Add(new Checkpoint(680, 1136 - 134, 680, 1024, 1));
            lvl.Checkpoints.Add(new Checkpoint(1180, 1079 - 134, 1180, 1500, 1));
            lvl.Checkpoints.Add(new Checkpoint(1165, 473 - 134, 1275, 473, 2));
            lvl.Checkpoints.Add(new Checkpoint(75, 473 - 134, 100, 473, 2));

            Switch switch1 = new Switch(System.Guid.NewGuid(), new Vector2(1980, 815), Switch.SwitchState.Active);
            switch1.Actions.Add(new KeyValuePair<Guid, int>(Character.CharacterGuid, (int)Switch.SwitchState.Pressed));
            lvl.Obstacles.Add(switch1);

            Platform pf1 = new Platform(System.Guid.NewGuid(), new List<Vector2>() { new Vector2(1435, 1078), new Vector2(1607, 1078), new Vector2(1607, 473), new Vector2(1286, 473) }, 50, Platform.PlatformState.Forward);
            pf1.Actions.Add(new KeyValuePair<Guid, int>(switch1.Guid, (int)Platform.PlatformState.Startionary));
            lvl.Obstacles.Add(pf1);

            Door d1 = new Door(System.Guid.NewGuid(), new Vector2(778, 282), Door.DoorState.Stationary);
            d1.Actions.Add(new KeyValuePair<Guid, int>(switch1.Guid, (int)Door.DoorState.Opening));
            lvl.Obstacles.Add(d1);

            Enemy e1 = new Enemy(new Vector2(370, 472), 300);
            lvl.Actors.Add(e1);

            //Boundaries
            lvl.Tiles.Add(new Tile(new Rectangle(0, 1500 - 2, 2000, 2), Surface.Death));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 1500, 2), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2, 2000), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(2000 - 2, 0, 2, 1500), Surface.Absorbs));

            return lvl;
        }
        public PlatformPropertiesWindow(Platform platform, Canvas canvas, DesignerItem item, Level level)
        {
            InitializeComponent();
            item.PropertyWindow = this;
            DataContext = new PlatformModel(this, platform, canvas, item, level);

            for(int i = 1; i <= platform.Path.Count; i++)
                (DataContext as PlatformModel).AddPoint(this, i);
        }
Example #12
0
        protected void Act(Rectangle target, Rectangle result, Level level, Vector2 targetVelocity, object targetObj)
        {
            Visible = false;
            Orientation orientation;
            Vector2 openingPoint;

            bool validXCollision = (Velocity.X > targetVelocity.X == result.Center.X < target.Center.X) || (target.Width - Math.Abs(Velocity.X) / 30 <= 0);
            bool validYCollision = (Velocity.Y > targetVelocity.Y == result.Center.Y < target.Center.Y) || (target.Height - Math.Abs(Velocity.Y) / 30 <= 0);

            if (result.Width < result.Height && validXCollision)
            {
                if (PortalGroup.PORTAL_HEIGHT > target.Height)
                {
                    Absorb();
                    return;
                }
                if (Velocity.X > targetVelocity.X)
                {
                    orientation = Orientation.Left;
                    openingPoint.X = target.Left - 1;
                }
                else
                {
                    orientation = Orientation.Right;
                    openingPoint.X = target.Right - PortalGroup.PORTAL_WIDTH + 1;
                }

                openingPoint.Y = MathHelper.Clamp(result.Center.Y, target.Top + PortalGroup.PORTAL_HEIGHT / 2, target.Bottom - PortalGroup.PORTAL_HEIGHT / 2);
            }
            else if (validYCollision)
            {
                if (PortalGroup.PORTAL_HEIGHT > target.Width)
                {
                    Absorb();
                    return;
                }
                if (Velocity.Y > targetVelocity.Y)
                {
                    orientation = Orientation.Up;
                    openingPoint.Y = target.Top - 1;
                }
                else
                {
                    orientation = Orientation.Down;
                    openingPoint.Y = target.Bottom - PortalGroup.PORTAL_WIDTH + 1;
                }

                openingPoint.X = MathHelper.Clamp(result.Center.X, target.Left + PortalGroup.PORTAL_HEIGHT / 2, target.Right - PortalGroup.PORTAL_HEIGHT / 2);
            }
            else
            {
                Visible = true;
                return;
            }
            Velocity = Vector2.Zero;
            level.Portals.Open(openingPoint, orientation, mPortalNumber, FrameVelocity, level, targetObj);
        }
Example #13
0
        public void CheckCollisions(Level level, bool ePressed)
        {
            FrameVelocity = Vector2.Zero;

            if (level.Portals.IsOpen())
            {
                if (HandlePortalCollision(0, level) || HandlePortalCollision(1, level))
                    return;
            }

            if(mForcedDucking)
                StopDucking();
            mCurrentState = State.Air;

            foreach (Obstacle obs in level.Obstacles)
            {
                Rectangle result = Rectangle.Intersect(obs.CollisionSurface, CollisionSurface);
                if (!result.IsEmpty)
                {
                    if (HandleStandardCollision(result, obs.CollisionSurface, obs.Contact(result), obs.Friction * level.Gravity))
                    {
                        Die(level);
                        return;
                    }
                    FrameVelocity = obs.Velocity;
                    if(ePressed)
                        obs.React(CharacterGuid, level);
                }
            }

            foreach (Tile tile in level.Tiles)
            {
                Rectangle result = Rectangle.Intersect(tile.Dimensions, CollisionSurface);
                if (!result.IsEmpty)
                {
                    if (HandleStandardCollision(result, tile.Dimensions, tile.Type, tile.Friction * level.Gravity))
                    {
                        Die(level);
                        return;
                    }
                }
            }

            if (mCollisions[(int)Orientation.Down] != Rectangle.Empty && mCollisions[(int)Orientation.Up] != Rectangle.Empty)
            {
                mForcedDucking = true;
                Duck();
                if (mCollisions[(int)Orientation.Down].Intersects(this.CollisionSurface) &&
                    mCollisions[(int)Orientation.Up].Intersects(this.CollisionSurface))
                    Die(level);
            }
            else
                mForcedDucking = false;

            for(int i = 0; i < 5; i++)
                mCollisions[i] = Rectangle.Empty;
        }
        public DoorModel(Door door, DesignerItem item, Level level)
            : base(item, level)
        {
            Data = mDoor = door;

            if(!level.Obstacles.Contains(door))
                level.Obstacles.Add(door);
            X = (int)door.InitialPosition.X;
            Y = (int)door.InitialPosition.Y;
        }
            public ActionControlModel(ActionControl control, StackPanel parent, Level level, Obstacle obs)
            {
                mControlParent = control;
                mLevel = level;
                mSwitch = obs;
                mParent = parent;

                mData = new Half_Caked.KeyValuePair<Guid, int>(obs.Guid, 0);
                mTarget= Obstacles[0];
                mTarget.Actions.Add(mData);
            }
        public SwitchPropertiesWindow(Switch mswitch, DesignerItem item, Level level)
            : base()
        {
            InitializeComponent();
            item.PropertyWindow = this;
            DataContext = new SwitchModel(mswitch, item, level);

            foreach(Obstacle target in level.Obstacles.Where(o => o.Actions.Any(pair => pair.Key == mswitch.Guid)))
                mTriggers.Children.Add(new ActionControl(mTriggers, mswitch, level, target));

            UpdatePossibleActions();
        }
            public CheckpointModel(Checkpoint checkpoint, DesignerItem item, Level level, Canvas canvas)
                : base(item, level)
            {
                IsCentered = true;

                if(!level.Checkpoints.Contains(checkpoint))
                    level.Checkpoints.Add(checkpoint);

                Data = mCheckpoint = checkpoint;
                mCanvas = canvas;

                mCheckpointRegion = new System.Windows.Shapes.Rectangle();
                mCheckpointRegion.Fill = new SolidColorBrush(Colors.Yellow);
                mCheckpointRegion.Fill.Opacity = .25;
                mCheckpointRegion.IsHitTestVisible = false;

                Ellipse rindicator = new Ellipse();
                rindicator.Fill = Brushes.SpringGreen;
                rindicator.Stroke = Brushes.Black;

                TextBlock txt = new TextBlock();
                txt.Text = "R";
                txt.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
                txt.VerticalAlignment = System.Windows.VerticalAlignment.Center;

                Grid gr = new Grid();
                gr.Children.Add(rindicator);
                gr.Children.Add(txt);
                gr.IsHitTestVisible = false;

                mRespawnIndicator = new DesignerItem();
                mRespawnIndicator.CanResize = false;
                mRespawnIndicator.CanDelete = false;
                mRespawnIndicator.Model = this;
                mRespawnIndicator.Height = 30;
                mRespawnIndicator.Width = 30;
                mRespawnIndicator.MinWidth = 30;
                mRespawnIndicator.MinHeight = 30;
                mRespawnIndicator.Content = gr;

                canvas.Children.Add(mCheckpointRegion);
                canvas.Children.Add(mRespawnIndicator);

                X = (int)checkpoint.Bound.X;
                Y = (int)checkpoint.Bound.Y;
                LocationX = (int)checkpoint.Location.X;
                LocationY = (int)checkpoint.Location.Y;
                Quadrant = Quadrant;

                Canvas.SetZIndex(mRespawnIndicator, 1);
                Canvas.SetZIndex(mCheckpointRegion, -9);
            }
        public EnemyModel(Enemy enemy, Ellipse rangeFinder, DesignerItem item, Level level)
            : base(item, level)
        {
            IsCentered = true;
            Data = mEnemy = enemy;
            mRangeFinder = rangeFinder;

            if(!level.Actors.Contains(mEnemy))
                level.Actors.Add(mEnemy);

            X = (int)enemy.InitialPosition.X;
            Y = (int)enemy.InitialPosition.Y;
            Range = Range;
        }
            public TileModel(Tile tile, DesignerItem item, Level level)
                : base(item, level)
            {
                Data = mTile = tile;

                if(!level.Tiles.Contains(mTile))
                    level.Tiles.Add(mTile);

                Type = Type;
                Width = tile.Dimensions.Width;
                Height = tile.Dimensions.Height;
                X = tile.Dimensions.X;
                Y = tile.Dimensions.Y;
            }
            public PlatformModel(PlatformPropertiesWindow ppw, Platform platform, Canvas canvas, DesignerItem item, Level level)
                : base(item, level)
            {
                Data = mPlatform = platform;
                mCanvas = canvas;

                if (!level.Obstacles.Contains(platform))
                {
                    level.Obstacles.Add(platform);
                }

                X = (int)platform.InitialPosition.X;
                Y = (int)platform.InitialPosition.Y;

                mChildren = new List<DesignerItem>();
            }
        public EnemyPropertiesWindow(Enemy enemy, DesignerCanvas canvas, DesignerItem item, Level level)
            : base()
        {
            InitializeComponent();
            item.PropertyWindow = this;

            Ellipse rangeFinder = new Ellipse();
            Canvas.SetZIndex(rangeFinder, -10);

            var fadedRed = System.Windows.Media.Color.FromArgb(0, 255, 0, 50);

            rangeFinder.Fill = new RadialGradientBrush(System.Windows.Media.Colors.Red, fadedRed);
            rangeFinder.Stroke = Brushes.Green;
            rangeFinder.IsHitTestVisible = false;

            canvas.Children.Add(rangeFinder);

            DataContext = new EnemyModel(enemy, rangeFinder, item, level);
        }
Example #22
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public PauseMenuScreen(Level level)
            : base("Paused")
        {
            // Flag that there is no need for the game to transition
            // off when the pause menu is on top of it.
            IsPopup = true;
            mLevel = level;

            // Create our menu entries.
            MenuEntry resumeGameMenuEntry = new MenuEntry("Resume Game");
            MenuEntry restartLevelMenuEntry = new MenuEntry("Restart Level");
            MenuEntry quitGameMenuEntry = new MenuEntry("Quit Game");

            // Hook up menu event handlers.
            resumeGameMenuEntry.Pressed += OnCancel;
            quitGameMenuEntry.Pressed += QuitGameMenuEntrySelected;
            restartLevelMenuEntry.Pressed += RestartLevelMenuEntrySelected;

            // Add entries to the menu.
            MenuEntries.Add(resumeGameMenuEntry);
            MenuEntries.Add(restartLevelMenuEntry);
            MenuEntries.Add(quitGameMenuEntry);
        }
Example #23
0
 private static void SaveLevel(int identifier, Level lvl)
 {
     XmlSerializer serializer = new XmlSerializer(typeof(Level));
     TextWriter textWriter = new StreamWriter(@"Content\Levels\Level"+identifier+".xml");
     serializer.Serialize(textWriter, lvl);
     textWriter.Close();
 }
Example #24
0
        private void UpdateProjectile(GameTime theGameTime, InputState inputState, Level level)
        {
            if (mOrbs[0].Visible)
            {
                mOrbs[0].Update(theGameTime);
                mOrbs[0].CheckCollisions(level);
            }
            else if (inputState.IsFiringPortal1(null) && level.Portals.CanClose())
            {
                ShootProjectile(0, inputState.CurrentMouseState, level);
                mOrbs[0].CheckCollisions(level);
                level.Portals.Close(0);
            }

            if (mOrbs[1].Visible)
            {
                mOrbs[1].Update(theGameTime);
                mOrbs[1].CheckCollisions(level);
            }
            else if (inputState.IsFiringPortal2(null) && level.Portals.CanClose())
            {
                ShootProjectile(1, inputState.CurrentMouseState, level);
                mOrbs[1].CheckCollisions(level);
                level.Portals.Close(1);
            }
        }
Example #25
0
        // Fifth Level
        private static Level CreateLevel4()
        {
            Level lvl = new Level();

            lvl.Gravity = 40f;
            lvl.InitialPosition = new Vector2(0, -500);

            lvl.AssetName = "Level4";
            lvl.LevelIdentifier = 4;

            lvl.Tiles.Add(new Tile(new Rectangle(778, 0, 186, 281), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(964, 0, 420, 195), Surface.Normal));

            lvl.Tiles.Add(new Tile(new Rectangle(0, 473, 301, 151), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(301, 473, 411, 151), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(711, 473, 569, 151), Surface.Amplifies));

            lvl.Tiles.Add(new Tile(new Rectangle(0, 1500 - 364, 216, 364), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(216, 1500 - 364, 240, 364), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(456, 1500 - 364, 216, 364), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(672, 1500 - 364, 159, 364), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 966, 216, 170), Surface.Normal));
            lvl.Tiles.Add(new Tile(new Rectangle(456, 966, 215, 170), Surface.Normal));

            lvl.Tiles.Add(new Tile(new Rectangle(936, 1500 - 421, 485, 421), Surface.Reflects));

            lvl.Tiles.Add(new Tile(new Rectangle(1718, 915, 282, 585), Surface.Absorbs));

            lvl.Checkpoints.Add(new Checkpoint(270, 1136 - 134, 0, 0, 4, "Keep in mind, when a subject is traversing a portal, minor radioactive particles may cause damages and mutations to the subject's DNA. Test subjects are required to sign a wavier taking sole responsibility for all costs incurred by this unfortunate fact."));
            lvl.Checkpoints.Add(new Checkpoint(680, 1136 - 134, 680, 1024, 1, null));
            lvl.Checkpoints.Add(new Checkpoint(1180, 1079 - 134, 1180, 1500, 1, null));
            lvl.Checkpoints.Add(new Checkpoint(1165, 473 - 134, 1275, 473, 2, null));
            lvl.Checkpoints.Add(new Checkpoint(0, 473, 150, 473, 2, null));

            Switch switch1 = new Switch(System.Guid.NewGuid(), new Vector2(1980, 815), Switch.SwitchState.Enabled);
            switch1.Actions.Add(new KeyValuePair<Guid, int>(Character.CharacterGuid, (int)Switch.SwitchState.Pressed));
            lvl.Obstacles.Add(switch1);

            Platform pf1 = new Platform(System.Guid.NewGuid(), new List<Vector2>() { new Vector2(1435, 1078), new Vector2(1607, 1078), new Vector2(1607, 473), new Vector2(1286, 473) }, 50, Platform.PlatformState.Forward);
            pf1.Actions.Add(new KeyValuePair<Guid, int>(switch1.Guid, (int)Platform.PlatformState.Stationary));
            lvl.Obstacles.Add(pf1);

            Door d1 = new Door(System.Guid.NewGuid(), new Vector2(778, 282), Door.DoorState.Stationary);
            d1.Actions.Add(new KeyValuePair<Guid, int>(switch1.Guid, (int)Door.DoorState.Opening));
            lvl.Obstacles.Add(d1);

            Enemy e1 = new Enemy(new Vector2(370, 472), 300);
            lvl.Actors.Add(e1);

            //Boundaries
            lvl.Tiles.Add(new Tile(new Rectangle(0, 1500 - 2, 2000, 2), Surface.Death));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 1500, 2), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(0, 0, 2, 2000), Surface.Absorbs));
            lvl.Tiles.Add(new Tile(new Rectangle(2000 - 2, 0, 2, 1500), Surface.Absorbs));

            return lvl;
        }
Example #26
0
        private void ShootProjectile(int type, MouseState aCurrentMouseState, Level level)
        {
            Vector2 dir = new Vector2((float)Math.Cos(mGunhand.Angle), (float)Math.Sin(mGunhand.Angle));

            mOrbs[type].Fire(mGunhand.Position + ARM_LENGTH * dir,
                            dir,
                            Vector2.Zero,
                            level);
        }
Example #27
0
        private bool HandlePortalCollision(int portalNumber, Level level)
        {
            Sprite Portal = (portalNumber == 0 ? level.Portals.Portal1 : level.Portals.Portal2);

            Rectangle result = Rectangle.Intersect(CollisionSurface, Portal.CollisionSurface);
            if (!result.IsEmpty)
            {
                // Horizontal
                if ((int)Portal.Oriented % 2 == 1)
                {
                    if (result.Height >= this.CollisionSurface.Height - 3 ||
                        mCurrentState == State.Portal || mCurrentState == State.GravityPortal)
                    {
                        mCurrentState = State.Portal;
                        level.Portals.AddSprite(portalNumber, this);
                        FrameVelocity = Portal.FrameVelocity;

                        bool first;
                        if ((first = (CollisionSurface.Y >= Portal.CollisionSurface.Bottom - CollisionSurface.Height)) || Portal.CollisionSurface.Y >= CollisionSurface.Y)
                        {
                            if (first)
                                Velocity.Y = Math.Min(Velocity.Y, 0);
                            else
                                Velocity.Y = Math.Max(Velocity.Y, 0);

                            Position = new Vector2(Position.X, MathHelper.Clamp(Position.Y, Portal.CollisionSurface.Y + Center.Y, Portal.CollisionSurface.Bottom - Center.Y));
                        }
                        return true;
                    }
                }
                //Vertical
                else
                {
                    if (result.Width >= this.CollisionSurface.Width - 1 ||
                        mCurrentState == State.Portal || mCurrentState == State.GravityPortal)
                    {
                        mCurrentState = State.GravityPortal;
                        level.Portals.AddSprite(portalNumber, this);

                        if (CollisionSurface.X > Portal.CollisionSurface.Right - CollisionSurface.Width || Portal.CollisionSurface.X > CollisionSurface.X)
                        {
                            Position = new Vector2(MathHelper.Clamp(Position.X, Portal.CollisionSurface.X + Center.X, Portal.CollisionSurface.Right - Center.X), Position.Y);
                            Velocity.X = 0;
                        }
                        return true;
                    }
                }
            }
            return false;
        }
Example #28
0
        public void Update(GameTime theGameTime, Level level, InputState inputState)
        {
            Acceleration = Vector2.Zero;

            var curstate = mCurrentState;
            CheckCollisions(level, inputState.IsInteracting(null));
            if (curstate == State.Air && (mCurrentState == State.Ground || mCurrentState == State.Platform))
                level.PlaySoundEffect(mLandingEffect);

            UpdateMovement(inputState);
            if (UpdateJump(inputState))
                level.PlaySoundEffect(mJumpEffect);
            UpdateDuck(inputState);

            Acceleration.Y = (mCurrentState == State.Air || mCurrentState == State.GravityPortal  || mCurrentState == State.Portal ? 1 : 0) * level.Gravity * Level.METERS_TO_UNITS;
            if (Angle != 0)
            {
                if(Angle > 0)
                    Angle = (float)Math.Max(0, Angle - Math.PI * theGameTime.ElapsedGameTime.TotalSeconds / 2);
                else
                    Angle = (float)Math.Min(0, Angle + Math.PI * theGameTime.ElapsedGameTime.TotalSeconds / 2);

            }

            base.Update(theGameTime);

            mFlip = mGunhand.Update(inputState.CurrentMouseState, mIsDucking, this, level.Position);
            UpdateProjectile(theGameTime, inputState, level);
        }
Example #29
0
 public void Die(Level level)
 {
     level.PlaySoundEffect(mDeathEffect);
     level.PlayerDeath();
 }
Example #30
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public GameplayScreen(int levelNumber)
 {
     TransitionOnTime = TimeSpan.FromSeconds(1.5);
     TransitionOffTime = TimeSpan.FromSeconds(0.5);
     mLevel = Level.LoadLevel(levelNumber);
 }