Esempio n. 1
0
    void Awake()
    {
        // Create both the rope and the solver:
        rope   = gameObject.AddComponent <ObiRope>();
        curve  = gameObject.AddComponent <ObiCatmullRomCurve>();
        solver = gameObject.AddComponent <ObiSolver>();

        // Provide a solver and a curve:
        rope.Solver   = solver;
        rope.ropePath = curve;
        rope.GetComponent <MeshRenderer>().material = material;

        // Configure rope and solver parameters:
        rope.resolution = 0.1f;
        rope.BendingConstraints.stiffness = 0.2f;
        rope.uvScale    = new Vector2(1, 5);
        rope.normalizeV = false;
        rope.uvAnchor   = 1;

        solver.substeps = 3;
        solver.distanceConstraintParameters.iterations       = 5;
        solver.pinConstraintParameters.iterations            = 5;
        solver.bendingConstraintParameters.iterations        = 1;
        solver.particleCollisionConstraintParameters.enabled = false;
        solver.volumeConstraintParameters.enabled            = false;
        solver.densityConstraintParameters.enabled           = false;
        solver.stitchConstraintParameters.enabled            = false;
        solver.skinConstraintParameters.enabled   = false;
        solver.tetherConstraintParameters.enabled = false;

        // Add a cursor to be able to change rope length:
        cursor = rope.gameObject.AddComponent <ObiRopeCursor>();
        cursor.normalizedCoord = 0;
        cursor.direction       = true;
    }
Esempio n. 2
0
    void Awake()
    {
        // Create both the rope and the solver:
        rope   = gameObject.AddComponent <ObiRope>();
        curve  = gameObject.AddComponent <ObiCatmullRomCurve>();
        solver = gameObject.AddComponent <ObiSolver>();

        // Provide a solver and a curve:
        rope.Solver   = solver;
        rope.ropePath = curve;
        rope.GetComponent <MeshRenderer>().material = material;

        // Configure rope and solver parameters:
        rope.resolution = 0.1f;
        rope.BendingConstraints.stiffness = 0.2f;
        rope.UVScale    = new Vector2(1, 5);
        rope.NormalizeV = false;
        rope.UVAnchor   = 1;

        solver.distanceConstraintParameters.iterations = 15;
        solver.pinConstraintParameters.iterations      = 15;
        solver.bendingConstraintParameters.iterations  = 1;

        // Add a cursor to change rope length:
        cursor                 = rope.gameObject.AddComponent <ObiRopeCursor>();
        cursor.rope            = rope;
        cursor.normalizedCoord = 0;
        cursor.direction       = true;
    }
