private void SetSegmentMaterialSelected(CritterSegment segment, bool on) { if(on) { segment.GetComponent<MeshRenderer>().material.SetFloat("_Selected", 1f); // turn on selected } else { segment.GetComponent<MeshRenderer>().material.SetFloat("_Selected", 0f); // de-select } }
private void SetSegmentMaterialHover(CritterSegment segment, bool on) { // bool on true=is hovering; false=not hovering if(on) { segment.GetComponent<MeshRenderer>().material.SetFloat("_DisplayTarget", 1f); // turn on crosshairs } else { segment.GetComponent<MeshRenderer>().material.SetFloat("_DisplayTarget", 0f); // turn off crosshairs } }
private Vector3 GetJointAnchor(CritterSegment segment) { CritterNode node = segment.sourceNode; Vector3 retVec = new Vector3(0f, 0f, 0f); retVec.x = 0f; retVec.y = 0f; // These might change when/if I implement childAttachPos, or initial Rotation retVec.z = -0.5f; return retVec; }
private Vector3 GetJointConnectedAnchor(CritterSegment segment) { //Vector3 retVec = new Vector3(0f, 0f, 0f); //retVec.x = 0f; //retVec.y = 0f; // These might change when/if I implement childAttachPos, or initial Rotation //retVec.z = -0.5f; CritterNode node = segment.sourceNode; Vector3 attachDir = node.jointLink.attachDir; // MODIFY AttachDir based on recursion Forward: // $*$*$*$*$*$*$*$ This code is duplicated in SetTransform -- Look into how to combine!!! if (segment.recursionNumber > 1) { // if segment is not the root of a recursion chain attachDir = Vector3.Lerp(attachDir, new Vector3(0f, 0f, 1f), segment.sourceNode.jointLink.recursionForward); } if (segment.mirrorX) { attachDir.x *= -1f; } if (segment.mirrorY) { attachDir.y *= -1f; } if (segment.mirrorZ) { attachDir.z *= -1f; } return ConvertAttachDirToLocalCoords(attachDir); }
void ConfigureJointSettings(CritterSegment segment, ref ConfigurableJoint joint) { CritterNode node = segment.sourceNode; joint.breakForce = 100000f; joint.breakTorque = 100000f; if (node.jointLink.jointType == CritterJointLink.JointType.Fixed) { // Fixed Joint // Lock mobility: joint.xMotion = ConfigurableJointMotion.Locked; joint.yMotion = ConfigurableJointMotion.Locked; joint.zMotion = ConfigurableJointMotion.Locked; joint.angularXMotion = ConfigurableJointMotion.Locked; joint.angularYMotion = ConfigurableJointMotion.Locked; joint.angularZMotion = ConfigurableJointMotion.Locked; } else if (node.jointLink.jointType == CritterJointLink.JointType.HingeX) { // Uni-Axis Hinge Joint joint.axis = new Vector3(1f, 0f, 0f); joint.secondaryAxis = new Vector3(0f, 1f, 0f); JointDrive jointDrive = joint.angularXDrive; //jointDrive.mode = JointDriveMode.Velocity; jointDrive.positionDamper = 1f; jointDrive.positionSpring = 1f; joint.angularXDrive = jointDrive; // Lock mobility: joint.xMotion = ConfigurableJointMotion.Locked; joint.yMotion = ConfigurableJointMotion.Locked; joint.zMotion = ConfigurableJointMotion.Locked; if (node.jointLink.jointLimitPrimary == 180) joint.angularXMotion = ConfigurableJointMotion.Free; else joint.angularXMotion = ConfigurableJointMotion.Limited; joint.angularYMotion = ConfigurableJointMotion.Locked; joint.angularZMotion = ConfigurableJointMotion.Locked; // Joint Limits: SoftJointLimit limitXMin = joint.lowAngularXLimit; limitXMin.bounciness = 0f; //limitXMin.contactDistance = 1f; limitXMin.limit = -node.jointLink.jointLimitPrimary; joint.lowAngularXLimit = limitXMin; SoftJointLimit limitXMax = joint.highAngularXLimit; limitXMax.bounciness = 0f; limitXMax.limit = node.jointLink.jointLimitPrimary; joint.highAngularXLimit = limitXMax; } else if (node.jointLink.jointType == CritterJointLink.JointType.HingeY) { // Uni-Axis Hinge Joint joint.axis = new Vector3(1f, 0f, 0f); joint.secondaryAxis = new Vector3(0f, 1f, 0f); JointDrive jointDrive = joint.angularYZDrive; //jointDrive.mode = JointDriveMode.Velocity; jointDrive.positionDamper = 1f; jointDrive.positionSpring = 1f; joint.angularYZDrive = jointDrive; // Lock mobility: joint.xMotion = ConfigurableJointMotion.Locked; joint.yMotion = ConfigurableJointMotion.Locked; joint.zMotion = ConfigurableJointMotion.Locked; joint.angularXMotion = ConfigurableJointMotion.Locked; if (node.jointLink.jointLimitPrimary == 180) joint.angularYMotion = ConfigurableJointMotion.Free; else joint.angularYMotion = ConfigurableJointMotion.Limited; joint.angularZMotion = ConfigurableJointMotion.Locked; // Joint Limits: SoftJointLimit limitY = joint.angularYLimit; limitY.bounciness = 0f; limitY.limit = node.jointLink.jointLimitPrimary; joint.angularYLimit = limitY; } else if (node.jointLink.jointType == CritterJointLink.JointType.HingeZ) { // Uni-Axis Hinge Joint joint.axis = new Vector3(0f, 1f, 0f); joint.secondaryAxis = new Vector3(1f, 0f, 0f); JointDrive jointDrive = joint.angularYZDrive; //jointDrive.mode = JointDriveMode.Velocity; jointDrive.positionDamper = 1f; jointDrive.positionSpring = 1f; joint.angularYZDrive = jointDrive; // Lock mobility: joint.xMotion = ConfigurableJointMotion.Locked; joint.yMotion = ConfigurableJointMotion.Locked; joint.zMotion = ConfigurableJointMotion.Locked; joint.angularXMotion = ConfigurableJointMotion.Locked; joint.angularYMotion = ConfigurableJointMotion.Locked; if (node.jointLink.jointLimitPrimary == 180) joint.angularZMotion = ConfigurableJointMotion.Free; else joint.angularZMotion = ConfigurableJointMotion.Limited; // Joint Limits: SoftJointLimit limitZ = joint.angularZLimit; limitZ.bounciness = 0f; limitZ.limit = node.jointLink.jointLimitPrimary; joint.angularZLimit = limitZ; } else if (node.jointLink.jointType == CritterJointLink.JointType.DualXY) { // Uni-Axis Hinge Joint joint.axis = new Vector3(1f, 0f, 0f); joint.secondaryAxis = new Vector3(0f, 1f, 0f); JointDrive jointDriveX = joint.angularXDrive; JointDrive jointDriveY = joint.angularYZDrive; //jointDrive.mode = JointDriveMode.Velocity; jointDriveX.positionDamper = 1f; jointDriveX.positionSpring = 1f; joint.angularXDrive = jointDriveX; jointDriveY.positionDamper = 1f; jointDriveY.positionSpring = 1f; joint.angularYZDrive = jointDriveY; // Lock mobility: joint.xMotion = ConfigurableJointMotion.Locked; joint.yMotion = ConfigurableJointMotion.Locked; joint.zMotion = ConfigurableJointMotion.Locked; if (node.jointLink.jointLimitPrimary == 180) { joint.angularXMotion = ConfigurableJointMotion.Free; joint.angularYMotion = ConfigurableJointMotion.Free; } else { joint.angularXMotion = ConfigurableJointMotion.Limited; joint.angularYMotion = ConfigurableJointMotion.Limited; } joint.angularZMotion = ConfigurableJointMotion.Locked; // Joint Limits: SoftJointLimit limitXMin = joint.lowAngularXLimit; limitXMin.bounciness = 0f; limitXMin.limit = -node.jointLink.jointLimitPrimary; joint.lowAngularXLimit = limitXMin; SoftJointLimit limitXMax = joint.highAngularXLimit; limitXMax.bounciness = 0f; limitXMax.limit = node.jointLink.jointLimitPrimary; joint.highAngularXLimit = limitXMax; SoftJointLimit limitYMax = joint.angularYLimit; limitYMax.bounciness = 0f; limitYMax.limit = node.jointLink.jointLimitSecondary; joint.angularYLimit = limitYMax; } }