Ejemplo n.º 1
0
    void LateUpdate()
    {
        if (bridge)
        {
            // Get the bridge modifier
            if (mod == null)
            {
                mod = bridge.GetComponent <MegaRopeDeform>();
            }

            if (mesh == null)
            {
                MeshFilter mf = bridge.GetComponent <MeshFilter>();
                mesh = mf.sharedMesh;
            }

            if (mod && mesh)
            {
                int     ax  = (int)mod.axis;
                Vector3 pos = transform.position;

                // Get into local space
                Vector3 lpos = mod.transform.worldToLocalMatrix.MultiplyPoint(pos);

                bool onbridge = true;
                if (checkonbridge)
                {
                    if (lpos.x > mesh.bounds.min.x && lpos.x < mesh.bounds.max.x && lpos.z > mesh.bounds.min.z && lpos.z < mesh.bounds.max.z)
                    {
                        onbridge = true;
                    }
                    else
                    {
                        onbridge = false;
                    }
                }

                // Are we on the bridge
                if (onbridge)
                {
                    // How far across are we
                    float alpha = (lpos[ax] - mod.soft.masses[0].pos.x) / (mod.soft.masses[mod.soft.masses.Count - 1].pos.x - mod.soft.masses[0].pos.x);

                    if (alpha > 0.0f || alpha < 1.0f)
                    {
                        Vector2 rpos = mod.SetWeight(lpos[ax], weight);

                        lpos.y             = rpos.y + (offset * 0.01f);                 // 0.01 is just to make inspector easier to control in my test scene which is obvioulsy very small
                        transform.position = bridge.transform.localToWorldMatrix.MultiplyPoint(lpos);
                    }
                }
                else
                {
                    SetPos(mod, 0.0f);
                }
            }
        }
    }
Ejemplo n.º 2
0
    void LateUpdate()
    {
        if ( bridge )
        {
            // Get the bridge modifier
            if ( mod == null )
                mod = bridge.GetComponent<MegaRopeDeform>();

            if ( mesh == null )
            {
                MeshFilter mf = bridge.GetComponent<MeshFilter>();
                mesh = mf.sharedMesh;
            }

            if ( mod && mesh )
            {
                int ax = (int)mod.axis;
                Vector3 pos = transform.position;

                // Get into local space
                Vector3 lpos = mod.transform.worldToLocalMatrix.MultiplyPoint(pos);

                bool onbridge = true;
                if ( checkonbridge )
                {
                    if ( lpos.x > mesh.bounds.min.x && lpos.x < mesh.bounds.max.x && lpos.z > mesh.bounds.min.z && lpos.z < mesh.bounds.max.z )
                        onbridge = true;
                    else
                        onbridge = false;
                }

                // Are we on the bridge
                if ( onbridge )
                {
                    // How far across are we
                    float alpha = (lpos[ax] - mod.soft.masses[0].pos.x) / (mod.soft.masses[mod.soft.masses.Count - 1].pos.x - mod.soft.masses[0].pos.x);

                    if ( alpha > 0.0f || alpha < 1.0f )
                    {
                        Vector2 rpos = mod.SetWeight(lpos[ax], weight);

                        lpos.y = rpos.y + (offset * 0.01f);	// 0.01 is just to make inspector easier to control in my test scene which is obvioulsy very small
                        transform.position = bridge.transform.localToWorldMatrix.MultiplyPoint(lpos);
                    }
                }
                else
                {
                    SetPos(mod, 0.0f);
                }
            }
        }
    }