Esempio n. 3
0
    void Start()
    {
        thrower      = GetComponent <Thrower>();
        cursor       = GetComponent <ObiRopeCursor>();
        rope         = cursor.GetComponent <ObiRope>();
        hook.grapple = this;

        StartCoroutine(RetrieveGrappleIE());
    }
    /// <summary>
    /// Creates a straight rope anchored to a transform at the top.
    /// Transform may or may not move around and may or may not have a rigidbody.
    /// When you call this the rope will appear in the scene and immediately interact with gravity and objects with ObiColliders.
    /// Called from anywhere (main thread only)
    /// </summary>
    public IEnumerator MakeRope(Transform anchoredTo, Vector3 attachmentOffset, float ropeLength)
    {
        // create a new GameObject with the required components: a solver, a rope, and a curve.
        // we also throw a cursor in to be able to change its length.
        GameObject ropeObject = new GameObject("rope", typeof(ObiSolver),
                                               typeof(ObiRope),
                                               typeof(ObiCatmullRomCurve),
                                               typeof(ObiRopeCursor));

        // get references to all components:
        rope   = ropeObject.GetComponent <ObiRope>();
        cursor = ropeObject.GetComponent <ObiRopeCursor>();
        solver = ropeObject.GetComponent <ObiSolver>();
        ObiCatmullRomCurve path = ropeObject.GetComponent <ObiCatmullRomCurve>();

        // set up component references (see ObiRopeHelper.cs)
        rope.Solver   = solver;
        rope.ropePath = path;
        rope.section  = Resources.Load <ObiRopeSection>("DefaultRopeSection");

        // set path control points (duplicate end points, to set curvature as required by CatmullRom splines):
        path.controlPoints.Clear();
        path.controlPoints.Add(Vector3.zero);
        path.controlPoints.Add(Vector3.zero);
        path.controlPoints.Add(Vector3.down * ropeLength);
        path.controlPoints.Add(Vector3.down * ropeLength);

        rope.pooledParticles = 2000;

        // parent the rope to the anchor transform:
        rope.transform.SetParent(anchoredTo, false);
        rope.transform.localPosition = attachmentOffset;

        // generate particles/constraints and add them to the solver (see ObiRopeHelper.cs)
        yield return(rope.StartCoroutine(rope.GeneratePhysicRepresentationForMesh()));

        rope.AddToSolver(null);

        // get the last particle in the rope at its rest state.
        pinnedParticle = rope.UsedParticles - 1;

        // add a tethers batch:
        ObiTetherConstraintBatch tetherBatch = new ObiTetherConstraintBatch(true, false, 0, 1);

        rope.TetherConstraints.AddBatch(tetherBatch);
        //UpdateTethers();

        // fix first particle in place (see http://obi.virtualmethodstudio.com/tutorials/scriptingparticles.html)
        rope.invMasses[0] = 0;
        Oni.SetParticleInverseMasses(solver.OniSolver, new float[] { 0 }, 1, rope.particleIndices[0]);
    }
    void Awake()
    {
        // Create both the rope and the solver:
        rope                    = gameObject.AddComponent <ObiRope>();
        ropeRenderer            = gameObject.AddComponent <ObiRopeExtrudedRenderer>();
        ropeRenderer.section    = section;
        ropeRenderer.uvScale    = new Vector2(1, 5);
        ropeRenderer.normalizeV = false;
        ropeRenderer.uvAnchor   = 1;
        rope.GetComponent <MeshRenderer>().material = material;

        // Setup a blueprint for the rope:
        blueprint            = ScriptableObject.CreateInstance <ObiRopeBlueprint>();
        blueprint.resolution = 0.5f;

        // Tweak rope parameters:
        rope.maxBending = 0.02f;

        // Add a cursor to be able to change rope length:
        cursor           = rope.gameObject.AddComponent <ObiRopeCursor>();
        cursor.cursorMu  = 0;
        cursor.direction = true;
    }
 // Use this for initialization
 void Start()
 {
     cursor = GetComponentInChildren <ObiRopeCursor>();
     rope   = cursor.GetComponent <ObiRope>();
 }
Esempio n. 7
0
 // Use this for initialization
 void Start()
 {
     rope   = GetComponent <ObiRope>();
     cursor = GetComponent <ObiRopeCursor>();
 }
Esempio n. 8
0
 // Use this for initialization
 void Start()
 {
     cursor = GetComponentInChildren <ObiRopeCursor>();
     rope   = cursor.GetComponent <ObiRope>();
     PlayerAndJoystickController.Instance.RopeSize += RopeSizeController;
 }
Esempio n. 9
0
 private void Awake()
 {
     cursor = GetComponentInChildren <ObiRopeCursor>();
     plugs  = GetComponentsInChildren <PlugManager>();
 }
