Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
 int GetGroundMask()
 {
     return((GameObjectExt.GetLayerMask("Ground")) | (GameObjectExt.GetLayerMask("StructurePlatform")));
 }
Ejemplo n.º 4
0
            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);
                    }
                }
            }
Ejemplo n.º 5
0
        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);
        }