// Simple physics timsetp void Start() { if ( !modffd ) { modffd = GetComponent<MegaFFD3x3x3>(); modobj = GetComponent<MegaModifyObject>(); } if(modffd){ System.Array.Copy(modffd.pt,initialHandlesPosition,64); //modffd.pt.CopyTo(initialHandlesPosition,64); Debug.Log ("Initial handles position stored"); } planeT = GameObject.Find("PlaneTunnel"); sphCollider = GetComponent<SphereCollider>(); colliderPosition = sphCollider.center; }
void Update() { // Find the mods if ( !modffd ) { modffd = GetComponent<MegaFFD3x3x3>(); modobj = GetComponent<MegaModifyObject>(); } if ( modffd ) { Vector3 toolPosition = tool.transform.position; size = modffd.GridSize(); int gridSize = size*size*size; distance = new float[gridSize]; entries = new int[gridSize]; indicies = new Vector3[gridSize]; if(inCollision){ for ( int i = 0; i < size; i++ ) // TODO: dim for all ffd { for ( int j = 0; j < size; j++ ) { for ( int k = 0; k < size; k++ ) { int c = modffd.GridIndex(i, j, k); indicies[c] = new Vector3 (i,j,k); //indicies of the handle i,j,k entries[c]=c; distance[c] = Vector3.Distance(transform.TransformPoint(modffd.GetPoint(i,j,k)),collisionPoint);//There should be collision point instead of pposition of the tool } } } System.Array.Sort(distance, entries); if(sphereSwitch){ if(!redSphere){ redSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); redSphere.GetComponent<Renderer>().material.color = Color.red; redSphere.transform.localScale = new Vector3(0.2f, 0.2f,0.2f); redSphere.name = "Red Sphere"; } if(!blueSphere){ blueSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); blueSphere.GetComponent<Renderer>().material.color = Color.blue; blueSphere.transform.localScale = new Vector3(0.2f, 0.2f,0.2f); blueSphere.name = "Blue Sphere"; } if(!greenSphere){ greenSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); greenSphere.GetComponent<Renderer>().material.color = Color.green; greenSphere.transform.localScale = new Vector3(0.2f, 0.2f,0.2f); greenSphere.name = "Green Sphere"; } if(!yellowSphere){ yellowSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); yellowSphere.GetComponent<Renderer>().material.color = Color.yellow; yellowSphere.transform.localScale = new Vector3(0.2f, 0.2f,0.2f); yellowSphere.name = "Yellow Sphere"; } redSphere.transform.position = modffd.GetPoint(entries[0]); blueSphere.transform.position = modffd.GetPoint(entries[1]); greenSphere.transform.position = modffd.GetPoint(entries[2]); yellowSphere.transform.position = modffd.GetPoint(entries[3]); } else{ Destroy(redSphere); Destroy(blueSphere); Destroy(greenSphere); Destroy(yellowSphere); } Vector4 neighbors = new Vector4(distance[0],distance[1],distance[2],distance[3]); neighbors.Normalize(); for(int i = 0; i < 4; i++){ if(neighbors[i]==0){ neighbors[i]=0.01f; } neighbors[i] = 1 / neighbors[i]; } neighbors.Normalize(); currentPosition = tool.transform.position; displacement = currentPosition-previousPosition; Debug.Log("Displacement: " +displacement); if(!firsttimecollision) { // positionoffirstcollisionpoint += displacement; // // if(displacement.y < 0 && (positionoffirstcollisionpoint.y < firstcollisionpoint.y) ) // { if(deformation){ // Debug.Log (neighbors); //Debug.Log (displacement); for(int i = 0; i < 4; i++){ int l = entries[i]; Vector3 index = indicies[l]; int x = (int)index.x; int y = (int)index.y; int z = (int)index.z; float neighbor = neighbors[i]; finalDisplacement = -displacement*coefficient*neighbor;//new Vector3 (0,0,0.001f);//displacement*neighbor; // Debug.Log("Neighbor: " +neighbor); modffd.MovePoint(x,y,z,finalDisplacement); } float centerY = sphCollider.center.y - displacement.y*coefficientCollider;//*coefficient; sphCollider.center = new Vector3(colliderPosition.x,centerY,colliderPosition.z); //planeT.transform.localScale+= new Vector3(finalDisplacement.x*1000,0,0); // float centerY; // centerY = sphCollider.center.y - displacement.y*coefficient; // sphCollider.center = new Vector3 (colliderPosition.x,centerY,colliderPosition.z); // if((colliderPosition.y-centerY)<=0.001f){ // sphCollider.center=colliderPosition; // } } // } } else { firsttimecollision = false; firstcollisionpoint = collisionPoint; positionoffirstcollisionpoint = firstcollisionpoint; } previousPosition=currentPosition; // Debug.Log("distance[0]: " +distance[0] + " distance[1]: " +distance[1] + " distance[2]: " + distance[2]); // Debug.Log("entries[0]: " +entries[0] + " entries[1]: " +entries[1] + " entries[2]: " + entries[2]); // Debug.Log (indicies[2]); } } }