Ejemplo n.º 3
0
    public float offset = 0.0f;         // Character offset

    //Vector3 lastpos = Vector3.zero;

    void LateUpdate()
    {
        if (bridge)
        {
            // Get the bridge modifier
            if (mod == null)
            {
                mod = bridge.GetComponent <MegaRopeDeform>();
            }

            if (mod)
            {
                int     ax  = (int)mod.axis;
                Vector3 pos = transform.position;

                // Get into local space
                Vector3 lpos = mod.transform.worldToLocalMatrix.MultiplyPoint(pos);

                // Are we on the bridge
                //if ( lpos.x > mod.bbox.min.x && lpos.x < mod.bbox.max.x && lpos.z > mod.bbox.min.z && lpos.z < mod.bbox.max.z )
                //{
                // How far across are we
                //float alpha = (lpos[ax] - mod.bbox.min[ax]) / (mod.bbox.max[ax] - mod.bbox.min[ax]);
                float alpha = (lpos[ax] - mod.soft.masses[0].pos.x) / (mod.soft.masses[mod.soft.masses.Count - 1].pos.x - mod.soft.masses[0].pos.x);

                if (alpha > 0.0f || alpha < 1.0f)
                {
                    //if ( alpha < 0.0f )
                    //	alpha = 0.0f;

                    // Deform the bridge
                    //SetPos(mod, alpha);
                    // Place object on deformed bridge
                    //Vector2 rpos = mod.GetPos3(lpos[ax]);
                    Vector2 rpos = mod.SetWeight(lpos[ax], weight);

                    //lpos[ax] = rpos.x;
                    lpos.y = rpos.y + (offset * 0.01f);                                 // 0.01 is just to make inspector easier to control in my test scene which is obvioulsy very small
                    //lpos.y = mod.GetPos(alpha) + (offset * 0.01f);	// 0.01 is just to make inspector easier to control in my test scene which is obvioulsy very small

                    transform.position = bridge.transform.localToWorldMatrix.MultiplyPoint(lpos);
                }
                //}
                //else
                //{
                //SetPos(mod, 0.0f);
                //}
            }
        }
    }
Ejemplo n.º 4
0
	public float offset = 0.0f;	// Character offset

	//Vector3 lastpos = Vector3.zero;

	void LateUpdate()
	{
		if ( bridge )
		{
			// Get the bridge modifier
			if ( mod == null )
			{
				mod = bridge.GetComponent<MegaRopeDeform>();
			}

			if ( mod )
			{
				int ax = (int)mod.axis;
				Vector3 pos = transform.position;

				// Get into local space
				Vector3 lpos = mod.transform.worldToLocalMatrix.MultiplyPoint(pos);

				// Are we on the bridge
				//if ( lpos.x > mod.bbox.min.x && lpos.x < mod.bbox.max.x && lpos.z > mod.bbox.min.z && lpos.z < mod.bbox.max.z )
				//{
					// How far across are we
					//float alpha = (lpos[ax] - mod.bbox.min[ax]) / (mod.bbox.max[ax] - mod.bbox.min[ax]);
					float alpha = (lpos[ax] - mod.soft.masses[0].pos.x) / (mod.soft.masses[mod.soft.masses.Count - 1].pos.x - mod.soft.masses[0].pos.x);

					if ( alpha > 0.0f || alpha < 1.0f )
					{
						//if ( alpha < 0.0f )
						//	alpha = 0.0f;

						// Deform the bridge
						//SetPos(mod, alpha);
						// Place object on deformed bridge
						//Vector2 rpos = mod.GetPos3(lpos[ax]);
						Vector2 rpos = mod.SetWeight(lpos[ax], weight);

						//lpos[ax] = rpos.x;
						lpos.y = rpos.y + (offset * 0.01f);	// 0.01 is just to make inspector easier to control in my test scene which is obvioulsy very small
						//lpos.y = mod.GetPos(alpha) + (offset * 0.01f);	// 0.01 is just to make inspector easier to control in my test scene which is obvioulsy very small

						transform.position = bridge.transform.localToWorldMatrix.MultiplyPoint(lpos);
					}
				//}
				//else
				//{
					//SetPos(mod, 0.0f);
				//}
			}
		}
	}
