source: 2015/26/MikkoL/JRPG/JRPG/JRPG/TextMenu.cs @ 6281

Revision 6281, 5.6 KB checked in by mijoliim, 5 years ago (diff)

Wooo versionhallinta

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6
7using Microsoft.Xna.Framework;
8using Microsoft.Xna.Framework.Graphics;
9
10public class TextMenu
11{
12    public Vector Position { get; set; }
13
14    public BetterLabel TextLabelBase { get; set; }
15    public BetterLabel SelectedTextLabelBase { get; set; }
16
17    public List<BetterLabel> MenuElements { get; set; }
18    public double Offset { get; set; }
19
20    public int StartingItem = 0;
21    public BetterLabel _SelectedItem { get; set; }
22    public int SelectedItem { get; set; }
23    public event Action<int> ActionWhenSelected;
24
25    public bool OnExit { get; set; }
26
27    public bool DrawMenuImage = false;
28    public Widget MenuBackground { get; set; }
29    public Image MenuImage { get; set; }
30    public Vector MenuOffset { get; set; }
31
32    public TextMenu()
33    {
34        Offset = 30;
35        MenuOffset = new Vector(-2, 5);
36        MenuElements = new List<BetterLabel>();
37    }
38
39    public void LoadMenuElements()
40    {
41        JRPG.Game.ClearControls();
42
43        if (DrawMenuImage && MenuImage != null)
44        {
45            MenuBackground = new Widget(MenuImage.Width, MenuImage.Height);
46            MenuBackground.Image = MenuImage;
47            MenuBackground.Position = Position + MenuOffset;
48
49            JRPG.Game.Add(MenuBackground);
50        }
51
52        for (int i = 0; i < MenuElements.Count; i++)
53        {
54            MenuElements[i].FontPosition = VectorConverter.JypeliVectorToXNA(CalculateMenuCenter() + Position + (new Vector(0, -Offset) * i));
55            JRPG.Game.Add(MenuElements[i]);
56        }
57
58        SelectedItem = StartingItem;
59        ChangeMenuItemColor();
60
61        LoadMenuControlsKeyboard();
62        LoadMenuControlsXboxController();
63    }
64
65    public void SetTextBases(SpriteFont Font, TextAlignment Alignment)
66    {
67        TextLabelBase = new BetterLabel(Font, Vector2.Zero, "null", Alignment);
68        TextLabelBase.TextColor = new Microsoft.Xna.Framework.Color(158, 154, 182);
69        SelectedTextLabelBase = TextLabelBase;
70    }
71
72    public void AddMenuElement(BetterLabel betterLabel)
73    {
74        MenuElements.Add(betterLabel);
75    }
76    public void AddMenuElement(string text)
77    {
78        BetterLabel menuElement = new BetterLabel(TextLabelBase.CurrentFont, Vector2.Zero, text, TextLabelBase.Alignment);
79        menuElement.DrawTextBorders = TextLabelBase.DrawTextBorders;
80        menuElement.BorderType = TextLabelBase.BorderType;
81        menuElement.BorderSize = TextLabelBase.BorderSize;
82        menuElement.TextColor = TextLabelBase.TextColor;
83        menuElement.TextBorderColor = TextLabelBase.TextBorderColor;
84
85        MenuElements.Add(menuElement);
86    }
87
88    public void LoadMenuControlsKeyboard()
89    {
90        JRPG.Game.Keyboard.Listen(Key.Up, ButtonState.Pressed, MoveUp, null);
91        JRPG.Game.Keyboard.Listen(Key.Down, ButtonState.Pressed, MoveDown, null);
92        JRPG.Game.Keyboard.Listen(Key.Enter, ButtonState.Pressed, Selected, null);
93        JRPG.Game.Keyboard.Listen(Key.Z, ButtonState.Pressed, Selected, null);
94        JRPG.Game.Keyboard.Listen(Key.Space, ButtonState.Pressed, Selected, null);
95
96        JRPG.Game.Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate{
97            OnExit = true;
98            Selected();
99        }, null);
100        JRPG.Game.Keyboard.Listen(Key.X, ButtonState.Pressed, delegate
101        {
102            OnExit = true;
103            Selected();
104        }, null);
105    }
106    public void LoadMenuControlsXboxController()
107    {
108        JRPG.Game.ControllerOne.Listen(Button.DPadUp, ButtonState.Pressed, MoveUp, null);
109        JRPG.Game.ControllerOne.Listen(Button.DPadDown, ButtonState.Pressed, MoveDown, null);
110        JRPG.Game.ControllerOne.Listen(Button.A, ButtonState.Pressed, Selected, null);
111        JRPG.Game.ControllerOne.Listen(Button.Start, ButtonState.Pressed, Selected, null);
112
113        JRPG.Game.ControllerOne.Listen(Button.Back, ButtonState.Pressed, delegate
114        {
115            OnExit = true;
116            Selected();
117        }, null);
118        JRPG.Game.ControllerOne.Listen(Button.B, ButtonState.Pressed, delegate
119        {
120            OnExit = true;
121            Selected();
122        }, null);
123    }
124
125    void MoveUp()
126    {
127        if (SelectedItem > 0) SelectedItem--;
128        ChangeMenuItemColor();
129    }
130    void MoveDown()
131    {
132        if (SelectedItem < MenuElements.Count - 1) SelectedItem++;
133        ChangeMenuItemColor();
134    }
135    public void ChangeMenuItemColor()
136    {
137        for (int i = 0; i < MenuElements.Count; i++)
138        {
139            if (i != SelectedItem)
140            {
141                MenuElements[i].IsFlashing = false;
142                MenuElements[i].TextColor = TextLabelBase.TextColor;
143            }
144            else if (i == SelectedItem)
145            {
146                MenuElements[i].TextColor = Microsoft.Xna.Framework.Color.White;
147                MenuElements[i].IsFlashing = true;
148            }
149        }
150    }
151
152    void Selected()
153    {
154        JRPG.Game.ClearControls();
155
156        if (!Flags.InBattle)
157        {
158            JRPG.Game.LoadOWControlsKeyboard();
159            JRPG.Game.LoadOWControlsXboxController();
160        }
161        else if (Flags.InBattle)
162        {
163
164        }
165
166        if(!OnExit) ActionWhenSelected(SelectedItem);
167
168        if (MenuBackground != null) MenuBackground.Destroy();
169
170        for (int i = 0; i < MenuElements.Count; i++)
171        {
172            MenuElements[i].Destroy();
173        }
174    }
175
176    public Vector CalculateMenuCenter()
177    {
178        return new Vector(0, (MenuElements.Count - 1) * Offset / 2);
179    }
180}
Note: See TracBrowser for help on using the repository browser.