source: 2013/27/TeemuM/Game/Game/Game/AudioPlayer.cs @ 4484

Revision 4484, 3.8 KB checked in by jumakall, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10class AudioPlayer
11{
12    private G game;
13    private int lastStartIndex = -1;
14
15    private Timer tick = new Timer();
16
17    private List<String> types = new List<String>();
18    private List<int> max = new List<int>();
19
20    public AudioPlayer(G game, int cInterval)
21    {
22        this.game = game;
23        tick.Interval = cInterval;
24    }
25
26    public bool RegisterType(String type, int maxValue)
27    {
28        if (maxValue < 0 || type == "")
29            return false;
30
31        types.Add(type);
32        max.Add(maxValue);
33
34        return true;
35    }
36
37    public bool Play(String type, bool force)
38    {
39        for (int i = 0; i < types.Count; i++)
40            if (types[i].ToLower() == type.ToLower())
41            {
42                if (force)
43                    game.MediaPlayer.Stop();
44
45                tick.Timeout += delegate() { Player(types[i], max[i]); };
46                tick.Start();
47                Player(types[i], max[i]);
48                return true;
49            }
50
51        return false;
52    }
53
54    public bool PlayEffect(String type)
55    {
56        for (int i = 0; i < types.Count; i++)
57            if (types[i].ToLower() == type.ToLower())
58            {
59                Game.LoadSoundEffect(type + RandomGen.NextInt(0, max[i])).Play();
60                return true;
61            }
62
63        return false;
64    }
65
66    public void Stop()
67    {
68        game.MediaPlayer.Stop();
69    }
70
71    public void PlayOne(String resource, bool stopAfterThis)
72    {
73        if (stopAfterThis)
74            tick.Stop();
75
76        game.MediaPlayer.Stop();
77        game.MediaPlayer.Play(resource);
78    }
79
80    public void SetCheckInterval(double interval)
81    {
82        tick.Interval = interval;
83    }
84
85    private void Player(string type, int max)
86    {
87        if (!game.MediaPlayer.IsPlaying)
88        {
89            lastStartIndex = RandomGen.NextInt(0, max + 1);
90            game.MediaPlayer.Play(type + lastStartIndex);
91        }
92    }
93
94    #region Console
95
96    private void Print(String txt)
97    {
98        game.MessageDisplay.Add(txt);
99    }
100
101    public bool Console(String command)
102    {
103        if (command.Length < 0)
104            return false;
105
106        String[] commands = command.Split(' ');
107        if (commands[0] == "play")
108        {
109            if (commands.Length < 2)
110                return false;
111
112            bool force = true;
113            if (commands.Length > 2)
114                if (commands[2] == "!force")
115                    force = true;
116
117            if (Play(commands[1], force))
118                Print("Playing " + commands[1] + " #" + lastStartIndex);
119            else
120                Print("Type \"" + commands[1] + "\" is not registered");
121        }
122        else if (commands[0] == "playone")
123        {
124            if (commands.Length < 2)
125                return false;
126
127            bool stop = false;
128            if (commands.Length > 2)
129                if (commands[2] == "stop")
130                    stop = true;
131
132            PlayOne(commands[1], stop);
133            Print("Playing " + commands[1]);
134        }
135        else if (commands[0] == "register")
136        {
137            if (commands.Length < 2)
138                return false;
139
140            if (commands[1] == "list")
141            {
142                if (types.Count > 0)
143                {
144                    Print("Registered types: ");
145                    foreach (string type in types)
146                        Print(type);
147                }
148                else { Print("No registered types"); }
149            }
150        }
151        else
152        {
153            return false;
154        }
155
156        return true;
157    }
158
159    #endregion
160}
Note: See TracBrowser for help on using the repository browser.