private void OnPlayerInteract(object source, EventArgs args) { if (MapContainer.InteractiveEntities.Count > 0) { foreach (EntityLadder ladder in MapContainer.InteractiveEntities) { if (ladder.CollisionMask.Intersects(Player.CollisionMask) == true) { Player.GrabLadder(ladder); return; } } } if (MapContainer.TileSceneObjects.Count > 0) { foreach (TileEntitySceneObject obj in MapContainer.TileSceneObjects) { if (Player.CollisionMask.Intersects(obj.CollisionMask) == true) { bool wasItemAdded = Player.Inventory.AddItem(obj); if (wasItemAdded == true) { SoundEffect pickupSFX = Content.Load <SoundEffect>("Audio/SFX/Keys1"); pickupSFX.Play(0.75f, 0.5f, 0.5f); MapContainer.RemoveTileSceneObject(obj); return; } } } } if (MapContainer.TransitionHandlers.Count > 0) { foreach (TransitionHandler t in MapContainer.TransitionHandlers) { if (t.IsInteractive == true) { if (t.CollisionMask.Intersects(Player.CollisionMask) == true) { if (t.IsKeyLocked == true) { foreach (InventoryItem i in Player.Inventory.Items) { if (i.Item.ShortName == t.Key.ShortName && i.Quantity >= t.KeyQuantity) { SoundEffect doorOpenSFX = Content.Load <SoundEffect>("Audio/SFX/TurningKey"); doorOpenSFX.Play(0.75f, 0.5f, 0.5f); Player.Move(t.TransitionPosition); MapContainer.LoadMap(t.TransitionMapID); return; } } SoundEffect doorLockSFX = Content.Load <SoundEffect>("Audio/SFX/lockeddoor"); doorLockSFX.Play(0.25f, 0.5f, 0.5f); TileSceneObject doorLockIndicator = new TileSceneObject(new Animation(Content.Load <Texture2D>("GFX/Tiles/SceneObjects"), 1, 16, 16, 0f, new Vector2(32, 0)), new Vector2(t.Position.X + 8, t.Position.Y - 16), new Vector2(0, -8)); TileSceneObjects.Add(doorLockIndicator); t.StartInteraction(); } else if (t.IsTriggerLocked == true) { if (Global.DoorTriggers[t.TriggerKey] == true) { SoundEffect doorOpenSFX = Content.Load <SoundEffect>("Audio/SFX/DoorOpen"); doorOpenSFX.Play(0.25f, 0.5f, 0.5f); Player.Move(t.TransitionPosition); MapContainer.LoadMap(t.TransitionMapID); return; } SoundEffect doorLockSFX = Content.Load <SoundEffect>("Audio/SFX/lockeddoor"); doorLockSFX.Play(0.25f, 1.0f, 1.0f); TileSceneObject doorLockIndicator = new TileSceneObject(new Animation(Content.Load <Texture2D>("GFX/Tiles/SceneObjects"), 1, 16, 16, 0f, new Vector2(32, 0)), new Vector2(t.Position.X + 8, t.Position.Y - 16), new Vector2(0, -8)); TileSceneObjects.Add(doorLockIndicator); t.StartInteraction(); } else { SoundEffect doorOpenSFX = Content.Load <SoundEffect>("Audio/SFX/DoorOpen"); doorOpenSFX.Play(0.25f, 0.5f, 0.5f); Player.Move(t.TransitionPosition); MapContainer.LoadMap(t.TransitionMapID); return; } return; } } } } }
public void Update() { switch (LoadState) { case MapLoadState.Preparing: { break; } case MapLoadState.FadeIn: { break; } case MapLoadState.Loaded: { switch (Mode) { case GameMode.Normal: { MapRenderer.Update(MapContainer.ActiveMap, Global.GameTime); MapContainer.Update(); if (TileSceneObjects.Count > 0) { for (int i = TileSceneObjects.Count - 1; i >= 0; i--) { TileSceneObject obj = TileSceneObjects.ElementAt(i); obj.Update(); if (obj.IsDisposable == true) { TileSceneObjects.RemoveAt(i); } } } foreach (TransitionHandler th in MapContainer.TransitionHandlers) { if (th.IsInteractive == false) { th.Update(); } } Player.Update(); if (IsCameraMobile == true) { AdjustCamera(); } break; } case GameMode.Paused: { InputManager.ProcessInputGamePad(PlayerIndex.One); break; } case GameMode.Inventory: { Player.Inventory.Update(); break; } } break; } case MapLoadState.FadeOut: { break; } case MapLoadState.Clearing: { break; } case MapLoadState.Debug: { break; } } }