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

Revision 119, 3.9 KB (checked in by acarter, 2 years ago)

Committed in semi-stable state

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        public int[] sequence;
39        private int count;
40        /// <summary>
41        /// Creates an empty minigame factory.
42        /// </summary>
43        public MinigameFactory(int count = 11, int[] sequence = null)
44        {
45            this.count = count;
46            this.sequence = sequence;
47        }
48
49        /// <summary>
50        /// Resets the game.
51        /// </summary>
52        /// <param name="content"></param>
53        /// <param name="count"></param>
54        /// <param name="sequence"></param>
55        public void Reset(ContentManager content)
56        {
57            List<MiniGame> all = new List<MiniGame>();
58            foreach (MatchGame match in MatchGames)
59                all.Add(new Match(match));
60            foreach (BaseChangerGame baseChanger in BaseChangerGames)
61                all.Add(new BaseChanger(baseChanger));
62            // foreach (FSMGame fsm in FSMGames)
63            //    all.Add(new FSM(fsm));
64            foreach (BalanceGame balance in BalanceGames)
65                all.Add(new Balance(balance));
66            all.Add(new Wave1D());
67            if (sequence == null)
68            {
69                sequence = new int[count];
70                Random rgen = new Random();
71                for (int i = 0; i < count; ++i)
72                    sequence[i] = rgen.Next(all.Count - i);
73                sequence[0] = 0;
74            }
75
76            for (int i = 0; i < count; ++i)
77            {
78                minigames.Add(all[sequence[i]]);
79                all.RemoveAt(sequence[i]);
80            }
81            // minigames.Sort();
82
83            foreach (GameObject child in Children)
84            {
85                child.Visible = false;
86                child.InitializeAll(driver);
87                child.LoadAllContent(content);
88            }
89        }
90
91        /// <summary>
92        /// Loads the minigame content
93        /// </summary>
94        /// <param name="Content">The content manager</param>
95        public override void LoadContent(ContentManager Content)
96        {
97            BaseChangerGames = Content.Load<BaseChangerGame[]>("AppData/BaseChanger");
98            FSMGames = Content.Load<FSMGame[]>("AppData/FSM");
99            BalanceGames = Content.Load<BalanceGame[]>("AppData/Balance");
100            MatchGames = Content.Load<MatchGame[]>("AppData/Match");
101            base.LoadContent(Content);
102        }
103
104        /// <summary>
105        /// Which minigame is next.
106        /// </summary>
107        private int next = 0;
108        /// <summary>
109        /// Accessor method for minigames.
110        /// </summary>
111        /// <returns>Returns a minigame.</returns>
112        public MiniGame getMiniGame()
113        {
114            System.Diagnostics.Debug.Assert(next < minigames.Count);
115            // if (next >= minigames.Count)
116                // next = 0;
117            return minigames[next++];
118        }
119    }
120}
Note: See TracBrowser for help on using the browser.