diff --git a/RecrownedAthenaeum/UI/BookSystem/Book.cs b/RecrownedAthenaeum/UI/BookSystem/Book.cs index 9b7e38a..ef41f96 100644 --- a/RecrownedAthenaeum/UI/BookSystem/Book.cs +++ b/RecrownedAthenaeum/UI/BookSystem/Book.cs @@ -1,7 +1,9 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; using RecrownedAthenaeum.Camera; using RecrownedAthenaeum.ContentSystem; +using RecrownedAthenaeum.Input; using RecrownedAthenaeum.UI.SkinSystem; using System.Collections.Generic; using System.Linq; @@ -11,7 +13,7 @@ namespace RecrownedAthenaeum.UI.BookSystem /// /// Contains the pages. /// - public class Book + public class Book : IInputListener { readonly ContentManagerController assets; readonly ISkin skin; @@ -19,6 +21,7 @@ namespace RecrownedAthenaeum.UI.BookSystem Page targetPage; Rectangle dimensions; Dictionary pages = new Dictionary(); + List orderedPages = new List(); /// /// Creates a book. @@ -52,7 +55,7 @@ namespace RecrownedAthenaeum.UI.BookSystem { for (int pageIndex = 0; pageIndex < pages.Count; pageIndex++) { - Page page = pages.ElementAt(pageIndex).Value; + Page page = orderedPages[pageIndex]; page.Draw(batch); } } @@ -66,7 +69,7 @@ namespace RecrownedAthenaeum.UI.BookSystem if (targetPage != null) { Vector2 position; - Rectangle targetBounds = targetPage.bounds; + Rectangle targetBounds = targetPage.situation; position.X = targetBounds.X + (targetBounds.Width * 0.5f); position.Y = targetBounds.Y + (targetBounds.Height * 0.5f); camera.LinearInterpolationToPosition(0.4f, position, (float)gameTime.ElapsedGameTime.TotalSeconds); @@ -94,6 +97,7 @@ namespace RecrownedAthenaeum.UI.BookSystem { page.camera = camera; page.Initialize(assets, skin); + orderedPages.Add(page); this.pages.Add(page.Name, page); } } @@ -113,9 +117,20 @@ namespace RecrownedAthenaeum.UI.BookSystem /// Name of page to remove. public void RemovePage(string name) { + orderedPages.Remove(pages[name]); pages.Remove(name); } + + /// + /// Removes all pages. + /// + public void ClearPages() + { + orderedPages.Clear(); + pages.Clear(); + } + /// /// Perform a step of linear interpolation to the given page. /// @@ -131,9 +146,39 @@ namespace RecrownedAthenaeum.UI.BookSystem /// Page to go to. public void GoToPage(Page page) { - Rectangle targetBounds = page.bounds; + Rectangle targetBounds = page.situation; camera.position.X = targetBounds.X + (targetBounds.Width * 0.5f); camera.position.Y = targetBounds.Y + (targetBounds.Height * 0.5f); } + + /// + /// Passes the new keyboard state down to each page in order of when it was added. + /// + /// + /// True if the state change should to trigger further input listeners. + public bool KeyboardStateChanged(KeyboardState state) + { + for (int pageIndex = 0; pageIndex < pages.Count; pageIndex++) + { + Page page = orderedPages[pageIndex]; + if (!page.KeyboardStateChanged(state)) return false; + } + return true; + } + + /// + /// Passes the new mouse state down to each page in order of when it was added. + /// + /// + /// True if the state change should to trigger further input listeners. + public bool MouseStateChanged(MouseState state) + { + for (int pageIndex = 0; pageIndex < pages.Count; pageIndex++) + { + Page page = orderedPages[pageIndex]; + if (!page.MouseStateChanged(state)) return false; + } + return true; + } } } diff --git a/RecrownedAthenaeum/UI/BookSystem/Page.cs b/RecrownedAthenaeum/UI/BookSystem/Page.cs index 29e78fb..710b616 100644 --- a/RecrownedAthenaeum/UI/BookSystem/Page.cs +++ b/RecrownedAthenaeum/UI/BookSystem/Page.cs @@ -35,10 +35,10 @@ namespace RecrownedAthenaeum.UI.BookSystem /// New Height public virtual void ApplySize(int width, int height) { - bounds.X = pageX * width; - bounds.Y = pageY * height; - bounds.Width = width; - bounds.Height = height; + situation.X = pageX * width; + situation.Y = pageY * height; + situation.Width = width; + situation.Height = height; requiresSizeUpdate = false; }