33using System . Collections . Generic ;
44using System . Linq ;
55using System . Text ;
6+ using TriLib ;
67using UnityEngine ;
78using UnityEngine . SocialPlatforms ;
9+ using static RootMotion . FinalIK . IKSolver ;
810
911namespace COM3D2 . ButtJiggle
1012{
1113 public class JiggleBoneHelper : MonoBehaviour
1214 {
15+ public Transform TargetBone ;
16+ public Transform OutputBone ;
1317 public jiggleBone JiggleBone ;
1418 public bool IsChangeCheck = false ;
15-
19+
1620 public static bool UseGlobalOverride = false ;
1721 public static JiggleBoneOverride GlobalOverride = JiggleBoneOverride . None ;
1822
19- public static JiggleBoneHelper CreateFromBone ( Transform bone )
23+ public static bool DebugMode = false ;
24+ private LineRenderer [ ] m_LineRenderers = new LineRenderer [ 5 ] ;
25+ private static Material m_DebugMaterial ;
26+
27+ public static JiggleBoneHelper CreateFromBone ( Transform targetBone )
2028 {
21- var newBone = CopyBone ( bone , bone . name + "_helper" ) ;
22- var subBone = CopyBone ( bone , bone . name + "_sub" ) . transform ;
23- subBone . SetParent ( bone , true ) ;
2429
25- var jb = bone . gameObject . AddComponent < jiggleBone > ( ) ;
30+ var helperBone = CopyBone ( targetBone , targetBone . name + "_helper" ) ;
31+ var jiggleBone = CopyBone ( targetBone , targetBone . name + "_jiggle" ) ;
32+ var subBone = CopyBone ( jiggleBone , jiggleBone . name + "_sub" ) ;
33+ subBone . SetParent ( jiggleBone , true ) ;
34+ Transform jiggleNub = jiggleBone . Find ( jiggleBone . name + "_nub" ) ;
35+ subBone . position = ( jiggleNub != null ) ? jiggleNub . position : jiggleBone . TransformPoint ( Vector3 . right * 0.2f ) ;
36+ subBone . localEulerAngles = new Vector3 ( 0 , 0 , 180 ) ;
37+
38+ var outputBone = CopyBone ( targetBone , targetBone . name + "_copy" ) ;
39+ outputBone . SetParent ( subBone , true ) ;
40+
41+ var jb = jiggleBone . gameObject . AddComponent < jiggleBone > ( ) ;
2642 jb . BlendValue = 1 ;
2743 jb . BlendValue2 = 1 ;
2844 jb . MuneL_y = 1 ; //bone.name.Contains("_R") ? -1 : 1;
@@ -31,12 +47,49 @@ public static JiggleBoneHelper CreateFromBone(Transform bone)
3147 jb . MuneYori = 0 ;
3248 jb . m_fMuneYawaraka = ButtJiggle . ButtJiggle_DefaultSoftness . Value ;
3349
34- var helper = newBone . gameObject . AddComponent < JiggleBoneHelper > ( ) ;
50+ var helper = helperBone . gameObject . AddComponent < JiggleBoneHelper > ( ) ;
51+ helper . TargetBone = targetBone ;
52+ helper . OutputBone = outputBone ;
3553 helper . JiggleBone = jb ;
3654
3755 return helper ;
3856 }
3957
58+ void Start ( )
59+ {
60+ for ( int i = 0 ; i < m_LineRenderers . Length ; i ++ )
61+ {
62+ m_LineRenderers [ i ] = CreateLineRenderer ( ) ;
63+ }
64+ }
65+
66+ public void LateUpdateSelf ( )
67+ {
68+ if ( ! this . isActiveAndEnabled ) return ;
69+
70+ if ( IsChangeCheck ) ApplyChanges ( ) ;
71+
72+ CopyLocalTransform ( this . transform , JiggleBone . transform ) ;
73+ JiggleBone . defQtn = this . transform . localRotation ;
74+
75+ if ( UseGlobalOverride )
76+ {
77+ //ButtJiggle.Logger.LogInfo("Use Global Override!");
78+ var origValues = JiggleBoneOverride . From ( JiggleBone ) ;
79+ GlobalOverride . ApplyTo ( JiggleBone ) ;
80+ JiggleBone . LateUpdateSelf ( ) ;
81+ origValues . ApplyTo ( JiggleBone ) ;
82+ }
83+ else
84+ {
85+ JiggleBone . LateUpdateSelf ( ) ;
86+ }
87+ CopyTransform ( OutputBone . transform , TargetBone ) ;
88+ TargetBone . localScale = Vector3 . Scale ( JiggleBone . transform . localScale , this . transform . localScale ) ;
89+
90+ DebugDraw ( ) ;
91+ }
92+
4093 private static Transform CopyBone ( Transform bone , string name )
4194 {
4295 Transform newBone = new GameObject ( name ) . transform ;
@@ -55,51 +108,135 @@ private static Transform CopyBone(Transform bone, string name)
55108 return newBone ;
56109 }
57110
111+
58112 public static void CopyLocalTransform ( Transform sourceBone , Transform targetBone )
59113 {
60114 targetBone . localPosition = sourceBone . localPosition ;
61115 targetBone . localRotation = sourceBone . localRotation ;
116+ targetBone . localScale = sourceBone . localScale ;
117+ }
118+
119+ public static void CopyTransform ( Transform sourceBone , Transform targetBone )
120+ {
121+ targetBone . position = sourceBone . position ;
122+ targetBone . rotation = sourceBone . rotation ;
62123 targetBone . localScale = sourceBone . localScale ;
63124 }
64125
65- public void LateUpdateSelf ( )
126+ public void ApplyChanges ( )
66127 {
67- if ( ! this . isActiveAndEnabled ) return ;
128+ CopyLocalTransformFromBone ( ) ;
129+ IsChangeCheck = false ;
130+ }
68131
69- if ( IsChangeCheck ) ApplyChanges ( ) ;
132+ public void CopyLocalTransformToBone ( )
133+ {
134+ CopyLocalTransform ( this . transform , TargetBone . transform ) ;
135+ //JiggleBone.defQtn = this.transform.localRotation;
136+ }
70137
71- CopyLocalTransformToBone ( ) ;
138+ public void CopyLocalTransformFromBone ( )
139+ {
140+ CopyLocalTransform ( TargetBone . transform , this . transform ) ;
141+ }
72142
73- if ( UseGlobalOverride )
143+ private void DebugDraw ( )
144+ {
145+ if ( ! DebugMode && ! JiggleBone . debugMode )
74146 {
75- //ButtJiggle.Logger.LogInfo("Use Global Override!");
76- var origValues = JiggleBoneOverride . From ( JiggleBone ) ;
77- GlobalOverride . ApplyTo ( JiggleBone ) ;
78- JiggleBone . LateUpdateSelf ( ) ;
79- origValues . ApplyTo ( JiggleBone ) ;
147+ foreach ( var lineRenderer in m_LineRenderers )
148+ {
149+ lineRenderer . enabled = false ;
150+ }
151+ return ;
80152 }
81- else
153+
154+ Quaternion origRotation = JiggleBone . transform . localRotation ;
155+ JiggleBone . transform . localRotation = JiggleBone . defQtn ;
156+
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 ;
161+
162+ JiggleBone . transform . localRotation = origRotation ;
163+
164+ DrawRay ( 0 , JiggleBone . transform . position , boneForward , Color . blue ) ;
165+ DrawRay ( 1 , JiggleBone . transform . position , boneUp * 0.2f , Color . green ) ;
166+ DrawRay ( 2 , lookTarget , Vector3 . up * 0.2f , Color . yellow ) ;
167+ DrawRay ( 3 , JiggleBone . dynamicPos , Vector3 . up * 0.2f , Color . red ) ;
168+
169+ DrawBone ( 4 , TargetBone , Color . white ) ;
170+ }
171+
172+ private LineRenderer CreateLineRenderer ( )
173+ {
174+ var go = new GameObject ( "LineRenderer" ) ;
175+ go . transform . parent = this . transform ;
176+
177+ var line = go . AddComponent < LineRenderer > ( ) ;
178+
179+ line . enabled = true ;
180+ line . useWorldSpace = true ;
181+ line . lightProbeUsage = UnityEngine . Rendering . LightProbeUsage . Off ;
182+ line . receiveShadows = false ;
183+ line . shadowCastingMode = UnityEngine . Rendering . ShadowCastingMode . Off ;
184+ line . sortingOrder = 20000 ;
185+ line . widthMultiplier = 0.01f ;
186+
187+ if ( m_DebugMaterial == null )
82188 {
83- JiggleBone . LateUpdateSelf ( ) ;
189+ m_DebugMaterial = CreateMaterial ( ) ;
84190 }
85- JiggleBone . transform . localScale = Vector3 . Scale ( JiggleBone . transform . localScale , this . transform . localScale ) ;
191+ line . material = m_DebugMaterial ;
192+
193+ return line ;
86194 }
87195
88- public void ApplyChanges ( )
196+ private static Material CreateMaterial ( )
89197 {
90- CopyLocalTransformFromBone ( ) ;
91- IsChangeCheck = false ;
198+ Shader shader = Shader . Find ( "Hidden/Internal-Colored" ) ;
199+
200+
201+ var lineTexture = Resources . Load < Texture > ( "SteamVR/ArcTeleport" ) ;
202+ //var grayTexture = Resources.Load<Shader>("SteamVR/ArcTeleport_Gray");
203+
204+ Material material = new Material ( shader )
205+ {
206+ hideFlags = HideFlags . HideAndDontSave
207+ } ;
208+ material . SetInt ( "_ZTest" , 0 ) ;
209+ material . SetInt ( "_SrcBlend" , 5 ) ;
210+ material . SetInt ( "_DstBlend" , 10 ) ;
211+ material . SetInt ( "_Cull" , 0 ) ;
212+ material . SetInt ( "_ZWrite" , 0 ) ;
213+ material . renderQueue = 5000 ;
214+ //material.color = this.lineColor;
215+ return material ;
92216 }
93217
94- public void CopyLocalTransformToBone ( )
218+ private void DrawBone ( int lineIndex , Transform bone , Color color )
95219 {
96- CopyLocalTransform ( this . transform , JiggleBone . transform ) ;
97- JiggleBone . defQtn = this . transform . localRotation ;
220+ Transform nub = bone . Find ( bone . name + "_nub" ) ? . transform ;
221+ Vector3 offset = ( nub != null ) ? nub . position - bone . position : bone . TransformDirection ( Vector3 . right ) * 0.2f ;
222+ DrawRay ( lineIndex , bone . position , offset , color ) ;
98223 }
99-
100- public void CopyLocalTransformFromBone ( )
224+
225+ private void DrawRay ( int lineIndex , Vector3 start , Vector3 dir , Color color )
101226 {
102- CopyLocalTransform ( JiggleBone . transform , this . transform ) ;
227+ var line = m_LineRenderers [ lineIndex ] ;
228+ if ( line == null )
229+ {
230+ ButtJiggle . Logger . LogError ( $ "{ this } .m_LineRenderers[{ lineIndex } ] == null") ;
231+ return ;
232+ }
233+
234+ line . enabled = true ;
235+
236+ line . startColor = color * 0.5f ;
237+ line . endColor = color ;
238+
239+ line . SetPositions ( new Vector3 [ ] { start , start + dir } ) ;
103240 }
104241 }
105242}
0 commit comments