From cca1ea6152f33f936b17804561b240c3fdb61dd1 Mon Sep 17 00:00:00 2001 From: chrisntr Date: Sun, 24 Jul 2011 23:14:44 +0100 Subject: [PATCH] Added in new GLPaint with GameView example --- GLPaint-GameView/GLPaint-GameView.sln | 26 ++ GLPaint-GameView/GLPaint-GameView/Default.png | Bin 0 -> 2159 bytes GLPaint-GameView/GLPaint-GameView/Erase.caf | Bin 0 -> 33056 bytes .../GLPaint-GameView/GLPaint-GameView.csproj | 112 +++++++ GLPaint-GameView/GLPaint-GameView/Icon.png | Bin 0 -> 4944 bytes .../GLPaint-GameView/Images/Blue.png | Bin 0 -> 1180 bytes .../GLPaint-GameView/Images/Green.png | Bin 0 -> 1159 bytes .../GLPaint-GameView/Images/Purple.png | Bin 0 -> 1128 bytes .../GLPaint-GameView/Images/Red.png | Bin 0 -> 1136 bytes .../GLPaint-GameView/Images/Yellow.png | Bin 0 -> 1150 bytes GLPaint-GameView/GLPaint-GameView/Info.plist | 13 + GLPaint-GameView/GLPaint-GameView/Main.cs | 193 ++++++++++++ .../GLPaint-GameView/MainWindow.xib | 184 +++++++++++ .../MainWindow.xib.designer.cs | 33 ++ .../GLPaint-GameView/PaintingView.cs | 184 +++++++++++ .../GLPaint-GameView/Particle.png | Bin 0 -> 2176 bytes .../GLPaint-GameView/Recording.data | 90 ++++++ GLPaint-GameView/GLPaint-GameView/Select.caf | Bin 0 -> 5420 bytes GLPaint-GameView/GLPaint-GameView/ShakeMe.cs | 287 ++++++++++++++++++ .../GLPaint-GameView/SoundEffect.cs | 28 ++ 20 files changed, 1150 insertions(+) create mode 100644 GLPaint-GameView/GLPaint-GameView.sln create mode 100755 GLPaint-GameView/GLPaint-GameView/Default.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Erase.caf create mode 100644 GLPaint-GameView/GLPaint-GameView/GLPaint-GameView.csproj create mode 100755 GLPaint-GameView/GLPaint-GameView/Icon.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Images/Blue.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Images/Green.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Images/Purple.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Images/Red.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Images/Yellow.png create mode 100644 GLPaint-GameView/GLPaint-GameView/Info.plist create mode 100644 GLPaint-GameView/GLPaint-GameView/Main.cs create mode 100644 GLPaint-GameView/GLPaint-GameView/MainWindow.xib create mode 100644 GLPaint-GameView/GLPaint-GameView/MainWindow.xib.designer.cs create mode 100644 GLPaint-GameView/GLPaint-GameView/PaintingView.cs create mode 100755 GLPaint-GameView/GLPaint-GameView/Particle.png create mode 100755 GLPaint-GameView/GLPaint-GameView/Recording.data create mode 100755 GLPaint-GameView/GLPaint-GameView/Select.caf create mode 100755 GLPaint-GameView/GLPaint-GameView/ShakeMe.cs create mode 100644 GLPaint-GameView/GLPaint-GameView/SoundEffect.cs diff --git a/GLPaint-GameView/GLPaint-GameView.sln b/GLPaint-GameView/GLPaint-GameView.sln new file mode 100644 index 00000000..d62a360d --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GLPaint-GameView", "GLPaint-GameView\GLPaint-GameView.csproj", "{8887E326-58AC-441E-AA81-AFED78B32B1E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|iPhoneSimulator = Release|iPhoneSimulator + Debug|iPhone = Debug|iPhone + Release|iPhone = Release|iPhone + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Debug|iPhone.ActiveCfg = Debug|iPhone + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Debug|iPhone.Build.0 = Debug|iPhone + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Release|iPhone.ActiveCfg = Release|iPhone + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Release|iPhone.Build.0 = Release|iPhone + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {8887E326-58AC-441E-AA81-AFED78B32B1E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = GLPaint-GameView\GLPaint-GameView.csproj + EndGlobalSection +EndGlobal diff --git a/GLPaint-GameView/GLPaint-GameView/Default.png b/GLPaint-GameView/GLPaint-GameView/Default.png new file mode 100755 index 0000000000000000000000000000000000000000..8a47f39b0b07f2207072a1cd13ed0ac3789e6717 GIT binary patch literal 2159 zcmeAS@N?(olHy`uVBq!ia0y~yU~~ZD2OMlbkt;o0T!0j3fk$L90|U1(2s1Lwnj^u$ zz$}{S>>Ln~kzbNuoRMFk;OXqFP*9YgmYI{vz)*3kcZz?8OsLFp`+Tc~0YVFRY*Sod zW3yzTN@5P{b`H~E1vx$Xb8Wk(|65q0@yN62 z!-JD@E=<>6sdC7z<~Zu4A9U^ToB5o%ne_%AD)--iUt3?#CdX3~&F7r!d4nhE@w4Kh z)KcGf|63W`Bv>@611(~;L>W#cuDF@aB=^6KVTbw0o*&&gC)TW4*Eqpp*|ZP09nx$c zUUqm^BXdmQ9HZp=xOEL2jfIGdSHDU{*${i#Uk%=+CQmbrd!3qA6u(* z`Yq2{7g_Oao%FfU+*0p!l=tK7uL@OqyQXBWJf$*w*UQpZvMg+&8%o$DSYHQ=o-K{Y z2|cx$`+!QveyyxBJ_+`ZrC04u`Fj|5hZbjPCKg`le=aV(?Ht>#h!-CUHpKl|usE~5 z@Z8&1?rV*UWB!7$c+vfJW>R~-sc$)Fh47l_g?gfs z?yZrJbY1*`Gl0b-=F^iI3P&z1=<4r3rrxjQkockVMn&4PWmA$o=drWc9C+~A&{srg z`sOEHIlbRSmVDm*xxe`S&Ubf;{_V56B=g#R+nM%#+l!wns){UIe!H`*%Ik}*l+WUe zR|0arrF8|(UAAjATe$l#uY2dFw!bR+SeWHCb(P6MtF8`S9y?u;SsX`8R^9r%ZTW?A z{aX7w>r3z7vn$X4@NTK??kpSAsjqyue!p|x`+oR0>2J~B_RQVtukiN!8_nNKY_rqf zmcMm+e@uwc?s=eu(y0t4J%#Uo_UGxHyv^jGww@`q#(&q(IXW}lu3p#rdSxB87$h$473!#G zU|_l8>EaktaqG<$Lq-M$j>8)o>(3`N^}9IrhfU%<;H=A-(7?dPK`|kr(7?z<1%hIS zfDMpXz%rPelh8md*9cJ~uBhc4pr@#iazL)}VxU6Op_X%iK};prXpCkqd}RXZdA%SV fScd)o&&=>;70Z5ZN4q<~vXH^k)z4*}Q$iB}V7Gs{ literal 0 HcmV?d00001 diff --git a/GLPaint-GameView/GLPaint-GameView/Erase.caf b/GLPaint-GameView/GLPaint-GameView/Erase.caf new file mode 100755 index 0000000000000000000000000000000000000000..bf5ccb9d027aeb5840a24a35af906e0b8f1abadb GIT binary patch literal 33056 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 QNL3U*di6Wu;~nRJ0V7zOhX4Qo literal 0 HcmV?d00001 diff --git a/GLPaint-GameView/GLPaint-GameView/GLPaint-GameView.csproj b/GLPaint-GameView/GLPaint-GameView/GLPaint-GameView.csproj new file mode 100644 index 00000000..5be36359 --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/GLPaint-GameView.csproj @@ -0,0 +1,112 @@ + + + + Debug + iPhoneSimulator + 9.0.21022 + 2.0 + {8887E326-58AC-441E-AA81-AFED78B32B1E} + {E613F3A2-FE9C-494F-B74E-F63BCB86FEA6};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + GLPaintGameView + MainWindow.xib + GLPaintGameView + 3.0 + v1.0 + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG + prompt + 4 + None + True + false + false + false + false + ARMv6 + + + none + false + bin\iPhoneSimulator\Release + prompt + 4 + None + False + false + false + false + false + ARMv6 + + + true + full + false + bin\iPhone\Debug + DEBUG + prompt + 4 + false + True + iPhone Developer + false + false + ARMv6 + false + + + none + false + bin\iPhone\Release + prompt + 4 + false + False + false + false + iPhone Developer + ARMv6 + false + + + + + + + + + + + + + + + MainWindow.xib + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/GLPaint-GameView/GLPaint-GameView/Icon.png b/GLPaint-GameView/GLPaint-GameView/Icon.png new file mode 100755 index 0000000000000000000000000000000000000000..5b0d0c8578cc9c2ae301f62d1f9e6f8886982842 GIT binary patch literal 4944 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 literal 0 HcmV?d00001 diff --git a/GLPaint-GameView/GLPaint-GameView/Images/Green.png b/GLPaint-GameView/GLPaint-GameView/Images/Green.png new file mode 100755 index 0000000000000000000000000000000000000000..35e03a4e8eee256b29bb866e9ebd718a1ec3f7c4 GIT binary patch literal 1159 zcmV;21bF+2P)KLZ*U+Jq*2Ca%FW*?*D}Wh8P4Wdr>%DDir|AVW`<_0v`W{0Jt~tjQERe$gHfcfsjC^mhjs^ zW7kJ$=6}uPkrB71b1%3;nBWtY#3f!hVA2h-y;_R zh(kM3_4u)5YlAr$_@mu^Gz$B_fG5}5?f-7H+fQ!7zFqi1dri~o?pXW`Nx$8lZ@XQ3 z9w##akcI1~Vfg?od=6j!2}izxSHFYO5G#RaPFU!R^_gOae>F{a33wB%TcIu$lHRNzSw*Ap2~Y$`T=L|Y zAjHt1ijR-RCyydPVepCAcxI-ilwwJq2LwF8;PWv}6cU%SP@xx z+|NtjSN0qBTlT!2wND`J_v|VAq&;hA?RV`$@5T}VKIc&wBFbn2E+F^(ziuwc+X6r) zuL5O!PrCV>ESW~t*DCeQy&(LO_CL6A4c~7mdd2_%03c&XQcVB=ZI}Q6bB+K2@=gE% zg&qI^ZjJx|d`fhYv0xYm(8v90{&8*q?_Y0p6oU;KX`{Stz`PzmjQPxh2q%s5 zj|hre1Ry5>J~}Tu0|;m3XFVr?MkI3(aPjuWpreeW<&tTDgjVe{i9yPHinxN-!vQFg zy3ilRb^!=g({q%14{$J>0{Th=Y0)}8oGz`rE@o;#3EqUlHLWh%s2mPWyOmbb+81ps z!{HTh1dvMm5^z(iPTT0&>|R>1bKQkDWsTxC2XksQ`Z6WW((@)_VYuzc4dC_p{pWT5 Z9RNNiYlLUfx9|V}002ovPDHLkV1h407kU5y literal 0 HcmV?d00001 diff --git a/GLPaint-GameView/GLPaint-GameView/Images/Purple.png b/GLPaint-GameView/GLPaint-GameView/Images/Purple.png new file mode 100755 index 0000000000000000000000000000000000000000..1b2779df2a4b4e746a0541121c43a8949915f282 GIT binary patch literal 1128 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 QH2?qr07*qoM6N<$f=)LM^Z)<= literal 0 HcmV?d00001 diff --git a/GLPaint-GameView/GLPaint-GameView/Info.plist b/GLPaint-GameView/GLPaint-GameView/Info.plist new file mode 100644 index 00000000..48f79431 --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/Info.plist @@ -0,0 +1,13 @@ + + + + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/GLPaint-GameView/GLPaint-GameView/Main.cs b/GLPaint-GameView/GLPaint-GameView/Main.cs new file mode 100644 index 00000000..6f143e43 --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/Main.cs @@ -0,0 +1,193 @@ +#define LINQ +using System; +using System.Collections.Generic; +using System.Linq; +using MonoTouch.Foundation; +using MonoTouch.UIKit; +using System.Drawing; +using OpenTK.Graphics.ES11; + +namespace GLPaintGameView +{ + public class Application + { + static void Main (string[] args) + { + UIApplication.Main (args); + } + } + + // The name AppDelegate is referenced in the MainWindow.xib file. + public partial class AppDelegate : UIApplicationDelegate + { + const int PaletteHeight = 30; + const int PaletteSize = 5; + const int AccelerometerFrequency = 25; + const float FilteringFactor = 0.1f; + const float EraseAccelerationThreshold = 2.0f; + + static readonly TimeSpan MinEraseInterval = TimeSpan.FromSeconds (0.5); + + const float LeftMarginPadding = 10.0f; + const float TopMarginPadding = 10.0f; + const float RightMarginPadding = 10.0f; + + double[] myAccelerometer = new double [3]; + SoundEffect erasingSound = new SoundEffect (NSBundle.MainBundle.PathForResource ("Erase", "caf")); + SoundEffect selectSound = new SoundEffect (NSBundle.MainBundle.PathForResource ("Select", "caf")); + DateTime lastTime; + + PaintingView drawingView; + + // This method is invoked when the application has loaded its UI and its ready to run + public override bool FinishedLaunching (UIApplication app, NSDictionary options) + { + RectangleF rect = UIScreen.MainScreen.ApplicationFrame; + + window.BackgroundColor = UIColor.Black; + + //Create the OpenGL drawing view and add it to the window + drawingView = new PaintingView (new RectangleF (rect.Location, rect.Size)); + window.AddSubview (drawingView); + + // Create a segmented control so that the user can choose the brush color. + UISegmentedControl segmentedControl = new UISegmentedControl (new[]{ + UIImage.FromFile ("Images/Red.png"), + UIImage.FromFile ("Images/Yellow.png"), + UIImage.FromFile ("Images/Green.png"), + UIImage.FromFile ("Images/Blue.png"), + UIImage.FromFile ("Images/Purple.png"), + }); + + // Compute a rectangle that is positioned correctly for the segmented control you'll use as a brush color palette + RectangleF frame = new RectangleF (rect.X + LeftMarginPadding, rect.Height - PaletteHeight - TopMarginPadding, + rect.Width - (LeftMarginPadding + RightMarginPadding), PaletteHeight); + segmentedControl.Frame = frame; + // When the user chooses a color, the method changeBrushColor: is called. + segmentedControl.ValueChanged += ChangeBrushColor; + segmentedControl.ControlStyle = UISegmentedControlStyle.Bar; + // Make sure the color of the color complements the black background + segmentedControl.TintColor = UIColor.DarkGray; + // Set the third color (index values start at 0) + segmentedControl.SelectedSegment = 2; + + // Add the control to the window + window.AddSubview (segmentedControl); + // Now that the control is added, you can release it + // [segmentedControl release]; + + float r, g, b; + // Define a starting color + HslToRgb (2.0f / PaletteSize, PaintingView.Saturation, PaintingView.Luminosity, out r, out g, out b); + // Set the color using OpenGL + GL.Color4 (r, g, b, PaintingView.BrushOpacity); + + + // Look in the Info.plist file and you'll see the status bar is hidden + // Set the style to black so it matches the background of the application + app.SetStatusBarStyle (UIStatusBarStyle.BlackTranslucent, false); + // Now show the status bar, but animate to the style. + app.SetStatusBarHidden (false, true); + + //Configure and enable the accelerometer + UIAccelerometer.SharedAccelerometer.UpdateInterval = 1.0f / AccelerometerFrequency; + UIAccelerometer.SharedAccelerometer.Acceleration += OnAccelerated; + + //Show the window + window.MakeKeyAndVisible (); + + return true; + } + + // This method is required in iPhoneOS 3.0 + public override void OnActivated (UIApplication application) + { + } + + static void HslToRgb (float h, float s, float l, out float r, out float g, out float b) + { + // Check for saturation. If there isn't any just return the luminance value for each, which results in gray. + if (s == 0.0) { + r = l; + g = l; + b = l; + return; + } + + // Test for luminance and compute temporary values based on luminance and saturation + float temp2; + if (l < 0.5) + temp2 = l * (1.0f + s); + else + temp2 = l + s - l * s; + float temp1 = 2.0f * l - temp2; + + // Compute intermediate values based on hue + float[] temp = { + h + 1.0f / 3.0f, + h, + h - 1.0f / 3.0f, + }; + for (int i = 0; i < temp.Length; ++i) { + if (temp [i] < 0.0f) + temp [i] += 1.0f; + if (temp [i] > 1.0f) + temp [i] -= 1.0f; + + if (6.0f * temp [i] < 1.0f) + temp [i] = temp1 + (temp2 - temp1) * 6.0f * temp [i]; + else { + if (2.0f * temp [i] < 1.0f) + temp [i] = temp2; + else { + if (3.0f * temp [i] < 2.0f) + temp [i] = temp1 + (temp2 - temp1) * ((2.0f / 3.0f) - temp [i]) * 6.0f; + else + temp [i] = temp1; + } + } + } + r = temp [0]; + g = temp [1]; + b = temp [2]; + } + + private void ChangeBrushColor (object sender, EventArgs e) + { + selectSound.Play (); + + float r, g, b; + HslToRgb (((UISegmentedControl) sender).SelectedSegment / (float) PaletteSize, + PaintingView.Saturation, PaintingView.Luminosity, + out r, out g, out b); + GL.Color4 (r, g, b, PaintingView.BrushOpacity); + } + + private void OnAccelerated (object sender, UIAccelerometerEventArgs e) + { +#if LINQ + myAccelerometer = new[]{e.Acceleration.X, e.Acceleration.Y, e.Acceleration.Z} + .Select((v, i) => v * FilteringFactor + myAccelerometer [i] * (1.0f - FilteringFactor)) + .ToArray (); +#else + myAccelerometer [0] = e.Acceleration.X * FilteringFactor + myAccelerometer [0] * (1.0 - FilteringFactor); + myAccelerometer [1] = e.Acceleration.Y * FilteringFactor + myAccelerometer [1] * (1.0 - FilteringFactor); + myAccelerometer [2] = e.Acceleration.Z * FilteringFactor + myAccelerometer [2] * (1.0 - FilteringFactor); +#endif + + // Odd; ObjC always uses myAccelerometer[0], while + // I'd expect myAccelerometer[0 .. 2] + var x = e.Acceleration.X - myAccelerometer [0]; + var y = e.Acceleration.Y - myAccelerometer [0]; + var z = e.Acceleration.Z - myAccelerometer [0]; + + var length = Math.Sqrt (x * x + y * y + z * z); + if (length >= EraseAccelerationThreshold && DateTime.Now > lastTime + MinEraseInterval) { + erasingSound.Play (); + drawingView.Erase (); + lastTime = DateTime.Now; + } + } + } +} + diff --git a/GLPaint-GameView/GLPaint-GameView/MainWindow.xib b/GLPaint-GameView/GLPaint-GameView/MainWindow.xib new file mode 100644 index 00000000..83a288f4 --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/MainWindow.xib @@ -0,0 +1,184 @@ + + + + 768 + 9J61 + 677 + 949.46 + 353.00 + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + + + IBFirstResponder + + + + + 1316 + + {320, 480} + + + 1 + MSAxIDEAA + + NO + NO + + + + + + YES + + + delegate + + + + 5 + + + + window + + + + 7 + + + + + YES + + 0 + + YES + + + + + + 2 + + + YES + + + + + -1 + + + RmlsZSdzIE93bmVyA + + + 4 + + + App Delegate + + + -2 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 2.IBAttributePlaceholdersKey + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + 2.UIWindow.visibleAtLaunch + 4.CustomClassName + 4.IBPluginDependency + + + YES + UIApplication + UIResponder + + YES + + YES + + + YES + + + {{593, 276}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AppDelegate + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + YES + + + YES + + + + + YES + + YES + + + YES + + + + 7 + + + + YES + + AppDelegate + + window + id + + + IBUserSource + + + + + + 0 + + 3 + 3.0 + + diff --git a/GLPaint-GameView/GLPaint-GameView/MainWindow.xib.designer.cs b/GLPaint-GameView/GLPaint-GameView/MainWindow.xib.designer.cs new file mode 100644 index 00000000..6b5d0c98 --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/MainWindow.xib.designer.cs @@ -0,0 +1,33 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +namespace GLPaintGameView { + + + // Base type probably should be MonoTouch.Foundation.NSObject or subclass + [MonoTouch.Foundation.Register("AppDelegate")] + public partial class AppDelegate { + + private MonoTouch.UIKit.UIWindow __mt_window; + + #pragma warning disable 0169 + [MonoTouch.Foundation.Connect("window")] + private MonoTouch.UIKit.UIWindow window { + get { + this.__mt_window = ((MonoTouch.UIKit.UIWindow)(this.GetNativeField("window"))); + return this.__mt_window; + } + set { + this.__mt_window = value; + this.SetNativeField("window", value); + } + } + } +} diff --git a/GLPaint-GameView/GLPaint-GameView/PaintingView.cs b/GLPaint-GameView/GLPaint-GameView/PaintingView.cs new file mode 100644 index 00000000..88f77750 --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/PaintingView.cs @@ -0,0 +1,184 @@ +using System; +using OpenTK.Platform.iPhoneOS; +using OpenTK.Graphics.ES11; +using MonoTouch.UIKit; +using MonoTouch.Foundation; +using System.Drawing; +using MonoTouch.ObjCRuntime; +using MonoTouch.OpenGLES; +using System.Runtime.InteropServices; +using MonoTouch.CoreGraphics; + +namespace GLPaintGameView +{ + public class PaintingView : iPhoneOSGameView { + + public const float BrushOpacity = 1.0f / 3.0f; + public const int BrushPixelStep = 3; + public const int BrushScale = 2; + public const float Luminosity = 0.75f; + public const float Saturation = 1.0f; + + uint brushTexture, drawingTexture, drawingFramebuffer; + bool firstTouch; + + PointF Location; + PointF PreviousLocation; + + [Export ("layerClass")] + public static Class LayerClass () + { + return iPhoneOSGameView.GetLayerClass (); + } + + public PaintingView (RectangleF frame) + : base (frame) + { + LayerRetainsBacking = true; + LayerColorFormat = EAGLColorFormat.RGBA8; + ContextRenderingApi = EAGLRenderingAPI.OpenGLES1; + CreateFrameBuffer(); + MakeCurrent(); + + var brushImage = UIImage.FromFile ("Particle.png").CGImage; + var width = brushImage.Width; + var height = brushImage.Height; + if (brushImage != null) { + IntPtr brushData = Marshal.AllocHGlobal (width * height * 4); + if (brushData == IntPtr.Zero) + throw new OutOfMemoryException (); + try { + using (var brushContext = new CGBitmapContext (brushData, + width, width, 8, width * 4, brushImage.ColorSpace, CGImageAlphaInfo.PremultipliedLast)) { + brushContext.DrawImage (new RectangleF (0.0f, 0.0f, (float) width, (float) height), brushImage); + } + + GL.GenTextures (1, ref brushTexture); + GL.BindTexture (All.Texture2D, brushTexture); + GL.TexImage2D (All.Texture2D, 0, (int) All.Rgba, width, height, 0, All.Rgba, All.UnsignedByte, brushData); + } + finally { + Marshal.FreeHGlobal (brushData); + } + GL.TexParameter (All.Texture2D, All.TextureMinFilter, (int) All.Linear); + GL.Enable (All.Texture2D); + GL.BlendFunc (All.SrcAlpha, All.One); + GL.Enable (All.Blend); + } + GL.Disable (All.Dither); + GL.MatrixMode (All.Projection); + GL.Ortho (0, frame.Width, 0, frame.Height, -1, 1); + GL.MatrixMode (All.Modelview); + GL.Enable (All.Texture2D); + GL.EnableClientState (All.VertexArray); + GL.Enable (All.Blend); + GL.BlendFunc (All.SrcAlpha, All.One); + GL.Enable (All.PointSpriteOes); + GL.TexEnv (All.PointSpriteOes, All.CoordReplaceOes, (float) All.True); + GL.PointSize (width / BrushScale); + + Erase (); + + PerformSelector (new Selector ("playback"), null, 0.2f); + } + + protected override void Dispose (bool disposing) + { + base.Dispose (disposing); + GL.DeleteTextures (1, ref drawingTexture); + } + + public void Erase () + { + GL.Clear ((uint) All.ColorBufferBit); + + SwapBuffers (); + } + + float[] vertexBuffer; + int vertexMax = 64; + + private void RenderLineFromPoint (PointF start, PointF end) + { + int vertexCount = 0; + if (vertexBuffer == null) { + vertexBuffer = new float [vertexMax * 2]; + } + var count = Math.Max (Math.Ceiling (Math.Sqrt ((end.X - start.X) * (end.X - start.X) + (end.Y - start.Y) * (end.Y - start.Y)) / BrushPixelStep), + 1); + for (int i = 0; i < count; ++i, ++vertexCount) { + if (vertexCount == vertexMax) { + vertexMax *= 2; + Array.Resize (ref vertexBuffer, vertexMax * 2); + } + vertexBuffer [2 * vertexCount + 0] = start.X + (end.X - start.X) * (float) i / (float) count; + vertexBuffer [2 * vertexCount + 1] = start.Y + (end.Y - start.Y) * (float) i / (float) count; + } + GL.VertexPointer (2, All.Float, 0, vertexBuffer); + GL.DrawArrays (All.Points, 0, vertexCount); + + SwapBuffers (); + } + + int dataofs = 0; + + [Export ("playback")] + void Playback () + { + PointF [] points = ShakeMe.Data [dataofs]; + + for (int i = 0; i < points.Length - 1; i++) + RenderLineFromPoint (points [i], points [i + 1]); + + if (dataofs < ShakeMe.Data.Count - 1) { + dataofs ++; + PerformSelector (new Selector ("playback"), null, 0.01f); + } + } + + public override void TouchesBegan (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e) + { + var bounds = Bounds; + var touch = (UITouch) e.TouchesForView (this).AnyObject; + firstTouch = true; + Location = touch.LocationInView (this); + Location.Y = bounds.Height - Location.Y; + } + + public override void TouchesMoved (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e) + { + var bounds = Bounds; + var touch = (UITouch) e.TouchesForView (this).AnyObject; + + if (firstTouch) { + firstTouch = false; + PreviousLocation = touch.PreviousLocationInView (this); + PreviousLocation.Y = bounds.Height - PreviousLocation.Y; + } + else { + Location = touch.LocationInView (this); + Location.Y = bounds.Height - Location.Y; + PreviousLocation = touch.PreviousLocationInView (this); + PreviousLocation.Y = bounds.Height - PreviousLocation.Y; + } + RenderLineFromPoint (PreviousLocation, Location); + } + + public override void TouchesEnded (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e) + { + var bounds = Bounds; + var touch = (UITouch) e.TouchesForView (this).AnyObject; + if (firstTouch) { + firstTouch = false; + PreviousLocation = touch.PreviousLocationInView (this); + PreviousLocation.Y = bounds.Height - PreviousLocation.Y; + RenderLineFromPoint (PreviousLocation, Location); + } + } + + public override void TouchesCancelled (MonoTouch.Foundation.NSSet touches, MonoTouch.UIKit.UIEvent e) + { + } + } +} + diff --git a/GLPaint-GameView/GLPaint-GameView/Particle.png b/GLPaint-GameView/GLPaint-GameView/Particle.png new file mode 100755 index 0000000000000000000000000000000000000000..22afe254f0ef7f7e440948724be197de9ae59567 GIT binary patch literal 2176 zcmV-`2!Hp9P)KLZ*U+Jq*2Ca%FW*?*D}Wh8P4Wdr>%DDir|AVW`<_0v`W{0Jt~tjQERe$gHfcfsjC^mhjs^ zW7kJ$=6}uPkrB71b1%3;nBWtY#3f!hVA2h-y;_R zh(kM3_4u)5YlAr$_@mu^Gz$B_fG5}5?f-7H+fQ!7zFqi1dri~o?pXW`Nx$8lZ@XQ3 z9w##akcI1~Vfg?od=6j!2}izxSHFYO5G#RaPFU!R^_gOae>F{a33wB%TcIu$lHRNzSw*Ap2~Y$`T=L|Y zAjHt1ijR-RCyydPVepCAcxI-ilwwJq2LwF8;PWv}6cU%SP@xx z+|NtjSN0qBTlT!2wND`J_v|VAq&;hA?RV`$@5T}VKIc&wBFbn2E+F^(ziuwc+X6r) zuL5O!PrCV>ESW~t*DCeQy&(LO_CL6A4c~7mdd2_%03c&XQcVB=ZI}Q6bB+K2@=gE% zg&qI^ZjJx||1M-qaYAO!TA4w?yj1>PeXM& zJv_wRUR{zZN>(?4Zf1sg;1ojm32*$F!<&CT1iU)|={E+Qrb*ua`T6_iXnLg)^nmt$ zUP;X51bCo($?!m5O-6bpaJ=XBdqLZGuOcE{4V;16-+cAJSf8)_{3;@bR6v2jEBDni z1csp1-ySg|B%C6^TXh85(i8!$tt1^URRM3+xy|$Z)W>^B0)xBX?+;h*BMGb)y(FX& z@JIlIoagzeDH50f1dq+Y;d9S6^pKE7!1Ic8i!sVR5@C~P;Ky;u{xnS){1uXLN(D;5 z4QPzMzR@Zns-*iUd{zPXhLR4=JU*`rda`vpEh+K+W)})xX_tVO>{A1lod<4M5#T z(me3WL1I-X5i%qJtosIfUDvR#YrdyczzHM!CcfXz~1z2;Tpd^;ZP29`njC%aZ*Al$eKxQ5xsN63gTH+-VpjMwr@RAu8@zug%5B#=mMes@uhE)KQ3Em_zdFkc+ zEUK#|MC`W_{I+f3`};fhk%*Vr0M4K&5w#+P0Y?(NWJXU)Oo2xdj36eVwUmBZ1*|5A z6Xk%#OJ=krMY%3upufJpo}@rYz~w5Swkb?cslbF+)sh*#X>pVQY%BrF7Z@&%szf46 zfn{H?R;LObn8NBQj35C_M2ih*wFRdo07>w`BcQXTF(yIn1TT>QmICzTyu(o5PGSDR z+2W|Wmh``L%4|piSQSDDxkRmO1Qt0)%HyiFi2kL10N=wy2_^8n@}mbNO3u%jQ>D$@ zpvtGIlNp%FwbdUzB2$Vq<X;GeU|4o`4l6&}q8rkW@#98wex8K--RS z_L!W?2C0*zy$7YbPm2Ca2PLmKHv9HRWj}|d!{7@Of8)4(3GA;Pmv1>wSnHRZtrEzq zUYL0MS7tshO@&{0b@pvuoBJ + + + + + AAB4QgAAt0MAAFBCAIC1QwAAMEIAgLRDAAAUQgAAskMAAOhBAACvQwAAwEEAgKxDAAC4 + QQCAqkMAALhBAICnQwAAPEIAAKRDAABsQgCAokMAAIxCAIChQwAAlEIAgJ9DAACWQgCA + nkMAAI5CAICbQwAAbEIAAJhDAAAkQgAAlEMAAKBBAACOQwAAgEEAgIxDAABwQQAAjEMA + AGBBAICLQwAAYEEAgItD + + + AAC8QgAAsEMAAMJCAICoQwAAwkIAAKRDAADCQgCAnUMAAMJCAACYQwAAwEIAgJRDAADA + QgCAkkMAAMBCAACRQwAAwEIAgJBDAADAQgCAkEM= + + + AACoQgAAnEMAALpCAACdQwAAxEIAAJ1DAADQQgAAnUMAANpCAICdQwAA4kIAgJ5DAADs + QgCAn0MAAOxCAICfQw== + + + AAACQwAAsEMAAANDAACpQwAAA0MAAKVDAAADQwAAn0MAAANDAICZQwAAA0MAAJVDAAAD + QwAAkkMAAANDAACSQw== + + + AAAVQwCAiUMAABdDAICMQwAAF0MAAJBDAAAYQwCAlUMAABtDAACcQwAAI0MAAKRDAAAr + QwAArEMAADFDAICxQwAANkMAgLRDAAA6QwAAtkMAAD1DAIC2QwAAP0MAgLVDAABAQwAA + skMAAEFDAACuQwAAQkMAgKhDAABCQwAApEMAAEJDAACeQwAAQkMAgJhDAABCQwCAlkMA + AD5DAICTQwAAPkMAgJND + + + AAAhQwCAoEMAADRDAIChQwAAO0MAAKJDAABAQwCAokMAAEZDAICiQwAARkMAgKJD + + + AABbQwAAs0MAAFtDAICsQwAAW0MAAKhDAABbQwAAokMAAFpDAICaQwAAWEMAgJVDAABX + QwAAkkMAAFdDAACQQwAAV0MAAI9DAABXQwAAjkMAAFdDAACQQwAAWUMAAJRDAABfQwAA + mUMAAGVDAACfQwAAa0MAAKNDAABxQwCApkMAAHZDAACpQwAAeUMAAKtDAAB9QwCArEMA + AH9DAICtQwCAgEMAgK5DAACBQwAAr0MAgIFDAACvQwCAgUMAAK9D + + + AABlQwAAn0MAAG5DAICbQwAAckMAgJtDAAB3QwAAm0MAAHtDAACaQwAAf0MAAJlDAICA + QwCAmEMAgIFDAACYQwCAgkMAAJdDAACEQwCAlUMAAIRDAICVQw== + + + AACOQwAAsUMAAI1DAACtQwAAjUMAgKlDAACMQwAApkMAgIpDAAChQwAAiUMAAJxDAICI + QwAAmUMAgIhDAICWQwCAiEMAgJRDAICIQwAAk0MAAIlDAACSQwAAi0MAgJFDAICNQwCA + kUMAgJJDAICRQwCAlEMAgJJDAICWQwCAk0MAAJlDAICUQwAAmkMAAJVDAICaQwAAlUMA + gJpDAACVQw== + + + AICJQwCAoUMAgI1DAACiQwCAj0MAAKJDAACSQwAAokMAgJNDAICiQwAAlUMAgKJDAACV + QwCAokM= + + + AICNQwCAr0MAgJNDAACyQwAAl0MAgLJDAACaQwAAtEMAAJxDAIC0QwAAnEMAgLRD + + + AABcQgAAJUMAAFRCAAAeQwAAVEIAABNDAABUQgAACEMAAFRCAAD+QgAAVEIAAPBCAABU + QgAA5EIAAFRCAADcQgAAVEIAANpCAABUQgAA2EIAAFRCAADaQgAAVEIAAOZCAABYQgAA + A0MAAGRCAAAfQwAAaEIAADFDAABsQgAAPUMAAGxCAABEQwAAdEIAAElDAACAQgAASEMA + AI5CAABCQwAAoEIAAD1DAAC0QgAAOUMAAMZCAAA4QwAA3EIAADhDAADsQgAAPUMAAPRC + AABBQwAA/kIAAEZDAAAAQwAARkMAAABDAAA/QwAAAEMAADNDAAAAQwAAIUMAAP5CAAAP + QwAA/kIAAP5CAAD+QgAA5EIAAP5CAADUQgAA/kIAAMhCAAAAQwAAxkIAAABDAADGQg== + + + AAAvQwAATEMAACxDAABDQwAALEMAADpDAAArQwAALUMAACpDAAAgQwAAKUMAABFDAAAo + QwAABkMAACZDAAD8QgAAJUMAAOpCAAAlQwAA3kIAACVDAADWQgAAKkMAANJCAAAzQwAA + 0kIAADxDAADcQgAARkMAAOZCAABQQwAA7kIAAFhDAAD0QgAAXUMAAPZCAABjQwAA+kIA + AGNDAAD6Qg== + + + AAA0QwAAFUMAAEFDAAAYQwAATUMAABpDAABaQwAAHkMAAGZDAAAkQwAAcEMAACpDAAB0 + QwAAL0MAAHRDAAAvQw== + + + AAAxQwAAPUMAAD9DAABAQwAATUMAAEFDAABbQwAARUMAAGhDAABKQwAAcUMAAE1DAAB5 + QwAAUEMAAHlDAABQQw== + + + AICEQwAAb0MAAIZDAABjQwCAhkMAAFdDAACHQwAARkMAgIdDAAAyQwCAiEMAACBDAACJ + QwAAFkMAgIlDAAAOQwCAikMAAAVDAICKQwAABUM= + + + AICNQwAAukIAgI1DAAC6Qg== + + + AACTQwAArkIAgI5DAACiQgAAjkMAAKJCAACOQwAAoEIAAI5DAACeQgCAjkMAAKBCAICO + QwAApEIAgI5DAACmQgCAjkMAAKhCAACOQwAAqEIAAI1DAACoQgAAjUMAAKZCAACNQwAA + pEIAAI1DAACkQg== + + + diff --git a/GLPaint-GameView/GLPaint-GameView/Select.caf b/GLPaint-GameView/GLPaint-GameView/Select.caf new file mode 100755 index 0000000000000000000000000000000000000000..20b01db508e9c9b80d08bd3a7edbd1b0b53a1226 GIT binary patch literal 5420 zcmeI#`%hD67zgmv)62QEl(tYPHw$tpGKLiplu2Yxgeg-8E4tu|0!($Z2+doI1L#{Cidp-=L@-}i?nPo8{!dpFCo zvH%(YWMuB#416x%IAzI!PtTm(&D-q({&(zMpE?0vR$gYNJ?-UO_c65O4@M z1RMem0f&G?z#-rea0oaA90LC*feiUB`R9F@QhVC}^ZU_MkDr2;OOGwamo=_5uX&J? zow|5kr|ePk`qe)sHpPuZi^B^2gG4!;lfWA+O|@$vxjUd;*phmmelO~_xh}m(xM_-MtSQfD2n?z+IJMmGx%QE*^Wz?1V zg_4VNB86Mo1++7`S<^8V)1TXYw&Q(kT+7r$P4lW|@B#ct*3#3O-+^}L^&K4zR(lyD ztZ|TlS18)xTOv_>85)rteJEzz5?*YvV6z9%jt6Y)w9%hGB7Vh z6xJ@?7akbV5}vle5LWp`uB3SGl=oA&NS++o0Uk6pV4>5T$vq=SKCDw}9gCe|YVVma<;wb;Lp!#5G$g7a@kbU#YCH(=} zelnjsqQ6`u++6rP_}uJ{pPk87-3KxiqJmbCd zd>C^mpA;WA?^T{A_Xr_Fu%CMuz0axvPg+k%>KZw<~zBpH~Xrlka zsz4TU%D5MJ$%0CkgRX#(C%ol4?$Rg-rdiW5y-+tbqn!0N789tc%Ca2j1JjvLAOK}>TAUU-%Xnh`34S$y6TgMm z?tGAoaU|>@1ZQ1mB!I)VBFlUeNlY6>hW)b=z1z%sole`U73wbP3TLkA1z3aOcf5qG zGQF}`Z6RP1L&l1RRY(T=66dVbD()?AJNFFNgS*x#o&&HCAqt4ea%Xsfp1>SysCf-l zPJno|p%^gEteIRIr({blR@aa_DoJO{{rvHnIHontXXAm2nV%69)Ol+t%>@;r0 zj}R}&P}5a&sI|csLu&#<7{$y+RvT0cZ$Wg(a&#jakK)K4 Data = new List () { + new PointF [] { + new PointF (62.000000f, 366.000000f), + new PointF (52.000000f, 363.000000f), + new PointF (44.000000f, 361.000000f), + new PointF (37.000000f, 356.000000f), + new PointF (29.000000f, 350.000000f), + new PointF (24.000000f, 345.000000f), + new PointF (23.000000f, 341.000000f), + new PointF (23.000000f, 335.000000f), + new PointF (47.000000f, 328.000000f), + new PointF (59.000000f, 325.000000f), + new PointF (70.000000f, 323.000000f), + new PointF (74.000000f, 319.000000f), + new PointF (75.000000f, 317.000000f), + new PointF (71.000000f, 311.000000f), + new PointF (59.000000f, 304.000000f), + new PointF (41.000000f, 296.000000f), + new PointF (20.000000f, 284.000000f), + new PointF (16.000000f, 281.000000f), + new PointF (15.000000f, 280.000000f), + new PointF (14.000000f, 279.000000f), + new PointF (14.000000f, 279.000000f), + }, + new PointF [] { + new PointF (94.000000f, 352.000000f), + new PointF (97.000000f, 337.000000f), + new PointF (97.000000f, 328.000000f), + new PointF (97.000000f, 315.000000f), + new PointF (97.000000f, 304.000000f), + new PointF (96.000000f, 297.000000f), + new PointF (96.000000f, 293.000000f), + new PointF (96.000000f, 290.000000f), + new PointF (96.000000f, 289.000000f), + new PointF (96.000000f, 289.000000f), + }, + new PointF [] { + new PointF (84.000000f, 312.000000f), + new PointF (93.000000f, 314.000000f), + new PointF (98.000000f, 314.000000f), + new PointF (104.000000f, 314.000000f), + new PointF (109.000000f, 315.000000f), + new PointF (113.000000f, 317.000000f), + new PointF (118.000000f, 319.000000f), + new PointF (118.000000f, 319.000000f), + }, + new PointF [] { + new PointF (130.000000f, 352.000000f), + new PointF (131.000000f, 338.000000f), + new PointF (131.000000f, 330.000000f), + new PointF (131.000000f, 318.000000f), + new PointF (131.000000f, 307.000000f), + new PointF (131.000000f, 298.000000f), + new PointF (131.000000f, 292.000000f), + new PointF (131.000000f, 292.000000f), + }, + new PointF [] { + new PointF (149.000000f, 275.000000f), + new PointF (151.000000f, 281.000000f), + new PointF (151.000000f, 288.000000f), + new PointF (152.000000f, 299.000000f), + new PointF (155.000000f, 312.000000f), + new PointF (163.000000f, 328.000000f), + new PointF (171.000000f, 344.000000f), + new PointF (177.000000f, 355.000000f), + new PointF (182.000000f, 361.000000f), + new PointF (186.000000f, 364.000000f), + new PointF (189.000000f, 365.000000f), + new PointF (191.000000f, 363.000000f), + new PointF (192.000000f, 356.000000f), + new PointF (193.000000f, 348.000000f), + new PointF (194.000000f, 337.000000f), + new PointF (194.000000f, 328.000000f), + new PointF (194.000000f, 316.000000f), + new PointF (194.000000f, 305.000000f), + new PointF (194.000000f, 301.000000f), + new PointF (190.000000f, 295.000000f), + new PointF (190.000000f, 295.000000f), + }, + new PointF [] { + new PointF (161.000000f, 321.000000f), + new PointF (180.000000f, 323.000000f), + new PointF (187.000000f, 324.000000f), + new PointF (192.000000f, 325.000000f), + new PointF (198.000000f, 325.000000f), + new PointF (198.000000f, 325.000000f), + }, + new PointF [] { + new PointF (219.000000f, 358.000000f), + new PointF (219.000000f, 345.000000f), + new PointF (219.000000f, 336.000000f), + new PointF (219.000000f, 324.000000f), + new PointF (218.000000f, 309.000000f), + new PointF (216.000000f, 299.000000f), + new PointF (215.000000f, 292.000000f), + new PointF (215.000000f, 288.000000f), + new PointF (215.000000f, 286.000000f), + new PointF (215.000000f, 284.000000f), + new PointF (215.000000f, 288.000000f), + new PointF (217.000000f, 296.000000f), + new PointF (223.000000f, 306.000000f), + new PointF (229.000000f, 318.000000f), + new PointF (235.000000f, 326.000000f), + new PointF (241.000000f, 333.000000f), + new PointF (246.000000f, 338.000000f), + new PointF (249.000000f, 342.000000f), + new PointF (253.000000f, 345.000000f), + new PointF (255.000000f, 347.000000f), + new PointF (257.000000f, 349.000000f), + new PointF (258.000000f, 350.000000f), + new PointF (259.000000f, 350.000000f), + new PointF (259.000000f, 350.000000f), + }, + new PointF [] { + new PointF (229.000000f, 318.000000f), + new PointF (238.000000f, 311.000000f), + new PointF (242.000000f, 311.000000f), + new PointF (247.000000f, 310.000000f), + new PointF (251.000000f, 308.000000f), + new PointF (255.000000f, 306.000000f), + new PointF (257.000000f, 305.000000f), + new PointF (259.000000f, 304.000000f), + new PointF (261.000000f, 302.000000f), + new PointF (264.000000f, 299.000000f), + new PointF (264.000000f, 299.000000f), + }, + new PointF [] { + new PointF (284.000000f, 354.000000f), + new PointF (282.000000f, 346.000000f), + new PointF (282.000000f, 339.000000f), + new PointF (280.000000f, 332.000000f), + new PointF (277.000000f, 322.000000f), + new PointF (274.000000f, 312.000000f), + new PointF (273.000000f, 306.000000f), + new PointF (273.000000f, 301.000000f), + new PointF (273.000000f, 297.000000f), + new PointF (273.000000f, 294.000000f), + new PointF (274.000000f, 292.000000f), + new PointF (278.000000f, 291.000000f), + new PointF (283.000000f, 291.000000f), + new PointF (293.000000f, 291.000000f), + new PointF (297.000000f, 293.000000f), + new PointF (301.000000f, 295.000000f), + new PointF (306.000000f, 297.000000f), + new PointF (308.000000f, 298.000000f), + new PointF (309.000000f, 298.000000f), + new PointF (309.000000f, 298.000000f), + }, + new PointF [] { + new PointF (275.000000f, 323.000000f), + new PointF (283.000000f, 324.000000f), + new PointF (287.000000f, 324.000000f), + new PointF (292.000000f, 324.000000f), + new PointF (295.000000f, 325.000000f), + new PointF (298.000000f, 325.000000f), + new PointF (298.000000f, 325.000000f), + }, + new PointF [] { + new PointF (283.000000f, 351.000000f), + new PointF (295.000000f, 356.000000f), + new PointF (302.000000f, 357.000000f), + new PointF (308.000000f, 360.000000f), + new PointF (312.000000f, 361.000000f), + new PointF (312.000000f, 361.000000f), + }, + new PointF [] { + new PointF (55.000000f, 165.000000f), + new PointF (53.000000f, 158.000000f), + new PointF (53.000000f, 147.000000f), + new PointF (53.000000f, 136.000000f), + new PointF (53.000000f, 127.000000f), + new PointF (53.000000f, 120.000000f), + new PointF (53.000000f, 114.000000f), + new PointF (53.000000f, 110.000000f), + new PointF (53.000000f, 109.000000f), + new PointF (53.000000f, 108.000000f), + new PointF (53.000000f, 109.000000f), + new PointF (53.000000f, 115.000000f), + new PointF (54.000000f, 131.000000f), + new PointF (57.000000f, 159.000000f), + new PointF (58.000000f, 177.000000f), + new PointF (59.000000f, 189.000000f), + new PointF (59.000000f, 196.000000f), + new PointF (61.000000f, 201.000000f), + new PointF (64.000000f, 200.000000f), + new PointF (71.000000f, 194.000000f), + new PointF (80.000000f, 189.000000f), + new PointF (90.000000f, 185.000000f), + new PointF (99.000000f, 184.000000f), + new PointF (110.000000f, 184.000000f), + new PointF (118.000000f, 189.000000f), + new PointF (122.000000f, 193.000000f), + new PointF (127.000000f, 198.000000f), + new PointF (128.000000f, 198.000000f), + new PointF (128.000000f, 191.000000f), + new PointF (128.000000f, 179.000000f), + new PointF (128.000000f, 161.000000f), + new PointF (127.000000f, 143.000000f), + new PointF (127.000000f, 127.000000f), + new PointF (127.000000f, 114.000000f), + new PointF (127.000000f, 106.000000f), + new PointF (127.000000f, 100.000000f), + new PointF (128.000000f, 99.000000f), + new PointF (128.000000f, 99.000000f), + }, + new PointF [] { + new PointF (175.000000f, 204.000000f), + new PointF (172.000000f, 195.000000f), + new PointF (172.000000f, 186.000000f), + new PointF (171.000000f, 173.000000f), + new PointF (170.000000f, 160.000000f), + new PointF (169.000000f, 145.000000f), + new PointF (168.000000f, 134.000000f), + new PointF (166.000000f, 126.000000f), + new PointF (165.000000f, 117.000000f), + new PointF (165.000000f, 111.000000f), + new PointF (165.000000f, 107.000000f), + new PointF (170.000000f, 105.000000f), + new PointF (179.000000f, 105.000000f), + new PointF (188.000000f, 110.000000f), + new PointF (198.000000f, 115.000000f), + new PointF (208.000000f, 119.000000f), + new PointF (216.000000f, 122.000000f), + new PointF (221.000000f, 123.000000f), + new PointF (227.000000f, 125.000000f), + new PointF (227.000000f, 125.000000f), + }, + new PointF [] { + new PointF (180.000000f, 149.000000f), + new PointF (193.000000f, 152.000000f), + new PointF (205.000000f, 154.000000f), + new PointF (218.000000f, 158.000000f), + new PointF (230.000000f, 164.000000f), + new PointF (240.000000f, 170.000000f), + new PointF (244.000000f, 175.000000f), + new PointF (244.000000f, 175.000000f), + }, + new PointF [] { + new PointF (177.000000f, 189.000000f), + new PointF (191.000000f, 192.000000f), + new PointF (205.000000f, 193.000000f), + new PointF (219.000000f, 197.000000f), + new PointF (232.000000f, 202.000000f), + new PointF (241.000000f, 205.000000f), + new PointF (249.000000f, 208.000000f), + new PointF (249.000000f, 208.000000f), + }, + new PointF [] { + new PointF (265.000000f, 239.000000f), + new PointF (268.000000f, 227.000000f), + new PointF (269.000000f, 215.000000f), + new PointF (270.000000f, 198.000000f), + new PointF (271.000000f, 178.000000f), + new PointF (273.000000f, 160.000000f), + new PointF (274.000000f, 150.000000f), + new PointF (275.000000f, 142.000000f), + new PointF (277.000000f, 133.000000f), + new PointF (277.000000f, 133.000000f), + }, + new PointF [] { + new PointF (283.000000f, 93.000000f), + new PointF (283.000000f, 93.000000f), + }, + new PointF [] { + new PointF (294.000000f, 87.000000f), + new PointF (285.000000f, 81.000000f), + new PointF (284.000000f, 81.000000f), + new PointF (284.000000f, 80.000000f), + new PointF (284.000000f, 79.000000f), + new PointF (285.000000f, 80.000000f), + new PointF (285.000000f, 82.000000f), + new PointF (285.000000f, 83.000000f), + new PointF (285.000000f, 84.000000f), + new PointF (284.000000f, 84.000000f), + new PointF (282.000000f, 84.000000f), + new PointF (282.000000f, 83.000000f), + new PointF (282.000000f, 82.000000f), + new PointF (282.000000f, 82.000000f), + } + }; + } +} diff --git a/GLPaint-GameView/GLPaint-GameView/SoundEffect.cs b/GLPaint-GameView/GLPaint-GameView/SoundEffect.cs new file mode 100644 index 00000000..e35863da --- /dev/null +++ b/GLPaint-GameView/GLPaint-GameView/SoundEffect.cs @@ -0,0 +1,28 @@ +using System; +using MonoTouch.Foundation; +using MonoTouch.AudioToolbox; + +namespace GLPaintGameView +{ + public class SoundEffect : NSObject + { + SystemSound sound; + + public SoundEffect (string path) + { + sound = SystemSound.FromFile (new NSUrl (path, false)); + } + + protected override void Dispose (bool disposing) + { + ((IDisposable) sound).Dispose (); + sound = null; + } + + public void Play () + { + sound.PlaySystemSound (); + } + } +} +