gosu 0.7.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. data/COPYING.txt +29 -0
  2. data/Gosu/Async.hpp +48 -0
  3. data/Gosu/Audio.hpp +145 -0
  4. data/Gosu/AutoLink.hpp +16 -0
  5. data/Gosu/Bitmap.hpp +85 -0
  6. data/Gosu/ButtonsMac.hpp +114 -0
  7. data/Gosu/ButtonsWin.hpp +111 -0
  8. data/Gosu/ButtonsX.hpp +115 -0
  9. data/Gosu/Color.hpp +172 -0
  10. data/Gosu/Directories.hpp +36 -0
  11. data/Gosu/Font.hpp +59 -0
  12. data/Gosu/Fwd.hpp +31 -0
  13. data/Gosu/Gosu.hpp +26 -0
  14. data/Gosu/Graphics.hpp +86 -0
  15. data/Gosu/GraphicsBase.hpp +45 -0
  16. data/Gosu/IO.hpp +255 -0
  17. data/Gosu/Image.hpp +148 -0
  18. data/Gosu/ImageData.hpp +45 -0
  19. data/Gosu/Input.hpp +116 -0
  20. data/Gosu/Math.hpp +95 -0
  21. data/Gosu/Platform.hpp +61 -0
  22. data/Gosu/RotFlip.hpp +116 -0
  23. data/Gosu/Sockets.hpp +129 -0
  24. data/Gosu/Text.hpp +47 -0
  25. data/Gosu/TextInput.hpp +57 -0
  26. data/Gosu/Timing.hpp +16 -0
  27. data/Gosu/Utility.hpp +24 -0
  28. data/Gosu/WinUtility.hpp +76 -0
  29. data/Gosu/Window.hpp +84 -0
  30. data/GosuImpl/Async.cpp +37 -0
  31. data/GosuImpl/AudioFmod.cpp +417 -0
  32. data/GosuImpl/AudioSDL.cpp +255 -0
  33. data/GosuImpl/DirectoriesMac.mm +38 -0
  34. data/GosuImpl/DirectoriesUnix.cpp +48 -0
  35. data/GosuImpl/DirectoriesWin.cpp +42 -0
  36. data/GosuImpl/FileUnix.cpp +100 -0
  37. data/GosuImpl/FileWin.cpp +83 -0
  38. data/GosuImpl/Graphics/Bitmap.cpp +116 -0
  39. data/GosuImpl/Graphics/BitmapBMP.cpp +232 -0
  40. data/GosuImpl/Graphics/BitmapColorKey.cpp +39 -0
  41. data/GosuImpl/Graphics/BitmapPNG.cpp +276 -0
  42. data/GosuImpl/Graphics/BitmapUtils.cpp +67 -0
  43. data/GosuImpl/Graphics/BlockAllocator.cpp +127 -0
  44. data/GosuImpl/Graphics/BlockAllocator.hpp +34 -0
  45. data/GosuImpl/Graphics/Color.cpp +126 -0
  46. data/GosuImpl/Graphics/Common.hpp +21 -0
  47. data/GosuImpl/Graphics/DrawOp.hpp +154 -0
  48. data/GosuImpl/Graphics/Font.cpp +110 -0
  49. data/GosuImpl/Graphics/Graphics.cpp +295 -0
  50. data/GosuImpl/Graphics/Image.cpp +159 -0
  51. data/GosuImpl/Graphics/LargeImageData.cpp +115 -0
  52. data/GosuImpl/Graphics/LargeImageData.hpp +37 -0
  53. data/GosuImpl/Graphics/RotFlip.cpp +184 -0
  54. data/GosuImpl/Graphics/TexChunk.cpp +77 -0
  55. data/GosuImpl/Graphics/TexChunk.hpp +40 -0
  56. data/GosuImpl/Graphics/Text.cpp +223 -0
  57. data/GosuImpl/Graphics/TextMac.cpp +242 -0
  58. data/GosuImpl/Graphics/TextPangoFT.cpp +186 -0
  59. data/GosuImpl/Graphics/TextWin.cpp +172 -0
  60. data/GosuImpl/Graphics/Texture.cpp +104 -0
  61. data/GosuImpl/Graphics/Texture.hpp +34 -0
  62. data/GosuImpl/IO.cpp +48 -0
  63. data/GosuImpl/InputMac.mm +677 -0
  64. data/GosuImpl/InputWin.cpp +444 -0
  65. data/GosuImpl/InputX.cpp +158 -0
  66. data/GosuImpl/MacUtility.hpp +48 -0
  67. data/GosuImpl/Math.cpp +49 -0
  68. data/GosuImpl/RubyGosu.swg +474 -0
  69. data/GosuImpl/RubyGosuStub.mm +17 -0
  70. data/GosuImpl/RubyGosu_DllMain.cxx +30 -0
  71. data/GosuImpl/RubyGosu_wrap.cxx +8521 -0
  72. data/GosuImpl/RubyGosu_wrap.h +31 -0
  73. data/GosuImpl/Sockets/CommSocket.cpp +304 -0
  74. data/GosuImpl/Sockets/ListenerSocket.cpp +60 -0
  75. data/GosuImpl/Sockets/MessageSocket.cpp +136 -0
  76. data/GosuImpl/Sockets/Socket.cpp +145 -0
  77. data/GosuImpl/Sockets/Sockets.hpp +66 -0
  78. data/GosuImpl/TextInputMac.mm +207 -0
  79. data/GosuImpl/TextInputWin.cpp +197 -0
  80. data/GosuImpl/TextInputX.cpp +201 -0
  81. data/GosuImpl/TextTTFWin.cpp +247 -0
  82. data/GosuImpl/TimingUnix.cpp +17 -0
  83. data/GosuImpl/TimingWin.cpp +28 -0
  84. data/GosuImpl/Utility.cpp +140 -0
  85. data/GosuImpl/WinMain.cpp +69 -0
  86. data/GosuImpl/WinUtility.cpp +137 -0
  87. data/GosuImpl/WindowMac.mm +466 -0
  88. data/GosuImpl/WindowWin.cpp +447 -0
  89. data/GosuImpl/WindowX.cpp +392 -0
  90. data/GosuImpl/X11vroot.h +118 -0
  91. data/README.txt +13 -0
  92. data/Rakefile +178 -0
  93. data/examples/ChipmunkIntegration.rb +275 -0
  94. data/examples/CptnRuby.rb +231 -0
  95. data/examples/MoreChipmunkAndRMagick.rb +155 -0
  96. data/examples/OpenGLIntegration.rb +232 -0
  97. data/examples/RMagickIntegration.rb +449 -0
  98. data/examples/TextInput.cpp +170 -0
  99. data/examples/TextInput.rb +139 -0
  100. data/examples/Tutorial.cpp +215 -0
  101. data/examples/Tutorial.rb +137 -0
  102. data/examples/media/Beep.wav +0 -0
  103. data/examples/media/CptnRuby Gem.png +0 -0
  104. data/examples/media/CptnRuby Map.txt +25 -0
  105. data/examples/media/CptnRuby Tileset.png +0 -0
  106. data/examples/media/CptnRuby.png +0 -0
  107. data/examples/media/Cursor.png +0 -0
  108. data/examples/media/Earth.png +0 -0
  109. data/examples/media/Explosion.wav +0 -0
  110. data/examples/media/LargeStar.png +0 -0
  111. data/examples/media/Sky.jpg +0 -0
  112. data/examples/media/Smoke.png +0 -0
  113. data/examples/media/Soldier.png +0 -0
  114. data/examples/media/Space.png +0 -0
  115. data/examples/media/Star.png +0 -0
  116. data/examples/media/Starfighter.bmp +0 -0
  117. data/linux/Makefile.in +98 -0
  118. data/linux/configure +5658 -0
  119. data/linux/configure.ac +126 -0
  120. data/linux/extconf.rb +11 -0
  121. data/mac/English.lproj/InfoPlist.strings +0 -0
  122. data/mac/Gosu-Info.plist +26 -0
  123. data/mac/Gosu.xcodeproj/project.pbxproj +1194 -0
  124. data/mac/RubyGosu Template-Info.plist +26 -0
  125. data/mac/libboost_thread_1_34_1_universal.a +0 -0
  126. data/mac/libboost_thread_d_1_34_1_universal.a +0 -0
  127. data/mac/libfmod_universal.a +0 -0
  128. data/mac/libpng_universal.a +0 -0
  129. data/mac/libz_universal.a +0 -0
  130. data/reference/Async_8hpp-source.html +70 -0
  131. data/reference/Audio_8hpp-source.html +114 -0
  132. data/reference/Audio_8hpp.html +50 -0
  133. data/reference/AutoLink_8hpp-source.html +38 -0
  134. data/reference/AutoLink_8hpp.html +34 -0
  135. data/reference/Bitmap_8hpp-source.html +85 -0
  136. data/reference/Bitmap_8hpp.html +58 -0
  137. data/reference/ButtonsMac_8hpp-source.html +133 -0
  138. data/reference/ButtonsWin_8hpp-source.html +133 -0
  139. data/reference/ButtonsX_8hpp-source.html +134 -0
  140. data/reference/Color_8hpp-source.html +169 -0
  141. data/reference/Color_8hpp.html +85 -0
  142. data/reference/Directories_8hpp-source.html +42 -0
  143. data/reference/Directories_8hpp.html +46 -0
  144. data/reference/Font_8hpp-source.html +65 -0
  145. data/reference/Font_8hpp.html +41 -0
  146. data/reference/Fwd_8hpp-source.html +52 -0
  147. data/reference/Fwd_8hpp.html +37 -0
  148. data/reference/Gosu_8hpp-source.html +48 -0
  149. data/reference/Gosu_8hpp.html +34 -0
  150. data/reference/GraphicsBase_8hpp-source.html +57 -0
  151. data/reference/GraphicsBase_8hpp.html +56 -0
  152. data/reference/Graphics_8hpp-source.html +96 -0
  153. data/reference/Graphics_8hpp.html +53 -0
  154. data/reference/IO_8hpp-source.html +255 -0
  155. data/reference/IO_8hpp.html +74 -0
  156. data/reference/ImageData_8hpp-source.html +62 -0
  157. data/reference/ImageData_8hpp.html +43 -0
  158. data/reference/Image_8hpp-source.html +126 -0
  159. data/reference/Image_8hpp.html +48 -0
  160. data/reference/Input_8hpp-source.html +118 -0
  161. data/reference/Input_8hpp.html +50 -0
  162. data/reference/Math_8hpp-source.html +92 -0
  163. data/reference/Math_8hpp.html +74 -0
  164. data/reference/Platform_8hpp-source.html +83 -0
  165. data/reference/Platform_8hpp.html +73 -0
  166. data/reference/RotFlip_8hpp-source.html +138 -0
  167. data/reference/RotFlip_8hpp.html +77 -0
  168. data/reference/Sockets_8hpp-source.html +130 -0
  169. data/reference/Sockets_8hpp.html +66 -0
  170. data/reference/TextInput_8hpp-source.html +64 -0
  171. data/reference/TextInput_8hpp.html +41 -0
  172. data/reference/Text_8hpp-source.html +51 -0
  173. data/reference/Text_8hpp.html +46 -0
  174. data/reference/Timing_8hpp-source.html +36 -0
  175. data/reference/Timing_8hpp.html +42 -0
  176. data/reference/Utility_8hpp-source.html +44 -0
  177. data/reference/Utility_8hpp.html +48 -0
  178. data/reference/WinUtility_8hpp-source.html +79 -0
  179. data/reference/WinUtility_8hpp.html +64 -0
  180. data/reference/Window_8hpp-source.html +91 -0
  181. data/reference/Window_8hpp.html +41 -0
  182. data/reference/annotated.html +51 -0
  183. data/reference/classGosu_1_1Audio-members.html +34 -0
  184. data/reference/classGosu_1_1Audio.html +46 -0
  185. data/reference/classGosu_1_1Bitmap-members.html +44 -0
  186. data/reference/classGosu_1_1Bitmap.html +263 -0
  187. data/reference/classGosu_1_1Buffer-members.html +44 -0
  188. data/reference/classGosu_1_1Buffer.html +78 -0
  189. data/reference/classGosu_1_1Buffer.png +0 -0
  190. data/reference/classGosu_1_1Button-members.html +36 -0
  191. data/reference/classGosu_1_1Button.html +143 -0
  192. data/reference/classGosu_1_1Color-members.html +56 -0
  193. data/reference/classGosu_1_1Color.html +387 -0
  194. data/reference/classGosu_1_1File-members.html +41 -0
  195. data/reference/classGosu_1_1File.html +69 -0
  196. data/reference/classGosu_1_1File.png +0 -0
  197. data/reference/classGosu_1_1Font-members.html +39 -0
  198. data/reference/classGosu_1_1Font.html +309 -0
  199. data/reference/classGosu_1_1Graphics-members.html +50 -0
  200. data/reference/classGosu_1_1Graphics.html +234 -0
  201. data/reference/classGosu_1_1Image-members.html +45 -0
  202. data/reference/classGosu_1_1Image.html +518 -0
  203. data/reference/classGosu_1_1ImageData-members.html +37 -0
  204. data/reference/classGosu_1_1ImageData.html +60 -0
  205. data/reference/classGosu_1_1Input-members.html +44 -0
  206. data/reference/classGosu_1_1Input.html +223 -0
  207. data/reference/classGosu_1_1MessageSocket-members.html +40 -0
  208. data/reference/classGosu_1_1MessageSocket.html +233 -0
  209. data/reference/classGosu_1_1Resource-members.html +39 -0
  210. data/reference/classGosu_1_1Resource.html +116 -0
  211. data/reference/classGosu_1_1Resource.png +0 -0
  212. data/reference/classGosu_1_1Sample-members.html +37 -0
  213. data/reference/classGosu_1_1Sample.html +200 -0
  214. data/reference/classGosu_1_1SampleInstance-members.html +38 -0
  215. data/reference/classGosu_1_1SampleInstance.html +169 -0
  216. data/reference/classGosu_1_1Song-members.html +43 -0
  217. data/reference/classGosu_1_1Song.html +260 -0
  218. data/reference/classGosu_1_1TextInput-members.html +38 -0
  219. data/reference/classGosu_1_1TextInput.html +121 -0
  220. data/reference/classGosu_1_1Window-members.html +50 -0
  221. data/reference/classGosu_1_1Window.html +271 -0
  222. data/reference/doxyfile +233 -0
  223. data/reference/doxygen.css +433 -0
  224. data/reference/doxygen.png +0 -0
  225. data/reference/files.html +54 -0
  226. data/reference/functions.html +236 -0
  227. data/reference/functions_enum.html +45 -0
  228. data/reference/functions_func.html +227 -0
  229. data/reference/functions_vars.html +47 -0
  230. data/reference/hierarchy.html +53 -0
  231. data/reference/index.html +26 -0
  232. data/reference/namespaceGosu.html +2890 -0
  233. data/reference/namespaceGosu_1_1Colors.html +70 -0
  234. data/reference/namespaceGosu_1_1Win.html +275 -0
  235. data/reference/namespacemembers.html +216 -0
  236. data/reference/namespacemembers_enum.html +52 -0
  237. data/reference/namespacemembers_eval.html +54 -0
  238. data/reference/namespacemembers_func.html +185 -0
  239. data/reference/namespacemembers_type.html +46 -0
  240. data/reference/namespacemembers_vars.html +46 -0
  241. data/reference/namespaces.html +35 -0
  242. data/reference/tab_b.gif +0 -0
  243. data/reference/tab_l.gif +0 -0
  244. data/reference/tab_r.gif +0 -0
  245. data/reference/tabs.css +102 -0
  246. data/windows/Gosu.sln +29 -0
  247. data/windows/Gosu.vcproj +553 -0
  248. data/windows/RubyGosu.vcproj +138 -0
  249. metadata +305 -0
