- Home /
 
Understanding Vehicle Damage script Variables?
Hello,
I need help understanding what each of the variables in this script will do, I have tested over and over and seem to get random results.
I bought this script but the seller is NO longer answering me, I need help!
I am an avid game maker, and understand a fair amount of javascript BUT I'm new to mesh manipulation.
CODE:
 #pragma strict
 var maxDamage:float=0.6;
 var maxCollPower:float=50.0;
 var destroyRange:float=0.7;
 var dirManipulator:float=0.95;
 var meshes:MeshFilter[];
 private var sqrDestRange:float;
 
 function Start(){
     sqrDestRange = destroyRange*destroyRange;// sqr of destroy range
 }
     
 function OnCollisionEnter(coll:Collision){
     if(coll.contacts.Length>0){//fix a little bug of physics in Unity
         for(var i:int=0; i<coll.contacts.Length; i++){
             var collPoint : Vector3 = coll.contacts[0].point;//contact point
             var collRelVel : Vector3 = coll.relativeVelocity;
             var collPointToMe:Vector3 = transform.position - collPoint;//convert to me
             var collPower:float = collRelVel.magnitude * Vector3.Dot(coll.contacts[0].normal, collPointToMe.normalized);//power calculate
             OnMeshForce(collPoint, Mathf.Clamp01(collPower/maxCollPower));//go next step
         }
     }
 }
 
 function OnMeshForce(originPosAndForce:Vector4){
     originPosAndForce = Vector3(originPosAndForce.x,originPosAndForce.y,originPosAndForce.z);//recalculate to Vector3
     OnMeshForce(originPosAndForce, originPosAndForce.w);//next
 }
 
 function OnMeshForce(originPos:Vector3, force:float){
     force = Mathf.Clamp01(force);
     for(var j:int=0; j<meshes.Length; j++){
         var verts:Vector3[] = meshes[j].mesh.vertices;//temp verts
         for (var i:int=0; i<verts.Length; i++){
             var scaledVert:Vector3 = Vector3.Scale(verts[i], transform.localScale );                        
             var vertWorldPos:Vector3 = meshes[j].transform.position + (meshes[j].transform.rotation * scaledVert);
             var originToMeDir:Vector3 = vertWorldPos - originPos;
             var flatVertToCenterDir:Vector3 = transform.position - vertWorldPos;
             flatVertToCenterDir.y = 0.0;
             if(originToMeDir.sqrMagnitude < sqrDestRange){
                 var dist:float = Mathf.Clamp01(originToMeDir.sqrMagnitude/sqrDestRange);
                 var moveDelta:float = force * (1.0-dist) * maxDamage;
                 var moveDir:Vector3 = Vector3.Slerp(originToMeDir, flatVertToCenterDir, dirManipulator).normalized * moveDelta;
                 verts[i] += Quaternion.Inverse(transform.rotation)*moveDir;
             }
         }
         meshes[j].mesh.vertices = verts;
         meshes[j].mesh.RecalculateBounds();
     }
 } 
 
               Please do not steal this script, No its not copyrighted, but support the developer if you want to use it. It's a GREAT small little package thats EASY to change and add to! HERE: http://activeden.net/item/4-wheels-car-physic-damage-and-repair-system/4453624
Thank you.
Daniel
If this is a violation, I will be happy to remove my Question and ask some one privately. Thanks
Your answer
 
             Follow this Question
Related Questions
How does this code generate movement using player input? Does it have some in-engine code? 1 Answer
Added torque value, like in rigidbody.velocity.magnitude? 0 Answers
Unexpected symbol 'Flip' and 'else' 1 Answer
Multimesh models / changing meshes between them 1 Answer
Problem with setting vertices positions and smoothing groups. 1 Answer