root/Code/oMaE/oMaE/MinigameFactory.cs @ 166

Revision 166, 5.0 KB (checked in by kvigue, 23 months ago)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6using Microsoft.Xna.Framework;
7using Microsoft.Xna.Framework.Audio;
8using Microsoft.Xna.Framework.Content;
9using Microsoft.Xna.Framework.GamerServices;
10using Microsoft.Xna.Framework.Graphics;
11using Microsoft.Xna.Framework.Input;
12using Microsoft.Xna.Framework.Media;
13using oMaE.MiniGames;
14using Serializables;
15namespace oMaE
16{
17    /// <summary>
18    /// A class for creating new minigames.
19    /// </summary>
20    public class MinigameFactory : GameObject
21    {
22        private BaseChangerGame[] BaseChangerGames;
23        private FSMGame[] FSMGames;
24        private BalanceGame[] BalanceGames;
25        private MatchGame[] MatchGames;
26
27        private List<MiniGame> minigames = new List<MiniGame>();
28        /// <summary>
29        /// Overriding the children to all be minigames.
30        /// </summary>
31        public override IEnumerable<GameObject> Children
32        {
33            get
34            {
35                return minigames;
36            }
37        }
38        private int count;
39        /// <summary>
40        /// Creates an empty minigame factory.
41        /// </summary>
42        public MinigameFactory(int count = 11)
43        {
44            this.count = count;
45        }
46
47        /// <summary>
48        /// Resets the game.
49        /// </summary>
50        /// <param name="content"></param>
51        /// <param name="save"></param>
52        public void Reset(ContentManager content, Save save)
53        {
54            List<MiniGame> all = new List<MiniGame>();
55            if(save.Options.Contains("Match"))
56                foreach (MatchGame match in MatchGames)
57                    all.Add(new Match(match));
58            if (save.Options.Contains("Base Changer"))
59                foreach (BaseChangerGame baseChanger in BaseChangerGames)
60                    all.Add(new BaseChanger(baseChanger));
61            if (save.Options.Contains("Balance"))
62                foreach (BalanceGame balance in BalanceGames)
63                    all.Add(new Balance(balance));
64            if (save.Options.Contains("Waves"))
65            {
66                all.Add(new Wave1D());
67                all.Add(new Wave2D());
68            }
69            if (save.Options.Contains("Energy"))
70            {
71                all.Add(new EnergyTransfer(0));
72                all.Add(new EnergyTransfer(1));
73                all.Add(new EnergyTransfer(2));
74                all.Add(new EnergyTransfer(3));
75            }
76            if(save.Options.Contains("Life"))
77                all.Add(new Life());
78            //if (save.Options.Contains("FSM"))
79            //    foreach (FSMGame fsm in FSMGames)
80            //        all.Add(new FSM(fsm));
81
82            // fills with FSM games...
83            //while(all.Count < count)
84            //    foreach (FSMGame fsm in FSMGames)
85            //        all.Add(new FSM(fsm));
86
87            if (save.Sequence == null)
88            {
89                save.Sequence = new int[count];
90                save.Completed = new bool[count];
91                Random rgen = new Random();
92                for (int i = 0; i < count && all.Count > i; ++i)
93                {
94                    save.Sequence[i] = rgen.Next(all.Count - i);
95                    save.Completed[i] = false;
96                }
97            }
98            for (int i = 0; i < count && all.Count > 0; ++i)
99            {
100                all[save.Sequence[i]].Completed = save != null && save.Completed[i];
101                minigames.Add(all[save.Sequence[i]]);
102                all.RemoveAt(save.Sequence[i]);
103            }
104            // minigames.Sort();
105
106            foreach (GameObject child in Children)
107            {
108                child.Visible = false;
109                child.InitializeAll(driver);
110                child.LoadAllContent(content);
111            }
112        }
113
114        /// <summary>
115        /// Loads the minigame content
116        /// </summary>
117        /// <param name="Content">The content manager</param>
118        public override void LoadContent(ContentManager Content)
119        {
120            BaseChangerGames = Content.Load<BaseChangerGame[]>("AppData/BaseChanger");
121            //FSMGames = Content.Load<FSMGame[]>("AppData/FSM");
122            BalanceGames = Content.Load<BalanceGame[]>("AppData/Balance");
123            MatchGames = Content.Load<MatchGame[]>("AppData/Match");
124            base.LoadContent(Content);
125        }
126
127        /// <summary>
128        /// Which minigame is next.
129        /// </summary>
130        private int next = 0;
131        /// <summary>
132        /// Accessor method for minigames.
133        /// </summary>
134        /// <returns>Returns a minigame.</returns>
135        public MiniGame getMiniGame()
136        {
137            // System.Diagnostics.Debug.Assert(next < minigames.Count);
138            if (next >= minigames.Count)
139                next = 0;
140            minigames[next].Index = next;
141            return minigames[next++];
142        }
143    }
144}
Note: See TracBrowser for help on using the browser.