Ejemplo n.º 5
0
    public override bool Inspector()
    {
        MegaRopeDeform mod = (MegaRopeDeform)target;

        //DrawDefaultInspector();
        //EditorGUIUtility.LookLikeControls();
        //mod.angle = EditorGUILayout.FloatField("Angle", mod.angle);
        //mod.dir = EditorGUILayout.FloatField("Dir", mod.dir);
        //mod.axis = (MegaAxis)EditorGUILayout.EnumPopup("Axis", mod.axis);
        //mod.doRegion = EditorGUILayout.Toggle("Do Region", mod.doRegion);
        //mod.from = EditorGUILayout.FloatField("From", mod.from);
        //mod.to = EditorGUILayout.FloatField("To", mod.to);

        if (GUILayout.Button("Rebuild"))
        {
            mod.init = true;
        }

        //mod.timeStep = EditorGUILayout.Slider("Time Step", mod.timeStep, 0.001f, 0.2f);

        mod.floorOff  = EditorGUILayout.FloatField("Floor Off", mod.floorOff);
        mod.NumMasses = EditorGUILayout.IntField("Num Masses", mod.NumMasses);
        if (mod.NumMasses < 2)
        {
            mod.NumMasses = 2;
        }

        mod.Mass = EditorGUILayout.FloatField("Mass", mod.Mass);
        if (mod.Mass < 0.01f)
        {
            mod.Mass = 0.01f;
        }

        mod.axis = (MegaAxis)EditorGUILayout.EnumPopup("Axis", mod.axis);

        mod.stiffnessCrv = EditorGUILayout.CurveField("Stiffness Crv", mod.stiffnessCrv);
        mod.stiffspring  = EditorGUILayout.FloatField("Stiff Spring", mod.stiffspring);
        mod.stiffdamp    = EditorGUILayout.FloatField("Stiff Damp", mod.stiffdamp);

        mod.spring = EditorGUILayout.FloatField("Spring", mod.spring);
        mod.damp   = EditorGUILayout.FloatField("Damp", mod.damp);

        mod.off = EditorGUILayout.FloatField("Off", mod.off);

        mod.SpringCompress = EditorGUILayout.FloatField("Spring Compress", mod.SpringCompress);

        mod.BendSprings = EditorGUILayout.Toggle("Bend Springs", mod.BendSprings);
        mod.Constraints = EditorGUILayout.Toggle("Constraints", mod.Constraints);

        mod.DampingRatio = EditorGUILayout.FloatField("Damping Ratio", mod.DampingRatio);

        mod.left  = (Transform)EditorGUILayout.ObjectField("Left", mod.left, typeof(Transform), true);
        mod.right = (Transform)EditorGUILayout.ObjectField("Right", mod.right, typeof(Transform), true);

        mod.weight    = EditorGUILayout.FloatField("Weight", mod.weight);
        mod.weightPos = EditorGUILayout.FloatField("Weight Pos", mod.weightPos);

        showsoft = EditorGUILayout.Foldout(showsoft, "Physics");

        if (showsoft)
        {
            mod.soft.timeStep = EditorGUILayout.Slider("Time Step", mod.soft.timeStep, 0.001f, 0.2f);
            mod.soft.gravity  = EditorGUILayout.Vector3Field("Gravity", mod.soft.gravity);
            mod.soft.airdrag  = EditorGUILayout.FloatField("Air Drag", mod.soft.airdrag);
            mod.soft.friction = EditorGUILayout.FloatField("Friction", mod.soft.friction);

            mod.soft.iters            = EditorGUILayout.IntField("Iterations", mod.soft.iters);
            mod.soft.method           = (MegaIntegrator)EditorGUILayout.EnumPopup("Method", mod.soft.method);
            mod.soft.applyConstraints = EditorGUILayout.Toggle("Apply Constraints", mod.soft.applyConstraints);
        }

        mod.DisplayDebug = EditorGUILayout.BeginToggleGroup("Display Debug", mod.DisplayDebug);
        mod.drawsteps    = EditorGUILayout.IntField("Draw Steps", mod.drawsteps);
        mod.boxsize      = EditorGUILayout.FloatField("Box Size", mod.boxsize);
        EditorGUILayout.EndToggleGroup();

        return(false);
    }
Ejemplo n.º 6
0
 public void SetPos(MegaRopeDeform mod, float alpha)
 {
     mod.weightPos = alpha * 100.0f;
     mod.weight    = weight;
 }
Ejemplo n.º 7
0
	public void SetPos(MegaRopeDeform mod, float alpha)
	{
		mod.weightPos = alpha * 100.0f;
		mod.weight = weight;
	}