void ConnectToRope(UseContext args) { var ropeLinkPos = TractorRopeLink.gameObject.transform.position; foreach (Rigidbody body in GameObjectExt.GetNearbyObjects <Rigidbody>(ropeLinkPos, 0.7f, GameObjectExt.GetLayerMask("Objects") | GameObjectExt.GetLayerMask("StructurePlatform") | GameObjectExt.GetLayerMask("Structure") )) { var go = body.gameObject; float ps = 322.0f; float mf = 322.0f; ps = mf = 1000.0f; float pd = 111.0f; var hj = CreateJoint(body, m_Tractor.GetComponent <Rigidbody>(), ps, mf, pd); // ore always connects in the center if (go.name.ToLower().Contains("ore")) { hj.autoConfigureConnectedAnchor = false; hj.connectedAnchor = Vector3.zero; hj.targetPosition = Vector3.zero; } else { hj.autoConfigureConnectedAnchor = false; hj.anchor = go.transform.InverseTransformPoint(args.m_TargetPos); hj.targetPosition = Vector3.zero; } if (TractorRopeLink.ConnectJoint(hj)) { return; } } // Couldn't connect, see if we assume it was a refund TractorRopeLink.m_Rope.CheckRefund(TractorRopeLink); }
public override void UpdateSelected(UseContext args) { base.UpdateSelected(args); var clampedPos = ClampedPos(args); // For blueprint, we can only place nearby us. m_Ghost.transform.position = clampedPos; int consideredGround = (GameObjectExt.GetLayerMask("Ground")) | (GameObjectExt.GetLayerMask("StructurePlatform")); // Should be clear to the target as well var origin = args.m_OriginPos; var delta = args.m_TargetPos - args.m_OriginPos; RaycastHit hitInfo; m_ValidPlacement = m_GhostTT.CollidingObjects.ToList().Count == 0; if (Physics.Raycast(origin, delta.normalized, out hitInfo, delta.magnitude, consideredGround)) { // m_ValidPlacement = false; } }
int GetGroundMask() { return((GameObjectExt.GetLayerMask("Ground")) | (GameObjectExt.GetLayerMask("StructurePlatform"))); }
public static void SharedFixedUpdate(StateArgs args) { var pargs = args as PlanetsStateArgs; if (pargs.m_RawControl_controller.y > 0.8f) { // Check if there is a link to climb on. var rl = GameObjectExt.GetNearestObject <RopeLink>(args.m_Character.transform.position, 1.0f, GameObjectExt.GetLayerMask("Rope")); if (rl != null) { pargs.m_PlanetsCharacter.m_ClimbState.m_Rope = rl.m_Rope; pargs.m_PlanetsCharacter.m_ClimbState.m_RopePosition = rl.m_Rope.FindClosestRopePosition(args.m_Character.transform.position); pargs.ChangeState(pargs.m_PlanetsCharacter.m_ClimbState); } } }
bool InternalBeginUse(UseContext args) { m_UsingStrongBeam = args.m_ButtonPressed != 0; m_Tractor = null; var target = args.m_TargetPos; if ((target - args.m_OriginPos).magnitude > MaxUseDistance) { args.m_ShowStatusMessage = "Target position too far away to tractor"; return(false); } var ropes = GameObjectExt.GetNearbyObjects <Rigidbody>(target, 1.0f, GameObjectExt.GetLayerMask("Rope")); ropes.Sort((a, b) => { return(a.transform.position.DistanceTo(target).CompareTo(b.transform.position.DistanceTo(target))); } ); var bodies = GameObjectExt.GetNearbyObjects <Rigidbody>(target, 1.0f, GameObjectExt.GetLayerMask("Objects") | GameObjectExt.GetLayerMask("Rope") | GameObjectExt.GetLayerMask("Trees") ); bodies.Sort((a, b) => { return(a.transform.position.DistanceTo(target).CompareTo(b.transform.position.DistanceTo(target))); } ); foreach (var rope in ropes) { bodies.Insert(0, rope); } foreach (Rigidbody body in bodies) { var link = body.gameObject.GetComponent <RopeLink>(); if (link != null && !link.CanTractor) { continue; } // whelp we're not moving this thing if (body.isKinematic) { continue; } m_Tractor = body.gameObject; m_TractorLocalOffset = body.gameObject.transform.InverseTransformPoint(args.m_TargetPos); if (TractorRopeLink != null) { TractorRopeLink.ConnectJoint(null); } return(true); } args.m_ShowStatusMessage = "Tractor must be used on loose object"; return(false); }