Esempio n. 10
0
    void Start()
    {
        GameObject      solverObject = new GameObject("String Solver", typeof(ObiSolver), typeof(ObiFixedUpdater));
        ObiSolver       solver       = solverObject.GetComponent <ObiSolver>();
        ObiFixedUpdater updater      = solverObject.GetComponent <ObiFixedUpdater>();

        updater.solvers.Add(solver);
        solverObject.AddComponent(typeof(HexPathFinder));
        solver.distanceConstraintParameters          = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 100);
        solver.particleCollisionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 30);
        solver.collisionConstraintParameters         = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 30);
        solver.tetherConstraintParameters            = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 50);

        // Disable
        solver.skinConstraintParameters          = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        solver.densityConstraintParameters       = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        solver.stretchShearConstraintParameters  = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        solver.stitchConstraintParameters        = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        solver.volumeConstraintParameters        = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        solver.bendTwistConstraintParameters     = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        solver.shapeMatchingConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        // solver.frictionConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);
        // solver.particleFrictionConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1);

        // create the blueprint: (ltObiRopeBlueprint, ObiRodBlueprint)
        var blueprint = ScriptableObject.CreateInstance <ObiRopeBlueprint>();

        blueprint.pooledParticles = 20000;
        blueprint.resolution      = 1f;

        // Procedurally generate the rope path (a simple straight line):
        blueprint.path.Clear();
        blueprint.path.AddControlPoint(
            new Vector3(0, 0.011f, 0),
            -Vector3.right,
            Vector3.right,
            Vector3.up,
            0.005f,
            0.005f,
            0.03f,
            1,
            Color.white,
            "start"
            );
        blueprint.path.AddControlPoint(
            new Vector3(0, 0.5f, 0),
            -Vector3.right,
            Vector3.right,
            Vector3.up,
            0.005f,
            0.005f,
            0.03f,
            1,
            Color.white,
            "end"
            );
        blueprint.path.FlushEvents();

        blueprint.GenerateImmediate();

        GameObject ropeObject = new GameObject("String", typeof(ObiRope), typeof(ObiRopeExtrudedRenderer));

        ObiRope rope = ropeObject.GetComponent <ObiRope>();
        ObiRopeExtrudedRenderer ropeRenderer = ropeObject.GetComponent <ObiRopeExtrudedRenderer>();
        MeshRenderer            ropeMesh     = ropeObject.GetComponent <MeshRenderer>();

        if (stringMaterial == null)
        {
            ropeMesh.material = new Material(Shader.Find("StringShader"));
        }
        else
        {
            ropeMesh.material = stringMaterial;
        }


        ropeRenderer.section = Resources.Load <ObiRopeSection>("DefaultRopeSection");

        rope.ropeBlueprint = ScriptableObject.Instantiate(blueprint);

        rope.transform.parent = solver.transform;
        // rope.collisionMaterial = collisionMaterial;
        rope.selfCollisions  = false;
        rope.stretchingScale = 1;

        ObiRopeCursor cursor = ropeObject.AddComponent(typeof(ObiRopeCursor)) as ObiRopeCursor;

        cursor.cursorMu = 0.5f;
        cursor.sourceMu = 0.5f;

        ObiParticleAttachment groundAttach = ropeObject.AddComponent(typeof(ObiParticleAttachment)) as ObiParticleAttachment;
        ObiParticleAttachment charAttach   = ropeObject.AddComponent(typeof(ObiParticleAttachment)) as ObiParticleAttachment;

        groundAttach.target = GameObject.Find("Floor").transform;
        // groundAttach.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic;
        groundAttach.particleGroup = blueprint.groups[0];
        charAttach.target          = GameObject.Find("Ariadne").transform;
        charAttach.attachmentType  = ObiParticleAttachment.AttachmentType.Dynamic;
        charAttach.particleGroup   = blueprint.groups[1];

        ropeObject.AddComponent(typeof(StringController));
    }
 // Use this for initialization
 void Start()
 {
     cursor = GetComponentInChildren <ObiRopeCursor>(); //gets the cursor component on the rope object
     rope   = cursor.GetComponent <ObiRope>();
 }
Esempio n. 12
0
 void Start()
 {
     cursor = GetComponentInChildren <ObiRopeCursor>();
     rope   = cursor.GetComponent <ObiRope>();
     cursor.ChangeLength(length);
 }