public void AddDynamicObject(IDynamicObject dynamicObject) { dynamicObject.ParentSimulation = this; if (dynamicObject.Name == string.Empty) { _name = dynamicObject.GetType().ToString() + DynamicObjects.Count.ToString() ?? "0"; } DynamicObjects.Add(dynamicObject); }
private void MoveToCollidable(IObject gameObject) { NonCollidableObjects.Remove(gameObject); if (gameObject is IDynamic) { DynamicObjects.Add((IDynamic)gameObject); } if (gameObject is IStatic) { StaticObjects.Add((IStatic)gameObject); } }
public void CreateObject(Type type, Vector2 position) { IObject obj = (IObject)Activator.CreateInstance(type, position); if (obj is IStatic) { StaticObjects.Add((IStatic)obj); } if (obj is IDynamic) { DynamicObjects.Add((IDynamic)obj); } }
private void BuildLevel(List <string[]> levelData) { // iterate through lines for (int i = 0; i < levelData.Count(); i++) { switch (levelData[i][0]) { case "00": // mario Mario.Instance.PlayableObjectState = new SmallRightIdleMario(Mario.Instance); Mario.Instance.Position = new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize); break; case "01": // floor tiles StaticObjects.Add(new FloorTile(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), new Vector2(StringToInt(i, 3), StringToInt(i, 4)), levelData[i][5])); break; case "02": // blocks Blocks.Add(new Block(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), levelData[i][3], levelData[i][4])); break; case "03": // floating coins Coins.Add(new Item(new Vector2((StringToInt(i, 1) * levelCellSize) + (levelCellSize / 4), StringToInt(i, 2) * levelCellSize), "FloatingCoin")); break; case "04": // pipes Pipes.Add(new Pipe(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), StringToInt(i, 3), Convert.ToBoolean(levelData[i][4]), levelData[i][5])); break; case "05": // enemies Enemies.Add(new Enemy(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize - 10), levelData[i][3])); break; case "06": // hills BackgroundItems.Add(new Hill(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), StringToInt(i, 3))); break; case "07": // bushes BackgroundItems.Add(new Bush(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), StringToInt(i, 3))); break; case "08": // clouds BackgroundItems.Add(new Cloud(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), StringToInt(i, 3))); break; case "09": // castle Castle = new Castle(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize)); break; case "10": // flag pole Flagpoles.Add(new Flagpole(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize), levelCellSize)); break; case "11": // check point Checkpoints.Add(new CheckPoint(new Vector2(StringToInt(i, 1) * levelCellSize, StringToInt(i, 2) * levelCellSize))); break; case "12": // coin room CoinRoomPosition = new Vector2(StringToInt(i, 1) * levelCellSize + (levelCellSize / 8), StringToInt(i, 2) * levelCellSize); break; } } DynamicObjects.Add(Mario.Instance); foreach (Block block in Blocks) { DynamicObjects.Add(block); DynamicObjects.Add(block.Item); // Add items in each block too. } foreach (Item coin in Coins) { DynamicObjects.Add(coin); } foreach (Enemy enemy in Enemies) { // Added such that the Koopa spawns in a correct position before any updates are made, otherwise he spawns in the floor to start. if (enemy.EnemyState.ToString() == "SuperMario.EnemyStates.LeftWalkingKoopa" || enemy.EnemyState.ToString() == "SuperMario.EnemyStates.RightWalkingKoopa") { enemy.Position = new Vector2(enemy.Position.X, enemy.Position.Y - GameValues.KoopaPositionOffset); } DynamicObjects.Add(enemy); } foreach (Pipe pipe in Pipes) { StaticObjects.Add(pipe); } foreach (Flagpole flagpole in Flagpoles) { StaticObjects.Add(flagpole); } if (Flagpoles.Count > 0) { Flag.Position = new Vector2(Flagpoles[0].CollisionRectangle.X - GameValues.FlagPositionOffsetVector.X, Flagpoles[0].CollisionRectangle.Y + GameValues.FlagPositionOffsetVector.Y); } }
// Create platforms & environment private void CreateEnvironment(GraphicsDevice g) { #region Create Player & Target // First objects to create are the player and the target Player = new Character(true); Player.Position = new Vector2(_nearEdge + 32, _bottomEdge - 128); Player.IsPlayer = true; RigidBody playerBody = Player.RigidBody; playerBody.Position = Player.Position; playerBody.Width = 32; playerBody.Height = 32; playerBody.CollidableObject = new BoxCollider(); Player.TexturePos = new Vector2(Player.Position.X - playerBody.Width / 2, Player.Position.Y - playerBody.Height / 2); DynamicObjects.Add(Player); AllPhysObjects.Add(Player); Target = new PhysObject(); Target.Position = new Vector2(_farEdge / 2, _bottomEdge - 256); Target.IsTarget = true; Target.Elasticity = 1; RigidBody targetBody = Target.RigidBody; targetBody.Mass = 100.0f; targetBody.Position = Target.Position; targetBody.Width = 32; targetBody.Height = 32; targetBody.CollidableObject = new BoxCollider(); targetBody.CollidableObject.IsCircle = true; targetBody.AffectedByPhysics = false; targetBody.IgnoreGravity = true; float targetYVelocity = ((float)World.RandomGen.Next(3, 7) / 10.0f); if (World.RandomGen.Next(0, 1) == 0) { targetYVelocity *= -1; } float targetXVelocity = ((float)World.RandomGen.Next(3, 7) / 10.0f); if (World.RandomGen.Next(0, 1) == 0) { targetXVelocity *= -1; } targetBody.LinearVelocity = new Vector2(targetXVelocity * _portalSpeed, targetYVelocity * _portalSpeed); Target.TexturePos = new Vector2(targetBody.Position.X - targetBody.Width / 2, targetBody.Position.X - targetBody.Height / 2); DynamicObjects.Add(Target); AllPhysObjects.Add(Target); #endregion #region Edges // EDGES - Create the far left walls PhysObject block = new PhysObject(); block.Position = new Vector2(_nearEdge - 480, _bottomEdge / 2); RigidBody body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = _farEdge / 2; body.Height = _bottomEdge; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // EDGES - Create the far right wall block = new PhysObject(); block.Position = new Vector2(_farEdge + 480, _bottomEdge / 2); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = _farEdge / 2; body.Height = _bottomEdge; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // EDGES - Create the main floor block = new PhysObject(); block.Position = new Vector2(_farEdge / 2, _bottomEdge + 480); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 4096; body.Height = 1024; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // EDGES - Create the roof block = new PhysObject(); block.Position = new Vector2(_farEdge / 2, _topEdge - 480); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 4096; body.Height = 1024; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 0 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 320, _bottomEdge - 32); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 640; body.Height = 64; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 320, _bottomEdge - 32); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 640; body.Height = 64; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 1 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 256, _bottomEdge - 240); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Moving Platform block = new MovingPlatform(new Vector2(_nearEdge + 256, _bottomEdge - 144), new Vector2(_nearEdge + 192, _bottomEdge - 144), new Vector2(_nearEdge + (_farEdge / 2) - 160, _bottomEdge - 144), new Vector2(100, 0)); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Moving Platform block = new MovingPlatform(new Vector2(_farEdge - 256, _bottomEdge - 144), new Vector2((_farEdge / 2) + 160, _bottomEdge - 144), new Vector2(_farEdge - 192, _bottomEdge - 144), new Vector2(-100, 0)); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 256, _bottomEdge - 240); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 2 // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 - 448, _bottomEdge - 400); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 128; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 + 448, _bottomEdge - 400); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 128; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 3 // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2, _bottomEdge - 496); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 512; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); /* * // Pendulum (spins, collisions partially broken though, uncomment if you want to see (spawns to the right of the player start)) * block = new Pendulum(new Vector2(_farEdge / 2, _bottomEdge - 496), new Vector2(0, 128)); * DynamicObjects.Add(block); * AllPhysObjects.Add(block); */ #endregion #region Platforms - Tier 4 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 256, _bottomEdge - 592); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 512; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 256, _bottomEdge - 592); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 512; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 5 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 128, _bottomEdge - 784); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 - 208, _bottomEdge - 784); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 352; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Thicker block block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 + 80, _bottomEdge - 704); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 96; body.Height = 128; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Thicker block block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 - 80, _bottomEdge - 704); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 96; body.Height = 128; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 + 208, _bottomEdge - 784); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 352; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 128, _bottomEdge - 784); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 6 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 432, _bottomEdge - 1008); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 288; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Thicker block block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 - 80, _bottomEdge - 1040); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 96; body.Height = 160; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Thicker block block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 + 80, _bottomEdge - 1040); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 96; body.Height = 160; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 432, _bottomEdge - 1008); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 288; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 7 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 560, _bottomEdge - 1072); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 32; body.Height = 96; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 560, _bottomEdge - 1072); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 32; body.Height = 96; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 8 // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 - 256, _bottomEdge - 1136); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 448; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 + 256, _bottomEdge - 1136); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 448; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 9 // Platform block = new PhysObject(); block.Position = new Vector2(_nearEdge + 128, _bottomEdge - 1424); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 - 288, _bottomEdge - 1424); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2 + 288, _bottomEdge - 1424); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge - 128, _bottomEdge - 1424); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 10 // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2, _bottomEdge - 1680); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 640; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 11 // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2, _bottomEdge - 1760); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 128; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 12 // Moving Platform block = new MovingPlatform(new Vector2(_nearEdge + 256, _bottomEdge - 2000), new Vector2(_nearEdge + 160, _bottomEdge - 2000), new Vector2(_nearEdge + (_farEdge / 2) - 160, _bottomEdge - 2000), new Vector2(100, 0)); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); // Moving Platform block = new MovingPlatform(new Vector2(_farEdge - 256, _bottomEdge - 2000), new Vector2((_farEdge / 2) + 160, _bottomEdge - 2000), new Vector2(_farEdge - 160, _bottomEdge - 2000), new Vector2(-100, 0)); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 256; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion #region Platforms - Tier 13 // Platform block = new PhysObject(); block.Position = new Vector2(_farEdge / 2, _bottomEdge - 2288); body = block.RigidBody; body.Mass = _maximumMass; body.IgnoreGravity = true; body.IsDynamic = false; body.Position = block.Position; body.Width = 512; body.Height = 32; body.CollidableObject = new BoxCollider(); StaticObjects.Add(block); AllPhysObjects.Add(block); #endregion }
public void SetMario(IMario mario) { Mario = mario; DynamicObjects.Add(mario); }
public void AddObject(IDynamic gameObject) { DynamicObjects.Add(gameObject); }