Esempio n. 1
0
        public static bool RaycastDetailed(Vector3D start, Vector3D end, out IGrabInfo info)
        {
            IHitInfo hit;

            if (MyAPIGateway.Physics.CastRay(start, end, out hit))
            {
                if (hit.HitEntity is IMyCubeGrid || hit.HitEntity is IMySpaceBall)
                {
                    var grid   = (IMyCubeGrid)hit.HitEntity.GetTopMostParent();
                    var hitPos = grid.RayCastBlocks(start, end);
                    if (hitPos.HasValue)
                    {
                        var block = grid.GetCubeBlock(hitPos.Value);
                        if (block != null)
                        {
                            info = new GrabInfoSlimBlock(block, hit.Position);
                            return(true);
                        }
                    }
                }
                else
                {
                    info = new GrabInfo(hit);
                    return(true);
                }
            }

            info = null;
            return(false);
        }
Esempio n. 2
0
        public override void UpdateBeforeSimulation()
        {
            if (gun.IsShooting && !hitDebounce)
            {
                if (link == null)
                {
                    var source = new GrabInfoSlimBlock(gun.CubeGrid.GetCubeBlock(gun.Position), gun.GetPosition());

                    var startPos = gun.GetPosition() + gun.WorldMatrix.Forward;
                    var endPos   = gun.GetPosition() + gun.WorldMatrix.Forward * 10f;

                    IGrabInfo info;
                    if (Extensions.RaycastDetailed(startPos, endPos, out info))
                    {
                        link = new Spring(source, info);
                        LinkHandler.Links.Add(link);
                    }
                }
                else
                {
                    LinkHandler.Links.Remove(link);
                    link = null;
                }

                hitDebounce = true;
            }
            else
            {
                hitDebounce = false;
            }
        }