11using Mono . Cecil ;
2+ using RenderHeads . Media . AVProVideo ;
23using System ;
34using System . Collections . Generic ;
45using System . Linq ;
56using System . Text ;
67using TriLib ;
78using UnityEngine ;
89using UnityEngine . SocialPlatforms ;
10+ using static MathCM ;
911using static RootMotion . FinalIK . IKSolver ;
1012
1113namespace COM3D2 . ButtJiggle
1214{
1315 public class JiggleBoneHelper : MonoBehaviour
1416 {
15- public Transform TargetBone ;
16- public Transform OutputBone ;
17- public jiggleBone JiggleBone ;
1817 public bool IsChangeCheck = false ;
19-
18+
19+ [ SerializeField ] private TBody m_TBody ;
20+
21+ public Transform TargetBone ;
22+ public jiggleBone Jiggle ;
23+
24+ public Transform JiggleBone => Jiggle . transform ;
25+ [ SerializeField ] private Transform m_JiggleSubBone ;
26+ [ SerializeField ] private Transform m_JiggleOutputBone ;
27+
28+ [ SerializeField ] private Transform m_HitParent ;
29+ [ SerializeField ] private Transform m_HitChild ;
30+ [ SerializeField ] private SphereCollider m_HitChildCollider ;
31+
32+
2033 public static bool UseGlobalOverride = false ;
2134 public static JiggleBoneOverride GlobalOverride = JiggleBoneOverride . None ;
2235
2336 public static bool DebugMode = false ;
24- private LineRenderer [ ] m_LineRenderers = new LineRenderer [ 5 ] ;
37+ [ SerializeField ] private LineRenderer [ ] m_LineRenderers = new LineRenderer [ 5 ] ;
38+ [ SerializeField ] private SphereRenderer m_SphereRenderer ;
2539 private static Material m_DebugMaterial ;
2640
27- public static JiggleBoneHelper CreateFromBone ( Transform targetBone )
41+ public static JiggleBoneHelper CreateFromBone ( Transform targetBone , TBody tbody )
2842 {
2943
3044 var helperBone = CopyBone ( targetBone , targetBone . name + "_helper" ) ;
@@ -47,10 +61,34 @@ public static JiggleBoneHelper CreateFromBone(Transform targetBone)
4761 jb . MuneYori = 0 ;
4862 jb . m_fMuneYawaraka = ButtJiggle . ButtJiggle_DefaultSoftness . Value ;
4963
64+
5065 var helper = helperBone . gameObject . AddComponent < JiggleBoneHelper > ( ) ;
5166 helper . TargetBone = targetBone ;
52- helper . OutputBone = outputBone ;
53- helper . JiggleBone = jb ;
67+ helper . Jiggle = jb ;
68+ helper . m_JiggleSubBone = subBone ;
69+ helper . m_JiggleOutputBone = outputBone ;
70+ helper . m_TBody = tbody ;
71+
72+ if ( GameMain . Instance . VRMode || true )
73+ {
74+ Transform hitParent = GameObject . Instantiate < GameObject > ( Resources . Load < GameObject > ( "OVR/SphereParent" ) ) ? . transform ;
75+ Transform hitChild = GameObject . Instantiate < GameObject > ( Resources . Load < GameObject > ( "OVR/SphereChild" ) ) ? . transform ;
76+ hitChild . GetComponent < SpringJoint > ( ) . connectedBody = hitParent . GetComponent < Rigidbody > ( ) ;
77+ hitParent . parent = helper . JiggleBone ;
78+ hitChild . parent = helper . JiggleBone ;
79+ hitParent . localPosition = helper . m_JiggleSubBone . localPosition ;
80+ hitChild . localPosition = helper . m_JiggleSubBone . localPosition ;
81+
82+ helper . m_HitParent = hitParent ;
83+ helper . m_HitChild = hitChild ;
84+ helper . m_HitChildCollider = hitChild . GetComponent < SphereCollider > ( ) ;
85+ var center = new Vector3 ( 0.3f , 0.1f , - 0.7f ) ;
86+ if ( targetBone . name . Contains ( "_R" ) )
87+ {
88+ center . x *= - 1 ;
89+ }
90+ helper . m_HitChildCollider . center = center ;
91+ }
5492
5593 return helper ;
5694 }
@@ -61,6 +99,30 @@ void Start()
6199 {
62100 m_LineRenderers [ i ] = CreateLineRenderer ( ) ;
63101 }
102+
103+ if ( m_HitChild != null )
104+ {
105+ m_SphereRenderer = m_HitChild . gameObject . AddComponent < SphereRenderer > ( ) ;
106+ m_SphereRenderer . Material = m_DebugMaterial ;
107+ }
108+ }
109+
110+ public void Update ( )
111+ {
112+ float limitDistance = m_TBody . m_fHitLimitDistanceMin + ( m_TBody . m_fHitLimitDistanceMax - m_TBody . m_fHitLimitDistanceMin ) * ( Jiggle . BlendValue / 1.3f ) ;
113+ if ( m_JiggleSubBone != null && m_HitChild != null )
114+ {
115+ Vector3 hitChildLocalPos = JiggleBone . InverseTransformPoint ( m_HitChild . position ) ;
116+ if ( ( hitChildLocalPos - m_HitParent . localPosition ) . magnitude < limitDistance )
117+ {
118+ m_JiggleSubBone . localPosition = hitChildLocalPos ;
119+ }
120+ else
121+ {
122+ m_JiggleSubBone . localPosition = m_HitParent . localPosition + ( hitChildLocalPos - m_HitParent . localPosition ) . normalized * limitDistance ;
123+ m_HitChild . position = m_JiggleSubBone . position ;
124+ }
125+ }
64126 }
65127
66128 public void LateUpdateSelf ( )
@@ -69,27 +131,29 @@ public void LateUpdateSelf()
69131
70132 if ( IsChangeCheck ) ApplyChanges ( ) ;
71133
72- CopyLocalTransform ( this . transform , JiggleBone . transform ) ;
73- JiggleBone . defQtn = this . transform . localRotation ;
134+ CopyLocalTransform ( this . transform , Jiggle . transform ) ;
135+ Jiggle . defQtn = this . transform . localRotation ;
74136
75137 if ( UseGlobalOverride )
76138 {
77139 //ButtJiggle.Logger.LogInfo("Use Global Override!");
78- var origValues = JiggleBoneOverride . From ( JiggleBone ) ;
79- GlobalOverride . ApplyTo ( JiggleBone ) ;
80- JiggleBone . LateUpdateSelf ( ) ;
81- origValues . ApplyTo ( JiggleBone ) ;
140+ var origValues = JiggleBoneOverride . From ( Jiggle ) ;
141+ GlobalOverride . ApplyTo ( Jiggle ) ;
142+ Jiggle . LateUpdateSelf ( ) ;
143+ origValues . ApplyTo ( Jiggle ) ;
82144 }
83145 else
84146 {
85- JiggleBone . LateUpdateSelf ( ) ;
147+ Jiggle . LateUpdateSelf ( ) ;
86148 }
87- CopyTransform ( OutputBone . transform , TargetBone ) ;
88- TargetBone . localScale = Vector3 . Scale ( JiggleBone . transform . localScale , this . transform . localScale ) ;
149+ CopyTransform ( m_JiggleOutputBone . transform , TargetBone ) ;
150+ TargetBone . localScale = Vector3 . Scale ( Jiggle . transform . localScale , this . transform . localScale ) ;
89151
90152 DebugDraw ( ) ;
91153 }
92154
155+
156+
93157 private static Transform CopyBone ( Transform bone , string name )
94158 {
95159 Transform newBone = new GameObject ( name ) . transform ;
@@ -142,31 +206,40 @@ public void CopyLocalTransformFromBone()
142206
143207 private void DebugDraw ( )
144208 {
145- if ( ! DebugMode && ! JiggleBone . debugMode )
209+ if ( ! DebugMode && ! Jiggle . debugMode )
146210 {
147211 foreach ( var lineRenderer in m_LineRenderers )
148212 {
149213 lineRenderer . enabled = false ;
150214 }
215+ if ( m_SphereRenderer != null )
216+ {
217+ m_SphereRenderer . enabled = false ;
218+ }
151219 return ;
152220 }
153221
154- Quaternion origRotation = JiggleBone . transform . localRotation ;
155- JiggleBone . transform . localRotation = JiggleBone . defQtn ;
222+ Quaternion origRotation = Jiggle . transform . localRotation ;
223+ Jiggle . transform . localRotation = Jiggle . defQtn ;
156224
157- Vector3 localForward = JiggleBone . boneAxis * JiggleBone . targetDistance ;
158- Vector3 boneForward = JiggleBone . transform . TransformDirection ( localForward ) ;
159- Vector3 boneUp = JiggleBone . transform . TransformDirection ( Vector3 . up ) ;
160- Vector3 lookTarget = JiggleBone . transform . position + boneForward ;
225+ Vector3 localForward = Jiggle . boneAxis * Jiggle . targetDistance ;
226+ Vector3 boneForward = Jiggle . transform . TransformDirection ( localForward ) ;
227+ Vector3 boneUp = Jiggle . transform . TransformDirection ( Vector3 . up ) ;
228+ Vector3 lookTarget = Jiggle . transform . position + boneForward ;
161229
162- JiggleBone . transform . localRotation = origRotation ;
230+ Jiggle . transform . localRotation = origRotation ;
163231
164- DrawRay ( 0 , JiggleBone . transform . position , boneForward , Color . blue ) ;
165- DrawRay ( 1 , JiggleBone . transform . position , boneUp * 0.2f , Color . green ) ;
232+ DrawRay ( 0 , Jiggle . transform . position , boneForward , Color . blue ) ;
233+ DrawRay ( 1 , Jiggle . transform . position , boneUp * 0.2f , Color . green ) ;
166234 DrawRay ( 2 , lookTarget , Vector3 . up * 0.2f , Color . yellow ) ;
167- DrawRay ( 3 , JiggleBone . dynamicPos , Vector3 . up * 0.2f , Color . red ) ;
235+ DrawRay ( 3 , Jiggle . dynamicPos , Vector3 . up * 0.2f , Color . red ) ;
168236
169237 DrawBone ( 4 , TargetBone , Color . white ) ;
238+
239+ if ( m_HitChildCollider != null )
240+ {
241+ DrawSphereCollider ( m_HitChildCollider , Color . green ) ;
242+ }
170243 }
171244
172245 private LineRenderer CreateLineRenderer ( )
@@ -197,19 +270,15 @@ private static Material CreateMaterial()
197270 {
198271 Shader shader = Shader . Find ( "Hidden/Internal-Colored" ) ;
199272
200-
201- var lineTexture = Resources . Load < Texture > ( "SteamVR/ArcTeleport" ) ;
202- //var grayTexture = Resources.Load<Shader>("SteamVR/ArcTeleport_Gray");
203-
204273 Material material = new Material ( shader )
205274 {
206275 hideFlags = HideFlags . HideAndDontSave
207276 } ;
208- material . SetInt ( "_ZTest" , 0 ) ;
209- material . SetInt ( "_SrcBlend" , 5 ) ;
277+ material . SetInt ( "_ZTest" , 0 ) ;
278+ material . SetInt ( "_SrcBlend" , 5 ) ;
210279 material . SetInt ( "_DstBlend" , 10 ) ;
211- material . SetInt ( "_Cull" , 0 ) ;
212- material . SetInt ( "_ZWrite" , 0 ) ;
280+ material . SetInt ( "_Cull" , 0 ) ;
281+ material . SetInt ( "_ZWrite" , 0 ) ;
213282 material . renderQueue = 5000 ;
214283 //material.color = this.lineColor;
215284 return material ;
@@ -238,5 +307,19 @@ private void DrawRay(int lineIndex, Vector3 start, Vector3 dir, Color color)
238307
239308 line . SetPositions ( new Vector3 [ ] { start , start + dir } ) ;
240309 }
310+
311+ private void DrawSphereCollider ( SphereCollider sphereCollider , Color color )
312+ {
313+ if ( m_SphereRenderer == null )
314+ {
315+ ButtJiggle . Logger . LogError ( $ "{ this } .m_SphereRenderer == null") ;
316+ return ;
317+ }
318+
319+ m_SphereRenderer . enabled = true ;
320+ m_SphereRenderer . Radius = sphereCollider . radius ;
321+ m_SphereRenderer . Center = sphereCollider . center ;
322+ m_SphereRenderer . Color = color ;
323+ }
241324 }
242325}
0 commit comments