gosu 0.7.11 → 0.7.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gosu/Audio.hpp +33 -16
- data/Gosu/GraphicsBase.hpp +6 -1
- data/Gosu/Input.hpp +8 -2
- data/Gosu/Platform.hpp +63 -61
- data/Gosu/Window.hpp +11 -0
- data/GosuImpl/AudioFmod.cpp +89 -16
- data/GosuImpl/AudioSDL.cpp +59 -19
- data/GosuImpl/Graphics/BitmapUtils.cpp +3 -0
- data/GosuImpl/Graphics/Common.hpp +8 -3
- data/GosuImpl/Graphics/DrawOp.hpp +70 -7
- data/GosuImpl/Graphics/Graphics.cpp +34 -2
- data/GosuImpl/Graphics/TexChunk.cpp +7 -1
- data/GosuImpl/Graphics/Texture.cpp +31 -9
- data/GosuImpl/Iconv.hpp +3 -0
- data/GosuImpl/InputMac.mm +31 -10
- data/GosuImpl/InputWin.cpp +8 -0
- data/GosuImpl/InputX.cpp +64 -45
- data/GosuImpl/Math.cpp +1 -1
- data/GosuImpl/RubyGosu.swg +27 -7
- data/GosuImpl/RubyGosu_wrap.cxx +338 -205
- data/GosuImpl/Utility.cpp +1 -0
- data/GosuImpl/WindowMac.mm +29 -3
- data/GosuImpl/WindowWin.cpp +16 -5
- data/GosuImpl/WindowX.cpp +3 -3
- data/README.txt +7 -3
- data/Rakefile +2 -1
- data/mac/Gosu.icns +0 -0
- data/mac/Gosu.xcodeproj/jlnr.mode1v3 +74 -75
- data/mac/Gosu.xcodeproj/jlnr.pbxuser +731 -257
- data/mac/Gosu.xcodeproj/jlnr.perspectivev3 +1531 -0
- data/reference/Async_8hpp-source.html +1 -1
- data/reference/Audio_8hpp-source.html +68 -58
- data/reference/Audio_8hpp.html +1 -1
- data/reference/AutoLink_8hpp-source.html +1 -1
- data/reference/AutoLink_8hpp.html +1 -1
- data/reference/Bitmap_8hpp-source.html +1 -1
- data/reference/Bitmap_8hpp.html +1 -1
- data/reference/ButtonsMac_8hpp-source.html +1 -1
- data/reference/ButtonsWin_8hpp-source.html +1 -1
- data/reference/ButtonsX_8hpp-source.html +1 -1
- data/reference/Color_8hpp-source.html +1 -1
- data/reference/Color_8hpp.html +1 -1
- data/reference/Directories_8hpp-source.html +1 -1
- data/reference/Directories_8hpp.html +1 -1
- data/reference/Font_8hpp-source.html +1 -1
- data/reference/Font_8hpp.html +1 -1
- data/reference/Fwd_8hpp-source.html +1 -1
- data/reference/Fwd_8hpp.html +1 -1
- data/reference/Gosu_8hpp-source.html +1 -1
- data/reference/Gosu_8hpp.html +1 -1
- data/reference/GraphicsBase_8hpp-source.html +28 -26
- data/reference/GraphicsBase_8hpp.html +4 -1
- data/reference/Graphics_8hpp-source.html +1 -1
- data/reference/Graphics_8hpp.html +1 -1
- data/reference/IO_8hpp-source.html +1 -1
- data/reference/IO_8hpp.html +1 -1
- data/reference/ImageData_8hpp-source.html +1 -1
- data/reference/ImageData_8hpp.html +1 -1
- data/reference/Image_8hpp-source.html +1 -1
- data/reference/Image_8hpp.html +1 -1
- data/reference/Input_8hpp-source.html +19 -16
- data/reference/Input_8hpp.html +1 -1
- data/reference/Math_8hpp-source.html +1 -1
- data/reference/Math_8hpp.html +1 -1
- data/reference/Platform_8hpp-source.html +22 -20
- data/reference/Platform_8hpp.html +1 -1
- data/reference/RotFlip_8hpp-source.html +1 -1
- data/reference/RotFlip_8hpp.html +1 -1
- data/reference/Sockets_8hpp-source.html +1 -1
- data/reference/Sockets_8hpp.html +1 -1
- data/reference/TextInput_8hpp-source.html +1 -1
- data/reference/TextInput_8hpp.html +1 -1
- data/reference/Text_8hpp-source.html +1 -1
- data/reference/Text_8hpp.html +1 -1
- data/reference/Timing_8hpp-source.html +1 -1
- data/reference/Timing_8hpp.html +1 -1
- data/reference/Utility_8hpp-source.html +1 -1
- data/reference/Utility_8hpp.html +1 -1
- data/reference/WinUtility_8hpp-source.html +1 -1
- data/reference/WinUtility_8hpp.html +1 -1
- data/reference/Window_8hpp-source.html +67 -56
- data/reference/Window_8hpp.html +1 -1
- data/reference/annotated.html +1 -1
- data/reference/classGosu_1_1Audio-members.html +1 -1
- data/reference/classGosu_1_1Audio.html +1 -1
- data/reference/classGosu_1_1Bitmap-members.html +1 -1
- data/reference/classGosu_1_1Bitmap.html +1 -1
- data/reference/classGosu_1_1Buffer-members.html +1 -1
- data/reference/classGosu_1_1Buffer.html +1 -1
- data/reference/classGosu_1_1Button-members.html +1 -1
- data/reference/classGosu_1_1Button.html +1 -1
- data/reference/classGosu_1_1Color-members.html +1 -1
- data/reference/classGosu_1_1Color.html +1 -1
- data/reference/classGosu_1_1File-members.html +1 -1
- data/reference/classGosu_1_1File.html +1 -1
- data/reference/classGosu_1_1Font-members.html +1 -1
- data/reference/classGosu_1_1Font.html +1 -1
- data/reference/classGosu_1_1Graphics-members.html +1 -1
- data/reference/classGosu_1_1Graphics.html +1 -1
- data/reference/classGosu_1_1Image-members.html +1 -1
- data/reference/classGosu_1_1Image.html +1 -1
- data/reference/classGosu_1_1ImageData-members.html +1 -1
- data/reference/classGosu_1_1ImageData.html +1 -1
- data/reference/classGosu_1_1Input-members.html +2 -1
- data/reference/classGosu_1_1Input.html +34 -1
- data/reference/classGosu_1_1MessageSocket-members.html +1 -1
- data/reference/classGosu_1_1MessageSocket.html +1 -1
- data/reference/classGosu_1_1Resource-members.html +1 -1
- data/reference/classGosu_1_1Resource.html +1 -1
- data/reference/classGosu_1_1Sample-members.html +3 -3
- data/reference/classGosu_1_1Sample.html +23 -11
- data/reference/classGosu_1_1SampleInstance-members.html +4 -1
- data/reference/classGosu_1_1SampleInstance.html +11 -2
- data/reference/classGosu_1_1Song-members.html +5 -2
- data/reference/classGosu_1_1Song.html +78 -7
- data/reference/classGosu_1_1TextInput-members.html +1 -1
- data/reference/classGosu_1_1TextInput.html +1 -1
- data/reference/classGosu_1_1Window-members.html +1 -1
- data/reference/classGosu_1_1Window.html +1 -1
- data/reference/files.html +1 -1
- data/reference/functions.html +14 -6
- data/reference/functions_enum.html +1 -1
- data/reference/functions_func.html +14 -6
- data/reference/functions_vars.html +1 -1
- data/reference/hierarchy.html +1 -1
- data/reference/index.html +1 -1
- data/reference/namespaceGosu.html +20 -1
- data/reference/namespaceGosu_1_1Colors.html +1 -1
- data/reference/namespaceGosu_1_1Win.html +1 -1
- data/reference/namespacemembers.html +3 -1
- data/reference/namespacemembers_enum.html +1 -1
- data/reference/namespacemembers_eval.html +1 -1
- data/reference/namespacemembers_func.html +1 -1
- data/reference/namespacemembers_type.html +1 -1
- data/reference/namespacemembers_vars.html +3 -1
- data/reference/namespaces.html +1 -1
- data/windows/Gosu.sln +2 -2
- data/windows/Gosu.vcproj +8 -7
- data/windows/RubyGosu.vcproj +5 -5
- metadata +4 -3
- data/GosuImpl/Utility.cpp~RF6c566.TMP +0 -95
data/Gosu/Audio.hpp
CHANGED
|
@@ -40,12 +40,16 @@ namespace Gosu
|
|
|
40
40
|
class SampleInstance
|
|
41
41
|
{
|
|
42
42
|
int handle, extra;
|
|
43
|
-
|
|
43
|
+
bool alive() const;
|
|
44
|
+
|
|
44
45
|
public:
|
|
45
46
|
//! Called by Sample, do not use.
|
|
46
47
|
SampleInstance(int handle, int extra);
|
|
47
48
|
|
|
48
49
|
bool playing() const;
|
|
50
|
+
bool paused() const;
|
|
51
|
+
void pause();
|
|
52
|
+
void resume();
|
|
49
53
|
void stop();
|
|
50
54
|
|
|
51
55
|
//! \param volume Can be anything from 0.0 (silence) to 1.0 (full
|
|
@@ -54,14 +58,14 @@ namespace Gosu
|
|
|
54
58
|
//! \param pan Can be anything from -1.0 (left) to 1.0 (right).
|
|
55
59
|
void changePan(double pan);
|
|
56
60
|
//! \param speed Playback speed is only limited by FMOD's
|
|
57
|
-
//!
|
|
61
|
+
//! capabilities and can accept very high or low values. Use 1.0 for
|
|
58
62
|
//! normal playback speed.
|
|
59
63
|
void changeSpeed(double speed);
|
|
60
64
|
};
|
|
61
65
|
|
|
62
66
|
//! A sample is a short sound that is completely loaded in memory, can be
|
|
63
67
|
//! played multiple times at once and offers very flexible playback
|
|
64
|
-
//! parameters.
|
|
68
|
+
//! parameters. Use samples for everything that's not music.
|
|
65
69
|
class Sample
|
|
66
70
|
{
|
|
67
71
|
struct SampleData;
|
|
@@ -82,20 +86,22 @@ namespace Gosu
|
|
|
82
86
|
//! \param volume Can be anything from 0.0 (silence) to 1.0 (full
|
|
83
87
|
//! volume).
|
|
84
88
|
//! \param speed Playback speed is only limited by FMOD's
|
|
85
|
-
//!
|
|
89
|
+
//! capabilities and can accept very high or low values. Use 1.0 for
|
|
86
90
|
//! normal playback speed.
|
|
87
|
-
SampleInstance play(double volume = 1, double speed = 1
|
|
91
|
+
SampleInstance play(double volume = 1, double speed = 1,
|
|
92
|
+
bool looping = false) const;
|
|
88
93
|
|
|
89
94
|
//! Plays the sample with panning. Even if pan is 0.0, the sample will
|
|
90
95
|
//! not be as loud as if it were played by calling play() due to the
|
|
91
|
-
//! way
|
|
96
|
+
//! way the panning works.
|
|
92
97
|
//! \param pan Can be anything from -1.0 (left) to 1.0 (right).
|
|
93
98
|
//! \param volume Can be anything from 0.0 (silence) to 1.0 (full
|
|
94
99
|
//! volume).
|
|
95
|
-
//! \param speed Playback speed is only limited by FMOD's
|
|
96
|
-
//!
|
|
97
|
-
//! normal playback speed.
|
|
98
|
-
SampleInstance playPan(double pan, double volume = 1, double speed = 1
|
|
100
|
+
//! \param speed Playback speed is only limited by FMOD's (or
|
|
101
|
+
//! SDL_mixer's, respectively) capabilities and can accept very high
|
|
102
|
+
//! or low values. Use 1.0 for normal playback speed.
|
|
103
|
+
SampleInstance playPan(double pan, double volume = 1, double speed = 1,
|
|
104
|
+
bool looping = false) const;
|
|
99
105
|
};
|
|
100
106
|
|
|
101
107
|
//! Songs are less flexible than samples in that they can only be played
|
|
@@ -126,12 +132,23 @@ namespace Gosu
|
|
|
126
132
|
Song(Audio&, Type type, Reader reader);
|
|
127
133
|
|
|
128
134
|
~Song();
|
|
129
|
-
|
|
130
|
-
//!
|
|
131
|
-
//!
|
|
132
|
-
//!
|
|
133
|
-
|
|
134
|
-
|
|
135
|
+
|
|
136
|
+
//! Returns the song currently being played or paused, or 0 if
|
|
137
|
+
//! no song has been played yet or the last song has finished
|
|
138
|
+
//! playing.
|
|
139
|
+
static Song* currentSong();
|
|
140
|
+
|
|
141
|
+
//! Starts or resumes playback of the song. This will stop all other
|
|
142
|
+
//! songs and set the current song to this object.
|
|
143
|
+
void play(bool looping = false);
|
|
144
|
+
//! Pauses playback of the song. It is not considered being played.
|
|
145
|
+
//! currentSong will stay the same.
|
|
146
|
+
void pause();
|
|
147
|
+
//! Returns true if the song is the current song, but in paused
|
|
148
|
+
//! mode.
|
|
149
|
+
bool paused() const;
|
|
150
|
+
//! Stops playback of this song if it is currently played or paused.
|
|
151
|
+
//! Afterwards, currentSong will return 0.
|
|
135
152
|
void stop();
|
|
136
153
|
//! Returns if the song is currently playing.
|
|
137
154
|
bool playing() const;
|
data/Gosu/GraphicsBase.hpp
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
#ifndef GOSU_GRAPHICSBASE_HPP
|
|
5
5
|
#define GOSU_GRAPHICSBASE_HPP
|
|
6
6
|
|
|
7
|
-
#include <
|
|
7
|
+
#include <limits>
|
|
8
8
|
|
|
9
9
|
namespace Gosu
|
|
10
10
|
{
|
|
@@ -12,6 +12,11 @@ namespace Gosu
|
|
|
12
12
|
//! system. Draw calls with higher ZPos values will cover those with a
|
|
13
13
|
//! lower ZPos value, that is, they are performed last.
|
|
14
14
|
typedef double ZPos;
|
|
15
|
+
|
|
16
|
+
//! The lowest possible Z position. By using this, you tell Gosu that
|
|
17
|
+
//! your drawing operation does not need Z ordering and can be performed
|
|
18
|
+
//! immediately.
|
|
19
|
+
const double zImmediate = -std::numeric_limits<double>::infinity();
|
|
15
20
|
|
|
16
21
|
//! Determines the way colors are combined when one is drawn onto
|
|
17
22
|
//! another.
|
data/Gosu/Input.hpp
CHANGED
|
@@ -76,8 +76,8 @@ namespace Gosu
|
|
|
76
76
|
#endif
|
|
77
77
|
|
|
78
78
|
#ifdef GOSU_IS_X
|
|
79
|
-
Input(::Display*
|
|
80
|
-
bool feedXEvent(::XEvent& event
|
|
79
|
+
Input(::Display* display, ::Window window);
|
|
80
|
+
bool feedXEvent(::XEvent& event);
|
|
81
81
|
#endif
|
|
82
82
|
|
|
83
83
|
~Input();
|
|
@@ -96,6 +96,12 @@ namespace Gosu
|
|
|
96
96
|
double mouseX() const;
|
|
97
97
|
//! See mouseX.
|
|
98
98
|
double mouseY() const;
|
|
99
|
+
|
|
100
|
+
//! Immediately moves the mouse as far towards the desired position
|
|
101
|
+
//! as possible. x and y are relativ to the window just as in the mouse
|
|
102
|
+
//! position accessors.
|
|
103
|
+
void setMousePosition(double x, double y);
|
|
104
|
+
|
|
99
105
|
// Undocumented for the moment.
|
|
100
106
|
void setMouseFactors(double factorX, double factorY);
|
|
101
107
|
|
data/Gosu/Platform.hpp
CHANGED
|
@@ -1,61 +1,63 @@
|
|
|
1
|
-
//! \file Platform.hpp
|
|
2
|
-
//! Macros and utility functions to facilitate programming on all of Gosu's supported platforms.
|
|
3
|
-
|
|
4
|
-
#ifndef GOSU_PLATFORM_HPP
|
|
5
|
-
#define GOSU_PLATFORM_HPP
|
|
6
|
-
|
|
7
|
-
#ifdef __BIG_ENDIAN__
|
|
8
|
-
#define IDENTITY_FUN bigToNative
|
|
9
|
-
#define IDENTITY_FUN2 nativeToBig
|
|
10
|
-
#define CONV_FUN littleToNative
|
|
11
|
-
#define CONV_FUN2 nativeToLittle
|
|
12
|
-
#else
|
|
13
|
-
#define IDENTITY_FUN littleToNative
|
|
14
|
-
#define IDENTITY_FUN2 nativeToLittle
|
|
15
|
-
#define CONV_FUN bigToNative
|
|
16
|
-
#define CONV_FUN2 nativeToBig
|
|
17
|
-
#endif
|
|
18
|
-
|
|
19
|
-
#include <algorithm>
|
|
20
|
-
|
|
21
|
-
namespace Gosu
|
|
22
|
-
{
|
|
23
|
-
template<typename T> T IDENTITY_FUN(T t) { return t; }
|
|
24
|
-
template<typename T> T IDENTITY_FUN2(T t) { return t; }
|
|
25
|
-
|
|
26
|
-
template<typename T>
|
|
27
|
-
T CONV_FUN(T t)
|
|
28
|
-
{
|
|
29
|
-
char* begin = reinterpret_cast<char*>(&t);
|
|
30
|
-
std::reverse(begin, begin + sizeof t);
|
|
31
|
-
return t;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
template<typename T> T CONV_FUN2(T t) { return CONV_FUN(t); }
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
#undef IDENTITY_FUN
|
|
38
|
-
#undef IDENTITY_FUN2
|
|
39
|
-
#undef CONV_FUN
|
|
40
|
-
#undef CONV_FUN2
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
-
#define GOSU_NORETURN __declspec(noreturn)
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
#
|
|
47
|
-
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
# define
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
# define
|
|
56
|
-
#
|
|
57
|
-
#
|
|
58
|
-
#
|
|
59
|
-
#endif
|
|
60
|
-
|
|
61
|
-
#endif
|
|
1
|
+
//! \file Platform.hpp
|
|
2
|
+
//! Macros and utility functions to facilitate programming on all of Gosu's supported platforms.
|
|
3
|
+
|
|
4
|
+
#ifndef GOSU_PLATFORM_HPP
|
|
5
|
+
#define GOSU_PLATFORM_HPP
|
|
6
|
+
|
|
7
|
+
#ifdef __BIG_ENDIAN__
|
|
8
|
+
#define IDENTITY_FUN bigToNative
|
|
9
|
+
#define IDENTITY_FUN2 nativeToBig
|
|
10
|
+
#define CONV_FUN littleToNative
|
|
11
|
+
#define CONV_FUN2 nativeToLittle
|
|
12
|
+
#else
|
|
13
|
+
#define IDENTITY_FUN littleToNative
|
|
14
|
+
#define IDENTITY_FUN2 nativeToLittle
|
|
15
|
+
#define CONV_FUN bigToNative
|
|
16
|
+
#define CONV_FUN2 nativeToBig
|
|
17
|
+
#endif
|
|
18
|
+
|
|
19
|
+
#include <algorithm>
|
|
20
|
+
|
|
21
|
+
namespace Gosu
|
|
22
|
+
{
|
|
23
|
+
template<typename T> T IDENTITY_FUN(T t) { return t; }
|
|
24
|
+
template<typename T> T IDENTITY_FUN2(T t) { return t; }
|
|
25
|
+
|
|
26
|
+
template<typename T>
|
|
27
|
+
T CONV_FUN(T t)
|
|
28
|
+
{
|
|
29
|
+
char* begin = reinterpret_cast<char*>(&t);
|
|
30
|
+
std::reverse(begin, begin + sizeof t);
|
|
31
|
+
return t;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
template<typename T> T CONV_FUN2(T t) { return CONV_FUN(t); }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
#undef IDENTITY_FUN
|
|
38
|
+
#undef IDENTITY_FUN2
|
|
39
|
+
#undef CONV_FUN
|
|
40
|
+
#undef CONV_FUN2
|
|
41
|
+
|
|
42
|
+
#if defined(_MSC_VER)
|
|
43
|
+
#define GOSU_NORETURN __declspec(noreturn)
|
|
44
|
+
#elif defined(__GNUC__)
|
|
45
|
+
#define GOSU_NORETURN __attribute__ ((noreturn))
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
#if defined(WIN32)
|
|
49
|
+
# define GOSU_IS_WIN
|
|
50
|
+
#else
|
|
51
|
+
# define GOSU_IS_UNIX
|
|
52
|
+
# if defined(__linux) || defined(__FreeBSD__)
|
|
53
|
+
# define GOSU_IS_X
|
|
54
|
+
# else
|
|
55
|
+
# define GOSU_IS_MAC
|
|
56
|
+
# include <TargetConditionals.h>
|
|
57
|
+
# if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
|
|
58
|
+
# define GOSU_IS_IPHONE
|
|
59
|
+
# endif
|
|
60
|
+
# endif
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
#endif
|
data/Gosu/Window.hpp
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
#include <boost/shared_ptr.hpp>
|
|
12
12
|
#include <boost/function.hpp>
|
|
13
13
|
#include <string>
|
|
14
|
+
#include <vector>
|
|
14
15
|
|
|
15
16
|
#ifdef GOSU_IS_WIN
|
|
16
17
|
#include <windows.h>
|
|
@@ -18,6 +19,11 @@
|
|
|
18
19
|
|
|
19
20
|
namespace Gosu
|
|
20
21
|
{
|
|
22
|
+
#ifdef GOSU_IS_IPHONE
|
|
23
|
+
struct Touch { double x, y; };
|
|
24
|
+
typedef std::vector<Touch> Touches;
|
|
25
|
+
#endif
|
|
26
|
+
|
|
21
27
|
//! Convenient all-in-one class that serves as the foundation of a standard
|
|
22
28
|
//! Gosu application. Manages initialization of all of Gosu's core components
|
|
23
29
|
//! and provides timing functionality.
|
|
@@ -76,6 +82,11 @@ namespace Gosu
|
|
|
76
82
|
typedef boost::shared_ptr<boost::function<void()> > SharedContext;
|
|
77
83
|
SharedContext createSharedContext();
|
|
78
84
|
#endif
|
|
85
|
+
#ifdef GOSU_IS_IPHONE
|
|
86
|
+
virtual void touchesBegan(const Touches& touches) {}
|
|
87
|
+
virtual void touchesMoved(const Touches& touches) {}
|
|
88
|
+
virtual void touchesEnded(const Touches& touches) {}
|
|
89
|
+
#endif
|
|
79
90
|
|
|
80
91
|
#endif
|
|
81
92
|
};
|
data/GosuImpl/AudioFmod.cpp
CHANGED
|
@@ -96,6 +96,21 @@ bool Gosu::SampleInstance::playing() const
|
|
|
96
96
|
return FSOUND_IsPlaying(handle);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
bool Gosu::SampleInstance::paused() const
|
|
100
|
+
{
|
|
101
|
+
return FSOUND_GetPaused(handle);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void Gosu::SampleInstance::pause()
|
|
105
|
+
{
|
|
106
|
+
FSOUND_SetPaused(handle, 1);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
void Gosu::SampleInstance::resume()
|
|
110
|
+
{
|
|
111
|
+
FSOUND_SetPaused(handle, 0);
|
|
112
|
+
}
|
|
113
|
+
|
|
99
114
|
void Gosu::SampleInstance::stop()
|
|
100
115
|
{
|
|
101
116
|
FSOUND_StopSound(handle);
|
|
@@ -164,12 +179,15 @@ Gosu::Sample::~Sample()
|
|
|
164
179
|
{
|
|
165
180
|
}
|
|
166
181
|
|
|
167
|
-
Gosu::SampleInstance Gosu::Sample::play(double volume, double speed
|
|
182
|
+
Gosu::SampleInstance Gosu::Sample::play(double volume, double speed,
|
|
183
|
+
bool looping) const
|
|
168
184
|
{
|
|
169
185
|
int handle = FSOUND_PlaySound(FSOUND_FREE, data->rep);
|
|
170
186
|
int freq;
|
|
171
187
|
if (handle > 0)
|
|
172
188
|
{
|
|
189
|
+
if (looping)
|
|
190
|
+
FSOUND_SetLoopMode(handle, FSOUND_LOOP_NORMAL);
|
|
173
191
|
freq = FSOUND_GetFrequency(handle);
|
|
174
192
|
FSOUND_SetPan(handle, FSOUND_STEREOPAN);
|
|
175
193
|
}
|
|
@@ -180,12 +198,15 @@ Gosu::SampleInstance Gosu::Sample::play(double volume, double speed) const
|
|
|
180
198
|
return result;
|
|
181
199
|
}
|
|
182
200
|
|
|
183
|
-
Gosu::SampleInstance Gosu::Sample::playPan(double pan, double volume,
|
|
201
|
+
Gosu::SampleInstance Gosu::Sample::playPan(double pan, double volume,
|
|
202
|
+
double speed, bool looping) const
|
|
184
203
|
{
|
|
185
204
|
int handle = FSOUND_PlaySound(FSOUND_FREE, data->rep);
|
|
186
205
|
int freq;
|
|
187
206
|
if (handle > 0)
|
|
188
207
|
{
|
|
208
|
+
if (looping)
|
|
209
|
+
FSOUND_SetLoopMode(handle, FSOUND_LOOP_NORMAL);
|
|
189
210
|
freq = FSOUND_GetFrequency(handle);
|
|
190
211
|
}
|
|
191
212
|
|
|
@@ -207,7 +228,9 @@ protected:
|
|
|
207
228
|
public:
|
|
208
229
|
virtual ~BaseData() {}
|
|
209
230
|
|
|
210
|
-
virtual void play() = 0;
|
|
231
|
+
virtual void play(bool looping) = 0;
|
|
232
|
+
virtual void pause() = 0;
|
|
233
|
+
virtual bool paused() const = 0;
|
|
211
234
|
virtual void stop() = 0;
|
|
212
235
|
|
|
213
236
|
double volume() const
|
|
@@ -254,8 +277,8 @@ public:
|
|
|
254
277
|
}
|
|
255
278
|
#endif
|
|
256
279
|
|
|
257
|
-
stream = FSOUND_Stream_Open(&buffer[0], FSOUND_LOADMEMORY
|
|
258
|
-
buffer.size());
|
|
280
|
+
stream = FSOUND_Stream_Open(&buffer[0], FSOUND_LOADMEMORY | FSOUND_LOOP_NORMAL,
|
|
281
|
+
0, buffer.size());
|
|
259
282
|
if (stream == 0)
|
|
260
283
|
throwLastFMODError();
|
|
261
284
|
|
|
@@ -274,15 +297,33 @@ public:
|
|
|
274
297
|
FSOUND_Stream_Close(stream);
|
|
275
298
|
}
|
|
276
299
|
|
|
277
|
-
void play()
|
|
300
|
+
void play(bool looping)
|
|
278
301
|
{
|
|
279
|
-
handle
|
|
302
|
+
if (handle == -1)
|
|
303
|
+
{
|
|
304
|
+
handle = FSOUND_Stream_Play(FSOUND_FREE, stream);
|
|
305
|
+
FSOUND_Stream_SetLoopCount(stream, looping ? -1 : 0);
|
|
306
|
+
}
|
|
307
|
+
else if (paused())
|
|
308
|
+
FSOUND_SetPaused(handle, 0);
|
|
280
309
|
applyVolume();
|
|
281
310
|
}
|
|
282
311
|
|
|
312
|
+
void pause()
|
|
313
|
+
{
|
|
314
|
+
if (handle != -1)
|
|
315
|
+
FSOUND_SetPaused(handle, 1);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
bool paused() const
|
|
319
|
+
{
|
|
320
|
+
return handle != -1 && FSOUND_GetPaused(handle);
|
|
321
|
+
}
|
|
322
|
+
|
|
283
323
|
void stop()
|
|
284
324
|
{
|
|
285
325
|
fmodCheck(FSOUND_Stream_Stop(stream));
|
|
326
|
+
handle = -1; // The end callback is NOT being called!
|
|
286
327
|
}
|
|
287
328
|
|
|
288
329
|
void applyVolume()
|
|
@@ -321,15 +362,30 @@ public:
|
|
|
321
362
|
FMUSIC_FreeSong(module_);
|
|
322
363
|
}
|
|
323
364
|
|
|
324
|
-
void play()
|
|
365
|
+
void play(bool looping)
|
|
325
366
|
{
|
|
326
|
-
|
|
367
|
+
if (paused())
|
|
368
|
+
FMUSIC_SetPaused(module_, 0);
|
|
369
|
+
else
|
|
370
|
+
FMUSIC_PlaySong(module_);
|
|
371
|
+
FMUSIC_SetLooping(module_, looping);
|
|
327
372
|
applyVolume();
|
|
328
373
|
}
|
|
374
|
+
|
|
375
|
+
void pause()
|
|
376
|
+
{
|
|
377
|
+
FMUSIC_SetPaused(module_, 1);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
bool paused() const
|
|
381
|
+
{
|
|
382
|
+
return FMUSIC_GetPaused(module_);
|
|
383
|
+
}
|
|
329
384
|
|
|
330
385
|
void stop()
|
|
331
386
|
{
|
|
332
387
|
fmodCheck(FMUSIC_StopSong(module_));
|
|
388
|
+
FMUSIC_SetPaused(module_, false);
|
|
333
389
|
}
|
|
334
390
|
|
|
335
391
|
void applyVolume()
|
|
@@ -381,20 +437,37 @@ Gosu::Song::~Song()
|
|
|
381
437
|
stop();
|
|
382
438
|
}
|
|
383
439
|
|
|
384
|
-
|
|
440
|
+
Gosu::Song* Gosu::Song::currentSong()
|
|
385
441
|
{
|
|
386
|
-
|
|
442
|
+
return curSong;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
void Gosu::Song::play(bool looping)
|
|
446
|
+
{
|
|
447
|
+
if (curSong && curSong != this)
|
|
448
|
+
{
|
|
387
449
|
curSong->stop();
|
|
450
|
+
assert(curSong == 0);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
data->play(looping);
|
|
454
|
+
curSong = this; // may be redundant
|
|
455
|
+
}
|
|
388
456
|
|
|
389
|
-
|
|
457
|
+
void Gosu::Song::pause()
|
|
458
|
+
{
|
|
459
|
+
if (curSong == this)
|
|
460
|
+
data->pause(); // may be redundant
|
|
461
|
+
}
|
|
390
462
|
|
|
391
|
-
|
|
392
|
-
|
|
463
|
+
bool Gosu::Song::paused() const
|
|
464
|
+
{
|
|
465
|
+
return curSong == this && data->paused();
|
|
393
466
|
}
|
|
394
467
|
|
|
395
468
|
void Gosu::Song::stop()
|
|
396
469
|
{
|
|
397
|
-
if (
|
|
470
|
+
if (curSong == this)
|
|
398
471
|
{
|
|
399
472
|
data->stop();
|
|
400
473
|
curSong = 0;
|
|
@@ -403,7 +476,7 @@ void Gosu::Song::stop()
|
|
|
403
476
|
|
|
404
477
|
bool Gosu::Song::playing() const
|
|
405
478
|
{
|
|
406
|
-
return curSong == this;
|
|
479
|
+
return curSong == this && !data->paused();
|
|
407
480
|
}
|
|
408
481
|
|
|
409
482
|
double Gosu::Song::volume() const
|