@@ -0,0 +1,116 @@
1
+ //! \file Input.hpp
2
+ //! Interface of the Input class.
3
+
4
+ #ifndef GOSU_INPUT_HPP
5
+ #define GOSU_INPUT_HPP
6
+
7
+ #include <Gosu/Fwd.hpp>
8
+ #include <Gosu/Platform.hpp>
9
+
10
+ #ifdef GOSU_IS_WIN
11
+ #include <Gosu/ButtonsWin.hpp>
12
+ #include <windows.h>
13
+ #endif
14
+
15
+ #ifdef GOSU_IS_MAC
16
+ #include <Gosu/ButtonsMac.hpp>
17
+ #endif
18
+
19
+ #ifdef GOSU_IS_X
20
+ #include <X11/Xlib.h>
21
+ #include <X11/Xutil.h>
22
+ #include <X11/keysym.h>
23
+ #include <Gosu/ButtonsX.hpp>
24
+ #endif
25
+
26
+ #include <Gosu/Platform.hpp>
27
+ #include <Gosu/Fwd.hpp>
28
+ #include <boost/function.hpp>
29
+ #include <boost/scoped_ptr.hpp>
30
+
31
+ namespace Gosu
32
+ {
33
+ //! Very lightweight class that identifies a button (keyboard, mouse or other device).
34
+ class Button
35
+ {
36
+ unsigned id;
37
+
38
+ public:
39
+ //! For internal use.
40
+ explicit Button(unsigned id) : id(id) {}
41
+ //! For internal use.
42
+ unsigned getId() const { return id; }
43
+
44
+ //! Default constructor; == noButton.
45
+ Button() : id(noButton) {}
46
+
47
+ //! Conversion from ButtonName constants.
48
+ Button(ButtonName name) : id(name) {}
49
+ };
50
+
51
+ //! Tests whether two Buttons identify the same physical button.
52
+ inline bool operator==(Button lhs, Button rhs)
53
+ {
54
+ return lhs.getId() == rhs.getId();
55
+ }
56
+ inline bool operator!=(Button lhs, Button rhs)
57
+ {
58
+ return !(lhs == rhs);
59
+ }
60
+
61
+ //! Manages initialization and shutdown of the input system; only one Input
62
+ //! instance can live per application. (Should this limitation ever get into
63
+ //! anyone's way, I will happily remove it; until then, I practice YAGNI.)
64
+ class Input
65
+ {
66
+ struct Impl;
67
+ boost::scoped_ptr<Impl> pimpl;
68
+
69
+ public:
70
+ #ifdef GOSU_IS_WIN
71
+ Input(HWND window);
72
+ #endif
73
+
74
+ #ifdef GOSU_IS_MAC
75
+ Input(void* nswindow);
76
+ bool feedNSEvent(void* event);
77
+ #endif
78
+
79
+ #ifdef GOSU_IS_X
80
+ Input(::Display* dpy);
81
+ bool feedXEvent(::XEvent& event, Window* window);
82
+ #endif
83
+
84
+ ~Input();
85
+
86
+ //! Returns the character a button usually produces, or 0.
87
+ static wchar_t idToChar(Button btn);
88
+ //! Returns the button that has to be pressed to produce the
89
+ //! given character, or noButton.
90
+ static Button charToId(wchar_t ch);
91
+
92
+ //! Returns true if a button is currently pressed.
93
+ bool down(Button btn) const;
94
+
95
+ //! Returns the horizontal position of the mouse relative to the top
96
+ //! left corner of the window given to Input's constructor.
97
+ double mouseX() const;
98
+ //! See mouseX.
99
+ double mouseY() const;
100
+ // Undocumented for the moment.
101
+ void setMouseFactors(double factorX, double factorY);
102
+
103
+ //! Collects new information about which buttons are pressed, where the
104
+ //! mouse is and calls onButtonUp/onButtonDown, if assigned.
105
+ void update();
106
+
107
+ //! Assignable events that are called by update. You can bind these to your own functions.
108
+ //! If you use the Window class, it will assign forward these to its own methods.
109
+ boost::function<void (Button)> onButtonDown, onButtonUp;
110
+
111
+ TextInput* textInput() const;
112
+ void setTextInput(TextInput* input);
113
+ };
114
+ }
115
+
116
+ #endif
@@ -0,0 +1,95 @@
1
+ //! \file Math.hpp
2
+ //! Contains simple math functionality.
3
+
4
+ #ifndef GOSU_MATH_HPP
5
+ #define GOSU_MATH_HPP
6
+
7
+ namespace Gosu
8
+ {
9
+ //! Pi.
10
+ const double pi = 3.1415926536;
11
+
12
+ //! Truncates the fractional part of a real value. Equivalent to
13
+ //! static_cast<long>.
14
+ inline long trunc(double value)
15
+ {
16
+ return static_cast<long>(value);
17
+ }
18
+
19
+ //! Rounds a real value towards the next integer.
20
+ inline long round(double value)
21
+ {
22
+ if (value >= 0)
23
+ return static_cast<long>(value + 0.5);
24
+ else
25
+ return static_cast<long>(value - 0.5);
26
+ }
27
+
28
+ //! Returns a real value between min and max. Uses std::rand (so you have
29
+ //! to call std::srand before using it).
30
+ double random(double min, double max);
31
+
32
+ //! Returns the horizontal distance between the origin and the point to
33
+ //! which you would get if you moved radius pixels in the direction
34
+ //! specified by angle.
35
+ //! \param angle Angle in degrees where 0.0 means upwards.
36
+ double offsetX(double angle, double radius);
37
+ //! Returns the vertical distance between the origin and the point to
38
+ //! which you would get if you moved radius pixels in the direction
39
+ //! specified by angle.
40
+ //! \param angle Angle in degrees where 0.0 means upwards.
41
+ double offsetY(double angle, double radius);
42
+ //! Returns the angle between two points in degrees, where 0.0 means
43
+ //! upwards. Returns def if both points are equal.
44
+ double angle(double fromX, double fromY, double toX, double toY,
45
+ double def = 0);
46
+ //! Returns the smallest positive angle between two angles.
47
+ double angleDiff(double angle1, double angle2);
48
+ //! Normalizes an angle to fit into the range [0; 360[.
49
+ double normalizeAngle(double angle);
50
+
51
+ //! Returns value * value.
52
+ template<typename T>
53
+ T square(T value)
54
+ {
55
+ return value * value;
56
+ }
57
+
58
+ //! Returns min if value is smaller than min, max if value is larger than
59
+ //! max and value otherwise.
60
+ template<typename T>
61
+ T clamp(T value, T min, T max)
62
+ {
63
+ if (value < min)
64
+ return min;
65
+ if (value > max)
66
+ return max;
67
+ return value;
68
+ }
69
+
70
+ // Backward compatibility with 0.7.x
71
+ template<typename T>
72
+ T boundBy(T value, T min, T max)
73
+ {
74
+ return clamp(value, min, max);
75
+ }
76
+
77
+ //! Returns the square of the distance between two points.
78
+ inline double distanceSqr(double x1, double y1, double x2, double y2)
79
+ {
80
+ return square(x1 - x2) + square(y1 - y2);
81
+ }
82
+
83
+ //! Returns the distance between two points.
84
+ double distance(double x1, double y1, double x2, double y2);
85
+
86
+ //! Interpolates a value between a and b, weight being the bias towards the second value.
87
+ //! Examples: interpolate(0, 10, 0.5) == 5, interpolate(-10, 10, 0.25) == 5, interpolate(0, 10, -0.5) == -5.
88
+ template<typename T>
89
+ T interpolate(T a, T b, double weight = 0.5)
90
+ {
91
+ return a * (1.0 - weight) + b * weight;
92
+ }
93
+ }
94
+
95
+ #endif
@@ -0,0 +1,61 @@
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
+ #ifdef _MSC_VER
43
+ #define GOSU_NORETURN __declspec(noreturn)
44
+ #endif
45
+
46
+ #ifdef __GNUC__
47
+ #define GOSU_NORETURN __attribute__ ((noreturn))
48
+ #endif
49
+
50
+ #ifdef WIN32
51
+ # define GOSU_IS_WIN
52
+ #else
53
+ # define GOSU_IS_UNIX
54
+ # if defined(__linux) || defined(__FreeBSD__)
55
+ # define GOSU_IS_X
56
+ # else
57
+ # define GOSU_IS_MAC
58
+ # endif
59
+ #endif
60
+
61
+ #endif
@@ -0,0 +1,116 @@
1
+ //! \file RotFlip.hpp
2
+ //! Interface of the undocumented RotFlip class.
3
+
4
+ #ifndef GOSU_ROTFLIP_HPP
5
+ #define GOSU_ROTFLIP_HPP
6
+
7
+ namespace Gosu
8
+ {
9
+ enum RotFlipName
10
+ {
11
+ rfDefault,
12
+ rfRotate90,
13
+ rfRotate180,
14
+ rfRotate270,
15
+
16
+ rfFlipX,
17
+ rfRotate90FlipX,
18
+ rfRotate180FlipX,
19
+ rfRotate270FlipX,
20
+
21
+ rfFlipY = rfRotate180FlipX,
22
+ rfRotate90FlipY = rfRotate270FlipX,
23
+ rfRotate180FlipY = rfFlipX,
24
+ rfRotate270FlipY = rfRotate90FlipX,
25
+
26
+ rfFlipXRotate90 = rfRotate270FlipX,
27
+ rfFlipXRotate180 = rfRotate180FlipX,
28
+ rfFlipXRotate270 = rfRotate90FlipX,
29
+
30
+ rfFlipYRotate90 = rfRotate90FlipX,
31
+ rfFlipYRotate180 = rfFlipX,
32
+ rfFlipYRotate270 = rfRotate270FlipX
33
+ };
34
+
35
+ class RotFlip
36
+ {
37
+ RotFlipName name_;
38
+
39
+ typedef RotFlipName TransTable[8];
40
+ static const TransTable flipXTable, flipYTable, rotate90Table,
41
+ rotate180Table, rotate270Table;
42
+
43
+ typedef unsigned CornerTable[8][4];
44
+ static const CornerTable mapCornerTable, realCornerTable;
45
+
46
+ public:
47
+ RotFlip(RotFlipName name = rfDefault)
48
+ : name_(name)
49
+ {
50
+ }
51
+
52
+ RotFlipName name() const
53
+ {
54
+ return name_;
55
+ }
56
+
57
+ void flipX()
58
+ {
59
+ name_ = flipXTable[name_];
60
+ }
61
+
62
+ void flipY()
63
+ {
64
+ name_ = flipYTable[name_];
65
+ }
66
+
67
+ void rotate90()
68
+ {
69
+ name_ = rotate90Table[name_];
70
+ }
71
+
72
+ void rotate180()
73
+ {
74
+ name_ = rotate180Table[name_];
75
+ }
76
+
77
+ void rotate270()
78
+ {
79
+ name_ = rotate270Table[name_];
80
+ }
81
+
82
+ bool flipped() const
83
+ {
84
+ return name_ >= rfFlipX;
85
+ }
86
+
87
+ bool rotated() const
88
+ {
89
+ return name_ % 2 == 1;
90
+ }
91
+
92
+ unsigned mapCorner(unsigned n) const
93
+ {
94
+ return mapCornerTable[name_][n];
95
+ }
96
+
97
+ unsigned realCorner(unsigned n) const
98
+ {
99
+ return realCornerTable[name_][n];
100
+ }
101
+ };
102
+
103
+ inline bool operator==(RotFlip a, RotFlip b)
104
+ {
105
+ return a.name() == b.name();
106
+ }
107
+
108
+ inline bool operator!=(RotFlip a, RotFlip b)
109
+ {
110
+ return a.name() != b.name();
111
+ }
112
+
113
+ void applyToPoint(RotFlip rotFlip, int& x, int& y, int max);
114
+ }
115
+
116
+ #endif
@@ -0,0 +1,129 @@
1
+ //! \file Sockets.hpp
2
+ //! Interface of the three socket classes, MessageSocket, CommSocket and ListenerSocket.
3
+
4
+ #ifndef GOSU_SOCKETS_HPP
5
+ #define GOSU_SOCKETS_HPP
6
+
7
+ #include <boost/cstdint.hpp>
8
+ #include <boost/function.hpp>
9
+ #include <boost/scoped_ptr.hpp>
10
+ #include <cstddef>
11
+ #include <string>
12
+
13
+ namespace Gosu
14
+ {
15
+ // Both addresses and ports are returned from and given to Gosu
16
+ // functions in host byte order.
17
+ typedef boost::uint32_t SocketAddress;
18
+ typedef boost::uint16_t SocketPort;
19
+ const SocketPort anyPort = 0;
20
+
21
+ //! Tries to convert a dotted IP4 string into an address suitable for
22
+ //! socket functions. If the string supplied is not such a string, it
23
+ //! tries to look up the host via DNS. If both methods fail, zero is
24
+ //! returned.
25
+ SocketAddress stringToAddress(const std::string& s);
26
+ //! Converts an address into a dotted IP4 string.
27
+ std::string addressToString(SocketAddress address);
28
+
29
+ //! Wraps an UDP socket. Message sockets can send data to and receive
30
+ //! data from arbitrary addresses. Also, message sockets send messages
31
+ //! (packets) which are limited in size and can arrive in any order, or
32
+ //! not at all.
33
+ class MessageSocket
34
+ {
35
+ struct Impl;
36
+ boost::scoped_ptr<Impl> pimpl;
37
+
38
+ public:
39
+ //! Opens a message socket for listening at the specified port.
40
+ //! Gosu::anyPort may be passed to have the message socket use
41
+ //! a random free port.
42
+ explicit MessageSocket(SocketPort port);
43
+ ~MessageSocket();
44
+
45
+ //! Returns the local address of the socket.
46
+ SocketAddress address() const;
47
+ //! Returns the local port of the socket.
48
+ SocketPort port() const;
49
+ //! Returns the maximum size, in bytes, of a packet that can be sent
50
+ //! from this socket.
51
+ std::size_t maxMessageSize() const;
52
+
53
+ //! Collects all the packets that were sent to this socket and
54
+ //! calls onReceive for each of them.
55
+ void update();
56
+
57
+ //! Sends something to the given port of the computer identified
58
+ //! by the address.
59
+ void send(SocketAddress address, SocketPort port,
60
+ const void* buffer, std::size_t size);
61
+ /*void broadcast(SocketPort port, const void* buffer,
62
+ std::size_t size);*/
63
+
64
+ //! If assigned, will be called by update for every packet received.
65
+ boost::function<void (SocketAddress, SocketPort, const void*,
66
+ std::size_t)> onReceive;
67
+ };
68
+
69
+ enum CommMode
70
+ {
71
+ cmRaw,
72
+ //cmLines,
73
+ cmManaged
74
+ };
75
+
76
+ class Socket;
77
+
78
+ class CommSocket
79
+ {
80
+ struct Impl;
81
+ boost::scoped_ptr<Impl> pimpl;
82
+
83
+ public:
84
+ CommSocket(CommMode mode, SocketAddress targetAddress,
85
+ SocketPort targetPort);
86
+ CommSocket(CommMode mode, Socket& socket);
87
+ ~CommSocket();
88
+
89
+ SocketAddress address() const;
90
+ SocketPort port() const;
91
+ SocketAddress remoteAddress() const;
92
+ SocketPort remotePort() const;
93
+ CommMode mode() const;
94
+
95
+ bool connected() const;
96
+ void disconnect();
97
+ bool keepAlive() const;
98
+ void setKeepAlive(bool value);
99
+
100
+ void update();
101
+ void send(const void* buffer, std::size_t size);
102
+ void sendPendingData();
103
+ std::size_t pendingBytes() const;
104
+
105
+ boost::function<void (const void*, std::size_t)> onReceive;
106
+ boost::function<void ()> onDisconnection;
107
+ };
108
+
109
+ class ListenerSocket
110
+ {
111
+ struct Impl;
112
+ boost::scoped_ptr<Impl> pimpl;
113
+
114
+ public:
115
+ ListenerSocket(SocketPort port);
116
+ ~ListenerSocket();
117
+
118
+ SocketAddress address() const;
119
+ SocketPort port() const;
120
+
121
+ void update();
122
+
123
+ // This signal is fired by update() whenever someone connects
124
+ // to the port which is currently listened on.
125
+ boost::function<void (Socket&)> onConnection;
126
+ };
127
+ }
128
+
129
+ #endif