From 4c351f24438e5f9a7392b75dbcc23f79e219a716 Mon Sep 17 00:00:00 2001 From: hyakugei Date: Wed, 30 Jan 2013 10:58:25 -0500 Subject: [PATCH 1/2] Added a destroy() method to remove containers This method follows from how UITextInstances are removed. By calling it, you remove all children of the container from their managers as well. The container itself is then removed from the UI GameObject. --- .../UIToolkit/BaseElements/UIAbstractContainer.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Assets/Plugins/UIToolkit/BaseElements/UIAbstractContainer.cs b/Assets/Plugins/UIToolkit/BaseElements/UIAbstractContainer.cs index 97f989b..bcd430f 100644 --- a/Assets/Plugins/UIToolkit/BaseElements/UIAbstractContainer.cs +++ b/Assets/Plugins/UIToolkit/BaseElements/UIAbstractContainer.cs @@ -105,7 +105,19 @@ public void removeChild( UISprite child, bool removeFromManager ) if( removeFromManager ) child.manager.removeElement( child ); } - + + /// + /// A way to remove a container and all it holds. + /// + public void destroy() + { + while(_children.Count > 0) + { + removeChild(_children[0], true); + } + + Object.Destroy(client); + } /// /// Call this when changing multiple properties at once that result in autolayout. Must be From 3dc80eb86133e03ab0bfdf09ed60a28fac1db010 Mon Sep 17 00:00:00 2001 From: hyakugei Date: Wed, 6 Feb 2013 13:35:54 -0500 Subject: [PATCH 2/2] Fix button in Web Player This fixes the bug in the WebPlayer where it was erroring when using the native Touch classes. Created a wrapper class to bypass the bug. The bug was reported in issue 116. --- Assets/DemoSceneScripts/PanelManager.cs | 3 + Assets/DemoSceneScripts/TextManager.cs | 2 +- Assets/DemoScenes/ExtendedTextTest.unity | Bin 15385 -> 16484 bytes .../UIToolkit/BaseElements/ITouchable.cs | 6 +- .../UIAbstractTouchableContainer.cs | 10 +- .../BaseElements/UIControlTemplate.cs | 8 +- .../BaseElements/UITouchableSprite.cs | 8 +- .../UIScrollableHorizontalLayout.cs | 2 +- .../Containers/UIScrollableVerticalLayout.cs | 2 +- .../UIToolkit/Materials/UIToolkitMaterial.mat | Bin 4328 -> 4328 bytes .../Plugins/UIToolkit/Structs/UITouchMaker.cs | 53 ++++++--- .../UIToolkit/Structs/UITouchWrapper.cs | 104 ++++++++++++++++++ .../UIToolkit/Structs/UITouchWrapper.cs.meta | 7 ++ .../Plugins/UIToolkit/UIElements/TouchInfo.cs | 2 +- .../Plugins/UIToolkit/UIElements/UIButton.cs | 6 +- .../UIToolkit/UIElements/UIColorPicker.cs | 6 +- .../UIElements/UIContinuousButton.cs | 8 +- .../UIToolkit/UIElements/UIGhostJoystick.cs | 6 +- .../UIToolkit/UIElements/UIJoystick.cs | 6 +- Assets/Plugins/UIToolkit/UIElements/UIKnob.cs | 8 +- .../Plugins/UIToolkit/UIElements/UISlider.cs | 8 +- .../UIToolkit/UIElements/UIStateButton.cs | 2 +- .../UIToolkit/UIElements/UISwipeDetector.cs | 8 +- .../UIToolkit/UIElements/UIToggleButton.cs | 4 +- .../UIToolkit/UIElements/UIZoomButton.cs | 6 +- Assets/Plugins/UIToolkit/UIToolkit.cs | 21 +++- 26 files changed, 220 insertions(+), 76 deletions(-) create mode 100644 Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs create mode 100644 Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs.meta diff --git a/Assets/DemoSceneScripts/PanelManager.cs b/Assets/DemoSceneScripts/PanelManager.cs index 915a4e9..7eec123 100644 --- a/Assets/DemoSceneScripts/PanelManager.cs +++ b/Assets/DemoSceneScripts/PanelManager.cs @@ -6,6 +6,9 @@ public class PanelManager : MonoBehaviour { void Start() { + + Debug.LogError("PanelManager.Start()"); + // IMPORTANT: depth is 1 on top higher numbers on the bottom. This means the lower the number is the closer it gets to the camera. var playButton = UIButton.create( "playUp.png", "playDown.png", 0, 0 ); diff --git a/Assets/DemoSceneScripts/TextManager.cs b/Assets/DemoSceneScripts/TextManager.cs index d08e7c0..43d92ac 100644 --- a/Assets/DemoSceneScripts/TextManager.cs +++ b/Assets/DemoSceneScripts/TextManager.cs @@ -68,7 +68,7 @@ void Start() textWrap2 = wrapText.addTextInstance( "This should be hyphenated. Check baseline - tytyt", 0, 0, 0.5f, 1, Color.green, UITextAlignMode.Center, UITextVerticalAlignMode.Bottom ); textWrap2.positionFromBottom( 0f ); - StartCoroutine( modifyTextInstances() ); + //StartCoroutine( modifyTextInstances() ); } diff --git a/Assets/DemoScenes/ExtendedTextTest.unity b/Assets/DemoScenes/ExtendedTextTest.unity index a2882f42786eab59dbd3050d40ca5e2e75ef77cd..e09dbf77095e1a692e67f5526e6027f2fb83e74c 100644 GIT binary patch literal 16484 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 literal 15385 zcmeHO-H#kc5g+sA#DPE{1PBQniIFT3`ObH~yR{U~z7L=8#5p;8&xQvRGrK#xJ9u_y znVGfkLL@dwMu7+3_(%d$B3=R_g8v{v0)&vm8$w7(Np_0CLpb#--hb=9wX<~(oivgh6Z0nhVpqFhLWqqYE7n+HeVOb`2hb?^PA?(54h zT-jKV?0I<`R8t%0*)%En-IJHCE%EJJ=ogvW503uzz`3KJzrAbu4SAy7OC%8W|8Y>i z6F-z*xN?P_hjgaY{Jx1U%$lw@Q%+2=cbmPU{>-{j$eC{Dw^~7CD4!)#7tL=Ul?%Uj zTN>!A)el+0*W-6P(Q1CTD1PsudrT5!KC`|R$I*o_vt`%gOJv?#Da*LuPWR{w=^d2M z@tx7%BliAXbUkJ7Z?#v*bJ7pH6U%-lNPG|D#j}0%uB9iifDCRb&JmtX7GCIcTzcC` z#o*|(cR#3ovC*G2u1|B9?+A*(z=V4u+S?^{u(_ZKNgSF2F^=vI{ z1gnwXN?8%oDX!A-=4O`Mf4mW9adLb+3%Y3-ch@_;Xn}a-1w_N%2i^$@4EEA5o~zR1 zY8VCUE8LMxve2PTPPgf2ZA&K}Nz<`FC&dNz?7Z9rxiRtWgx&lgE)D%2r`%n5=kc2)KhP~q%lOV#P5zBEiCeBMUE}OCU83`Q` z!*1q9{!Wmvmfx=^SOj`LOKUw&rkm{lNQ+fW2?hvohor@8MzNoH+sy1vQ=Ql2(bVs7 z{Rd0x&Dv;$X^({3iu?8UN>J;!7L&kFnbBRk5rHWr__G`IV_1*7er)JXcl{WLHdqnN zSp41pn;(Ohyg>_xGu^fDT?U3R zOZLMEj|fay$oUGO76zb}#b-D8>G&+c&%`6YpT%1SLsWx^;voUq)i_yO;l7+OZ9|f6 z7e(=<&A4&+M9{UwI#zp@7-Dq%?N5e{to>lJ7KE*KM(nEw@am}TiWR1osS~y>Q)oef z+Yw~XIC>zv{x>?ZzsMkkfah}D>BZfEGzyhSBV=Af^pdIy`k2wG~S8W+=cX6|J1l${O%;nkgTUE2^zmS3#KnNS(F=Z*u$uWtr2l9L}1jA&uJ{Xp}Dfmu(I-S{FL(p|=vhn>OR5Gv;uBNMQT99qk?tc>f8g zKGnw#uuB1^Nwd8X*Zt^p3?rdw$5PRL#yemRq4cIpyBO3X=}njRDQ^A4?4q+Yv=}hZ*S-YQ zMQOAH5pG(28b!GEMjGunq<$Ei+F{g4f-Z+9?Lgp+vF3{Y6TSoG$e>YcJolg4ZHQAh zZbKICf;l6(iI`}oQDEpq6zw#G>Ghn3&=or;#&jx22MiEE@A)5fN8|{gxA~w$Dih#t zt}z-CI?RE6Z@{SMAxnb`W5j_uEZTKhukS9YPY1xQZqS%uynB8*3jAbvfb2Lfm68ERN;acOLfB+^i9b8zOkG!|OKHV0>p6Lab> zVGF_h97pERw0VEQM2^)1)m$ zKZ@v7`=p;;ZDEVf9JRL-0oaWiQVRe9 z|F-<36=b%6b)`KZ+Cr+_Q>snEhb&{rBJ$*P>agI$C3NVcS`Ww$Mz)d6YG7%)Px6#irJ21bon_UQ#(T$bJ+wtPLcQ_nKjfo4_CDu zL{U{QQ88tB@5BD(-*q8m)pAvHRLk^eDK>*zWaT8=j+v zg*UppQ)5gLs#MF-Sw4Dci^|KEPuWq>jZRIQrpCDRYLI0V0aCMc&S0)>lBEOe!9kFu zj9ZRJVUjgNuOSlA4Y85qMh|F^VXzUO{}B%`6YQd~k#?VMy}?G>ce?ck8)m+&dHC{NgD>LeWws> z%`SFoA)P61;AEB|oOYtv=Yffl+h|w&O&Pt`?s#Nrv|ENOO?#tVfslIk*l(&=$>*yV zc53mql<>G5Xh}*Ow;D9W++&qpwi-0d6gru|H9v~!Y%b`wEX)}XH_65$pI$9%>N2>= zLv+r=(20ga;_7&f(4>qTpvIg+TQ)$wy%xGrDXP6VTaM!kp?Nc2gq`Dr(7;oemkA+= z6Es2xpELGr91T8Yp*}*5cjE%ST;i1=YJoog*Ky$sBm>^nob9{}l@WfM?%8v7{GJeX7w;j*Yg zMn`1%hETddYw@?eE-RD|_zBTUE^ z9Z_BnsBdDhberapSVt_V0maSnjzRIc(b0i6 zA}HBmq2e?((;*LB5G^E>oDR}B>hqa0Y(YmqkRl1`hM#66aHG(~34Er7-HzMn!EawV zj_cTGDP2cLVR+qZw$3V(){T)F~0WdTrw5(@9E&LQS=g5Sg_ zDsh4y)gu{c&3Tv;>?XL{)*Do!MKtCPM zTq>hC^M=3d6vbHkYS{Io6MPDN+TStM#d8zzm6=oY^tE7?kV$Q|lOS!!^yvW%P#>m< zKqZY&Bz^<9(QT|xSfufYoKREJiz9yXvl&yp5qrY65YK`~>3Q+N#SYn=!M`85CgDkc zdxduIJ{c$v=$>m*ixQah-V##lDC|Ldck#JF^lZSeIG3$`~wAu zlEZ+}lPGrm0}}$+-xgZo_{<#Wu-g{}%5|LEM>!JcgtpA>JNqeaVIxmL4EX?hE1)l- z>0O_CIZ_OB<3!Ry?ph-0$R>2G8N^KKA8OIhtQ;NdFqUzWl*PI-<>`E<11_^)F>He$1u)j_FV7Bqyh zMq9Ql%8XVo0x?<)GnG%kc$|6(pjS{9Cl=->Y}?NpiVmy(-f8^`d?u=p2P1HHlMkr9uPF`5a=pQ7Bh z8NPL!G8`oKO31h$P_9wN4hI<)@Dk+>%HWNR*{;xyF2l?|MrB);26ULm7wHDuWIQ8d z-abPDZPFF}A!D9?NM&oP3^VfgLK(Dwj0D$o(DY+e)}SlU9WvDUCn^KBI%P9-b`y1m zG92e3Lq`*~3^F3a8C0ljg|67kC3MB=A5hr=y5hrllmU4@LuD8*{^#PZz{k zWZ=gGg)(5q%|aRGZkx*PqANTLGCg{JO6wz?>_z=n*i9$<^q)Wc&xCY$u%3FI+rAZE z`q=7ygU_`dy4w2nJy3BJ*2pRCOxFE+JD6~-=I3kEbBF8GQ_nCOH*2w6lV>Z(0^qb-3J5Ed;KlioC%Qs*3 z_VWK?xt&&yOjfAF*~;9Z`NLB)vxn=mvqzfKvy~%LGtH@~`Kh^zbXqntJ4W5@zWMyW4sy^*c)$6rp?eO8|j9>BRgXzkAvpF+2J69jy zm;7^x(ySC6q#N%WU;fI=7yr2S{jc77`7h7)e)m1H$k)zH<}wMIel4A(e>4@P61Jlv e@5$aT?rZK}{rTgke)*fO4Bp*iuFT1 zL-O-;vNKEcgEJCSQj3s86dZF3G7=SB^AeMCQd1N(TvF2#OLIyz^@_nN8GPKEJ2C}4 z@9Y!k`&$)lEyf76CnqzhD6yzgKRGcuBUL}y1c=N{j4doIEX@oIElrYB>Qj>p3{x#q z(h|*+Op}bw3>lyfa!Jk2hcbgwi}Op1l2eQIf$jpDlNX$smmQpunp$F1p;wTX&Jgp+ zDEv^Z=j=skvZ -/// this class now exists only to allow standalones/web players to create Touch objects +/// this class now exists only to allow standalones/web players to create UITouchWrapper objects /// public struct UITouchMaker { - public static Touch createTouch( int finderId, int tapCount, Vector2 position, Vector2 deltaPos, float timeDelta, TouchPhase phase ) + public static UITouchWrapper createTouch( int finderId, int tapCount, Vector2 position, Vector2 deltaPos, float timeDelta, TouchPhase phase ) { - var self = new Touch(); - ValueType valueSelf = self; - var type = typeof( Touch ); - + var self = new UITouchWrapper(); + //ValueType valueSelf = self; + //var type = typeof( UITouchWrapper ); + /* type.GetField( "m_FingerId", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, finderId ); type.GetField( "m_TapCount", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, tapCount ); type.GetField( "m_Position", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, position ); @@ -32,41 +32,58 @@ public static Touch createTouch( int finderId, int tapCount, Vector2 position, V type.GetField( "m_TimeDelta", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, timeDelta ); type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, phase ); - return (Touch)valueSelf; + return (UITouchWrapper)valueSelf; + */ + + self.fingerId = finderId; + self.tapCount = tapCount; + self.position = position; + self.deltaPosition = deltaPos; + self.deltaTime = timeDelta; + self.phase = phase; + return self; } - public static Touch createTouchFromInput( UIMouseState mouseState, ref Vector2? lastMousePosition ) + public static UITouchWrapper createTouchFromInput( UIMouseState mouseState, ref Vector2? lastMousePosition ) { - var self = new Touch(); - ValueType valueSelf = self; - var type = typeof( Touch ); + //var self = new UITouchWrapper(); + //ValueType valueSelf = self; + //var type = typeof( UITouchWrapper ); + + var self = new UITouchWrapper(); var currentMousePosition = new Vector2( Input.mousePosition.x, Input.mousePosition.y ); + if(lastMousePosition.HasValue) // if we have a lastMousePosition use it to get a delta - if( lastMousePosition.HasValue ) - type.GetField( "m_PositionDelta", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, currentMousePosition - lastMousePosition ); + if( lastMousePosition.HasValue ) self.deltaPosition = currentMousePosition - (Vector2)lastMousePosition; + //type.GetField( "m_PositionDelta", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, currentMousePosition - lastMousePosition ); if( mouseState == UIMouseState.DownThisFrame ) // equivalent to touchBegan { - type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, TouchPhase.Began ); + //type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, TouchPhase.Began ); + self.phase = TouchPhase.Began; lastMousePosition = Input.mousePosition; } else if( mouseState == UIMouseState.UpThisFrame ) // equivalent to touchEnded { - type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, TouchPhase.Ended ); + //type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, TouchPhase.Ended ); + self.phase = TouchPhase.Ended; lastMousePosition = null; } else // UIMouseState.HeldDown - equivalent to touchMoved/Stationary { - type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, TouchPhase.Moved ); + //type.GetField( "m_Phase", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, TouchPhase.Moved ); + self.phase = TouchPhase.Moved; lastMousePosition = Input.mousePosition; } - type.GetField( "m_Position", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, currentMousePosition ); + //type.GetField( "m_Position", BindingFlags.Instance | BindingFlags.NonPublic ).SetValue( valueSelf, currentMousePosition ); + self.position = currentMousePosition; - return (Touch)valueSelf; + return self; + //return (UITouchWrapper)valueSelf; } } #endif \ No newline at end of file diff --git a/Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs b/Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs new file mode 100644 index 0000000..ba7fcf7 --- /dev/null +++ b/Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs @@ -0,0 +1,104 @@ +using System; +using UnityEngine; + +public class UITouchWrapper +{ + + private int m_FingerId = 0; + private Vector2 m_Position = new Vector2(); + private Vector2 m_PositionDelta = new Vector2(); + private float m_TimeDelta = 0f; + private int m_TapCount = 0; + private TouchPhase m_Phase = TouchPhase.Stationary; + + private bool m_Locked = false; + + public UITouchWrapper() + { + } + + + public bool locked + { + get + { + return m_Locked; + } + + set + { + if(value == true) m_Locked = true; + } + } + + public int fingerId + { + get + { + return this.m_FingerId; + } + set + { + if(!locked) this.m_FingerId = value; + } + } + + public Vector2 position + { + get + { + return this.m_Position; + } + set + { + if(!locked) this.m_Position = value; + } + } + public Vector2 deltaPosition + { + get + { + return this.m_PositionDelta; + } + set + { + if(!locked) this.m_PositionDelta = value; + } + } + + public float deltaTime + { + get + { + return this.m_TimeDelta; + } + set + { + if(!locked) this.m_TimeDelta = value; + } + } + public int tapCount + { + get + { + return this.m_TapCount; + } + set + { + if(!locked) this.m_TapCount = value; + } + } + public TouchPhase phase + { + get + { + return this.m_Phase; + } + set + { + if(!locked) this.m_Phase = value; + } + } + +} + diff --git a/Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs.meta b/Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs.meta new file mode 100644 index 0000000..454f0a0 --- /dev/null +++ b/Assets/Plugins/UIToolkit/Structs/UITouchWrapper.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ce2281f7173bf46bfb43ef84feb3fb9f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/Assets/Plugins/UIToolkit/UIElements/TouchInfo.cs b/Assets/Plugins/UIToolkit/UIElements/TouchInfo.cs index 182e3d2..cb1306f 100644 --- a/Assets/Plugins/UIToolkit/UIElements/TouchInfo.cs +++ b/Assets/Plugins/UIToolkit/UIElements/TouchInfo.cs @@ -43,7 +43,7 @@ public TouchInfo( SwipeDirection swipesToDetect ) } - public void resetWithTouch( Touch touch ) + public void resetWithTouch( UITouchWrapper touch ) { // Initialize the detectionState only with the swipe types we want to listen for swipeDetectionState = swipesToDetect; diff --git a/Assets/Plugins/UIToolkit/UIElements/UIButton.cs b/Assets/Plugins/UIToolkit/UIElements/UIButton.cs index ff4193c..8b324e0 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIButton.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIButton.cs @@ -85,8 +85,8 @@ public override bool highlighted } - // Touch handlers - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + // UITouchWrapper handlers + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { highlighted = true; @@ -101,7 +101,7 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { // If someone has un-highlighted us through code we are deactivated // and should not fire the event diff --git a/Assets/Plugins/UIToolkit/UIElements/UIColorPicker.cs b/Assets/Plugins/UIToolkit/UIElements/UIColorPicker.cs index cf946d4..25395e8 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIColorPicker.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIColorPicker.cs @@ -53,8 +53,8 @@ public Color colorPicked } - // Touch handlers - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + // UITouchWrapper handlers + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { highlighted = true; @@ -67,7 +67,7 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { Color oldColor = colorPicked; Vector2 textureCoord = getTouchTextureCoords(touchPos); diff --git a/Assets/Plugins/UIToolkit/UIElements/UIContinuousButton.cs b/Assets/Plugins/UIToolkit/UIElements/UIContinuousButton.cs index ed07d36..24d6eed 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIContinuousButton.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIContinuousButton.cs @@ -43,8 +43,8 @@ public UIContinuousButton( UIToolkit manager, Rect frame, int depth, UIUVRect uv } - // Touch handlers - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + // UITouchWrapper handlers + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { base.onTouchBegan( touch, touchPos ); @@ -53,7 +53,7 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { // dont fire this continously if we were asked to only fire start and end if( !onlyFireStartAndEndEvents && onTouchIsDown != null ) @@ -61,7 +61,7 @@ public override void onTouchMoved( Touch touch, Vector2 touchPos ) } - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { base.onTouchEnded( touch, touchPos, touchWasInsideTouchFrame ); diff --git a/Assets/Plugins/UIToolkit/UIElements/UIGhostJoystick.cs b/Assets/Plugins/UIToolkit/UIElements/UIGhostJoystick.cs index dfe9307..374be1e 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIGhostJoystick.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIGhostJoystick.cs @@ -163,7 +163,7 @@ private void layoutJoystick( Vector2 localTouchPosition ) } - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { if (currentTouchId != -1) return; @@ -185,7 +185,7 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { if (touch.fingerId != currentTouchId) return; @@ -196,7 +196,7 @@ public override void onTouchMoved( Touch touch, Vector2 touchPos ) } - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { if (touch.fingerId != currentTouchId) return; diff --git a/Assets/Plugins/UIToolkit/UIElements/UIJoystick.cs b/Assets/Plugins/UIToolkit/UIElements/UIJoystick.cs index 634b0ac..41f31b0 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIJoystick.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIJoystick.cs @@ -185,7 +185,7 @@ private void layoutJoystick( Vector2 localTouchPosition ) } - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { highlighted = true; @@ -197,13 +197,13 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { this.layoutJoystick( this.inverseTranformPoint( touchPos ) ); } - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { // Set highlighted to avoid calling super highlighted = false; diff --git a/Assets/Plugins/UIToolkit/UIElements/UIKnob.cs b/Assets/Plugins/UIToolkit/UIElements/UIKnob.cs index d67627b..3188e73 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIKnob.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIKnob.cs @@ -125,9 +125,9 @@ private void updateKnobForTouchPosition( Vector2 touchPos ) } - #region Touch Handlers + #region UITouchWrapper Handlers - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { highlighted = true; @@ -135,13 +135,13 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { this.updateKnobForTouchPosition( touchPos ); } - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { highlighted = false; diff --git a/Assets/Plugins/UIToolkit/UIElements/UISlider.cs b/Assets/Plugins/UIToolkit/UIElements/UISlider.cs index 0fabac8..81c4d7e 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UISlider.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UISlider.cs @@ -185,8 +185,8 @@ private void updateSliderKnobForTouchPosition( Vector2 touchPos ) } - // Touch handlers - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + // UITouchWrapper handlers + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { highlighted = true; @@ -194,13 +194,13 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { this.updateSliderKnobForTouchPosition( touchPos ); } - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { if( touchCount == 0 ) highlighted = false; diff --git a/Assets/Plugins/UIToolkit/UIElements/UIStateButton.cs b/Assets/Plugins/UIToolkit/UIElements/UIStateButton.cs index d21a2a7..98d4669 100755 --- a/Assets/Plugins/UIToolkit/UIElements/UIStateButton.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIStateButton.cs @@ -146,7 +146,7 @@ public void addFrames( UIUVRect[] normal, UIUVRect[] highlighted ) } - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { if( touchWasInsideTouchFrame ) { diff --git a/Assets/Plugins/UIToolkit/UIElements/UISwipeDetector.cs b/Assets/Plugins/UIToolkit/UIElements/UISwipeDetector.cs index b4e4518..267e271 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UISwipeDetector.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UISwipeDetector.cs @@ -61,7 +61,7 @@ public UISwipeDetector( Rect frame, int depth, UIUVRect uvFrame ):base( frame, d } - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { if( touchInfoArray[touch.fingerId] == null ) touchInfoArray[touch.fingerId] = new TouchInfo( swipesToDetect ); @@ -71,7 +71,7 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) } - public override void onTouchMoved( Touch touch, Vector2 touchPos ) + public override void onTouchMoved( UITouchWrapper touch, Vector2 touchPos ) { if( processTouchInfoWithTouch( touchInfoArray[touch.fingerId], touch ) ) { @@ -84,7 +84,7 @@ public override void onTouchMoved( Touch touch, Vector2 touchPos ) /* Only used for debugging - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { //Debug.Log( "TOUCH ENDED" ); //Debug.Log( string.Format( "x: {0}, y: {1}", touch.position.x, touch.position.y ) ); @@ -92,7 +92,7 @@ public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasI */ - private bool processTouchInfoWithTouch( TouchInfo touchInfo, Touch touch ) + private bool processTouchInfoWithTouch( TouchInfo touchInfo, UITouchWrapper touch ) { // If we already completed the swipe detection or if none are availalbe get out of here if( touchInfo.swipeDetectionStatus != SwipeDetectionStatus.Waiting ) diff --git a/Assets/Plugins/UIToolkit/UIElements/UIToggleButton.cs b/Assets/Plugins/UIToolkit/UIElements/UIToggleButton.cs index d68d178..d6d6588 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIToggleButton.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIToggleButton.cs @@ -126,8 +126,8 @@ public bool selected } - // Touch handlers - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + // UITouchWrapper handlers + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { highlighted = false; diff --git a/Assets/Plugins/UIToolkit/UIElements/UIZoomButton.cs b/Assets/Plugins/UIToolkit/UIElements/UIZoomButton.cs index 95e6a5a..7b8c69f 100644 --- a/Assets/Plugins/UIToolkit/UIElements/UIZoomButton.cs +++ b/Assets/Plugins/UIToolkit/UIElements/UIZoomButton.cs @@ -68,8 +68,8 @@ public UIZoomButton( UIToolkit manager, Rect frame, int depth, UIUVRect uvFrame, - // Touch handlers - public override void onTouchBegan( Touch touch, Vector2 touchPos ) + // UITouchWrapper handlers + public override void onTouchBegan( UITouchWrapper touch, Vector2 touchPos ) { base.onTouchBegan( touch, touchPos ); @@ -79,7 +79,7 @@ public override void onTouchBegan( Touch touch, Vector2 touchPos ) - public override void onTouchEnded( Touch touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) + public override void onTouchEnded( UITouchWrapper touch, Vector2 touchPos, bool touchWasInsideTouchFrame ) { base.onTouchEnded( touch, touchPos, touchWasInsideTouchFrame ); diff --git a/Assets/Plugins/UIToolkit/UIToolkit.cs b/Assets/Plugins/UIToolkit/UIToolkit.cs index baa01c1..fac7e64 100644 --- a/Assets/Plugins/UIToolkit/UIToolkit.cs +++ b/Assets/Plugins/UIToolkit/UIToolkit.cs @@ -54,7 +54,7 @@ protected void Update() // Examine all current touches for( int i = 0; i < Input.touchCount; i++ ) { - lookAtTouch( Input.GetTouch( i ) ); + lookAtTouch( wrapTouchInput(Input.GetTouch( i )) ); } } // end if Input.touchCount #if UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_WEBPLAYER @@ -97,7 +97,20 @@ protected void Update() #endif } - + + protected UITouchWrapper wrapTouchInput(Touch input) + { + var newTouch = new UITouchWrapper(); + newTouch.deltaTime = input.deltaTime; + newTouch.deltaPosition = input.deltaPosition; + newTouch.position = input.position; + newTouch.phase = input.phase; + newTouch.fingerId = input.fingerId; + newTouch.tapCount = input.tapCount; + newTouch.locked = true; + return newTouch; + } + protected void LateUpdate() { // take care of updating our UVs, colors or bounds if necessary @@ -217,10 +230,10 @@ public void addToTouchables( ITouchable touchable ) #endregion - #region Touch management and analysis helpers + #region UITouchWrapper management and analysis helpers // examines a touch and sends off began, moved and ended events - private void lookAtTouch( Touch touch ) + private void lookAtTouch( UITouchWrapper touch ) { // tranform the touch position so the origin is in the top left var fixedTouchPosition = new Vector2( touch.position.x, Screen.height - touch.position.y );