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; }
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; }
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; }
// 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; }
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); }
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); }
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); }
/// <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); }
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(); }
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); } }
// 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; }
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); }
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; }
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); }
public void Die(Level level) { level.PlaySoundEffect(mDeathEffect); level.PlayerDeath(); }
/// <summary> /// Constructor. /// </summary> public GameplayScreen(int levelNumber) { TransitionOnTime = TimeSpan.FromSeconds(1.5); TransitionOffTime = TimeSpan.FromSeconds(0.5); mLevel = Level.LoadLevel(levelNumber); }